diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 267f1d05faea5..0000000000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,31 +0,0 @@ -Read first: - -### Describe the issue - - -### One or more specific URLs where the issue occurs - -[URL(s) for issue on a specific site are **mandatory**] - -### Screenshot in which the issue can be seen - -[Screenshot(s) for visual issues are **mandatory**] - -### Steps for anyone to reproduce the issue - -1. Be as detailed as possible: -1. Because we are not looking over your shoulder and -1. Keep in mind: Nobody can read your mind. - -### Your settings - -[If you fail to provide this info, I will mark the issue as invalid. Lists all settings which differs from default settings] - -- Browser/version: -- uBlock Origin version: - -##### Your filter lists - -[Example: "Default filter lists + FRA", or "Default filter lists minus uBlock -- Badware risks"] - -##### Your custom filters (if any) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000000000..097d0eccd5979 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,14 @@ +blank_issues_enabled: false +contact_links: + - name: Support Forum + url: https://www.reddit.com/r/uBlockOrigin/ + about: For support, questions, or help, visit /r/uBlockOrigin. + - name: uBlock Origin (uBO) Issues + url: https://github.com/uBlockOrigin/uBlock-issues/issues + about: Report issues with uBO in the uBO issue tracker. + - name: Filter List Issues + url: https://github.com/uBlockOrigin/uAssets/issues + about: Report issues with filter lists or broken website functionality in the uAssets issue tracker. + - name: uBO Lite (uBOL) Issues + url: https://github.com/uBlockOrigin/uBOL-home/issues + about: Report issues specific to the Manifest Version 3 (MV3) variant in the uBOL issue tracker. diff --git a/.github/workflows/RELEASE.HEAD.md b/.github/workflows/RELEASE.HEAD.md new file mode 100644 index 0000000000000..09d3a13bd6aa2 --- /dev/null +++ b/.github/workflows/RELEASE.HEAD.md @@ -0,0 +1,7 @@ +[Commits to Master Since This Release](https://github.com/gorhill/uBlock/compare/%version%...master) + +#### How to Install the Developer Build: + +- **Firefox**: Signing pending + 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). diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000000000..a661d3e53fd86 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,50 @@ +name: uBO release + +on: + create: + branches: master + +permissions: + contents: read + +jobs: + build: + permissions: + contents: write # for creating release + name: Build packages + runs-on: ubuntu-latest + if: startsWith(github.ref, 'refs/tags/') + steps: + - name: Clone repository + uses: actions/checkout@v4 + with: + persist-credentials: false + - name: Clone uAssets + run: | + tools/pull-assets.sh + - name: Get release information + run: | + echo "VERSION=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV + - name: Build MV2 packages + run: | + tools/make-chromium.sh ${{ env.VERSION }} + tools/make-firefox.sh ${{ env.VERSION }} + - name: Assemble release notes + run: | + > release.body.txt + grep -m1 -B10000 -- "----------" CHANGELOG.md >> release.body.txt + sed -e 's/%version%/${{ env.VERSION }}/g' .github/workflows/RELEASE.HEAD.md >> release.body.txt + - name: Create GitHub release + id: create_release + uses: softprops/action-gh-release@v2 + env: + GITHUB_TOKEN: ${{ github.token }} + with: + tag_name: ${{ env.VERSION }} + name: ${{ env.VERSION }} + draft: true + prerelease: true + body_path: release.body.txt + files: | + dist/build/uBlock0_${{ env.VERSION }}.chromium.zip + dist/build/uBlock0_${{ env.VERSION }}.firefox.xpi diff --git a/.gitignore b/.gitignore index dee00e98d3b96..0f4c6e0c4b582 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,7 @@ *.bak *.pem +__pycache__/ +node_modules/ /dist/build/ /tmp/ +.DS_Store diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000000..dc2159e539902 --- /dev/null +++ b/.gitmodules @@ -0,0 +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 diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index de72266b3f30a..0000000000000 --- a/.jshintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "browser": true, - "devel": true, - "eqeqeq": true, - "esnext": true, - "globals": { - "chrome": false, - "Components": false, // global variable in Firefox - "safari": false, - "self": false, - "vAPI": false, - "µBlock": false - }, - "laxbreak": true, - "newcap": false, - "nonew": false, - "strict": "global", - "sub": true, - "undef": true, - "unused": true, - "validthis": true, - "-W058": true // suppress "Missing '()' invoking a constructor" message -} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 75a2fa0827ca1..0000000000000 --- a/.travis.yml +++ /dev/null @@ -1,17 +0,0 @@ -language: ruby -sudo: false -env: - matrix: - - BROWSER=chromium EXT=zip - - BROWSER=firefox EXT=xpi -script: ./tools/make-${BROWSER}.sh all -deploy: - provider: releases - api_key: - secure: EnAMNsPbnS2I0JDkCWiY/6WLERsUbE2Ni5j9ap8YbZt4+sJv7aSoufWZ+0TZvSwr/w5MKCCDKhwXaPfbUwvqrI+eZv6LBXhwajK9Zla25FVjtdGCwKXQ3ZU85PHgL+5FYtuSGACmQj/ruAdSgrI7PgS08e5lqSgEk6lY4y3/6fE= - file: dist/build/uBlock0.${BROWSER}.${EXT} - skip_cleanup: true - on: - repo: gorhill/uBlock - tags: true - all_branches: true diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000000..0f0a16335b005 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,494 @@ +- [Improve `trusted-create-html` scriptlet](https://github.com/gorhill/uBlock/commit/baffd32dab) +- [Improve `prevent-fetch` scriptlet](https://github.com/gorhill/uBlock/commit/2ce376cf1d) +- [Fix handling of `extraMatch` parameter in `trusted-click-element` scriptlet](https://github.com/gorhill/uBlock/commit/a8ad95394d) +- [Improve `generateContentFn` helper scriptlet](https://github.com/gorhill/uBlock/commit/7d95c58408) +- [Improve `prevent-xhr` scriptlet](https://github.com/gorhill/uBlock/commit/168394440c) +- [Improve `proxyApplyFn` helper scriptlet](https://github.com/gorhill/uBlock/commit/18a8fc7675) + +---------- + +# 1.69.0 + +- [Add `adthrive` shim](https://github.com/gorhill/uBlock/commit/b8bf0bbab4) +- [Add `elem.shadowRoot` fallback in `getShadowRoot`](https://github.com/gorhill/uBlock/commit/c8b42ea819) (by @antonok-edm) +- [Fix merging of uncommitted filters](https://github.com/gorhill/uBlock/commit/c8004c4b02) +- [Improve `urlskip` implementation](https://github.com/gorhill/uBlock/commit/41ced43f03) +- [Improve `set-attr`/`trusted-set-attr` scriptlets](https://github.com/gorhill/uBlock/commit/3f3d4768b6) +- [Improve `trusted-create-html` scriptlet](https://github.com/gorhill/uBlock/commit/3c7eb3497d) +- [Add Anti-AI Suggestions list](https://github.com/gorhill/uBlock/commit/a0a7a99675) (by @ryanbr) +- [Unescape unduly escaped `|` in regex-based domain options](https://github.com/gorhill/uBlock/commit/bb34a4b83b) +- [Mind id/class changes in generic cosmetic filtering surveyor](https://github.com/gorhill/uBlock/commit/c053361d30) +- [Fix `specifichide` option](https://github.com/gorhill/uBlock/commit/024019094f) +- [Improve `prevent-addEventListener` scriptlet](https://github.com/gorhill/uBlock/commit/1977196abe) +- [Add `nitropay_ads.js` shim](https://github.com/gorhill/uBlock/commit/6af8a457ed) +- [Improve scriptlets proxying `fetch`](https://github.com/gorhill/uBlock/commit/13612d1d29) +- [Improve google-ima shim](https://github.com/gorhill/uBlock/commit/3fc281adf1) +- [[firefox] Change minimum required version to 115](https://github.com/gorhill/uBlock/commit/d5793b83f2) +- [Fix regression in `prevent-fetch` scriptlet](https://github.com/gorhill/uBlock/commit/be78200c2f) +- [Add `prevent-dialog` scriptlet](https://github.com/gorhill/uBlock/commit/fd12d01928) + +---------- + +# 1.68.0 + +- [Improve `prevent-fetch` scriptlet](https://github.com/gorhill/uBlock/commit/b46572e938) +- [Fix regression in `trusted-replace-argument` scriptlet](https://github.com/gorhill/uBlock/commit/2e509d42fc) +- [Add web-accessible resource for sensors analytics](https://github.com/gorhill/uBlock/commit/cd0f5be12c) +- [Fix custom prefixes unduly assigning trust to external lists](https://github.com/gorhill/uBlock/commit/b5f74456a4) +- [Improve `m3u-prune` scriptlet](https://github.com/gorhill/uBlock/commit/53d60ac36c) +- [Improve `prevent-fetch` scriptlet](https://github.com/gorhill/uBlock/commit/60e15cb6e1) +- [Fix regex-matching in `JSONPath`](https://github.com/gorhill/uBlock/commit/8491e9c476) +- [Ignore negated request types when validating `redirect` option](https://github.com/gorhill/uBlock/commit/50e898b847) + +---------- + +# 1.67.0 + +- [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) +- [JSONPath: Add ability to select root node for appending/modifying](https://github.com/gorhill/uBlock/commit/faff035203) +- [JSONPath: Add ability to substitute a pattern within a string value](https://github.com/gorhill/uBlock/commit/38ca6d41ff) +- [Remove "CERT.PL's Warning List" from stock lists](https://github.com/gorhill/uBlock/commit/e713e133eb) +- [Fix incorrect CNAME-related test in advanced settings](https://github.com/gorhill/uBlock/commit/171ddd3e06) +- [Remove "AdGuard Tracking Protection"from stock list](https://github.com/gorhill/uBlock/commit/14a9572c86) +- [Add filter list for experimental filters](https://github.com/gorhill/uBlock/commit/d88814bc12) +- [Improve `fingerprint2.js` shim](https://github.com/gorhill/uBlock/commit/7d9317bb17) +- [Make `google-ima` a valid injectable scriptlet](https://github.com/gorhill/uBlock/commit/47cbb43a0e) +- [Improve `abort-current-script` scriptlet](https://github.com/gorhill/uBlock/commit/fef50e59f2) +- [Fix potential exception in procedural operator `:matches-attr`](https://github.com/gorhill/uBlock/commit/e07e7bbd09) +- [Improve reporting of `reason` option in strict-blocked pages](https://github.com/gorhill/uBlock/commit/b7510eee61) +- [Improve `prevent-innerHTML` scriptlet](https://github.com/gorhill/uBlock/commit/b0396029bd) + +---------- + +# 1.65.0 + +## Fixes / changes + +- [Reset `important` option flag at `header` evaluation time](https://github.com/gorhill/uBlock/commit/66b68b4442) +- [Fix broken reverse lookup of filter lists](https://github.com/gorhill/uBlock/commit/527b4a201f) +- [Add `[trusted-]edit-inbound-object` scriptlets](https://github.com/gorhill/uBlock/commit/6e466cf945) +- [Improve `remove-cookie` scriptlet](https://github.com/gorhill/uBlock/commit/0a8ea58bb7) +- [Add `json-edit`-related scriptlets](https://github.com/gorhill/uBlock/commit/87e0434c90) +- [Improve `trusted-set-cookie` scriptlet](https://github.com/gorhill/uBlock/commit/3a2bb62519) +- [Force cache bypass reload when no-scripting switch is toggled](https://github.com/gorhill/uBlock/commit/4affe343dd) +- [Improve `jsonl[...]` suite of scriptlets](https://github.com/gorhill/uBlock/commit/ed9999efd6) +- [Add support for network filter option `message`](https://github.com/gorhill/uBlock/commit/d8298bb067) + - [Complete support for reporing strict-block messages](https://github.com/gorhill/uBlock/commit/253ef7ade3) +- [Make `header=` syntax compatible with DNR rules](https://github.com/gorhill/uBlock/commit/408b538e75) +- [Counter CodeMirror's `pointer-events: none` on scrollbars](https://github.com/gorhill/uBlock/commit/c44f043ed3) +- [Fix element picker issue with explicit dark theme](https://github.com/gorhill/uBlock/commit/0130fdf4a1) + +---------- + +# 1.64.0 + +## Fixes / changes + +- [Use custom blank page for embedded iframe in dashboard](https://github.com/gorhill/uBlock/commit/8cd6212867) +- [Use `color-scheme` `meta` tag, as suggested](https://github.com/gorhill/uBlock/commit/5c029b3532) +- [Bring zapper look in line with uBO Lite's zapper](https://github.com/gorhill/uBlock/commit/3f59f94b60) +- [Ignore `start_page` transition for popup-blocking purpose](https://github.com/gorhill/uBlock/commit/0243a141a7) +- [Exclude `chrome:` as valid openers for popup candidates](https://github.com/gorhill/uBlock/commit/59f4aca010) +- [Fetch diff patches from "reliable" servers only](https://github.com/gorhill/uBlock/commit/8b964a8c54) +- [Add `trusted-create-html` scriptlet](https://github.com/gorhill/uBlock/commit/20dd606504) +- [Mind potential race condition when dynamically registering scriptlets](https://github.com/gorhill/uBlock/commit/15e832da8a) +- [Fix undue unchecking of setting in "My filters"](https://github.com/gorhill/uBlock/commit/2bb6999e3f) +- [Add path support as target option in static extended filtering](https://github.com/gorhill/uBlock/commit/8b696a691a) +- [Add `trusted-prevent-fetch` scriptlet](https://github.com/gorhill/uBlock/commit/4ce26b63ff) +- [Code viewer shouldn't be maximizable](https://github.com/gorhill/uBlock/commit/97e740bd2c) +- [Add `json-edit` suite of scriptlets; extend `replace=` option](https://github.com/gorhill/uBlock/commit/b18daa53aa) +- [Improve `trusted-prevent-dom-bypass` scriptlet](https://github.com/gorhill/uBlock/commit/68a256bdde) +- [Add `jsonl-prune-xhr-response`/`jsonl-prune-fetch-response` scriptlets](https://github.com/gorhill/uBlock/commit/95a3be9d56) +- [Improve `[json-prune|trusted-replace]-fetch-response` scriptlets](https://github.com/gorhill/uBlock/commit/88fa550a96) + +---------- + +# 1.63.2 + +## Fixes / changes + +- [Fix TypedArray overflow](https://github.com/gorhill/uBlock/commit/76b80baaea) +- [Add prevent-innerHTML scriptlet](https://github.com/gorhill/uBlock/commit/fe744816f1) + +---------- + +# 1.63.0 + +## Fixes / changes + +- [Improve `prevent-set[Timeout|Interval]` scriptlets](https://github.com/gorhill/uBlock/commit/d36ea89a02) +- [Add quit button to element zapper mode](https://github.com/gorhill/uBlock/commit/4aebdbb0a9) +- [Improve `trusted-override-element-method` scriptlet](https://github.com/gorhill/uBlock/commit/9e946ce0c3) +- [Disable obsolete cache-control workaround for Firefox](https://github.com/gorhill/uBlock/commit/34cea70924) +- [Improve `overlay-buster` scriptlet](https://github.com/gorhill/uBlock/commit/fc231998b9) +- [Add ability to inject scriptlets according to origin of ancestor contexts](https://github.com/gorhill/uBlock/commit/a483f7955f) +- [Fix range parser in prevent-setTimeout scriptlet](https://github.com/gorhill/uBlock/commit/e636c32f2a) +- [Add filter option synonyms for `strict1p`/`strict3p`](https://github.com/gorhill/uBlock/commit/34df044808) +- [Increase URL buffer size to 8192 (from 2048)](https://github.com/gorhill/uBlock/commit/36404543e4) +- [Use onmessage/postMessage instead of BroadcastChannel in diff updater](https://github.com/gorhill/uBlock/commit/ea8853cda3) +- [Improve `disable-newtab-links` scriptlet](https://github.com/gorhill/uBlock/commit/d41989e62a) +- [Improve `prevent-addEventListener` scriptlet](https://github.com/gorhill/uBlock/commit/9c26a07b53) +- [Fix reverse lookup of `##^responseheader(...)` filters](https://github.com/gorhill/uBlock/commit/5921e50e03) +- [Improve `evaldata-prune` scriptlet](https://github.com/gorhill/uBlock/commit/9bb1a2baaf) +- [Comply with Mozilla's "User Consent and Control"](https://github.com/gorhill/uBlock/commit/344539d793) +- [Improve `noeval-if` scriptlet](https://github.com/gorhill/uBlock/commit/0df7faffac) +- [Add "closed","next", "mandatory", "agree/disagree" values to `set-cookie` scriptlet](https://github.com/gorhill/uBlock/commit/35a47d674b) (by @ryanbr) +- [Add `decline` value to `set-cookie` scriptlet](https://github.com/gorhill/uBlock/commit/4b12247da1) +- [Improve `abort-on-stack-trace` scriptlet](https://github.com/gorhill/uBlock/commit/b617926c1c) +- [Improve `href-sanitizer` scriptlet](https://github.com/gorhill/uBlock/commit/551c6bc6eb) + +---------- + +# 1.62.0 + +## Fixes / changes + +- [Fix deserialization of ArrayBuffer shared by multiple TypedArrays](https://github.com/gorhill/uBlock/commit/c92a518218) +- [Improve `trusted-suppress-native-method` scriptlet](https://github.com/gorhill/uBlock/commit/cb6c11ab6f) +- [Improve `urlskip=` filter option](https://github.com/gorhill/uBlock/commit/a7aa755f18) +- [Improve `parse-properties-to-match` scriptlet helper](https://github.com/gorhill/uBlock/commit/7494eaf621) +- [Improve `href-sanitizer` scriptlet](https://github.com/gorhill/uBlock/commit/9bf8d53ebe) +- [Improve quote usage in filter options and scriptlets](https://github.com/gorhill/uBlock/commit/8ba71f09d7) +- [Improve `trusted-suppress-native-method` scriptlet](https://github.com/gorhill/uBlock/commit/7ed3470844) +- [Improve `trusted-replace-argument` scriptlet](https://github.com/gorhill/uBlock/commit/3417fe3d5d) +- [Block media elements unconditionally when max size is set to 0](https://github.com/gorhill/uBlock/commit/36db7f8327) + - Regression from +- [Visually separate scriptlet parameters in active line](https://github.com/gorhill/uBlock/commit/076e9fa73e) +- [Mitigate potentially delayed execution of scriptlets in Firefox](https://github.com/gorhill/uBlock/commit/b1a00145bd) +- [Improve `prevent-setTimeout`/`prevent-setInterval` scriptlets](https://github.com/gorhill/uBlock/commit/3b7fa79a68) +- [Improve `trusted-replace-argument` scriptlet](https://github.com/gorhill/uBlock/commit/adced29b5b) +- [Add `-safebase64` directive to `urlskip=` option](https://github.com/gorhill/uBlock/commit/bcc058eba7) +- [Improve `urlskip=` filter option](https://github.com/gorhill/uBlock/commit/77ed83ff2f) +- [Improve `spoof-css` scriptlet](https://github.com/gorhill/uBlock/commit/5f5e3d730f) +- [Improve `trusted-set-attr` scriptlet](https://github.com/gorhill/uBlock/commit/c8174d6032) +- [Add support for EasyList `{ remove: true }` cosmetic filter syntax](https://github.com/gorhill/uBlock/commit/ff5fc61753) +- [Keep moving related scriptlets into separate files](https://github.com/gorhill/uBlock/commit/e5a088738d) +- [Improve `prevent-xhr` scriptlet](https://github.com/gorhill/uBlock/commit/ce4908b341) +- [Improve `trusted-suppress-native-method` scriptlet](https://github.com/gorhill/uBlock/commit/41616df866) +- [Improve `set-cookie` scriptlet](https://github.com/gorhill/uBlock/commit/e613282698) + +---------- + +# 1.61.2 + +## Fixes / changes + +- [Better handle unexpected conditions when deserializing](https://github.com/gorhill/uBlock/commit/4c299bfca9) +- [Fix potential infinite async loop](https://github.com/gorhill/uBlock/commit/335d947c10) (issue found by @Rob--W) + +---------- + +# 1.61.0 + +## Fixes / changes + +- [Improve `prevent-refresh` scriptlet](https://github.com/gorhill/uBlock/commit/8884f259c1) +- [Improve `googlesyndication_adsbygoogle.js` scriptlet](https://github.com/gorhill/uBlock/commit/f645e8f0d2) +- [Offer ability to skip redirects in strict-blocked page](https://github.com/gorhill/uBlock/commit/20b54185fa) +- [Add `-blocked` directive to `urlskip=` option](https://github.com/gorhill/uBlock/commit/d04dc4c767) +- [Add `trusted-set-attr` scriptlet](https://github.com/gorhill/uBlock/commit/11ca4a3923) +- [Remove `64:ff9b:` as private network block](https://github.com/gorhill/uBlock/commit/2621c908c3) +- [Ensure `urlskip=` redirects only to `https:`](https://github.com/gorhill/uBlock/commit/32f27c5131) +- [Add support to `urlskip=` media resources](https://github.com/gorhill/uBlock/commit/ce9fc5dc14) +- [Add `-uricomponent` to `urlskip=` option](https://github.com/gorhill/uBlock/commit/01eebffc1f) +- [Add `forbidden`/`forever` as safe cookie values](https://github.com/gorhill/uBlock/commit/4d982d9972) (by @ryanbr) +- [Add regex extraction transformation step to `urlskip=` option](https://github.com/gorhill/uBlock/commit/c86ed5287b) +- [Improve `prevent-window-open` scriptlet](https://github.com/gorhill/uBlock/commit/85877b12ed) +- [Add support to parse Adguard's `[$domain=/.../]` regex-based modifier](https://github.com/gorhill/uBlock/commit/58bfe4c846) +- [Validate result type of XPath expressions](https://github.com/gorhill/uBlock/commit/c746633693) +- [Fix npm test suite](https://github.com/gorhill/uBlock/commit/818cb2d801) +- [Add ability to lookup parameter name in `urlskip=`](https://github.com/gorhill/uBlock/commit/64b2086ba4) +- [Mind that BroadcastChannel contructor can throw in Firefox](https://github.com/gorhill/uBlock/commit/6d2b3375f8) +- [Add `trusted-override-element-method` scriptlet](https://github.com/gorhill/uBlock/commit/95b0ce5e3a) +- [Add `trusted-prevent-dom-bypass` scriptlet](https://github.com/gorhill/uBlock/commit/1abc864742) +- [Improve `prevent-xhr` scriptlet; add `trusted-prevent-xhr` scriptlet](https://github.com/gorhill/uBlock/commit/fe49ced2ac) +- [Skip dns resolution when requests are proxied through http](https://github.com/gorhill/uBlock/commit/4305bfbdb1) +- [Blocking large media elements also prevents autoplay, regardless of size](https://github.com/gorhill/uBlock/commit/73ce4e6bcf) +- [Do not discard `!#else` block for unknown preprocessor tokens](https://github.com/gorhill/uBlock/commit/6cac645830) +- [Add ability to decode base64 in `urlskip=`](https://github.com/gorhill/uBlock/commit/e81e70937f) +- [Fix images not properly downloading on click](https://github.com/gorhill/uBlock/commit/aec0bd39e3) + +---------- + +# 1.60.0 + +## Fixes / changes + +- [Add advanced setting `dnsResolveEnabled`](https://github.com/gorhill/uBlock/commit/760b2ffce6) +- [Fix contextual menu quirks](https://github.com/gorhill/uBlock/commit/0a6dc47a72) +- [Fix exception thrown in `spoof-css` in Firefox](https://github.com/gorhill/uBlock/commit/11c3a16036) +- [Throttle down repeated scriptlet logging information](https://github.com/gorhill/uBlock/commit/e8f6f3ddff) +- [Improve scriptlet helper `proxy-apply`](https://github.com/gorhill/uBlock/commit/547fae4842) +- [Add an entry in _Report_ page for badware/phishing category](https://github.com/gorhill/uBlock/commit/e18a3707c7) +- [New static network filter option `urlskip=`](https://github.com/gorhill/uBlock/commit/266ec4894b) +- [Rewrite cname uncloaking code to account for new `ipaddress=` option](https://github.com/gorhill/uBlock/commit/6acf97bf51) +- [Avoid using dns.resolve() for proxied DNS resolution](https://github.com/gorhill/uBlock/commit/d5f14ffa32) +- [Add support for `lan`/`loopback` values to `ipaddress=` option](https://github.com/gorhill/uBlock/commit/030d7334e4) +- [New static network filter option `ipaddress=`](https://github.com/gorhill/uBlock/commit/c6dedd253f) +- [Add ability to quote static network option values](https://github.com/gorhill/uBlock/commit/20115697e5) +- [Improve `prevent-fetch` scriptlet](https://github.com/gorhill/uBlock/commit/e8202af11d) +- [Apply CSP/PP injections to `object` resources](https://github.com/gorhill/uBlock/commit/89f02098fd) +- [Improve `xml-prune` scriptlet](https://github.com/gorhill/uBlock/commit/c8307f58a3) +- [Add support for `application/dash+xml` in `replace=` option](https://github.com/gorhill/uBlock/commit/91125d29cf) +- [Add ability to directly evaluate static network filtering engine](https://github.com/gorhill/uBlock/commit/b7ed3b45ed) +- [Fix `prevent-window-open` for when logger is open](https://github.com/gorhill/uBlock/commit/f552f655cb) +- [Improve `prevent-window-open` scriptlet](https://github.com/gorhill/uBlock/commit/7f11d6216e) +- [Improve `validate-constant` scriptlet helper](https://github.com/gorhill/uBlock/commit/ae5dc6299e) +- [Improve `trusted-replace-outbound-text` scriptlet](https://github.com/gorhill/uBlock/commit/0dcb985601) +- [Improve `prevent-xhr` scriptlet](https://github.com/gorhill/uBlock/commit/3a249f395c) +- [Add noop resources for redirect purpose](https://github.com/gorhill/uBlock/commit/59a9a43a83) +- [Use helper function to lookup safe cookie values](https://github.com/gorhill/uBlock/commit/79e10323ad) +- [Add `checked`/`unchecked` to `set-cookie`](https://github.com/gorhill/uBlock/commit/3e2171f550) (by @ryanbr) +- [Add `allowed`/`denied` to `set-local-storage-item`](https://github.com/gorhill/uBlock/commit/41c2258f91) (by @ryanbr) +- [Fix plain exceptions not overriding block filters using `header=` option](https://github.com/gorhill/uBlock/commit/1cb660b94e) +- [Improve various scriptlets](https://github.com/gorhill/uBlock/commit/56dfdd2568) +- [Improve `href-sanitizer` scriptlet](https://github.com/gorhill/uBlock/commit/db3dc69bcc) +- [Improve `remove-attr.js` scriptlet](https://github.com/gorhill/uBlock/commit/fb037e97d0) +- [Improve `trusted-replace-node-text` scriptlet](https://github.com/gorhill/uBlock/commit/4f0d1301ab) + +---------- + +# 1.59.0 + +## Fixes / changes + +- [Improve `href-sanitizer` scriptlet](https://github.com/gorhill/uBlock/commit/84be9cde6d) +- [Improve `trusted-replace-node-text` scriptlet](https://github.com/gorhill/uBlock/commit/8afd9e233d) +- [Improve `set-constant` scriptlet](https://github.com/gorhill/uBlock/commit/77feb25c4d) +- [Improve `prevent-fetch` scriptlet](https://github.com/gorhill/uBlock/commit/e785b99338) +- [Improve `href-sanitizer` scriptlet](https://github.com/gorhill/uBlock/commit/66e3a1ad47) +- [Fix CSP/PP header injection in non-document resources](https://github.com/gorhill/uBlock/commit/c90f4933df) +- [Add `trusted-suppress-native-method` scriptlet](https://github.com/gorhill/uBlock/commit/97d11c03c2) +- [Add support for `$currentISODate$` in `trusted-set-cookie` scriptlet](https://github.com/gorhill/uBlock/commit/a3576ea651) +- [Add `essential` and `nonessential` to set-cookie](https://github.com/gorhill/uBlock/commit/37d31a82d8) (by @ryanbr) +- [Fix distance calculation in picker](https://github.com/gorhill/uBlock/commit/9569969b55) +- [Fix bad serialization of Date objects](https://github.com/gorhill/uBlock/commit/c154aaa69c) +- [Fix race condition when loading redirect/scriptlet resources](https://github.com/gorhill/uBlock/commit/896737d098) +- [Improve logging in `prevent-addEventListener` scriptlet](https://github.com/gorhill/uBlock/commit/8eb3b19c69) +- [Add `:matches-prop()` pseudo CSS operator](https://github.com/gorhill/uBlock/commit/aca7674bac) +- [Improve `set-cookie` scriptlet](https://github.com/gorhill/uBlock/commit/b4d8750f44) +- [Improve `trusted-replace-node-text` scriptlet](https://github.com/gorhill/uBlock/commit/cb0f65e035) +- [Improve `trusted-replace-(fetch|xhr)-response` scriptlets](https://github.com/gorhill/uBlock/commit/9072772f61) +- [Improve `prevent-addEventListener` scriptlet](https://github.com/gorhill/uBlock/commit/91ee5bdeae) +- [Add `isodate` as available placeholder for auto-comment](https://github.com/gorhill/uBlock/commit/d5208ee5dd) +- [Improve `trusted-replace-outbound-text` scriptlet](https://github.com/gorhill/uBlock/commit/fa6740a059) +- [Classify generic cosmetic filters with comma as highly generic](https://github.com/gorhill/uBlock/commit/8f81833efc) +- [Raise max buffer size for response body filtering](https://github.com/gorhill/uBlock/commit/82a3992896) +- [Trim end of class tokens in generic cosmetic filtering's surveyor](https://github.com/gorhill/uBlock/commit/8ea1bac80b) +- [Improve `trusted-set-cookie` scriptlet](https://github.com/gorhill/uBlock/commit/0e1e4b82c5) + +---------- + +# 1.58.0 + +## Fixes / changes + +- [Fallback to `requestAnimationFrame` when `requestIdleCallback` is not available](https://github.com/gorhill/uBlock/commit/59ffc96e89) +- [Improve `trusted-click-element` scriptlet](https://github.com/gorhill/uBlock/commit/ee67cd6284) +- [Replace EasyDutch with AdGuard Dutch](https://github.com/gorhill/uBlock/commit/ca7d2ad61d) +- [Add checksum validation when loading trie buffers in selfie](https://github.com/gorhill/uBlock/commit/0e6d607484) +- [Catch exceptions in API calls for the sake of old Chromium versions](https://github.com/gorhill/uBlock/commit/bb479b0a66) +- [Add `accept`/`reject` to `set-local-storage-item`](https://github.com/gorhill/uBlock/commit/363ad6795c) (by @ryanbr) +- [Use raw string for regex patterns in python scripts](https://github.com/gorhill/uBlock/commit/923452b788) +- [Improve `noeval-if` scriptlet](https://github.com/gorhill/uBlock/commit/4d8ee35ef7) +- [Improve `trusted-set-local-storage-item` scriptlet](https://github.com/gorhill/uBlock/commit/2ccc3135c1) +- [Fix potential corruption when reading serialized data](https://github.com/gorhill/uBlock/commit/c098eb8625) +- [Improve `remove-[attr|class]` scriptlets](https://github.com/gorhill/uBlock/commit/91dfcbef2a) +- [Improve dashboard layout at high zoom factor](https://github.com/gorhill/uBlock/commit/6152f5269e) +- [Add a console pane to the logger](https://github.com/gorhill/uBlock/commit/3b4f02db21) +- [Improve `spoof-css` scriptlet](https://github.com/gorhill/uBlock/commit/277e90a4a7) +- [Fix bad date computation in auto-comment feature](https://github.com/gorhill/uBlock/commit/a5f6c35bb0) +- [Fix regression breaking import of `file://` lists](https://github.com/gorhill/uBlock/commit/c223a8cd39) +- [Add `trusted-replace-outbound-text` scriptlet](https://github.com/gorhill/uBlock/commit/21e1ee30ee) +- [Improve `[trusted-]set-cookie` scriptlets](https://github.com/gorhill/uBlock/commit/49ff7cffb1) + +---------- + +# 1.57.2 + +## Fixes / changes + +- [Fix stray lists in redesigned cache storage](https://github.com/gorhill/uBlock/commit/defd68ef7d) + +---------- + +# 1.57.0 + +## Fixes / changes + +- [Do not block large media resources when loaded as top-level document](https://github.com/gorhill/uBlock/commit/3919a16bb8) +- [Properly manage cache storage regarding managed user filters](https://github.com/gorhill/uBlock/commit/90ab1a76ab) +- [Improve `[trusted-]set-cookie` scriptlets](https://github.com/gorhill/uBlock/commit/11a48561e0) +- [Fixed Belgian and Nepali flags for Windows Chromium users](https://github.com/gorhill/uBlock/commit/499c80bd8a) (by @DandelionSprout) +- [Mind that `tabs.sendMessage` can throw](https://github.com/gorhill/uBlock/commit/3f7374c1f1) +- [Improve `set-cookie` scriptlet](https://github.com/gorhill/uBlock/commit/9146134874) +- [Append wildcard character only when filter starts & ends with `/`](https://github.com/gorhill/uBlock/commit/1cb190e102) +- [Fix failure to create popup logger window sometimes](https://github.com/gorhill/uBlock/commit/c8762945d9) +- [Improve json-prune-related scriptlets](https://github.com/gorhill/uBlock/commit/e7a0f8c781) +- [Support maximizing editor to viewport size](https://github.com/gorhill/uBlock/commit/664dd95700) +- [Add advanced setting to force popup panel orientation](https://github.com/gorhill/uBlock/commit/0d77ccded7) +- [Add checkboxes to "My filters" pane](https://github.com/gorhill/uBlock/commit/46ea5519c1) +- [Assume UTF-8 when no encoding can be looked up](https://github.com/gorhill/uBlock/commit/63acdcbdeb) +- [Fix issue with "My filters" pane on mobile](https://github.com/gorhill/uBlock/commit/24d94e559d) +- [Support aborting "Pick" mode in element picker](https://github.com/gorhill/uBlock/commit/a557f62112) +- [Remove sections with no lists in "Filter lists" pane](https://github.com/gorhill/uBlock/commit/0f4e50db07) +- [Add "Social widgets", "Cookie notices" sections in "Filter lists" pane](https://github.com/gorhill/uBlock/commit/21a76e32a1) +- [No longer disable generic cosmetic filters by default on mobile](https://github.com/gorhill/uBlock/commit/7a768e7b1a) +- [Improve `spoof-css` scriptlet](https://github.com/gorhill/uBlock/commit/603239970d) +- [Make asset updater compatible with non-persistent background page](https://github.com/gorhill/uBlock/commit/96704f2fda) +- [Move dragbar to the top of element picker dialog](https://github.com/gorhill/uBlock/commit/953c978d59) + - [Move "Quit" button to top bar in element picker](https://github.com/gorhill/uBlock/commit/6266c4718d) +- [Add advanced setting `requestStatsDisabled`](https://github.com/gorhill/uBlock/commit/e02ea69c86) +- [First lookup matching stock lists when importing URLs](https://github.com/gorhill/uBlock/commit/2b16a10b82) +- [Reset filter lists in worker when creating filters via "Block element"](https://github.com/gorhill/uBlock/commit/b0067b79d5) +- [Remove trusted-source requirement when using `badfilter`](https://github.com/gorhill/uBlock/commit/3c299b8632) +- [Redesign cache storage](https://github.com/gorhill/uBlock/commit/086766a924) +- [Don't match network filter-derived regexes against non-network URIs](https://github.com/gorhill/uBlock/commit/2262a129ec) +- [Remove obsolete trusted directives](https://github.com/gorhill/uBlock/commit/439a059cca) +- [Support logging details of calls to `json-prune-fetch-response`](https://github.com/gorhill/uBlock/commit/e527a8f9af) +- [Escape special whitespace characters in attribute values](https://github.com/gorhill/uBlock/commit/be3e366019) + +---------- + +# 1.56.0 + +## Fixes / changes + +- [Mind that multiple `uritransform` may apply to a single request](https://github.com/gorhill/uBlock/commit/2a5a444482) +- [Fix incorrect built-in filtering expression in logger](https://github.com/gorhill/uBlock/commit/9bff0c2f94) +- [Fix improper invalidation of valid `uritransform` exception filters](https://github.com/gorhill/uBlock/commit/21ec5a277c) +- [Improve `prevent-addEventListener` scriptlet](https://github.com/gorhill/uBlock/commit/b22b3d729b) +- [Fix Chartbeat flicker control `div`'s](https://github.com/gorhill/uBlock/commit/397d6d47b9) (by @ryanbr) +- [Fix potential exfiltration of browsing history by a rogue list author through `permissions=`](https://github.com/gorhill/uBlock/commit/7b138b58c6) +- [Ignore event handler-related attributes in `set-attr` scriptlet](https://github.com/gorhill/uBlock/commit/3037ae5f04) (suggested by @distinctmondaylilac) +- [Fix potential exfiltration of browsing history by a rogue list author through `csp=`](https://github.com/gorhill/uBlock/commit/db5656f607) (reported by @distinctmondaylilac) +- [Output scriptlet logging information to the logger](https://github.com/gorhill/uBlock/commit/869a653fdf) +- [Fix decompiling of scriptlet parameters](https://github.com/gorhill/uBlock/commit/49dd68ef3d) +- [Add support for `extraMatch` in `trusted-click-element` scriptlet](https://github.com/gorhill/uBlock/commit/45e62c939f) +- [Remove minimum height constraint from "My filters" pane](https://github.com/gorhill/uBlock/commit/f624c835c2) +- [Unregister all scriptlets when disabling uBO on a specific site](https://github.com/gorhill/uBlock/commit/13dcd844a7) +- [Allow `uritransform` to process the hash part of a URL](https://github.com/gorhill/uBlock/commit/b19094339f) +- [Remember presentation state of "My rules" pane](https://github.com/gorhill/uBlock/commit/3d1b100646) +- [Fix improperly assembled `!#include` sublists](https://github.com/gorhill/uBlock/commit/0e00010b91) +- [Mark procedural filters with pseudo-elements selector as invalid](https://github.com/gorhill/uBlock/commit/757b8be9cd) +- [Prevent access to picker when "My filters" is not enabled](https://github.com/gorhill/uBlock/commit/bc641fc024) +- [Provide visual feedback when applying changes in "Filter lists" pane](https://github.com/gorhill/uBlock/commit/c4bb8a0f64) +- [Empty query parameters must still use `=`](https://github.com/gorhill/uBlock/commit/1cac61a9a4) +- [Add support to toggle no-scripting switch with keyboard shortcut](https://github.com/gorhill/uBlock/commit/936444883f) +- [Do not exceed rate-limited calls to `handlerBehaviorChanged()`](https://github.com/gorhill/uBlock/commit/63fe18a761) +- [Shield some code paths against potentially tampered global properties](https://github.com/gorhill/uBlock/commit/534d877e95) (in scriptlets) +- [Do not prevent applying changes when lists are updating](https://github.com/gorhill/uBlock/commit/f6b726136c) +- [Add `elements` vararg to `prevent-addEventListener` scriptlet](https://github.com/gorhill/uBlock/commit/060f9d68fc) +- [Do not use tab character as field separator](https://github.com/gorhill/uBlock/commit/a9eb9630cf) (in logger) +- [Prevent `:others()` from hiding `html` tag](https://github.com/gorhill/uBlock/commit/9a104bcbd2) + +---------- + +# 1.55.0 + +## Fixes / changes + +- [Discard repeating adjacent entries in the logger](https://github.com/gorhill/uBlock/commit/55e4cee6e8) +- [Mind drop events in filter expression field of logger](https://github.com/gorhill/uBlock/commit/c8b7d1a526) +- [Improve `xml-prune` scriptlet](https://github.com/gorhill/uBlock/commit/d7063a052f) +- [Fix message entries overflowing in logger](https://github.com/gorhill/uBlock/commit/49c8310e22) +- [Add support for `application/x-javascript` in `replace=` option](https://github.com/gorhill/uBlock/commit/abeadf18eb) +- [Extend support for differential updates to imported lists](https://github.com/gorhill/uBlock/commit/443c1f81e1) +- [Add detection of mismatched `!#if`-`!#endif` in linter](https://github.com/gorhill/uBlock/commit/9f4b31a96f) +- [Support links to update lists which are differential update-friendly](https://github.com/gorhill/uBlock/commit/5e3f9695b4) +- [Remove "Purge all caches" button from "Filter lists" pane](https://github.com/gorhill/uBlock/commit/bd7ce41224) +- [Add support for `all` list token in updater-link feature](https://github.com/gorhill/uBlock/commit/14926913f7) +- [Fix logging of broad exception filter `#@#+js()`](https://github.com/gorhill/uBlock/commit/4305ea9c0c) +- [Improve `no-xhr-if` scriptlet](https://github.com/gorhill/uBlock/commit/d01ad24291) +- [Ensure cache storage backend is selected before access](https://github.com/gorhill/uBlock/commit/bfa28b960e) +- [Fix popup panel rendering when embedded in logger](https://github.com/gorhill/uBlock/commit/4183ce477a) +- [Add visual hint in support information re. differential update](https://github.com/gorhill/uBlock/commit/7e44db763e) +- [Remove obsolete web accessible resources](https://github.com/gorhill/uBlock/commit/310bfec6a1) +- [Rename `urltransform` to `uritransform`](https://github.com/gorhill/uBlock/commit/cdc5e89f52) +- [Vertically expand/collapse in steps in dom inspector](https://github.com/gorhill/uBlock/commit/885bc3875b) +- [Reset the DOM inspector when URL in top context changes](https://github.com/gorhill/uBlock/commit/c744c87607) +- [Support shadow-piercing combinator `>>>` in `trusted-click-element`](https://github.com/gorhill/uBlock/commit/941077a25c) +- [Isolate DOM inspector layers from page context](https://github.com/gorhill/uBlock/commit/ee83a4304a) +- [Refactoring: Replace DOM events with broadcast channels](https://github.com/gorhill/uBlock/commit/67fb969572) +- [Support non-default sticky lists](https://github.com/gorhill/uBlock/commit/ea7d411bc2) +- [Add enableLazyLoad function](https://github.com/gorhill/uBlock/commit/a8cf08325d) (by @spazmodius ) +- [Change frequency of save-to-storage blocking stats](https://github.com/gorhill/uBlock/commit/5a338b7210) +- [Improve `prevent-fetch` scriptlet](https://github.com/gorhill/uBlock/commit/6aeab2adbc) +- [Catch cases of `! Expires:` field with no value](https://github.com/gorhill/uBlock/commit/9ce958432d) + +---------- + +# 1.54.0 + +## New + +Differential update of filter lists, as a result of discussions at . Resulting spec is [here](https://github.com/ameshkov/diffupdates). + +![inkscape](https://github.com/gorhill/uBlock/assets/585534/3ee3567b-e24f-4d39-90e2-915b39a114fb) + +The goal is to **NOT** be ranked among the "most popular projects" by bandwidth usage (as per [jsDelivr's public stats](https://www.jsdelivr.com/statistics)): + +![jsDelivr stats](https://github.com/gorhill/uBlock/assets/585534/96c7e0fa-ffcc-4879-a01e-e340b4f0fa9e) + +It is expected that differential updates will lower both requests and bandwidth usage. + +To benefit the much shorter update period enabled by differential updates, you must let uBO auto-update the filter lists. Forcing a manual update will prevent differential updates until the next time a list auto-update. + +## Fixes / changes + +- [Enable path for native `has()` selector in Firefox](https://github.com/gorhill/uBlock/commit/c5724c1cce) +- [Allow scriptlets to be injected in `about:blank`](https://github.com/gorhill/uBlock/commit/3fd2588650) +- [Fix faulty `as` vararg in `set-constant` scriptlet](https://github.com/gorhill/uBlock/commit/c292a90b90) +- [Add support to redirect to `noop.json`](https://github.com/gorhill/uBlock/commit/bd8a91ed3a) +- [More improvements to the `google-ima` shim script](https://github.com/gorhill/uBlock/commit/c1d8f5908d) (by @kzar) +- [All exceptions filters are exempt from requiring a trusted source](https://github.com/gorhill/uBlock/commit/d2b8d990e6) +- [Add `trusted-set-session-storage-item` scriptlet](https://github.com/gorhill/uBlock/commit/f3d6a21e7a) +- [Allow the use of quotes in `set-cookie` scriptlet ](https://github.com/gorhill/uBlock/commit/7c562d0c5c) +- [Allow the use of quotes in `set-(local|session)-storage-item`](https://github.com/gorhill/uBlock/commit/decafc5cbf) +- [Add ability to trigger cookie removal on specific events](https://github.com/gorhill/uBlock/commit/ef311ddbec) +- [Ensure CSSTree does not hold a reference onto last parsed string](https://github.com/gorhill/uBlock/commit/1dba557c9a) +- [Lower minimum Expires value to 4h](https://github.com/gorhill/uBlock/commit/2360bc02f3) +- [Properly reset needle length in unserialized buffer](https://github.com/gorhill/uBlock/commit/8ed1ad9c9d) +- [Add additional flags to regional lists](https://github.com/gorhill/uBlock/commit/0962366524) (by @DandelionSprout) +- [Harden scriptlets which need to serialize function code into string](https://github.com/gorhill/uBlock/commit/7823d98070) +- [Reset `g` regexes before use in `rmnt`/`rpnt` scriptlets](https://github.com/gorhill/uBlock/commit/cdc3f66a6b) +- [Apply response filtering according to mime type](https://github.com/gorhill/uBlock/commit/6417f54299) +- [Add t/f to set-cookie](https://github.com/gorhill/uBlock/commit/4ab1c36ac9) (by @ryanbr) +- [Have `urltransform=` use the same syntax as `replace=`](https://github.com/gorhill/uBlock/commit/d7c99b46e6) +- [Implement network filter option `replace=`](https://github.com/gorhill/uBlock/commit/7c3e060c01) (Firefox only because [filterResponseData](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/filterResponseData#browser_compatibility)) +- [Prevent evaluating the SNFE until fully loaded](https://github.com/gorhill/uBlock/commit/89b272775a) +- [Add support for differential update of filter lists](https://github.com/gorhill/uBlock/commit/d05ff8ffeb) + +---------- diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 414b2d3f93103..ce2d70ee0b5dc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,81 +1,31 @@ -# Submitting issues +# Contributions -For **support/discussions**, there is [Mozilla Discourse](https://discourse.mozilla-community.org/t/support-ublock-origin/6746). +Please refer to the sections below to find the appropriate destination for your contributions. Thank you for your support! -For **filter-related issues**, report on the respective filter list support site, or at [uBlockOrigin/uAssets](https://github.com/uBlockOrigin/uAssets/issues). +--- -Ignorance of the above rules is no excuse: **Opening an issue for purpose of support or discussion, or opening a filter-related issue will result in the user being immediately blocked.** Given the [amount of invalid issues being opened](https://github.com/gorhill/uBlock/issues?q=is%3Aissue+label%3Ainvalid+is%3Aclosed), I have no choice but to resort to such a drastic measure. +### Translations -**The issue tracker is for provable issues only:** You will have to make the case that the issue is really with uBlock Origin and not something else on your side. To make a case means to provide detailed steps so that anybody can reproduce the issue. Be sure to rule out that the issue is not caused by something specific on your side. +You can help translate uBO via [Crowdin](https://crowdin.com/project/ublock). -**Any issue opened without effort to provide the required details for me (or anybody else) to reproduce the problem will be closed as _invalid_.** If you provide more details thereafter for me to reproduce the issue, I will reopen it if I can confirm there is indeed an issue with uBlock Origin. Example of detailed steps: +--- -> 1. browser version/ublock version -> 1. these settings, these filter lists, these custom filters. -> 1. do this. -> 1. open this exact URL. -> 1. do this. -> 1. observe this. -> 1. click this. -> 1. observe such and such issue -> 1. see screenshot -> 1. etc. +### Reporting Issues -The most important part when opening an issue: **detailed steps**. +The issue tracker in this repository is deprecated. Use the links below to report your issues. -**Important:** I simply do not have the time to take care of filter-related issues, you will have to find help elsewhere for this. The mere need to have to respond to filter-related issues can quickly become a burden. Consider that writing code/doc occupies all my free time. Surely there are other people out there ready to help with filter-related issues, it does not have to be me. +#### Support Forum -*** +For support, questions, or assistance, please visit [/r/uBlockOrigin](https://www.reddit.com/r/uBlockOrigin/). -### Before you submit +#### Filter List Issues -1. Submit **bugs/issues only**. - - Bugs occur, I will fix them. -1. _One specific_ issue per submission. -1. The logger is the tool of choice to use to help diagnose issues. -1. Do **NOT**: - - Submit pull requests. - - Submit design ideas. - - Submit feature requests. - - Submit "revolutionary ideas". - - Post comments like "+1" or "me too!" without providing new relevant info on the issue. - - Use issues as replacement for threads on a bulletin board. - - Any such issue will be closed without comment. - - Ask me to publish the latest version to AMO/Chrome store: In all likelihood it is already published, but pending review, something which is out of my control. -1. Make sure your issue [hasn't already been fixed in a recent release](https://github.com/gorhill/uBlock/releases). -1. Verify that the issue does **not** occur with uBlock disabled. -1. **Verify that the issue is not related to a 3rd-party filter lists.** - - Issues with 3rd-party filter lists are the responsibility of their respective maintainers. -1. Verify that the issue is not caused by another extension. -1. Do not submit issues which can be reproduced **only** on Chrome Canary or Firefox Nightly: these are not stable browser versions and in all likelihood, whatever issue is not within uBO. - - Report **only** if you can reproduce in an official stable release, or a beta release. +Report issues related to filter lists or broken website functionality in the [uAssets issue tracker](https://github.com/uBlockOrigin/uAssets/issues). -*** +#### uBlock Origin (uBO) Issues -### What to include +For issues specifically about uBO, please use the [uBO issue tracker](https://github.com/uBlockOrigin/uBlock-issues/issues). -To help diagnose and fix the bug/issue, please always include the following in your report: +#### uBO Lite (uBOL) Issues -* A clear list of steps to reproduce the problem - * **ALWAYS INCLUDE A SPECIFIC URL WHERE THE ISSUE OCCURS**, _even_ if "it happens everywhere". -* Symptoms of the issue - * Describe what you observe and consider broken behavior; this is what we'll be looking for after executing the steps - * Example: video doesn't start playing, page layout broken -* Include whatever relevant the logger reports. -* A screenshot or transcription of **any of uBlock's preferences that differ from the defaults** - * This includes a whitelisted website, enabled/disabled filter list, anything - * Please do include everything different from the defaults whether or not it seems relevant to your issue -* The version of uBlock you're having the issue with; you can find this in [uBlock's popup UI](https://github.com/gorhill/uBlock/wiki/Quick-guide:-popup-user-interface) - * Example: `uBlock 0.9.0.0` -* The browser you're using and its version - * Examples: `Firefox 36`, `Chrome 41.0.2272` -* The OS you're using and its version - * Examples: `Windows 8.1`, `Linux Mint 17.1` -* A list of other extensions you have installed - * Tip: try disabling them and see if your issue still occurs - -Otherwise, we've noticed that a lot of **your** time (and the developers') gets thrown away on exchanging back and forth to get this information. - -*** - -**Good read:** [How to Report Bugs Effectively](http://www.chiark.greenend.org.uk/~sgtatham/bugs.html). +For issues related to the Manifest Version 3 (MV3) variant, report them in the [uBOL issue tracker](https://github.com/uBlockOrigin/uBOL-home/issues). diff --git a/MANIFESTO.md b/MANIFESTO.md index 0872a7df837f3..3fb46b9f8eeb0 100644 --- a/MANIFESTO.md +++ b/MANIFESTO.md @@ -1,10 +1,7 @@ -### This is uBlock's manifesto +uBlock Origin (uBO)'s manifesto: -1. The **user decides** what web content is acceptable or not in their browser. +The **user decides** what web content is acceptable in their browser. -The uBlock project does not support Adblock Plus' _"Acceptable Ads Manifesto"_, -because the _"Acceptable Ads"_ marketing campaign is really the business -plan of a for-profit entity. +The uBO project does not support Adblock Plus' _"Acceptable Ads Manifesto"_ because the _"Acceptable Ads"_ marketing campaign is the business plan of a for-profit entity. -Users are best placed to know what is or is not acceptable to them. uBlock's -sole purpose is to give users the means to enforce their own choices. +Users are the best placed to know what is or is not acceptable to them. uBO's sole purpose is to give users the means to enforce their choices. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000000..932ecf5613fa8 --- /dev/null +++ b/Makefile @@ -0,0 +1,187 @@ +# https://stackoverflow.com/a/6273809 +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 \ + 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/*/*) +assets := dist/build/uAssets +mv3-sources := \ + $(shell find ./src -type f) \ + $(wildcard platform/mv3/*) \ + $(shell find ./platform/mv3/extension -name codemirror-ubol -prune -o -type f) \ + platform/mv3/extension/lib/codemirror/codemirror-ubol/dist/cm6.bundle.ubol.min.js +mv3-data := $(shell find ./dist/build/mv3-data -type f) + +mv3-edge-deps := $(wildcard platform/mv3/edge/*) +mv3-safari-deps := $(wildcard platform/mv3/safari/*) + +all: chromium firefox npm + +dist/build/uBlock0.chromium: tools/make-chromium.sh $(sources) $(platform) $(assets) + tools/make-chromium.sh + +# Build the extension for Chromium. +chromium: dist/build/uBlock0.chromium + +dist/build/uBlock0.opera: tools/make-opera.sh $(sources) $(platform) $(assets) + tools/make-opera.sh + +# Build the extension for Opera. +opera: dist/build/uBlock0.opera + +dist/build/uBlock0.firefox: tools/make-firefox.sh $(sources) $(platform) $(assets) + tools/make-firefox.sh all + +# Build the extension for Firefox. +firefox: dist/build/uBlock0.firefox + +dist/build/uBlock0.npm: tools/make-nodejs.sh $(sources) $(platform) $(assets) + tools/make-npm.sh + +npm: dist/build/uBlock0.npm + +# Dev tools +node_modules: + npm install + +init: node_modules + +lint: init + npm run lint + +dist/build/uBlock0.dig: tools/make-nodejs.sh $(sources) $(platform) $(assets) + tools/make-dig.sh + +dig: dist/build/uBlock0.dig + cd dist/build/uBlock0.dig && npm install + +dig-snfe: dig + cd dist/build/uBlock0.dig && npm run snfe $(run_options) + +dist/build/mv3-data: + mkdir -p dist/build/mv3-data + +ubol-codemirror: + $(MAKE) -sC platform/mv3/extension/lib/codemirror/codemirror-ubol/ ubol.bundle + +dist/build/uBOLite.chromium: tools/make-mv3.sh $(mv3-sources) $(platform) $(mv3-data) dist/build/mv3-data + tools/make-mv3.sh chromium + +mv3-chromium: ubol-codemirror dist/build/uBOLite.chromium + +dist/build/uBOLite.firefox: tools/make-mv3.sh $(mv3-sources) $(platform) $(mv3-data) dist/build/mv3-data + tools/make-mv3.sh firefox + +mv3-firefox: ubol-codemirror dist/build/uBOLite.firefox + +dist/build/uBOLite.edge: tools/make-mv3.sh $(mv3-sources) $(mv3-edge-deps) $(mv3-data) dist/build/mv3-data + tools/make-mv3.sh edge + +mv3-edge: ubol-codemirror dist/build/uBOLite.edge + +dist/build/uBOLite.safari: tools/make-mv3.sh $(mv3-sources) $(mv3-safari-deps) $(mv3-data) dist/build/mv3-data + tools/make-mv3.sh safari + +mv3-safari: ubol-codemirror dist/build/uBOLite.safari + +dist/build/uAssets: + tools/pull-assets.sh + +clean: + rm -rf dist/build tmp/node_modules node_modules + +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) \ + notes="See release notes at https://github.com/gorhill/uBlock/releases" + +# 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 + +# 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 +maxcost: + @echo +medcost: + @echo +mincost: + @echo +modifiers: + @echo +record: + @echo +wasm: + @echo diff --git a/README.md b/README.md index f216c8d3809e4..692a8482fee33 100644 --- a/README.md +++ b/README.md @@ -1,168 +1,185 @@ -[![Build](https://travis-ci.org/gorhill/uBlock.svg?branch=master)](https://travis-ci.org/gorhill/uBlock) -[![Crowdin](https://d322cqt584bo4o.cloudfront.net/ublock/localized.png)](https://crowdin.com/project/ublock) -[![License](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://github.com/gorhill/uBlock/blob/master/LICENSE.txt) +[![Badge Commits]][Commit Rate] +[![Badge Issues]][Issues] +[![Badge Localization]][Crowdin] +[![Badge License]][License] +[![Badge NPM]][NPM] +[![Badge Mozilla]][Mozilla] +[![Badge Chrome]][Chrome] +[![Badge Edge]][Edge] *** -##### BEWARE! uBlock Origin is COMPLETELY UNRELATED to the web site ublock.org** - -The donations sought by the [individual](https://github.com/chrisaljoudi/) behind `ublock.org` (_"to keeps uBlock development possible"_, [a misrepresentation](https://en.wikipedia.org/wiki/UBlock_Origin#uBlock_.28ublock.org.29)) are _not_ benefiting any of those who contributed most to create uBlock Origin ([developers](https://github.com/gorhill/uBlock/graphs/contributors), [translators](https://crowdin.com/project/ublock), and all those who put efforts in opening detailed issues). For the differences between uBlock Origin and uBlock, see the unbiased [Wikipedia article](https://en.wikipedia.org/wiki/UBlock_Origin). - -*** - -uBlock Origin is **NOT** an "ad blocker": [it is a wide-spectrum blocker](https://github.com/gorhill/uBlock/wiki/Blocking-mode) -- which happens to be able to function as a mere "ad blocker". The default behavior of uBlock Origin when newly installed is to block ads, trackers and malware sites -- through [_EasyList_](https://easylist.github.io/#easylist), [_EasyPrivacy_](https://easylist.github.io/#easyprivacy), [_Peter Lowe’s ad/tracking/malware servers_](https://pgl.yoyo.org/adservers/policy.php), various lists of [malware](http://www.malwaredomainlist.com/) [sites](http://www.malwaredomains.com/), and uBlock Origin's [own filter lists](https://github.com/uBlockOrigin/uAssets/tree/master/filters). - -*** -

- + -uBlock Origin +uBlock Origin (uBO)

-

- - pronounced you-block origin (/ˈjuːˌblɒk/) — you decide what enters your browser. - -
- - - - English, - Chinese (中文), - Korean (한국어), - Português (Brasil) - - -

- - -**An efficient blocker add-on for various browsers. Fast, potent, and lean.** -* [Documentation](#documentation) -* [Purpose & General Info](#philosophy) -* [Performance and Efficiency](#performance) - * [Memory](#memory) - * [CPU](#cpu) - * [Blocking](#blocking) - * [Quick tests](#quick-tests) -* [Installation](#installation) - * [Chromium](#chromium) - * [Firefox](#firefox--firefox-for-android) - * [Microsoft Edge](#microsoft-edge) -* [Release History](#release-history) -* [Privacy policy](https://github.com/gorhill/uBlock/wiki/Privacy-policy) -* [Wiki](https://github.com/gorhill/uBlock/wiki) - -## Documentation - - Basic mode | Advanced-user mode -:----------:|:------------------: -[Popup user interface](https://github.com/gorhill/uBlock/wiki/Quick-guide:-popup-user-interface) | [A point-and-click firewall which can be configured on a per-site basis](https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-quick-guide) -
.
.
|
Configure as you wish:
picture shows 3rd-party scripts and frames blocked by default everywhere
+| Browser | Install from ... | Status | +| :-------: | ---------------- | ------ | +| Get uBlock Origin for Firefox | Firefox Add-ons | [uBO works best on Firefox](https://github.com/gorhill/uBlock/wiki/uBlock-Origin-works-best-on-Firefox) | +| Get uBlock Origin for Microsoft Edge | Edge Add-ons | +| Get uBlock Origin for Opera | Opera Add-ons | +| Get uBlock Origin for Chromium | Chrome Web Store | About Google Chrome's "This extension may soon no longer be supported"
End of support on Chrome 139 | +| Get uBlock Origin for Thunderbird | Thunderbird Add-ons | [No longer updated and stuck at 1.49.2.](https://github.com/uBlockOrigin/uBlock-issues/issues/2928) Later versions require "GitHub - Releases". | +| Get uBlock Origin through GitHub | GitHub - Releases | 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. -Visit the [uBlock Origin's wiki](https://github.com/gorhill/uBlock/wiki) for documentation. - -## Philosophy - -uBlock Origin (or uBlock₀) is not an *ad blocker*; it's a general-purpose blocker. uBlock₀ blocks ads through its support of the [Adblock Plus filter syntax](https://adblockplus.org/en/filters). uBlock₀ [extends](https://github.com/gorhill/uBlock/wiki/Filter-syntax-extensions) the syntax and is designed to work with custom rules and filters. Furthermore, advanced mode allows uBlock₀ to work in [default-deny mode](https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-default-deny), which mode will cause [all 3rd-party network requests](https://requestpolicycontinued.github.io/#what-are-cross-site-requests) to be blocked by default, unless allowed by the user. +*** -That said, it's important to note that using a blocker is **NOT** [theft](https://twitter.com/LeaVerou/status/518154828166725632). Don't fall for this creepy idea. The _ultimate_ logical consequence of `blocking = theft` is the criminalisation of the inalienable right to privacy. +uBlock Origin (uBO) is a CPU and memory-efficient [wide-spectrum content blocker][Blocking] for Chromium and Firefox. It blocks ads, trackers, coin miners, popups, annoying anti-blockers, malware sites, etc., by default using [EasyList][EasyList], [EasyPrivacy][EasyPrivacy], [Peter Lowe's Blocklist][Peter Lowe's Blocklist], [Online Malicious URL Blocklist][Malicious Blocklist], and uBO [filter lists][uBO Filters]. There are many other lists available to block even more. Hosts files are also supported. uBO uses the EasyList filter syntax and [extends][Extended Syntax] the syntax to work with custom rules and filters. -Ads, "unintrusive" or not, are just the visible portions of privacy-invading apparatus entering your browser when you visit most sites nowadays. **uBlock₀'s main goal is to help users neutralize such privacy-invading apparatus** — in a way that welcomes those users who don't wish to use more technical, involved means (such as [µMatrix](https://github.com/gorhill/uMatrix)). +You may easily unselect any preselected filter lists if you think uBO blocks too much. For reference, Adblock Plus installs with only EasyList, ABP filters, and Acceptable Ads enabled by default. -_EasyList_, _Peter Lowe's Adservers_, _EasyPrivacy_ and _Malware domains_ are enabled by default when you install uBlock₀. Many more lists are readily available to block trackers, analytics, and more. Hosts files are also supported. +It is important to note that using a blocker is **NOT** [theft]. Do not fall for this creepy idea. The _ultimate_ logical consequence of `blocking = theft` is the criminalization of the inalienable right to privacy. -Once you install uBlock₀, you may easily un-select any of the pre-selected filter lists if you think uBlock₀ blocks too much. For reference, Adblock Plus installs with only _EasyList_ enabled by default. +Ads, "unintrusive" or not, are just the visible portion of the privacy-invading means entering your browser when you visit most sites. **uBO's primary goal is to help users neutralize these privacy-invading methods** in a way that welcomes those users who do not wish to use more technical means. -## Performance +*** -#### Memory +* [Documentation](#documentation) +* [Installation](#installation) + * [Firefox](#firefox) + * [Thunderbird](#thunderbird) + * [Chromium](#chromium) + * [All Programs](#all-programs) + * [Enterprise Deployment](#enterprise-deployment) +* [Release History](#release-history) +* [Translations](#translations) +* [About](#about) -
-On average, uBlock Origin does make your browser run leaner. [1]

+## Documentation -Chromium
-

+ + + + + + + + + + + + + + + + + +
Basic ModeAdvanced Mode
The simple popup user interface for an install-it-and-forget-it type of installation that is configured optimally by default.The advanced popup user interface includes a point-and-click firewall that is configurable on a per-site basis.
+ +Visit the [Wiki][Wiki] for documentation. + +For support, questions, or help, visit [/r/uBlockOrigin][Reddit]. -Firefox
-

+## Installation -
+[Required Permissions][Permissions] -[1] Details of the benchmark available at Firefox version: benchmarking memory footprint.
+#### Firefox -#### CPU +[Firefox Add-ons][Mozilla] -

-uBlock Origin is also easy on the CPU
-
-Details of the benchmark available in this LibreOffice spreadsheet. -

+[Development Builds][Beta] -#### Blocking +uBO [works best][Works Best] on Firefox and is available for desktop and Android versions. -

-Being lean and efficient doesn't mean blocking less
-
-For details of benchmark, see -uBlock₀ and others: Blocking ads, trackers, malwares. -

+#### Thunderbird -## Installation +[Thunderbird Add-ons][Thunderbird] -Feel free to read [about the extension's required permissions](https://github.com/gorhill/uBlock/wiki/About-the-required-permissions). +In Thunderbird, uBlock Origin does not affect emails, just feeds. #### Chromium -You can install the latest version [manually](https://github.com/gorhill/uBlock/tree/master/dist#install), from the [Chrome Store](https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm), or from the [Opera store](https://addons.opera.com/en-gb/extensions/details/ublock/). - -It is expected that uBlock Origin is compatible with any Chromium-based browsers. +[Chrome Web Store][Chrome] -**Important:** Chromium-based browsers do not relay [websocket connections](https://en.wikipedia.org/wiki/WebSocket) to the extension API. This means websites can use websocket connections to bypass uBO (or any other blocker). This can be remediated by installing uBO's companion extension [uBO-WebSocket](https://github.com/gorhill/uBO-WebSocket). +[Microsoft Edge Add-ons][Edge] (Published by [Nicole Rolls][Nicole Rolls] until version 1.62. Ownership transfer at version 1.64.) -#### Firefox / Firefox for Android +[Opera Add-ons][Opera] -[Firefox Add-ons web site](https://addons.mozilla.org/addon/ublock-origin/). There is also a development version if you want to test uBlock Origin with the latest changes: see [_uBlock Origin Version History_](https://addons.mozilla.org/addon/ublock-origin/versions/beta) +[Development Builds][Chrome Dev] -uBlock Origin is compatible with [SeaMonkey](http://www.seamonkey-project.org/), [Pale Moon](https://www.palemoon.org/), and possibly other browsers based on Firefox. +uBO should be compatible with any Chromium-based browser. -The Firefox version of uBlock Origin has [an extra feature](https://github.com/gorhill/uBlock/wiki/Inline-script-tag-filtering) currently not yet available on Chromium-based browsers -- which feature is of great help to foil attempts by many web sites to circumvent blockers. +#### All Programs -Also of interest: [Deploying uBlock Origin for Firefox with CCK2 and Group Policy](http://decentsecurity.com/ublock-for-firefox-deployment/). +Do **NOT** use uBO with any other content blocker. uBO [performs][Performance] as well as or better than most popular blockers. Other blockers can prevent uBO's privacy or anti-blocker-defusing features from working correctly. -##### Debian/Ubuntu +[Manual Installation][Manual Installation] -Thanks to Debian contributor [Sean Whitton](https://wiki.debian.org/SeanWhitton), users of Debian 9 or later or Ubuntu 16.04 or later may simply -`apt-get install xul-ext-ublock-origin`. +#### Enterprise Deployment -#### Microsoft Edge - -Early development version by [@nikrolls](https://github.com/nikrolls): . - -#### Note for all browsers - -To benefit from uBlock Origin's higher efficiency, it's advised that you don't use other inefficient blockers at the same time (such as AdBlock or Adblock Plus). uBlock₀ will do [as well or better](#blocking) than most popular ad blockers. +[Deploying uBO][Deployment] ## Release History -See the [releases pages](https://github.com/gorhill/uBlock/releases) for a history of releases and highlights for each release. - -## About - -[uBlock Origin's manifesto](MANIFESTO.md). +[Releases Page][Releases] -Free. Open source. For users by users. No donations sought. +## Translations -Without the preset lists of filters, this extension is nothing. So if ever you -really do want to contribute something, think about the people working hard -to maintain the filter lists you are using, which were made available to use by -all for free. +Help translate uBO via [Crowdin][Crowdin]. -You can contribute by helping translate uBlock₀ [on Crowdin](https://crowdin.net/project/ublock). - -## License +## About -[GPLv3](https://github.com/gorhill/uBlock/blob/master/LICENSE.txt). +[Manifesto][Manifesto] + +[Privacy Policy][Privacy Policy] + +[GPLv3 License][License] + +Free. Open-source. For users by users. No donations sought. + +If you ever want to contribute something, think about the people working hard to maintain the filter lists you are using, which are available to use by all for free. + + + + +[Peter Lowe's Blocklist]: https://pgl.yoyo.org/adservers/ +[Malicious Blocklist]: https://gitlab.com/malware-filter/urlhaus-filter#malicious-url-blocklist +[Performance]: https://www.debugbear.com/blog/chrome-extensions-website-performance#the-impact-of-ad-blocking-on-website-performance +[EasyPrivacy]: https://easylist.to/#easyprivacy +[Thunderbird]: https://addons.thunderbird.net/thunderbird/addon/ublock-origin/ +[Chrome Dev]: https://chromewebstore.google.com/detail/ublock-origin-development/cgbcahbpdhpcegmbfconppldiemgcoii +[EasyList]: https://easylist.to/#easylist +[Mozilla]: https://addons.mozilla.org/addon/ublock-origin/ +[Crowdin]: https://crowdin.com/project/ublock +[Chrome]: https://chromewebstore.google.com/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm +[Reddit]: https://www.reddit.com/r/uBlockOrigin/ +[Theft]: https://x.com/LeaVerou/status/518154828166725632 +[Opera]: https://addons.opera.com/extensions/details/ublock/ +[Edge]: https://microsoftedge.microsoft.com/addons/detail/ublock-origin/odfafepnkmbhccpbejgmiehpchacaeak +[NPM]: https://www.npmjs.com/package/@gorhill/ubo-core + +[Manifesto]: MANIFESTO.md +[License]: LICENSE.txt + +[Nicole Rolls]: https://github.com/nicole-ashley + + + +[Manual Installation]: https://github.com/gorhill/uBlock/tree/master/dist#install +[Extended Syntax]: https://github.com/gorhill/uBlock/wiki/Static-filter-syntax#extended-syntax +[Privacy Policy]: https://github.com/gorhill/uBlock/wiki/Privacy-policy +[uBO Filters]: https://github.com/uBlockOrigin/uAssets/tree/master/filters +[Permissions]: https://github.com/gorhill/uBlock/wiki/Permissions +[Commit Rate]: https://github.com/gorhill/uBlock/commits/master +[Works Best]: https://github.com/gorhill/uBlock/wiki/uBlock-Origin-works-best-on-Firefox +[Deployment]: https://github.com/gorhill/uBlock/wiki/Deploying-uBlock-Origin +[Blocking]: https://github.com/gorhill/uBlock/wiki/Blocking-mode +[Releases]: https://github.com/gorhill/uBlock/releases +[Issues]: https://github.com/uBlockOrigin/uBlock-issues/issues +[Beta]: https://github.com/gorhill/uBlock/blob/master/dist/README.md#for-beta-version +[Wiki]: https://github.com/gorhill/uBlock/wiki + + + +[Badge Localization]: https://d322cqt584bo4o.cloudfront.net/ublock/localized.svg +[Badge Commits]: https://img.shields.io/github/commit-activity/m/gorhill/ublock?label=Commits +[Badge Mozilla]: https://img.shields.io/amo/rating/ublock-origin?label=Firefox +[Badge License]: https://img.shields.io/badge/License-GPLv3-blue.svg +[Badge Chrome]: https://img.shields.io/chrome-web-store/rating/cjpalhdlnbpafiamejdnhcphjbkeiagm?label=Chrome +[Badge Edge]: https://img.shields.io/badge/dynamic/json?label=Edge&color=brightgreen&query=%24.averageRating&suffix=%2F%35&url=https%3A%2F%2Fmicrosoftedge.microsoft.com%2Faddons%2Fgetproductdetailsbycrxid%2Fodfafepnkmbhccpbejgmiehpchacaeak +[Badge Issues]: https://img.shields.io/github/issues/uBlockOrigin/uBlock-issues +[Badge NPM]: https://img.shields.io/npm/v/@gorhill/ubo-core diff --git a/REMOVED.md b/REMOVED.md new file mode 100644 index 0000000000000..d63b8645381b7 --- /dev/null +++ b/REMOVED.md @@ -0,0 +1,87 @@ +## Renamed/removed assets + +For convenience, list of commits of renamed/removed assets, so that they can be +more easily found. + +Use the _Before_ link to browse the repo before the rename/removal of assets. + +#### 2022-10-28 + +Removed: + +- ./doc/ + +Git: + +- After: https://github.com/gorhill/uBlock/tree/ba637bb22e48f98383b9f1191a0c30e965475068 +- Commit: https://github.com/gorhill/uBlock/commit/ba637bb22e48f98383b9f1191a0c30e965475068 +- Before: https://github.com/gorhill/uBlock/tree/6c046ed95cd02d023453c66f766159f6410ae7f7 + +#### 2022-05-08 + +Removed: + +- ./src/css/popup.css +- ./src/js/popup.js +- ./src/popup.html + +Git: + +- After: https://github.com/gorhill/uBlock/tree/cef36518edd4d6ca4b3278493cb93329b0833408 +- Commit: https://github.com/gorhill/uBlock/commit/cef36518edd4d6ca4b3278493cb93329b0833408 +- Before: https://github.com/gorhill/uBlock/tree/cef36518edd4d6ca4b3278493cb93329b0833408 + +#### 2021-07-16 + +Moved: + +- ./platform/chromium/ => ./platform/common/ + +Git: + +- After: https://github.com/gorhill/uBlock/tree/a4aced69dc814befcbb57ff1cc04bee307f2c131 +- Commit: https://github.com/gorhill/uBlock/commit/a4aced69dc814befcbb57ff1cc04bee307f2c131 +- Before: https://github.com/gorhill/uBlock/tree/ec7db30b2f4ff492ebc2a87ded28afa74aa50948 + +#### 2019-09-19 + +Removed: + +- ./platform/safari/* + +Git: + +- After: https://github.com/gorhill/uBlock/tree/149b5cf59cc760fa98c9753f4b4ec12d4b884d9a +- Commit: https://github.com/gorhill/uBlock/commit/149b5cf59cc760fa98c9753f4b4ec12d4b884d9a +- Before: https://github.com/gorhill/uBlock/tree/917f3620e0c08b722bbd4d400bca2735d9f6975f + +#### 2014-11-24 + +Moved: + +- ./meta/crx/ => ./platform/chromium/ + +Git: + +- After: https://github.com/gorhill/uBlock/tree/a430e526b6b72182a07cca94822861da7fbdf77b +- Commit: https://github.com/gorhill/uBlock/commit/a430e526b6b72182a07cca94822861da7fbdf77b +- Before: https://github.com/gorhill/uBlock/tree/266f62914fab3a9ae5d01fa808b9e7a68e948777 + +#### 2014-11-09 + +Moved: + +- ./*.html => ./src/ +- ./*.sh => ./tools/ +- ./_locales/ => ./src/_locales/ +- ./assets => ./src/assets/ +- ./css/ => ./src/css/ +- ./img/ => ./src/img/ +- ./js/ => ./src/js/ +- ./lib/ => ./src/lib/ + +Git: + +- After: https://github.com/gorhill/uBlock/tree/5b79bf353647a4dad9d4968d0f246582744f07bc +- Commit: https://github.com/gorhill/uBlock/commit/5b79bf353647a4dad9d4968d0f246582744f07bc +- Before: https://github.com/gorhill/uBlock/tree/96c4e2e2565ffbd7d413ed7721d9610772b03859 diff --git a/assets/assets.dev.json b/assets/assets.dev.json new file mode 100644 index 0000000000000..c76a9d3d64b8d --- /dev/null +++ b/assets/assets.dev.json @@ -0,0 +1,996 @@ +{ + "assets.json": { + "content": "internal", + "updateAfter": 13, + "contentURL": [ + "https://raw.githubusercontent.com/gorhill/uBlock/master/assets/assets.dev.json", + "assets/assets.dev.json" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/ublock/assets.dev.json", + "https://ublockorigin.pages.dev/ublock/assets.dev.json", + "https://cdn.jsdelivr.net/gh/gorhill/uBlock@master/assets/assets.dev.json", + "https://cdn.statically.io/gh/gorhill/uBlock/master/assets/assets.dev.json" + ] + }, + "public_suffix_list.dat": { + "content": "internal", + "updateAfter": 19, + "contentURL": [ + "https://publicsuffix.org/list/public_suffix_list.dat", + "assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat" + ] + }, + "ublock-badlists": { + "content": "internal", + "updateAfter": 29, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/filters/badlists.txt", + "assets/ublock/badlists.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/badlists.txt", + "https://ublockorigin.pages.dev/filters/badlists.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/badlists.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/badlists.txt" + ] + }, + "ublock-filters": { + "content": "filters", + "group": "default", + "parent": "uBlock filters", + "title": "uBlock filters – Ads", + "tags": "ads", + "contentURL": [ + "https://ublockorigin.github.io/uAssets/filters/filters.txt", + "assets/ublock/filters.min.txt", + "assets/ublock/filters.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/filters.min.txt", + "https://ublockorigin.pages.dev/filters/filters.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/filters.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/filters.min.txt" + ], + "patchURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/", + "https://ublockorigin.pages.dev/filters/" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "ublock-badware": { + "content": "filters", + "group": "default", + "parent": "uBlock filters", + "title": "uBlock filters – Badware risks", + "tags": "malware security", + "contentURL": [ + "https://ublockorigin.github.io/uAssets/filters/badware.txt", + "assets/ublock/badware.min.txt", + "assets/ublock/badware.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/badware.min.txt", + "https://ublockorigin.pages.dev/filters/badware.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/badware.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/badware.min.txt" + ], + "patchURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/", + "https://ublockorigin.pages.dev/filters/" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets", + "instructionURL": "https://github.com/gorhill/uBlock/wiki/Badware-risks" + }, + "ublock-privacy": { + "content": "filters", + "group": "default", + "parent": "uBlock filters", + "title": "uBlock filters – Privacy", + "tags": "privacy", + "contentURL": [ + "https://ublockorigin.github.io/uAssets/filters/privacy.txt", + "assets/ublock/privacy.min.txt", + "assets/ublock/privacy.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/privacy.min.txt", + "https://ublockorigin.pages.dev/filters/privacy.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/privacy.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/privacy.min.txt" + ], + "patchURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/", + "https://ublockorigin.pages.dev/filters/" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "ublock-unbreak": { + "content": "filters", + "group": "default", + "parent": "uBlock filters", + "title": "uBlock filters – Unbreak", + "contentURL": [ + "https://ublockorigin.github.io/uAssets/filters/unbreak.txt", + "assets/ublock/unbreak.min.txt", + "assets/ublock/unbreak.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/unbreak.min.txt", + "https://ublockorigin.pages.dev/filters/unbreak.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/unbreak.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/unbreak.min.txt" + ], + "patchURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/", + "https://ublockorigin.pages.dev/filters/" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "ublock-quick-fixes": { + "content": "filters", + "group": "default", + "parent": "uBlock filters", + "title": "uBlock filters – Quick fixes", + "contentURL": [ + "https://ublockorigin.github.io/uAssets/filters/quick-fixes.txt", + "assets/ublock/quick-fixes.min.txt", + "assets/ublock/quick-fixes.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/quick-fixes.min.txt", + "https://ublockorigin.pages.dev/filters/quick-fixes.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/quick-fixes.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/quick-fixes.min.txt" + ], + "patchURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/", + "https://ublockorigin.pages.dev/filters/" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "ublock-experimental": { + "content": "filters", + "group": "default", + "off": true, + "title": "uBlock filters – Experimental", + "contentURL": "https://ublockorigin.github.io/uAssets/filters/experimental.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/experimental.min.txt", + "https://ublockorigin.pages.dev/filters/experimental.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/experimental.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/experimental.min.txt" + ], + "patchURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/", + "https://ublockorigin.pages.dev/filters/" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "adguard-generic": { + "content": "filters", + "group": "ads", + "off": true, + "title": "AdGuard – Ads", + "tags": "ads", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/2_without_easylist.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "adguard-mobile": { + "content": "filters", + "group": "ads", + "off": true, + "title": "AdGuard – Mobile Ads", + "tags": "ads mobile", + "ua": "mobile", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/11.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "easylist": { + "content": "filters", + "group": "ads", + "title": "EasyList", + "tags": "ads", + "preferred": true, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist.txt", + "assets/thirdparties/easylist/easylist.txt" + ], + "cdnURLs": [ + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist.txt" + ], + "patchURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/", + "https://ublockorigin.pages.dev/filters/" + ], + "supportURL": "https://easylist.to/" + }, + "adguard-spyware-url": { + "content": "filters", + "group": "privacy", + "off": true, + "title": "AdGuard/uBO – URL Tracking Protection", + "tags": "privacy", + "contentURL": "https://ublockorigin.github.io/uAssets/filters/privacy-removeparam.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/privacy-removeparam.txt", + "https://ublockorigin.pages.dev/filters/privacy-removeparam.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/privacy-removeparam.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/privacy-removeparam.txt" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "block-lan": { + "content": "filters", + "group": "privacy", + "off": true, + "title": "Block Outsider Intrusion into LAN", + "tags": "privacy security", + "contentURL": "https://ublockorigin.github.io/uAssets/filters/lan-block.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/lan-block.txt", + "https://ublockorigin.pages.dev/filters/lan-block.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/lan-block.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/lan-block.txt" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "easyprivacy": { + "content": "filters", + "group": "privacy", + "title": "EasyPrivacy", + "tags": "privacy", + "preferred": true, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easyprivacy.txt", + "assets/thirdparties/easylist/easyprivacy.txt" + ], + "cdnURLs": [ + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easyprivacy.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easyprivacy.txt", + "https://ublockorigin.pages.dev/thirdparties/easyprivacy.txt" + ], + "patchURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/", + "https://ublockorigin.pages.dev/filters/" + ], + "supportURL": "https://easylist.to/" + }, + "urlhaus-1": { + "content": "filters", + "group": "malware", + "title": "Online Malicious URL Blocklist", + "contentURL": [ + "https://malware-filter.gitlab.io/urlhaus-filter/urlhaus-filter-ag-online.txt", + "assets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt" + ], + "cdnURLs": [ + "https://curbengh.github.io/malware-filter/urlhaus-filter-ag-online.txt", + "https://malware-filter.gitlab.io/urlhaus-filter/urlhaus-filter-ag-online.txt", + "https://malware-filter.pages.dev/urlhaus-filter-ag-online.txt" + ], + "supportURL": "https://gitlab.com/malware-filter/urlhaus-filter#malicious-url-blocklist" + }, + "curben-phishing": { + "content": "filters", + "group": "malware", + "off": true, + "title": "Phishing URL Blocklist", + "contentURL": "https://malware-filter.gitlab.io/phishing-filter/phishing-filter.txt", + "cdnURLs": [ + "https://curbengh.github.io/phishing-filter/phishing-filter.txt", + "https://malware-filter.gitlab.io/phishing-filter/phishing-filter.txt", + "https://phishing-filter.pages.dev/phishing-filter.txt" + ], + "supportURL": "https://gitlab.com/malware-filter/phishing-filter#phishing-url-blocklist" + }, + "adguard-cookies": { + "content": "filters", + "group": "annoyances", + "group2": "cookies", + "parent": "AdGuard/uBO – Cookie Notices", + "off": true, + "title": "AdGuard – Cookie Notices", + "tags": "annoyances cookies", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/18.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "ublock-cookies-adguard": { + "content": "filters", + "group": "annoyances", + "group2": "cookies", + "parent": "AdGuard/uBO – Cookie Notices", + "off": true, + "title": "uBlock filters – Cookie Notices", + "tags": "annoyances cookies", + "contentURL": "https://ublockorigin.github.io/uAssets/filters/annoyances-cookies.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/annoyances-cookies.txt", + "https://ublockorigin.pages.dev/filters/annoyances-cookies.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/annoyances-cookies.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/annoyances-cookies.txt" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "fanboy-cookiemonster": { + "content": "filters", + "group": "annoyances", + "group2": "cookies", + "parent": "EasyList/uBO – Cookie Notices", + "off": true, + "title": "EasyList – Cookie Notices", + "tags": "annoyances cookies", + "preferred": true, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist-cookies.txt", + "https://secure.fanboy.co.nz/fanboy-cookiemonster_ubo.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-cookies.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-cookies.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-cookies.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-cookies.txt", + "https://secure.fanboy.co.nz/fanboy-cookiemonster_ubo.txt" + ], + "supportURL": "https://github.com/easylist/easylist#fanboy-lists" + }, + "ublock-cookies-easylist": { + "content": "filters", + "group": "annoyances", + "group2": "cookies", + "parent": "EasyList/uBO – Cookie Notices", + "off": true, + "title": "uBlock filters – Cookie Notices", + "tags": "annoyances cookies", + "preferred": true, + "contentURL": "https://ublockorigin.github.io/uAssets/filters/annoyances-cookies.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/annoyances-cookies.txt", + "https://ublockorigin.pages.dev/filters/annoyances-cookies.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/annoyances-cookies.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/annoyances-cookies.txt" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "adguard-social": { + "content": "filters", + "group": "annoyances", + "group2": "social", + "parent": null, + "off": true, + "title": "AdGuard – Social Widgets", + "tags": "annoyances social", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/4.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "fanboy-social": { + "content": "filters", + "group": "annoyances", + "group2": "social", + "parent": null, + "off": true, + "title": "EasyList – Social Widgets", + "tags": "annoyances social", + "preferred": true, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist-social.txt", + "https://secure.fanboy.co.nz/fanboy-social_ubo.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-social.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-social.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-social.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-social.txt", + "https://secure.fanboy.co.nz/fanboy-social_ubo.txt" + ], + "supportURL": "https://easylist.to/" + }, + "fanboy-thirdparty_social": { + "content": "filters", + "group": "annoyances", + "group2": "social", + "off": true, + "title": "Fanboy – Anti-Facebook", + "tags": "privacy", + "contentURL": "https://secure.fanboy.co.nz/fanboy-antifacebook.txt", + "supportURL": "https://github.com/ryanbr/fanboy-adblock/issues" + }, + "adguard-popup-overlays": { + "content": "filters", + "group": "annoyances", + "parent": "AdGuard – Annoyances", + "off": true, + "title": "AdGuard – Popup Overlays", + "tags": "annoyances", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/19.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "adguard-mobile-app-banners": { + "content": "filters", + "group": "annoyances", + "parent": "AdGuard – Annoyances", + "off": true, + "title": "AdGuard – Mobile App Banners", + "tags": "annoyances mobile", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/20.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "adguard-other-annoyances": { + "content": "filters", + "group": "annoyances", + "parent": "AdGuard – Annoyances", + "off": true, + "title": "AdGuard – Other Annoyances", + "tags": "annoyances", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/21.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "adguard-widgets": { + "content": "filters", + "group": "annoyances", + "parent": "AdGuard – Annoyances", + "off": true, + "title": "AdGuard – Widgets", + "tags": "annoyances", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/22.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "easylist-annoyances": { + "content": "filters", + "group": "annoyances", + "parent": "EasyList – Annoyances", + "off": true, + "title": "EasyList – Other Annoyances", + "tags": "annoyances", + "preferred": true, + "contentURL": "https://ublockorigin.github.io/uAssets/thirdparties/easylist-annoyances.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-annoyances.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-annoyances.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-annoyances.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-annoyances.txt" + ], + "supportURL": "https://github.com/easylist/easylist#fanboy-lists" + }, + "easylist-chat": { + "content": "filters", + "group": "annoyances", + "parent": "EasyList – Annoyances", + "off": true, + "title": "EasyList – Chat Widgets", + "tags": "annoyances", + "preferred": true, + "contentURL": "https://ublockorigin.github.io/uAssets/thirdparties/easylist-chat.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-chat.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-chat.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-chat.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-chat.txt" + ], + "supportURL": "https://github.com/easylist/easylist#fanboy-lists" + }, + "fanboy-ai-suggestions": { + "content": "filters", + "group": "annoyances", + "parent": "EasyList – Annoyances", + "off": true, + "title": "EasyList – AI Widgets", + "tags": "annoyances", + "preferred": true, + "contentURL": "https://ublockorigin.github.io/uAssets/thirdparties/easylist-ai.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-ai.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-ai.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-ai.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-ai.txt" + ], + "supportURL": "https://github.com/easylist/easylist#fanboy-lists" + }, + "easylist-newsletters": { + "content": "filters", + "group": "annoyances", + "parent": "EasyList – Annoyances", + "off": true, + "title": "EasyList – Newsletter Notices", + "tags": "annoyances", + "preferred": true, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist-newsletters.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-newsletters.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-newsletters.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-newsletters.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-newsletters.txt" + ], + "supportURL": "https://easylist.to/" + }, + "easylist-notifications": { + "content": "filters", + "group": "annoyances", + "parent": "EasyList – Annoyances", + "off": true, + "title": "EasyList – Notifications", + "tags": "annoyances", + "preferred": true, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist-notifications.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-notifications.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-notifications.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-notifications.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-notifications.txt" + ], + "supportURL": "https://easylist.to/" + }, + "ublock-annoyances": { + "content": "filters", + "group": "annoyances", + "off": true, + "title": "uBlock filters – Annoyances", + "tags": "annoyances", + "contentURL": "https://ublockorigin.github.io/uAssets/filters/annoyances.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/annoyances.min.txt", + "https://ublockorigin.pages.dev/filters/annoyances.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/annoyances.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/annoyances.min.txt" + ], + "patchURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/", + "https://ublockorigin.pages.dev/filters/" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "dpollock-0": { + "content": "filters", + "group": "multipurpose", + "updateAfter": 13, + "off": true, + "title": "Dan Pollock’s hosts file", + "tags": "ads privacy security", + "contentURL": "https://someonewhocares.org/hosts/hosts", + "supportURL": "https://someonewhocares.org/hosts/" + }, + "plowe-0": { + "content": "filters", + "group": "multipurpose", + "updateAfter": 13, + "title": "Peter Lowe’s Ad and tracking server list", + "tags": "ads privacy security", + "preferred": true, + "contentURL": [ + "https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext", + "assets/thirdparties/pgl.yoyo.org/as/serverlist.txt", + "assets/thirdparties/pgl.yoyo.org/as/serverlist" + ], + "supportURL": "https://pgl.yoyo.org/adservers/" + }, + "ALB-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇦🇱al 🇽🇰xk: Adblock List for Albania", + "tags": "ads albania shqipja", + "lang": "sq", + "contentURL": "https://raw.githubusercontent.com/AnXh3L0/blocklist/master/albanian-easylist-addition/Albania.txt", + "supportURL": "https://github.com/AnXh3L0/blocklist" + }, + "ara-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇪🇬eg 🇸🇦sa 🇲🇦ma 🇩🇿dz: Liste AR", + "tags": "ads arabic اَلْعَرَبِيَّةُ‎", + "lang": "ar kab", + "contentURL": "https://easylist-downloads.adblockplus.org/Liste_AR.txt", + "supportURL": "https://forums.lanik.us/viewforum.php?f=98" + }, + "BGR-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇧🇬bg: Bulgarian Adblock list", + "tags": "ads bulgarian България macedonian Македонија", + "lang": "bg mk", + "contentURL": "https://stanev.org/abp/adblock_bg.txt", + "supportURL": "https://stanev.org/abp/" + }, + "CHN-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇨🇳cn 🇹🇼tw: AdGuard Chinese (中文)", + "tags": "ads chinese 中文", + "lang": "ug zh", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/224.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "CZE-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇨🇿cz 🇸🇰sk: EasyList Czech and Slovak", + "tags": "ads czech česká slovak slovenská", + "lang": "cs sk", + "contentURL": "https://raw.githubusercontent.com/tomasko126/easylistczechandslovak/master/filters.txt", + "supportURL": "https://github.com/tomasko126/easylistczechandslovak" + }, + "DEU-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇩🇪de 🇨🇭ch 🇦🇹at: EasyList Germany", + "tags": "ads german deutschland luxembourgish lëtzebuerg romansh", + "lang": "de dsb hsb lb rm", + "contentURL": [ + "https://easylist.to/easylistgermany/easylistgermany.txt", + "https://easylist-downloads.adblockplus.org/easylistgermany.txt" + ], + "supportURL": "https://forums.lanik.us/viewforum.php?f=90" + }, + "EST-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇪🇪ee: Eesti saitidele kohandatud filter", + "tags": "ads estonian", + "lang": "et", + "contentURL": "https://ubo-et.lepik.io/list.txt", + "supportURL": "https://github.com/sander85/uBO-et" + }, + "FIN-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇫🇮fi: Adblock List for Finland", + "tags": "ads finnish", + "lang": "fi", + "contentURL": "https://raw.githubusercontent.com/finnish-easylist-addition/finnish-easylist-addition/gh-pages/Finland_adb.txt", + "supportURL": "https://github.com/finnish-easylist-addition/finnish-easylist-addition" + }, + "FRA-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇫🇷fr 🇨🇦ca: AdGuard Français", + "tags": "ads french", + "lang": "ar br ff fr kab lb oc son", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/16.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "GRC-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇬🇷gr 🇨🇾cy: Greek AdBlock Filter", + "tags": "ads greek", + "lang": "el", + "contentURL": "https://www.void.gr/kargig/void-gr-filters.txt", + "supportURL": "https://github.com/kargig/greek-adblockplus-filter" + }, + "HRV-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇭🇷hr 🇷🇸rs: Dandelion Sprout's Serbo-Croatian filters", + "tags": "ads croatian serbian bosnian", + "lang": "bs hr sr", + "contentURL": [ + "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/SerboCroatianList.txt", + "https://cdn.jsdelivr.net/gh/DandelionSprout/adfilt@master/SerboCroatianList.txt", + "https://cdn.statically.io/gl/DandelionSprout/adfilt/master/SerboCroatianList.txt" + ], + "supportURL": "https://github.com/DandelionSprout/adfilt#readme" + }, + "HUN-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇭🇺hu: hufilter", + "tags": "ads hungarian", + "lang": "hu", + "contentURL": "https://cdn.jsdelivr.net/gh/hufilter/hufilter@gh-pages/hufilter-ublock.txt", + "supportURL": "https://github.com/hufilter/hufilter" + }, + "IDN-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇮🇩id 🇲🇾my: ABPindo", + "tags": "ads indonesian malay", + "lang": "id ms", + "contentURL": "https://raw.githubusercontent.com/ABPindo/indonesianadblockrules/master/subscriptions/abpindo.txt", + "supportURL": "https://github.com/ABPindo/indonesianadblockrules" + }, + "IND-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇮🇳in 🇱🇰lk 🇳🇵np: IndianList", + "tags": "ads assamese bengali gujarati hindi kannada malayalam marathi nepali punjabi sinhala tamil telugu", + "lang": "as bn gu hi kn ml mr ne pa sat si ta te", + "contentURL": "https://easylist-downloads.adblockplus.org/indianlist.txt", + "supportURL": "https://github.com/mediumkreation/IndianList" + }, + "IRN-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇮🇷ir: PersianBlocker", + "tags": "ads af ir persian pashto tajik tj", + "lang": "fa ps tg", + "contentURL": [ + "https://raw.githubusercontent.com/MasterKia/PersianBlocker/main/PersianBlocker.txt", + "https://cdn.statically.io/gh/MasterKia/PersianBlocker/main/PersianBlocker.txt" + ], + "cdnURLs": [ + "https://cdn.jsdelivr.net/gh/MasterKia/PersianBlocker@main/PersianBlocker.txt", + "https://cdn.statically.io/gh/MasterKia/PersianBlocker/main/PersianBlocker.txt" + ], + "supportURL": "https://github.com/MasterKia/PersianBlocker" + }, + "ISL-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇮🇸is: Icelandic ABP List", + "tags": "ads icelandic", + "lang": "is", + "contentURL": "https://raw.githubusercontent.com/brave/adblock-lists/master/custom/is.txt", + "supportURL": "https://github.com/brave/adblock-lists/issues" + }, + "ISR-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇮🇱il: EasyList Hebrew", + "tags": "ads hebrew", + "lang": "he", + "contentURL": "https://raw.githubusercontent.com/easylist/EasyListHebrew/master/EasyListHebrew.txt", + "supportURL": "https://github.com/easylist/EasyListHebrew" + }, + "ITA-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇮🇹it: EasyList Italy", + "tags": "ads italian", + "lang": "fur it lij sc", + "contentURL": "https://easylist-downloads.adblockplus.org/easylistitaly.txt", + "supportURL": "https://forums.lanik.us/viewforum.php?f=96" + }, + "JPN-1": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇯🇵jp: AdGuard Japanese", + "tags": "ads japanese 日本語", + "lang": "ja", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/7.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "KOR-1": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇰🇷kr: List-KR", + "tags": "ads korean 한국어", + "lang": "ko", + "contentURL": "https://cdn.jsdelivr.net/gh/List-KR/List-KR@latest/filter-uBlockOrigin.txt", + "supportURL": "https://github.com/List-KR/List-KR#readme" + }, + "LTU-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇱🇹lt: EasyList Lithuania", + "tags": "ads lithuanian", + "lang": "lt", + "contentURL": "https://raw.githubusercontent.com/EasyList-Lithuania/easylist_lithuania/master/easylistlithuania.txt", + "cdnURLs": [ + "https://cdn.jsdelivr.net/gh/EasyList-Lithuania/easylist_lithuania@master/easylistlithuania.txt", + "https://cdn.statically.io/gh/EasyList-Lithuania/easylist_lithuania/master/easylistlithuania.txt" + ], + "supportURL": "https://github.com/EasyList-Lithuania/easylist_lithuania" + }, + "LVA-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇱🇻lv: Latvian List", + "tags": "ads latvian", + "lang": "lv", + "contentURL": "https://raw.githubusercontent.com/Latvian-List/adblock-latvian/master/lists/latvian-list.txt", + "supportURL": "https://github.com/Latvian-List/adblock-latvian" + }, + "MKD-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇲🇰mk: Macedonian adBlock Filters", + "tags": "ads macedonian", + "lang": "mk", + "contentURL": "https://raw.githubusercontent.com/DeepSpaceHarbor/Macedonian-adBlock-Filters/master/Filters", + "supportURL": "https://github.com/DeepSpaceHarbor/Macedonian-adBlock-Filters" + }, + "NLD-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇳🇱nl 🇧🇪be: AdGuard Dutch", + "tags": "ads afrikaans be belgië frisian dutch flemish nederlands netherlands nl sr suriname za", + "lang": "af fy nl", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/8.txt", + "cdnURLs": null, + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "NOR-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇳🇴no 🇩🇰dk 🇮🇸is: Dandelion Sprouts nordiske filtre", + "tags": "ads norwegian danish icelandic", + "lang": "nb nn no da is", + "contentURL": [ + "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/NorwegianList.txt", + "https://cdn.jsdelivr.net/gh/DandelionSprout/adfilt@master/NorwegianList.txt", + "https://cdn.statically.io/gl/DandelionSprout/adfilt/master/NorwegianList.txt" + ], + "supportURL": "https://github.com/DandelionSprout/adfilt" + }, + "POL-0": { + "content": "filters", + "group": "regions", + "parent": "🇵🇱pl: Oficjalne Polskie Filtry", + "off": true, + "title": "🇵🇱pl: Oficjalne Polskie Filtry do uBlocka Origin", + "tags": "ads polish polski", + "lang": "szl pl _", + "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", + "off": true, + "title": "🇷🇴ro 🇲🇩md: Romanian Ad (ROad) Block List Light", + "tags": "ads romanian română moldavian moldovenească молдовеняскэ", + "lang": "ro", + "contentURL": [ + "https://raw.githubusercontent.com/tcptomato/ROad-Block/master/road-block-filters-light.txt" + ], + "supportURL": "https://github.com/tcptomato/ROad-Block" + }, + "RUS-0": { + "content": "filters", + "group": "regions", + "parent": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList", + "off": true, + "title": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList", + "tags": "ads belarusian беларуская kazakh tatar russian русский ukrainian українська uzbek uk", + "lang": "be kk tt ru uz", + "contentURL": "https://raw.githubusercontent.com/easylist/ruadlist/master/RuAdList-uBO.txt", + "cdnURLs": [ + "https://cdn.jsdelivr.net/gh/dimisa-RUAdList/RUAdListCDN@main/lists/ruadlist.ubo.min.txt", + "https://cdn.statically.io/gh/dimisa-RUAdList/RUAdListCDN/main/lists/ruadlist.ubo.min.txt", + "https://raw.githubusercontent.com/dimisa-RUAdList/RUAdListCDN/main/lists/ruadlist.ubo.min.txt" + ], + "supportURL": "https://forums.lanik.us/viewforum.php?f=102", + "instructionURL": "https://forums.lanik.us/viewtopic.php?f=102&t=22512" + }, + "RUS-1": { + "content": "filters", + "group": "regions", + "parent": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList", + "off": true, + "title": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList: Counters", + "tags": "ads belarusian беларуская kazakh tatar russian русский ukrainian українська uzbek be kk tt ru uk uz", + "contentURL": "https://raw.githubusercontent.com/easylist/ruadlist/master/cntblock.txt", + "cdnURLs": [ + "https://cdn.jsdelivr.net/gh/easylist/ruadlist@master/cntblock.txt", + "https://cdn.statically.io/gh/easylist/ruadlist/master/cntblock.txt", + "https://raw.githubusercontent.com/easylist/ruadlist/master/cntblock.txt" + ], + "supportURL": "https://forums.lanik.us/viewforum.php?f=102", + "instructionURL": "https://forums.lanik.us/viewtopic.php?f=102&t=22512" + }, + "spa-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇪🇸es 🇦🇷ar 🇲🇽mx 🇨🇴co: EasyList Spanish", + "tags": "ads aragonese basque catalan spanish español galician guarani", + "lang": "an ast ca cak es eu gl gn trs quz", + "contentURL": "https://easylist-downloads.adblockplus.org/easylistspanish.txt", + "supportURL": "https://forums.lanik.us/viewforum.php?f=103" + }, + "spa-1": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇪🇸es 🇦🇷ar 🇧🇷br 🇵🇹pt: AdGuard Spanish/Portuguese", + "tags": "ads aragonese basque catalan spanish español galician guarani portuguese português", + "lang": "an ast ca cak es eu gl gn trs pt quz", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/9.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "SVN-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇸🇮si: Slovenian List", + "tags": "ads slovenian slovenski", + "lang": "sl", + "contentURL": "https://raw.githubusercontent.com/betterwebleon/slovenian-list/master/filters.txt", + "supportURL": "https://github.com/betterwebleon/slovenian-list" + }, + "SWE-1": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇸🇪se: Frellwit's Swedish Filter", + "tags": "ads swedish svenska", + "lang": "sv", + "contentURL": "https://raw.githubusercontent.com/lassekongo83/Frellwits-filter-lists/master/Frellwits-Swedish-Filter.txt", + "cdnURLs": [ + "https://raw.githubusercontent.com/lassekongo83/Frellwits-filter-lists/swefilter/swefilter.min.txt", + "https://cdn.jsdelivr.net/gh/lassekongo83/Frellwits-filter-lists@swefilter/swefilter.min.txt" + ], + "supportURL": "https://github.com/lassekongo83/Frellwits-filter-lists" + }, + "THA-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇹🇭th: EasyList Thailand", + "tags": "ads thai ไทย", + "lang": "th", + "contentURL": "https://raw.githubusercontent.com/easylist-thailand/easylist-thailand/master/subscription/easylist-thailand.txt", + "supportURL": "https://github.com/easylist-thailand/easylist-thailand" + }, + "TUR-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇹🇷tr: AdGuard Turkish", + "tags": "ads turkish türkçe", + "lang": "tr", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/13.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "UKR-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇺🇦ua: AdGuard Ukrainian", + "tags": "ads ukraine україна", + "lang": "uk", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/23.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "VIE-1": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇻🇳vn: ABPVN List", + "tags": "ads vietnamese việt", + "lang": "vi", + "contentURL": "https://raw.githubusercontent.com/abpvn/abpvn/master/filter/abpvn_ublock.txt", + "supportURL": "https://abpvn.com/" + } +} diff --git a/assets/assets.json b/assets/assets.json new file mode 100644 index 0000000000000..109604af0b5ea --- /dev/null +++ b/assets/assets.json @@ -0,0 +1,996 @@ +{ + "assets.json": { + "content": "internal", + "updateAfter": 13, + "contentURL": [ + "https://raw.githubusercontent.com/gorhill/uBlock/master/assets/assets.json", + "assets/assets.json" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/ublock/assets.json", + "https://ublockorigin.pages.dev/ublock/assets.json", + "https://cdn.jsdelivr.net/gh/gorhill/uBlock@master/assets/assets.json", + "https://cdn.statically.io/gh/gorhill/uBlock/master/assets/assets.json" + ] + }, + "public_suffix_list.dat": { + "content": "internal", + "updateAfter": 19, + "contentURL": [ + "https://publicsuffix.org/list/public_suffix_list.dat", + "assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat" + ] + }, + "ublock-badlists": { + "content": "internal", + "updateAfter": 29, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/filters/badlists.txt", + "assets/ublock/badlists.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/badlists.txt", + "https://ublockorigin.pages.dev/filters/badlists.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/badlists.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/badlists.txt" + ] + }, + "ublock-filters": { + "content": "filters", + "group": "default", + "parent": "uBlock filters", + "title": "uBlock filters – Ads", + "tags": "ads", + "contentURL": [ + "https://ublockorigin.github.io/uAssets/filters/filters.txt", + "assets/ublock/filters.min.txt", + "assets/ublock/filters.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/filters.min.txt", + "https://ublockorigin.pages.dev/filters/filters.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/filters.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/filters.min.txt" + ], + "patchURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/", + "https://ublockorigin.pages.dev/filters/" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "ublock-badware": { + "content": "filters", + "group": "default", + "parent": "uBlock filters", + "title": "uBlock filters – Badware risks", + "tags": "malware security", + "contentURL": [ + "https://ublockorigin.github.io/uAssets/filters/badware.txt", + "assets/ublock/badware.min.txt", + "assets/ublock/badware.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/badware.min.txt", + "https://ublockorigin.pages.dev/filters/badware.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/badware.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/badware.min.txt" + ], + "patchURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/", + "https://ublockorigin.pages.dev/filters/" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets", + "instructionURL": "https://github.com/gorhill/uBlock/wiki/Badware-risks" + }, + "ublock-privacy": { + "content": "filters", + "group": "default", + "parent": "uBlock filters", + "title": "uBlock filters – Privacy", + "tags": "privacy", + "contentURL": [ + "https://ublockorigin.github.io/uAssets/filters/privacy.txt", + "assets/ublock/privacy.min.txt", + "assets/ublock/privacy.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/privacy.min.txt", + "https://ublockorigin.pages.dev/filters/privacy.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/privacy.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/privacy.min.txt" + ], + "patchURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/", + "https://ublockorigin.pages.dev/filters/" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "ublock-unbreak": { + "content": "filters", + "group": "default", + "parent": "uBlock filters", + "title": "uBlock filters – Unbreak", + "contentURL": [ + "https://ublockorigin.github.io/uAssets/filters/unbreak.txt", + "assets/ublock/unbreak.min.txt", + "assets/ublock/unbreak.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/unbreak.min.txt", + "https://ublockorigin.pages.dev/filters/unbreak.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/unbreak.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/unbreak.min.txt" + ], + "patchURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/", + "https://ublockorigin.pages.dev/filters/" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "ublock-quick-fixes": { + "content": "filters", + "group": "default", + "parent": "uBlock filters", + "title": "uBlock filters – Quick fixes", + "contentURL": [ + "https://ublockorigin.github.io/uAssets/filters/quick-fixes.txt", + "assets/ublock/quick-fixes.min.txt", + "assets/ublock/quick-fixes.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/quick-fixes.min.txt", + "https://ublockorigin.pages.dev/filters/quick-fixes.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/quick-fixes.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/quick-fixes.min.txt" + ], + "patchURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/", + "https://ublockorigin.pages.dev/filters/" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "ublock-experimental": { + "content": "filters", + "group": "default", + "off": true, + "title": "uBlock filters – Experimental", + "contentURL": "https://ublockorigin.github.io/uAssets/filters/experimental.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/experimental.min.txt", + "https://ublockorigin.pages.dev/filters/experimental.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/experimental.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/experimental.min.txt" + ], + "patchURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/", + "https://ublockorigin.pages.dev/filters/" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "adguard-generic": { + "content": "filters", + "group": "ads", + "off": true, + "title": "AdGuard – Ads", + "tags": "ads", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/2_without_easylist.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "adguard-mobile": { + "content": "filters", + "group": "ads", + "off": true, + "title": "AdGuard – Mobile Ads", + "tags": "ads mobile", + "ua": "mobile", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/11.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "easylist": { + "content": "filters", + "group": "ads", + "title": "EasyList", + "tags": "ads", + "preferred": true, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist.txt", + "assets/thirdparties/easylist/easylist.txt" + ], + "cdnURLs": [ + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist.txt" + ], + "patchURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/", + "https://ublockorigin.pages.dev/filters/" + ], + "supportURL": "https://easylist.to/" + }, + "adguard-spyware-url": { + "content": "filters", + "group": "privacy", + "off": true, + "title": "AdGuard/uBO – URL Tracking Protection", + "tags": "privacy", + "contentURL": "https://ublockorigin.github.io/uAssets/filters/privacy-removeparam.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/privacy-removeparam.txt", + "https://ublockorigin.pages.dev/filters/privacy-removeparam.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/privacy-removeparam.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/privacy-removeparam.txt" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "block-lan": { + "content": "filters", + "group": "privacy", + "off": true, + "title": "Block Outsider Intrusion into LAN", + "tags": "privacy security", + "contentURL": "https://ublockorigin.github.io/uAssets/filters/lan-block.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/lan-block.txt", + "https://ublockorigin.pages.dev/filters/lan-block.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/lan-block.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/lan-block.txt" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "easyprivacy": { + "content": "filters", + "group": "privacy", + "title": "EasyPrivacy", + "tags": "privacy", + "preferred": true, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easyprivacy.txt", + "assets/thirdparties/easylist/easyprivacy.txt" + ], + "cdnURLs": [ + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easyprivacy.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easyprivacy.txt", + "https://ublockorigin.pages.dev/thirdparties/easyprivacy.txt" + ], + "patchURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/", + "https://ublockorigin.pages.dev/filters/" + ], + "supportURL": "https://easylist.to/" + }, + "urlhaus-1": { + "content": "filters", + "group": "malware", + "title": "Online Malicious URL Blocklist", + "contentURL": [ + "https://malware-filter.gitlab.io/urlhaus-filter/urlhaus-filter-ag-online.txt", + "assets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt" + ], + "cdnURLs": [ + "https://curbengh.github.io/malware-filter/urlhaus-filter-ag-online.txt", + "https://malware-filter.gitlab.io/urlhaus-filter/urlhaus-filter-ag-online.txt", + "https://malware-filter.pages.dev/urlhaus-filter-ag-online.txt" + ], + "supportURL": "https://gitlab.com/malware-filter/urlhaus-filter#malicious-url-blocklist" + }, + "curben-phishing": { + "content": "filters", + "group": "malware", + "off": true, + "title": "Phishing URL Blocklist", + "contentURL": "https://malware-filter.gitlab.io/phishing-filter/phishing-filter.txt", + "cdnURLs": [ + "https://curbengh.github.io/phishing-filter/phishing-filter.txt", + "https://malware-filter.gitlab.io/phishing-filter/phishing-filter.txt", + "https://phishing-filter.pages.dev/phishing-filter.txt" + ], + "supportURL": "https://gitlab.com/malware-filter/phishing-filter#phishing-url-blocklist" + }, + "adguard-cookies": { + "content": "filters", + "group": "annoyances", + "group2": "cookies", + "parent": "AdGuard/uBO – Cookie Notices", + "off": true, + "title": "AdGuard – Cookie Notices", + "tags": "annoyances cookies", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/18.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "ublock-cookies-adguard": { + "content": "filters", + "group": "annoyances", + "group2": "cookies", + "parent": "AdGuard/uBO – Cookie Notices", + "off": true, + "title": "uBlock filters – Cookie Notices", + "tags": "annoyances cookies", + "contentURL": "https://ublockorigin.github.io/uAssets/filters/annoyances-cookies.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/annoyances-cookies.txt", + "https://ublockorigin.pages.dev/filters/annoyances-cookies.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/annoyances-cookies.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/annoyances-cookies.txt" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "fanboy-cookiemonster": { + "content": "filters", + "group": "annoyances", + "group2": "cookies", + "parent": "EasyList/uBO – Cookie Notices", + "off": true, + "title": "EasyList – Cookie Notices", + "tags": "annoyances cookies", + "preferred": true, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist-cookies.txt", + "https://secure.fanboy.co.nz/fanboy-cookiemonster_ubo.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-cookies.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-cookies.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-cookies.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-cookies.txt", + "https://secure.fanboy.co.nz/fanboy-cookiemonster_ubo.txt" + ], + "supportURL": "https://github.com/easylist/easylist#fanboy-lists" + }, + "ublock-cookies-easylist": { + "content": "filters", + "group": "annoyances", + "group2": "cookies", + "parent": "EasyList/uBO – Cookie Notices", + "off": true, + "title": "uBlock filters – Cookie Notices", + "tags": "annoyances cookies", + "preferred": true, + "contentURL": "https://ublockorigin.github.io/uAssets/filters/annoyances-cookies.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/annoyances-cookies.txt", + "https://ublockorigin.pages.dev/filters/annoyances-cookies.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/annoyances-cookies.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/annoyances-cookies.txt" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "adguard-social": { + "content": "filters", + "group": "annoyances", + "group2": "social", + "parent": null, + "off": true, + "title": "AdGuard – Social Widgets", + "tags": "annoyances social", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/4.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "fanboy-social": { + "content": "filters", + "group": "annoyances", + "group2": "social", + "parent": null, + "off": true, + "title": "EasyList – Social Widgets", + "tags": "annoyances social", + "preferred": true, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist-social.txt", + "https://secure.fanboy.co.nz/fanboy-social_ubo.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-social.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-social.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-social.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-social.txt", + "https://secure.fanboy.co.nz/fanboy-social_ubo.txt" + ], + "supportURL": "https://easylist.to/" + }, + "fanboy-thirdparty_social": { + "content": "filters", + "group": "annoyances", + "group2": "social", + "off": true, + "title": "Fanboy – Anti-Facebook", + "tags": "privacy", + "contentURL": "https://secure.fanboy.co.nz/fanboy-antifacebook.txt", + "supportURL": "https://github.com/ryanbr/fanboy-adblock/issues" + }, + "adguard-popup-overlays": { + "content": "filters", + "group": "annoyances", + "parent": "AdGuard – Annoyances", + "off": true, + "title": "AdGuard – Popup Overlays", + "tags": "annoyances", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/19.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "adguard-mobile-app-banners": { + "content": "filters", + "group": "annoyances", + "parent": "AdGuard – Annoyances", + "off": true, + "title": "AdGuard – Mobile App Banners", + "tags": "annoyances mobile", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/20.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "adguard-other-annoyances": { + "content": "filters", + "group": "annoyances", + "parent": "AdGuard – Annoyances", + "off": true, + "title": "AdGuard – Other Annoyances", + "tags": "annoyances", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/21.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "adguard-widgets": { + "content": "filters", + "group": "annoyances", + "parent": "AdGuard – Annoyances", + "off": true, + "title": "AdGuard – Widgets", + "tags": "annoyances", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/22.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "easylist-annoyances": { + "content": "filters", + "group": "annoyances", + "parent": "EasyList – Annoyances", + "off": true, + "title": "EasyList – Other Annoyances", + "tags": "annoyances", + "preferred": true, + "contentURL": "https://ublockorigin.github.io/uAssets/thirdparties/easylist-annoyances.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-annoyances.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-annoyances.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-annoyances.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-annoyances.txt" + ], + "supportURL": "https://github.com/easylist/easylist#fanboy-lists" + }, + "easylist-chat": { + "content": "filters", + "group": "annoyances", + "parent": "EasyList – Annoyances", + "off": true, + "title": "EasyList – Chat Widgets", + "tags": "annoyances", + "preferred": true, + "contentURL": "https://ublockorigin.github.io/uAssets/thirdparties/easylist-chat.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-chat.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-chat.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-chat.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-chat.txt" + ], + "supportURL": "https://github.com/easylist/easylist#fanboy-lists" + }, + "fanboy-ai-suggestions": { + "content": "filters", + "group": "annoyances", + "parent": "EasyList – Annoyances", + "off": true, + "title": "EasyList – AI Widgets", + "tags": "annoyances", + "preferred": true, + "contentURL": "https://ublockorigin.github.io/uAssets/thirdparties/easylist-ai.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-ai.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-ai.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-ai.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-ai.txt" + ], + "supportURL": "https://github.com/easylist/easylist#fanboy-lists" + }, + "easylist-newsletters": { + "content": "filters", + "group": "annoyances", + "parent": "EasyList – Annoyances", + "off": true, + "title": "EasyList – Newsletter Notices", + "tags": "annoyances", + "preferred": true, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist-newsletters.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-newsletters.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-newsletters.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-newsletters.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-newsletters.txt" + ], + "supportURL": "https://easylist.to/" + }, + "easylist-notifications": { + "content": "filters", + "group": "annoyances", + "parent": "EasyList – Annoyances", + "off": true, + "title": "EasyList – Notifications", + "tags": "annoyances", + "preferred": true, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist-notifications.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-notifications.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-notifications.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-notifications.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-notifications.txt" + ], + "supportURL": "https://easylist.to/" + }, + "ublock-annoyances": { + "content": "filters", + "group": "annoyances", + "off": true, + "title": "uBlock filters – Annoyances", + "tags": "annoyances", + "contentURL": "https://ublockorigin.github.io/uAssets/filters/annoyances.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/annoyances.min.txt", + "https://ublockorigin.pages.dev/filters/annoyances.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/annoyances.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/annoyances.min.txt" + ], + "patchURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/", + "https://ublockorigin.pages.dev/filters/" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "dpollock-0": { + "content": "filters", + "group": "multipurpose", + "updateAfter": 13, + "off": true, + "title": "Dan Pollock’s hosts file", + "tags": "ads privacy security", + "contentURL": "https://someonewhocares.org/hosts/hosts", + "supportURL": "https://someonewhocares.org/hosts/" + }, + "plowe-0": { + "content": "filters", + "group": "multipurpose", + "updateAfter": 13, + "title": "Peter Lowe’s Ad and tracking server list", + "tags": "ads privacy security", + "preferred": true, + "contentURL": [ + "https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext", + "assets/thirdparties/pgl.yoyo.org/as/serverlist.txt", + "assets/thirdparties/pgl.yoyo.org/as/serverlist" + ], + "supportURL": "https://pgl.yoyo.org/adservers/" + }, + "ALB-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇦🇱al 🇽🇰xk: Adblock List for Albania", + "tags": "ads albania shqipja", + "lang": "sq", + "contentURL": "https://raw.githubusercontent.com/AnXh3L0/blocklist/master/albanian-easylist-addition/Albania.txt", + "supportURL": "https://github.com/AnXh3L0/blocklist" + }, + "ara-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇪🇬eg 🇸🇦sa 🇲🇦ma 🇩🇿dz: Liste AR", + "tags": "ads arabic اَلْعَرَبِيَّةُ‎", + "lang": "ar kab", + "contentURL": "https://easylist-downloads.adblockplus.org/Liste_AR.txt", + "supportURL": "https://forums.lanik.us/viewforum.php?f=98" + }, + "BGR-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇧🇬bg: Bulgarian Adblock list", + "tags": "ads bulgarian България macedonian Македонија", + "lang": "bg mk", + "contentURL": "https://stanev.org/abp/adblock_bg.txt", + "supportURL": "https://stanev.org/abp/" + }, + "CHN-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇨🇳cn 🇹🇼tw: AdGuard Chinese (中文)", + "tags": "ads chinese 中文", + "lang": "ug zh", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/224.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "CZE-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇨🇿cz 🇸🇰sk: EasyList Czech and Slovak", + "tags": "ads czech česká slovak slovenská", + "lang": "cs sk", + "contentURL": "https://raw.githubusercontent.com/tomasko126/easylistczechandslovak/master/filters.txt", + "supportURL": "https://github.com/tomasko126/easylistczechandslovak" + }, + "DEU-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇩🇪de 🇨🇭ch 🇦🇹at: EasyList Germany", + "tags": "ads german deutschland luxembourgish lëtzebuerg romansh", + "lang": "de dsb hsb lb rm", + "contentURL": [ + "https://easylist.to/easylistgermany/easylistgermany.txt", + "https://easylist-downloads.adblockplus.org/easylistgermany.txt" + ], + "supportURL": "https://forums.lanik.us/viewforum.php?f=90" + }, + "EST-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇪🇪ee: Eesti saitidele kohandatud filter", + "tags": "ads estonian", + "lang": "et", + "contentURL": "https://ubo-et.lepik.io/list.txt", + "supportURL": "https://github.com/sander85/uBO-et" + }, + "FIN-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇫🇮fi: Adblock List for Finland", + "tags": "ads finnish", + "lang": "fi", + "contentURL": "https://raw.githubusercontent.com/finnish-easylist-addition/finnish-easylist-addition/gh-pages/Finland_adb.txt", + "supportURL": "https://github.com/finnish-easylist-addition/finnish-easylist-addition" + }, + "FRA-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇫🇷fr 🇨🇦ca: AdGuard Français", + "tags": "ads french", + "lang": "ar br ff fr kab lb oc son", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/16.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "GRC-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇬🇷gr 🇨🇾cy: Greek AdBlock Filter", + "tags": "ads greek", + "lang": "el", + "contentURL": "https://www.void.gr/kargig/void-gr-filters.txt", + "supportURL": "https://github.com/kargig/greek-adblockplus-filter" + }, + "HRV-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇭🇷hr 🇷🇸rs: Dandelion Sprout's Serbo-Croatian filters", + "tags": "ads croatian serbian bosnian", + "lang": "bs hr sr", + "contentURL": [ + "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/SerboCroatianList.txt", + "https://cdn.jsdelivr.net/gh/DandelionSprout/adfilt@master/SerboCroatianList.txt", + "https://cdn.statically.io/gl/DandelionSprout/adfilt/master/SerboCroatianList.txt" + ], + "supportURL": "https://github.com/DandelionSprout/adfilt#readme" + }, + "HUN-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇭🇺hu: hufilter", + "tags": "ads hungarian", + "lang": "hu", + "contentURL": "https://cdn.jsdelivr.net/gh/hufilter/hufilter@gh-pages/hufilter-ublock.txt", + "supportURL": "https://github.com/hufilter/hufilter" + }, + "IDN-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇮🇩id 🇲🇾my: ABPindo", + "tags": "ads indonesian malay", + "lang": "id ms", + "contentURL": "https://raw.githubusercontent.com/ABPindo/indonesianadblockrules/master/subscriptions/abpindo.txt", + "supportURL": "https://github.com/ABPindo/indonesianadblockrules" + }, + "IND-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇮🇳in 🇱🇰lk 🇳🇵np: IndianList", + "tags": "ads assamese bengali gujarati hindi kannada malayalam marathi nepali punjabi sinhala tamil telugu", + "lang": "as bn gu hi kn ml mr ne pa sat si ta te", + "contentURL": "https://easylist-downloads.adblockplus.org/indianlist.txt", + "supportURL": "https://github.com/mediumkreation/IndianList" + }, + "IRN-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇮🇷ir: PersianBlocker", + "tags": "ads af ir persian pashto tajik tj", + "lang": "fa ps tg", + "contentURL": [ + "https://raw.githubusercontent.com/MasterKia/PersianBlocker/main/PersianBlocker.txt", + "https://cdn.statically.io/gh/MasterKia/PersianBlocker/main/PersianBlocker.txt" + ], + "cdnURLs": [ + "https://cdn.jsdelivr.net/gh/MasterKia/PersianBlocker@main/PersianBlocker.txt", + "https://cdn.statically.io/gh/MasterKia/PersianBlocker/main/PersianBlocker.txt" + ], + "supportURL": "https://github.com/MasterKia/PersianBlocker" + }, + "ISL-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇮🇸is: Icelandic ABP List", + "tags": "ads icelandic", + "lang": "is", + "contentURL": "https://raw.githubusercontent.com/brave/adblock-lists/master/custom/is.txt", + "supportURL": "https://github.com/brave/adblock-lists/issues" + }, + "ISR-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇮🇱il: EasyList Hebrew", + "tags": "ads hebrew", + "lang": "he", + "contentURL": "https://raw.githubusercontent.com/easylist/EasyListHebrew/master/EasyListHebrew.txt", + "supportURL": "https://github.com/easylist/EasyListHebrew" + }, + "ITA-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇮🇹it: EasyList Italy", + "tags": "ads italian", + "lang": "fur it lij sc", + "contentURL": "https://easylist-downloads.adblockplus.org/easylistitaly.txt", + "supportURL": "https://forums.lanik.us/viewforum.php?f=96" + }, + "JPN-1": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇯🇵jp: AdGuard Japanese", + "tags": "ads japanese 日本語", + "lang": "ja", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/7.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "KOR-1": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇰🇷kr: List-KR", + "tags": "ads korean 한국어", + "lang": "ko", + "contentURL": "https://cdn.jsdelivr.net/gh/List-KR/List-KR@latest/filter-uBlockOrigin.txt", + "supportURL": "https://github.com/List-KR/List-KR#readme" + }, + "LTU-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇱🇹lt: EasyList Lithuania", + "tags": "ads lithuanian", + "lang": "lt", + "contentURL": "https://raw.githubusercontent.com/EasyList-Lithuania/easylist_lithuania/master/easylistlithuania.txt", + "cdnURLs": [ + "https://cdn.jsdelivr.net/gh/EasyList-Lithuania/easylist_lithuania@master/easylistlithuania.txt", + "https://cdn.statically.io/gh/EasyList-Lithuania/easylist_lithuania/master/easylistlithuania.txt" + ], + "supportURL": "https://github.com/EasyList-Lithuania/easylist_lithuania" + }, + "LVA-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇱🇻lv: Latvian List", + "tags": "ads latvian", + "lang": "lv", + "contentURL": "https://raw.githubusercontent.com/Latvian-List/adblock-latvian/master/lists/latvian-list.txt", + "supportURL": "https://github.com/Latvian-List/adblock-latvian" + }, + "MKD-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇲🇰mk: Macedonian adBlock Filters", + "tags": "ads macedonian", + "lang": "mk", + "contentURL": "https://raw.githubusercontent.com/DeepSpaceHarbor/Macedonian-adBlock-Filters/master/Filters", + "supportURL": "https://github.com/DeepSpaceHarbor/Macedonian-adBlock-Filters" + }, + "NLD-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇳🇱nl 🇧🇪be: AdGuard Dutch", + "tags": "ads afrikaans be belgië frisian dutch flemish nederlands netherlands nl sr suriname za", + "lang": "af fy nl", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/8.txt", + "cdnURLs": null, + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "NOR-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇳🇴no 🇩🇰dk 🇮🇸is: Dandelion Sprouts nordiske filtre", + "tags": "ads norwegian danish icelandic", + "lang": "nb nn no da is", + "contentURL": [ + "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/NorwegianList.txt", + "https://cdn.jsdelivr.net/gh/DandelionSprout/adfilt@master/NorwegianList.txt", + "https://cdn.statically.io/gl/DandelionSprout/adfilt/master/NorwegianList.txt" + ], + "supportURL": "https://github.com/DandelionSprout/adfilt" + }, + "POL-0": { + "content": "filters", + "group": "regions", + "parent": "🇵🇱pl: Oficjalne Polskie Filtry", + "off": true, + "title": "🇵🇱pl: Oficjalne Polskie Filtry do uBlocka Origin", + "tags": "ads polish polski", + "lang": "szl pl _", + "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", + "off": true, + "title": "🇷🇴ro 🇲🇩md: Romanian Ad (ROad) Block List Light", + "tags": "ads romanian română moldavian moldovenească молдовеняскэ", + "lang": "ro", + "contentURL": [ + "https://raw.githubusercontent.com/tcptomato/ROad-Block/master/road-block-filters-light.txt" + ], + "supportURL": "https://github.com/tcptomato/ROad-Block" + }, + "RUS-0": { + "content": "filters", + "group": "regions", + "parent": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList", + "off": true, + "title": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList", + "tags": "ads belarusian беларуская kazakh tatar russian русский ukrainian українська uzbek uk", + "lang": "be kk tt ru uz", + "contentURL": "https://raw.githubusercontent.com/easylist/ruadlist/master/RuAdList-uBO.txt", + "cdnURLs": [ + "https://cdn.jsdelivr.net/gh/dimisa-RUAdList/RUAdListCDN@main/lists/ruadlist.ubo.min.txt", + "https://cdn.statically.io/gh/dimisa-RUAdList/RUAdListCDN/main/lists/ruadlist.ubo.min.txt", + "https://raw.githubusercontent.com/dimisa-RUAdList/RUAdListCDN/main/lists/ruadlist.ubo.min.txt" + ], + "supportURL": "https://forums.lanik.us/viewforum.php?f=102", + "instructionURL": "https://forums.lanik.us/viewtopic.php?f=102&t=22512" + }, + "RUS-1": { + "content": "filters", + "group": "regions", + "parent": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList", + "off": true, + "title": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList: Counters", + "tags": "ads belarusian беларуская kazakh tatar russian русский ukrainian українська uzbek be kk tt ru uk uz", + "contentURL": "https://raw.githubusercontent.com/easylist/ruadlist/master/cntblock.txt", + "cdnURLs": [ + "https://cdn.jsdelivr.net/gh/easylist/ruadlist@master/cntblock.txt", + "https://cdn.statically.io/gh/easylist/ruadlist/master/cntblock.txt", + "https://raw.githubusercontent.com/easylist/ruadlist/master/cntblock.txt" + ], + "supportURL": "https://forums.lanik.us/viewforum.php?f=102", + "instructionURL": "https://forums.lanik.us/viewtopic.php?f=102&t=22512" + }, + "spa-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇪🇸es 🇦🇷ar 🇲🇽mx 🇨🇴co: EasyList Spanish", + "tags": "ads aragonese basque catalan spanish español galician guarani", + "lang": "an ast ca cak es eu gl gn trs quz", + "contentURL": "https://easylist-downloads.adblockplus.org/easylistspanish.txt", + "supportURL": "https://forums.lanik.us/viewforum.php?f=103" + }, + "spa-1": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇪🇸es 🇦🇷ar 🇧🇷br 🇵🇹pt: AdGuard Spanish/Portuguese", + "tags": "ads aragonese basque catalan spanish español galician guarani portuguese português", + "lang": "an ast ca cak es eu gl gn trs pt quz", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/9.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "SVN-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇸🇮si: Slovenian List", + "tags": "ads slovenian slovenski", + "lang": "sl", + "contentURL": "https://raw.githubusercontent.com/betterwebleon/slovenian-list/master/filters.txt", + "supportURL": "https://github.com/betterwebleon/slovenian-list" + }, + "SWE-1": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇸🇪se: Frellwit's Swedish Filter", + "tags": "ads swedish svenska", + "lang": "sv", + "contentURL": "https://raw.githubusercontent.com/lassekongo83/Frellwits-filter-lists/master/Frellwits-Swedish-Filter.txt", + "cdnURLs": [ + "https://raw.githubusercontent.com/lassekongo83/Frellwits-filter-lists/swefilter/swefilter.min.txt", + "https://cdn.jsdelivr.net/gh/lassekongo83/Frellwits-filter-lists@swefilter/swefilter.min.txt" + ], + "supportURL": "https://github.com/lassekongo83/Frellwits-filter-lists" + }, + "THA-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇹🇭th: EasyList Thailand", + "tags": "ads thai ไทย", + "lang": "th", + "contentURL": "https://raw.githubusercontent.com/easylist-thailand/easylist-thailand/master/subscription/easylist-thailand.txt", + "supportURL": "https://github.com/easylist-thailand/easylist-thailand" + }, + "TUR-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇹🇷tr: AdGuard Turkish", + "tags": "ads turkish türkçe", + "lang": "tr", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/13.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "UKR-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇺🇦ua: AdGuard Ukrainian", + "tags": "ads ukraine україна", + "lang": "uk", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/23.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "VIE-1": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇻🇳vn: ABPVN List", + "tags": "ads vietnamese việt", + "lang": "vi", + "contentURL": "https://raw.githubusercontent.com/abpvn/abpvn/master/filter/abpvn_ublock.txt", + "supportURL": "https://abpvn.com/" + } +} diff --git a/assets/ublock/filter-lists.json b/assets/ublock/filter-lists.json deleted file mode 100644 index 178934a43e138..0000000000000 --- a/assets/ublock/filter-lists.json +++ /dev/null @@ -1,369 +0,0 @@ -{ - "http://adblock.gardar.net/is.abp.txt": { - "off": true, - "title": "ISL: Icelandic ABP List", - "group": "regions", - "lang": "is", - "supportURL": "http://adblock.gardar.net/" - }, - "https://adblock.dk/block.csv": { - "off": true, - "title": "DNK: Schacks Adblock Plus liste", - "group": "regions", - "lang": "da", - "supportURL": "https://henrik.schack.dk/adblock/" - }, - "https://dl.dropboxusercontent.com/u/1289327/abpxfiles/filtri.txt": { - "off": true, - "title": "ITA: ABP X Files", - "group": "regions", - "supportURL": "http://noads.it/" - }, - "https://adguard.com/en/filter-rules.html?id=1": { - "off": true, - "title": "RUS: Adguard Russian Filter", - "group": "regions", - "supportURL": "http://forum.adguard.com/forumdisplay.php?69-%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D1%8B-Adguard" - }, - "https://easylist-downloads.adblockplus.org/advblock.txt": { - "off": true, - "title": "RUS: RU AdList (Дополнительная региональная подписка)", - "group": "regions", - "lang": "ru", - "supportURL": "https://forums.lanik.us/viewforum.php?f=102" - }, - "https://easylist-downloads.adblockplus.org/bitblock.txt": { - "off": true, - "title": "RUS: BitBlock List (Дополнительная подписка фильтров)", - "group": "regions", - "supportURL": "https://forums.lanik.us/viewforum.php?f=102" - }, - "easylist-downloads.adblockplus.org/easylist.txt": { - "title": "EasyList", - "group": "ads", - "homeURL": "https://easylist.to/easylist/easylist.txt", - "supportURL": "https://forums.lanik.us/" - }, - "https://easylist-downloads.adblockplus.org/easylist_noelemhide.txt": { - "off": true, - "title": "EasyList without element hiding rules", - "group": "ads", - "supportURL": "https://forums.lanik.us/" - }, - "https://easylist-downloads.adblockplus.org/easylistchina.txt": { - "off": true, - "title": "CHN: EasyList China (中文)", - "group": "regions", - "lang": "zh", - "supportURL": "http://abpchina.org/forum/forum.php" - }, - "https://raw.githubusercontent.com/cjx82630/cjxlist/master/cjxlist.txt": { - "off": true, - "title": "CHN: CJX's EasyList Lite (main focus on Chinese sites)", - "group": "regions", - "supportURL": "https://github.com/cjx82630/cjxlist" - }, - "https://raw.githubusercontent.com/cjx82630/cjxlist/master/cjx-annoyance.txt": { - "off": true, - "title": "CHN: CJX's Annoyance List", - "group": "regions", - "supportURL": "https://github.com/cjx82630/cjxlist" - }, - "https://easylist-downloads.adblockplus.org/easylistdutch.txt": { - "off": true, - "title": "NLD: EasyList Dutch", - "group": "regions", - "lang": "nl", - "supportURL": "https://forums.lanik.us/viewforum.php?f=100" - }, - "https://easylist-downloads.adblockplus.org/easylistgermany.txt": { - "off": true, - "title": "DEU: EasyList Germany", - "group": "regions", - "lang": "de", - "supportURL": "https://forums.lanik.us/viewforum.php?f=90" - }, - "https://easylist-downloads.adblockplus.org/easylistitaly.txt": { - "off": true, - "title": "ITA: EasyList Italy", - "group": "regions", - "lang": "it", - "supportURL": "https://forums.lanik.us/viewforum.php?f=96" - }, - "easylist-downloads.adblockplus.org/easyprivacy.txt": { - "title": "EasyPrivacy", - "group": "privacy", - "homeURL": "https://easylist.to/easylist/easyprivacy.txt", - "supportURL": "https://forums.lanik.us/" - }, - "https://easylist-downloads.adblockplus.org/fanboy-annoyance.txt": { - "off": true, - "title": "Fanboy’s Annoyance List", - "group": "social", - "supportURL": "https://forums.lanik.us/" - }, - "https://easylist-downloads.adblockplus.org/fanboy-social.txt": { - "off": true, - "title": "Fanboy’s Social Blocking List", - "group": "social", - "supportURL": "https://forums.lanik.us/" - }, - "https://easylist-downloads.adblockplus.org/liste_fr.txt": { - "off": true, - "title": "FRA: EasyList Liste FR", - "group": "regions", - "lang": "fr", - "supportURL": "https://forums.lanik.us/viewforum.php?f=91" - }, - "https://notabug.org/latvian-list/adblock-latvian/raw/master/lists/latvian-list.txt": { - "off": true, - "title": "LVA: Latvian List", - "group": "regions", - "lang": "lv", - "supportURL": "https://notabug.org/latvian-list/adblock-latvian" - }, - "http://hosts-file.net/.%5Cad_servers.txt": { - "off": true, - "title": "hpHosts’ Ad and tracking servers", - "group": "multipurpose", - "supportURL": "http://hosts-file.net/" - }, - "http://adblock.ee/list.php": { - "off": true, - "title": "EST: Eesti saitidele kohandatud filter", - "group": "regions", - "lang": "et", - "supportURL": "http://adblock.ee/" - }, - "https://s3.amazonaws.com/lists.disconnect.me/simple_malvertising.txt": { - "off": true, - "title": "Malvertising filter list by Disconnect", - "group": "malware" - }, - "https://s3.amazonaws.com/lists.disconnect.me/simple_malware.txt": { - "off": true, - "title": "Malware filter list by Disconnect", - "group": "malware" - }, - "https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt": { - "off": true, - "title": "Basic tracking list by Disconnect", - "group": "privacy" - }, - "https://www.certyficate.it/adblock/adblock.txt": { - "off": true, - "title": "POL: polskie filtry do Adblocka i uBlocka", - "group": "regions", - "lang": "pl", - "supportURL": "http://www.certyficate.it/adblock-ublock-polish-filters/" - }, - "https://easylist-downloads.adblockplus.org/antiadblockfilters.txt": { - "off": true, - "title": "Adblock Warning Removal List", - "group": "ads", - "supportURL": "https://forums.lanik.us/" - }, - "http://adb.juvander.net/Finland_adb.txt": { - "off": true, - "title": "FIN: Finnish Addition to Easylist", - "group": "regions", - "lang": "fi", - "supportURL": "http://www.juvander.fi/AdblockFinland" - }, - "https://raw.githubusercontent.com/gfmaster/adblock-korea-contrib/master/filter.txt": { - "off": true, - "title": "KOR: Korean Adblock List", - "group": "regions", - "lang": "ko", - "supportURL": "https://github.com/gfmaster/adblock-korea-contrib" - }, - "https://raw.githubusercontent.com/heradhis/indonesianadblockrules/master/subscriptions/abpindo.txt": { - "off": true, - "title": "IDN: ABPindo", - "group": "regions", - "lang": "id", - "supportURL": "https://github.com/heradhis/indonesianadblockrules" - }, - "https://raw.githubusercontent.com/k2jp/abp-japanese-filters/master/abpjf.txt": { - "off": true, - "title": "JPN: ABP Japanese filters (日本用フィルタ)", - "group": "regions", - "lang": "ja", - "supportURL": "https://github.com/k2jp/abp-japanese-filters/wiki/Support_Policy" - }, - "https://raw.githubusercontent.com/liamja/Prebake/master/obtrusive.txt": { - "off": true, - "title": "EU: Prebake - Filter Obtrusive Cookie Notices", - "group": "regions", - "supportURL": "https://github.com/liamja/Prebake" - }, - "https://raw.githubusercontent.com/yous/YousList/master/youslist.txt": { - "off": true, - "title": "KOR: YousList", - "group": "regions", - "lang": "ko", - "supportURL": "https://github.com/yous/YousList" - }, - "https://easylist-downloads.adblockplus.org/Liste_AR.txt": { - "off": true, - "title": "ara: Liste AR", - "group": "regions", - "lang": "ar", - "supportURL": "https://forums.lanik.us/viewforum.php?f=98" - }, - "http://margevicius.lt/easylistlithuania.txt": { - "off": true, - "title": "LTU: Adblock Plus Lithuania", - "group": "regions", - "lang": "lt", - "supportURL": "http://margevicius.lt/easylist_lithuania/" - }, - "http://malwaredomains.lehigh.edu/files/immortal_domains.txt": { - "off": true, - "title": "Malware domains (long-lived)", - "group": "malware", - "supportURL": "http://www.malwaredomains.com/" - }, - "mirror1.malwaredomains.com/files/justdomains": { - "title": "Malware domains", - "group": "malware", - "homeURL": "https://mirror.cedia.org.ec/malwaredomains/justdomains", - "supportURL": "http://www.malwaredomains.com/" - }, - "pgl.yoyo.org/as/serverlist": { - "title": "Peter Lowe’s Ad server list", - "group": "ads", - "homeURL": "https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext", - "supportURL": "https://pgl.yoyo.org/adservers/" - }, - "https://raw.githubusercontent.com/AdBlockPlusIsrael/EasyListHebrew/master/EasyListHebrew.txt": { - "off": true, - "title": "ISR: EasyList Hebrew (obsolete, will be removed soon)", - "group": "regions", - "supportURL": "https://github.com/AdBlockPlusIsrael/EasyListHebrew" - }, - "https://raw.githubusercontent.com/easylist/EasyListHebrew/master/EasyListHebrew.txt": { - "off": true, - "title": "ISR: EasyList Hebrew", - "group": "regions", - "lang": "he", - "supportURL": "https://github.com/easylist/EasyListHebrew" - }, - "https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt": { - "off": true, - "title": "Anti-Adblock Killer | Reek", - "group": "ads", - "supportURL": "https://github.com/reek/anti-adblock-killer", - "instructionURL": "https://github.com/reek/anti-adblock-killer#instruction" - }, - "https://raw.githubusercontent.com/szpeter80/hufilter/master/hufilter.txt": { - "off": true, - "title": "HUN: hufilter", - "group": "regions", - "lang": "hu", - "supportURL": "https://github.com/szpeter80/hufilter" - }, - "https://raw.githubusercontent.com/tomasko126/easylistczechandslovak/master/filters.txt": { - "off": true, - "title": "CZE, SVK: EasyList Czech and Slovak", - "group": "regions", - "lang": "cs", - "supportURL": "https://github.com/tomasko126/easylistczechandslovak" - }, - "http://someonewhocares.org/hosts/hosts": { - "off": true, - "title": "Dan Pollock’s hosts file", - "group": "multipurpose", - "supportURL": "http://someonewhocares.org/hosts/" - }, - "https://raw.githubusercontent.com/Dawsey21/Lists/master/adblock-list.txt": { - "off": true, - "title": "Spam404", - "group": "malware", - "supportURL": "http://www.spam404.com/" - }, - "http://stanev.org/abp/adblock_bg.txt": { - "off": true, - "title": "BGR: Bulgarian Adblock list", - "group": "regions", - "lang": "bg", - "supportURL": "http://stanev.org/abp/" - }, - "http://winhelp2002.mvps.org/hosts.txt": { - "off": true, - "title": "MVPS HOSTS", - "group": "multipurpose", - "supportURL": "http://winhelp2002.mvps.org/" - }, - "https://www.fanboy.co.nz/enhancedstats.txt": { - "off": true, - "title": "Fanboy’s Enhanced Tracking List", - "group": "privacy", - "supportURL": "https://forums.lanik.us/" - }, - "https://www.fanboy.co.nz/fanboy-antifacebook.txt": { - "off": true, - "title": "Anti-ThirdpartySocial (see warning inside list)", - "group": "social", - "supportURL": "https://forums.lanik.us/" - }, - "https://www.fanboy.co.nz/fanboy-korean.txt": { - "off": true, - "title": "KOR: Fanboy's Korean", - "group": "regions", - "supportURL": "https://forums.lanik.us/" - }, - "https://easylist-downloads.adblockplus.org/easylistspanish.txt": { - "off": true, - "title": "spa: EasyList Spanish", - "group": "regions", - "lang": "es", - "supportURL": "https://forums.lanik.us/viewforum.php?f=103" - }, - "https://www.fanboy.co.nz/fanboy-swedish.txt": { - "off": true, - "title": "SWE: Fanboy's Swedish", - "group": "regions", - "lang": "sv", - "supportURL": "https://forums.lanik.us/" - }, - "https://www.fanboy.co.nz/r/fanboy-ultimate.txt": { - "off": true, - "title": "Fanboy+Easylist-Merged Ultimate List", - "group": "multipurpose", - "supportURL": "https://forums.lanik.us/" - }, - "https://adguard.com/filter-rules.html?id=13": { - "off": true, - "title": "TUR: Adguard Turkish Filter", - "group": "regions", - "lang": "tr", - "supportURL": "http://forum.adguard.com/forumdisplay.php?51-Filter-Rules" - }, - "https://www.fanboy.co.nz/fanboy-vietnam.txt": { - "off": true, - "title": "VIE: Fanboy's Vietnamese", - "group": "regions", - "lang": "vi", - "supportURL": "https://forums.lanik.us/" - }, - "www.malwaredomainlist.com/hostslist/hosts.txt": { - "title": "Malware Domain List", - "group": "malware", - "homeURL": "https://www.malwaredomainlist.com/hostslist/hosts.txt" - }, - "https://www.void.gr/kargig/void-gr-filters.txt": { - "off": true, - "title": "GRC: Greek AdBlock Filter", - "group": "regions", - "lang": "el", - "supportURL": "https://github.com/kargig/greek-adblockplus-filter" - }, - "https://raw.githubusercontent.com/betterwebleon/slovenian-list/master/filters.txt": { - "off": true, - "title": "SVN: Slovenian List", - "group": "regions", - "lang": "sl", - "supportURL": "https://github.com/betterwebleon/slovenian-list" - } -} diff --git a/dist/README.md b/dist/README.md index 9832fd3a3ee18..98cb46dc06607 100644 --- a/dist/README.md +++ b/dist/README.md @@ -1,32 +1,103 @@ -## INSTALL +# INSTALL -#### Chromium +## Chromium -- Download and unzip `ublock0.chromium.zip` ([latest release desirable](https://github.com/gorhill/uBlock/releases)). -- Rename the unzipped directory to `ublock` - - When you later update manually, replace the **content** of the `ublock` folder with the **content** of the latest zipped version. - - This will ensure that all the extension settings will be preserved - - As long as the extension loads **from same folder path from which it was originally installed**, all your settings will be preserved. -- Go to chromium/chrome *Extensions*. -- Click to check *Developer mode*. -- Click *Load unpacked extension...*. -- In the file selector dialog: - - Select the directory `ublock` which was created above. - - Click *Open*. +1. Download and unzip `ublock0.chromium.zip` ([latest release desirable](https://github.com/gorhill/uBlock/releases)). +2. Rename the unzipped directory to `ublock`. + - When you update manually, replace the **content** of the `ublock` folder with the **content** of the latest zipped version. This ensures all extension settings are preserved. + - As long as the extension loads from the same folder path as it was originally installed, your settings will be kept. +3. Open Chromium/Chrome and go to *Extensions*. +4. Click to enable *Developer mode*. +5. Click *Load unpacked extension...*. +6. In the file selector dialog: + - Select the `ublock` directory you created. + - Click *Open*. -The extension will now be available in your chromium/chromium-based browser. +The extension will now be available in your Chromium/Chromium-based browser. -Remember that you have to update manually also. For some users, updating manually is actually an advantage because: -- You can update when **you** want -- If ever a new version sucks, you can easily just re-install the previous one +**Note:** You must update manually. For some users, manual updates are beneficial because: +- You can update when **you** want. +- If a new version is unsatisfactory, you can easily reinstall the previous one. -#### Firefox +## Firefox -- Download `ublock0.firefox.xpi` ([latest release desirable](https://github.com/gorhill/uBlock/releases)). -- Drag and drop the previously downloaded `ublock0.firefox.xpi` into Firefox +Compatible with Firefox 52 and beyond. -Your uBlock Origin settings are kept intact even after you uninstall the addon. +### For Stable Release Version -On Linux, the settings are saved in a SQlite file located at `~/.mozilla/firefox/[profile name]/extension-data/ublock0.sqlite`. +This method only works if you set `xpinstall.signatures.required` to `false` in `about:config`.[see "Add-on signing in Firefox"](https://support.mozilla.org/en-US/kb/add-on-signing-in-firefox) -On Windows, the settings are saved in a SQlite file located at `%APPDATA%\Mozilla\Firefox\Profiles\[profile name]\extension-data\ublock0.sqlite`. +1. Download `ublock0.firefox.xpi` ([latest release desirable](https://github.com/gorhill/uBlock/releases)). + - Right-click and choose _"Save As..."_. +2. Drag and drop the downloaded `ublock0.firefox.xpi` into Firefox. + +### For Beta Version + +- Click on `ublock0.firefox.signed.xpi` ([latest release desirable](https://github.com/gorhill/uBlock/releases)). + +### Location of uBO Settings + +On Linux, the settings are saved in a JSON file located at: +``` +~/.mozilla/firefox/[profile name]/browser-extension-data/uBlock0@raymondhill.net/storage.js +``` +When you uninstall the extension, Firefox deletes this file, and all your settings will be lost. + +### Firefox Legacy + +Compatible with Firefox 24-56, [Pale Moon](https://www.palemoon.org/), and [SeaMonkey](https://www.seamonkey-project.org/). + +1. Download `ublock0.firefox-legacy.xpi` ([latest release desirable](https://github.com/gorhill/uBlock-for-firefox-legacy/releases)). + - Right-click and select "Save Link As..." +2. Drag and drop the downloaded `ublock0.firefox-legacy.xpi` into Firefox. + +For Firefox 43 and beyond, you may need to toggle the setting `xpinstall.signatures.required` to `false` in `about:config`.[see "Add-on signing in Firefox"](https://support.mozilla.org/en-US/kb/add-on-signing-in-firefox) + +Your uBlock Origin settings are preserved even after uninstalling the addon. + +- On Linux, settings are saved in a SQLite file located at: +``` +~/.mozilla/firefox/[profile name]/extension-data/ublock0.sqlite +``` +- On Windows, settings are saved in a SQLite file located at: +``` +%APPDATA%\Mozilla\Firefox\Profiles\[profile name]\extension-data\ublock0.sqlite +``` + +## Build Instructions (for Developers) + +1. Clone the [uBlock repository](https://github.com/gorhill/uBlock): + ```bash + git clone https://github.com/gorhill/uBlock.git + ``` +2. Set the path to uBlock: + ```bash + cd uBlock + ``` +3. The official version of uBO is in the `master` branch: + ```bash + git checkout master + ``` +4. Build the plugin: + - Chromium: + ```bash + make chromium + ``` + - Firefox: + ```bash + make firefox + ``` + - NPM package: + ```bash + make npm + ``` +5. Load the result of the build into your browser: + - **Chromium:** + - Navigate to `chrome://extensions/` + - Check _"Developer mode"_ + - Click _"Load unpacked"_ + - Select `/uBlock/dist/build/uBlock0.chromium/` + - **Firefox:** + - Navigate to `about:debugging#/runtime/this-firefox` + - Click _"Load Temporary Add-on..."_ + - Select `/uBlock/dist/build/uBlock0.firefox/` diff --git a/dist/description/description-az.txt b/dist/description/description-az.txt new file mode 100644 index 0000000000000..87af53b6a7247 --- /dev/null +++ b/dist/description/description-az.txt @@ -0,0 +1,49 @@ +Səmərəli bir əngəlləyici: yaddaş və prosessor yükünü artırmadığı halda digər məşhur əngəlləyicilərlə müqayisədə minlərlə daha çox filtri dəstəkləyir. + +Proqramın səmərəliliyinə dair ümumi əyani məlumat: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared + +İstifadə: Açılan pəncərədəki böyük açar düyməsi uBlock₀-u cari veb-saytda işə salmaq/dayandırmaq üçündür. Bu zaman uBlock₀ bütün veb-saytlarda deyil, yalnız cari veb-saytda işə düşür/dayandırılır. + +*** + +Uyuşqan olmaqla yanaşı, uBlock₀ adi reklam əngəlləyicisindən fərqli olaraq domen adlarının olduğu faylları oxuya və yarada bilir. + +Standart rejimdə aşağıdakı filtr siyahıları yüklənəcək və tətbiq olunacaq: + +- EasyList +- Peter Lowe-dan reklam serverləri siyahısı +- EasyPrivacy +- Zərərli domenlər + +Əlavə olaraq aşağıdakı siyahıları da seçə bilərsiniz: + +- Fanboy-dan izləmə serverlərinin genişləndirilmiş siyahısı +- Dan Pollock-dan veb-domenlər faylı +- hpHosts reklam və izləmə serverləri siyahısı +- MVPS veb-domenləri +- Spam404 +- Və bir çox başqaları + +Təbii ki, hər yeni seçilən filtrlər siyahısı yaddaş yükünü də artırır. Buna baxmayaraq, Fanboy-dan iki əlavə siyahı və hpHosts reklam və izləmə serverləri siyahısını seçsəniz belə, uBlock₀ digər məşhur reklam əngəlləyicilərindən fərqli olaraq yaddaşda daha az yer tutur. + +Həmçinin nəzərə alın ki, əlavə siyahıların bəzisini -- xüsusən tərkibində domen adları olan siyahıları seçdikdə, veb-saytın düzgün yüklənməməsi ehtimalı da artır. + +*** + +Əvvəldən quraşdırılmış filtr siyahıları olmadan, uBlock₀ heç bir işə yaramır. Ona görə də, əgər siz həqiqətən bir töfhə vermək istəyirsinizsə, hər kəsin istifadəsinə pulsuz təqdim olunan filtr siyahılarını yorulmadan dəstəkləyən insanlar haqqında düşünün. + +*** + +Pulsuz. +Ümumi lisenziyalı (GPLv3) açıq mənbə kodu. +İstifadəçilər tərəfindən istifadəçilər üçün. + +Github-a qoşulan iştirakçılarımız: https://github.com/gorhill/uBlock/graphs/contributors +Crowdin-ə qoşulan iştirakçılarımız: https://crowdin.net/project/ublock + +*** + +It's quite an early version, keep this in mind when you review. + +Layihəyə edilmiş dəyişikliklərin siyahısı: +https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-bg.txt b/dist/description/description-bg.txt index a7c870a0afc26..9fe8b4d507395 100644 --- a/dist/description/description-bg.txt +++ b/dist/description/description-bg.txt @@ -1,24 +1,24 @@ -Ефикасен блокер: с малко използване на паметта и процесора, но същевременно способен да зарежда и налага хиляди допълнителни филтри в сравнение с други популярни блокери. +Действащ блокер: щадящ паметта и процесора, но и способен да зареди и наложи хиляди филтри в сравнение с други популярни блокери. Илюстрация на неговата ефикасност: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared -Използване: Големият бутон за "Включване" в изскачащият прозорец служи за трайно включване/изключване на uBlock за текущия сайт. Той се отнася само за текущия сайт, не е глобален бутон за включване. +Използване: големият бутон за включване в изскачащия прозорец забранява/разрешава uBlock в текущия сайт. Приложим само за текущия сайт, не действа глобално. *** -Гъвкав, той е повече от "блокер на реклами": може да чете и създава филтри от хост файлове. +Гъвкав, нещо повече от „блокер на реклами“: чете и създава филтри на базата на файлове с хостове. -При първоначално използване са заредени и наложени следните списъци с филтри: +Първоначално са заредени и наложени следните филтри: - EasyList -- Списък с рекламни сървъри от Peter Lowe +- списък с рекламни сървъри от Peter Lowe - EasyPrivacy -- Вредоносни домейни +- вредоносни домейни Aко желаете, на разположение са допълнителни списъци, които да изберете: - разширен проследяващ списък от Fanboy -- хост файл от Dan Pollock +- файл с хостове от Dan Pollock - рекламни и проследяващи сървъри от hpHosts - MVPS HOSTS - Spam404 @@ -26,7 +26,7 @@ Aко желаете, на разположение са допълнителн Разбира се, колкото повече списъци включите, толкова по-голямо е използването на паметта. Въпреки това, дори и след добавяне на двата допълнителни списъка от Fanboy, рекламните и проследяващи сървъри от hpHosts, uBlock₀ използва по-малко памет в сравнение с други много популярни блокери. -Също така, имайте предвид, че избирането на някои от допълнителните списъци може да доведе до по-голяма вероятност от неправилно функциониране на уебсайтове -- особено тези списъци, които по принцип се използват като хост файлове. +Имайте също така предвид, че избирането на определени допълнителни списъци може да доведе с голяма степен на вероятност до неправилно функциониране на сайтовете — особено тези, които по принцип се ползват като файл с хостове. *** @@ -36,7 +36,7 @@ Aко желаете, на разположение са допълнителн Безплатно. Отворен код с публичен лиценз (GPLv3) -За потребители от потребителите. +За потребители от потребители. Сътрудници @ Github: https://github.com/gorhill/uBlock/graphs/contributors Сътрудници @ Crowdin: https://crowdin.net/project/ublock diff --git a/dist/description/description-bn.txt b/dist/description/description-bn.txt index 0de4337ab57cc..c8896b87d35b7 100644 --- a/dist/description/description-bn.txt +++ b/dist/description/description-bn.txt @@ -1,42 +1,42 @@ একটি কার্যকর বিজ্ঞাপন প্রতিরোধক: মেমরি ও প্রসেসর সহায়ক, এবং অন্যান্য জনপ্রিয় বিজ্ঞাপন প্রতিরোধক বা অবরোধকারী থেকে হাজার অধিক ফিল্টারকে লোড এবং বাস্তবায়ন করতে পারে। -এটির কার্যকারিতার সচিত্র বিবরণ: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared +এটির কার্যকারিতার সচিত্র সংক্ষিপ্ত বিবরণ: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared -ব্যবহারের ধরন: পপআপে বড় পাওয়ার বোতাম স্থায়ীভাবে বর্তমান ওয়েব সাইটের জন্য uBlock সক্রিয়/নিষ্ক্রিয় করবে। এটা শুধুমাত্র বর্তমান ওয়েব সাইটে প্রযোজ্য, এটি একটি সার্বজনীন পাওয়ার বোতাম নয়। +ব্যবহার: পপআপের বড় পাওয়ার বাটনটি হলো বর্তমান ওয়েবসাইটে uBlock কে স্থায়ীভাবে সক্রিয় / নিষ্ক্রিয় করার জন্য। এটা শুধুমাত্র বর্তমান ওয়েব সাইটে প্রযোজ্য, এটি একটি সার্বজনীন পাওয়ার বোতাম নয়। *** -নমনীয়, এটি একটি "বিজ্ঞাপন প্রতিরোধক"-এর চেয়েও বেশি: এছাড়াও এটি হোস্ট ফাইলস থেকে ফিল্টার পড়তে ও তৈরি করতে পারে। +নমনীয়, এটি একটি "বিজ্ঞাপন প্রতিরোধক"-এর চেয়েও বেশি: এছাড়াও এটি হোস্ট ফাইল থেকে ফিল্টার পড়তে ও তৈরি করতে পারে। -বাক্সের বাইরের, এই তালিকার ফিল্টারগুলি লোড করে এবং তা সক্রিয় করে: +বাক্সের বাইরের, এই তালিকার ফিল্টারগুলি লোড করে এবং তা প্রয়োগ করে: - সহজ তালিকা - পিটার লো'য়ের বিজ্ঞাপন সার্ভারের তালিকা - সহজ গোপনীয়তা -- ম্যালওয়্যার ডোমেইনস +- ম্যালওয়্যার ডোমেইন আপনি যদি চান আপনি নির্বাচন করার জন্য আরো তালিকা পাবেন: - ফ্যানবয়ের বর্ধিত অনুসরণকরণ তালিকা -- ডেন পোলোকস-এর হোস্ট ফাইল -- এইচপিহোস্টস এর বিজ্ঞাপন এবং অনুসরণকরণ সার্ভারস -- এমভিপিএস হোস্টসমূহ +- Dan Pollock’s hosts file +- এইচপিহোস্টসের বিজ্ঞাপন এবং অনুসরণকরণ সার্ভার +- MVPS হোস্টসমূহ - স্প্যাম৪০৪ -- এবং আরও কিছু +- এবং আরও অনেক কিছু -অবশ্যই, যতবেশি ফিল্টার সক্রিয় করবেন, মেমরি ব্যবহার ততবেশি হবে। এমনকি ফ্যানবয়ের -এর দুটি অতিরিক্ত তালিকা, এইচপিহোস্টস -এর বিজ্ঞাপন এবং ট্র্যাকিং সার্ভার যোগ করার পরেও uBlock অন্যান্য জনপ্রিয় ব্লকারের থেকে কম মেমরি ব্যবহার করে। +অবশ্যই, যতবেশি ফিল্টার সক্রিয় করবেন, মেমরি ব্যবহার ততবেশি হবে। এমনকি Fanboy-এর দুটি অতিরিক্ত তালিকা, hpHosts-এর বিজ্ঞাপন এবং ট্র্যাকিং সার্ভার যোগ করার পরেও uব্লক অন্যান্য খুব জনপ্রিয় ব্লকারের থেকে কম মেমরি পদচিহ্ন ব্যবহার করে। এছাড়াও, এই অতিরিক্ত তালিকা নির্বাচন কিছু ওয়েব সাইট বিগড়ে দেওয়ার সম্ভাবনা বাড়িয়ে দিতে পারে তাই সাবধান --- বিশেষ করে এই তালিকাগুলি যা সাধারণত হোস্ট ফাইল হিসেবে ব্যবহার করা হয়। *** -ফিল্টারের পূর্বনির্ধারিত তালিকা ছাড়া, এই এক্সটেনশনটি কিছুই না। তাই যদি কখনও আপনি সত্যিই কোনো অবদান রাখতে চান, আপনার ব্যবহার করা ফিল্টার তালিকা রক্ষণাবেক্ষণের জন্য কঠোর পরিশ্রম করা সেই সব মানুষের কথা চিন্তা করুন যারা এইগুলো বিনামূল্যে ব্যবহারের জন্য সহজলভ্য করেছে। +ফিল্টারের পূর্বনির্ধারিত তালিকা ছাড়া, এই এক্সটেনশনটি কিছুই না। তাই কখনও যদি আপনি সত্যিই কিছু অবদান রাখতে চান, আপনার ব্যবহার করা ফিল্টার তালিকা রক্ষণাবেক্ষণের জন্য কঠোর পরিশ্রম করা সেই সব মানুষের করা কথা চিন্তা করুন যারা এই সব বিনামূল্যে ব্যবহারের জন্য উপলব্ধ করেছেন। *** -বিনামূল্যে। -ওপেন সোর্স এবং পাবলিক লাইসেন্স (GPLv3) -ব্যবহারকারীদের দ্বারা এবং ব্যবহারকারীদের জন্য। +মুক্তভাবে +পাবলিক লাইসেন্সসহ মুক্ত উৎসের (GPLv3) +ব্যবহারকারীদের দ্বারা ব্যবহারকারীদের জন্য। অবদানকারীগণ @ Github: https://github.com/gorhill/uBlock/graphs/contributors অবদানকারীগণ @ Crowdin: https://crowdin.net/project/ublock diff --git a/dist/description/description-bs.txt b/dist/description/description-bs.txt new file mode 100644 index 0000000000000..949f02f172a4c --- /dev/null +++ b/dist/description/description-bs.txt @@ -0,0 +1,47 @@ +Efikasan bloker: lagan na memoriju i procesor, a može učitati i primijeniti još hiljadu više drugih filtera nego drugi poznati blokeri. + +Ilustrovani pregled njegove efikasnosti: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared + +Upotreba: Veliko dugme u skočnom prozoru je da trajno omogućite/onemogućite uBlock na trenutačnoj web-stranici. To se odnosi samo na trenutačnu web-stranicu, pa nije da ga kompletno isključite. + +*** + +Baš je fleksibilan, nije samo da blokira reklame: može čitati i napraviti filtere iz hosts datoteka. + +Odmah po instaliranju, slijedeći spisci filtera su pokrenuti i sprovedeni: + +- EasyList +- Peter Lowe-ov popis reklamnih servera +- EasyPrivacy +- Malverske domene + +Sljedeće liste su dostupne po odabiru ako ih želite: + +- Fanboy-eva Poboljšana Lista za Praćenje +- Dan Pollock-ova hosts datoteka +- hpHosts-ovi serveri za reklame i praćenje +- MVPS HOSTS +- Spam404 +- I mnogi drugi + +Naravno, sa više omogućenih filtera, veća je i upotreba memorije. Ipak, čak i nakon što Fanboy-ova dva dodatna spiska, i hpHosts serveri za reklame i praćenje, su dodata, uBlock još uvijek ima manju upotrebu memorije od drugih poznatih blokera. + +Također, držite na umu da ako odaberete nekih od ovih pomoćnih spisaka možete i povećati prilike kvara web-stranice -- pogotovo onih spisaka koji se obično koriste kao hosts datoteke. + +*** + +Bez prednaštimanih listih filtera, ovo proširenje neće raditi. Tako da ako ikad želite doprinijeti nešto, razmislite o ljudima koji naporno rade održavajući spiske filtera koje vi koristite i koji su dostupni za besplatno korištenje svima. + +*** + +Besplatno. +Otvorenog koda sa javnom licencom (GPLv3) +Za korisnike od korisnika. + +Saradnici @ Github: https://github.com/gorhill/uBlock/graphs/contributors +Saradnici @ Crowdin: https://crowdin.net/project/ublock + +*** + +Spiska promjena: +https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-ca.txt b/dist/description/description-ca.txt index dd83d6d98ae6d..d49777091d3ba 100644 --- a/dist/description/description-ca.txt +++ b/dist/description/description-ca.txt @@ -1,8 +1,8 @@ -Un bloquejador eficient: el consum de memòria i de processador és baix però, no obstant això, pot carregar i aplicar milers de filtres més que altres bloquejadors coneguts. +Un blocador eficient: Amb un consum discret de memòria i de processador, podeu carregar i aplicar milers de filtres més que altres aplicacions semblants. Gràfic de l'eficiència: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared -Ús: El gran botó d'engegada de la finestra emergent serveix per a desactivar/activar permanentment el uBlock per al lloc web actual. No és un botó d'engegada general de l'extensió. +Ús: el botó gran d'engegada de la finestra emergent serveix per a habilitar/inhabilitar permanentment l'uBlock el lloc web actual. Només s'aplica al lloc web actual, no és un botó d'engegada global. *** @@ -22,11 +22,11 @@ Si voleu, podeu seleccionar altres llistes disponibles: - hpHosts’s Ad and tracking servers - MVPS HOSTS - Spam404 -- I altres +- I molts més -Òbviament, com més filtres activeu, més gran serà el consum de memòria. Però fins i tot després d'afegir dues llistes extra de Fanboy, hpHosts’s Ad and tracking servers, el uBlock₀ encara té un consum de memòria inferior al d'altres bloquejadors coneguts. +Òbviament, com més filtres activeu, més gran serà el consum de memòria. Però fins i tot després d'afegir les dues llistes extra de Fanboy, els servidors d'anuncis i rastreig d'hpHosts, l'uBlock encara té un consum de memòria inferior al d'altres bloquejadors coneguts. -També heu de ser conscient que seleccionant algunes d'aquestes llistes extra és més probable trobar-se amb llocs webs inservibles -- especialment aquelles llistes que s'utilitzen normalment com a fitxer de hosts. +Tingueu en compte que també és més probable trobar llocs web inservibles en seleccionar algunes d'aquestes llistes extra, especialment aquelles llistes que s'utilitzen normalment com a fitxer de hosts. *** diff --git a/dist/description/description-da.txt b/dist/description/description-da.txt index 320a7bb9a460f..89587cd059c28 100644 --- a/dist/description/description-da.txt +++ b/dist/description/description-da.txt @@ -1,49 +1,47 @@ -En effektiv blocker: let på hukommelse og CPU forbrug,. Kan indlæse og anvende tusindvis af flere filtre end andre populære blockere derude. +En effektiv blocker: Forbruger kun lidt hukommelse og CPU, men kan alligevel indlæse og håndhæve tusindvis flere filtre end andre populære blockers. -Illustreret oversigt over effektiviteten: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP :-Efficiency-compared +Illustreret oversigt over dens effektivitet: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared -Anvendelse: Den Store power knap i pop-up-vinduet kan permanent deaktivere/aktivere uBlock på det aktuelle websted. Dette gælder kun for det aktuelle websted, det er ikke en global afbryderknap. +Anvendelse: Den store slå til/fra knap i popup-vinduet benyttes til permanent at deaktivere/aktivere uBlock på det aktuelle websted. Dette gælder kun for det aktuelle websted, det er ikke en global til/fra-knap. *** -Fleksibel, det er mere end en "ad blocker": den kan også læse og oprette filtre fra hosts-filer. +Fleksibel og mere end en "annonce-blocker": Den kan også læse og oprette filtre fra værtsfiler. -Fra starten af er disse lister over filtre indlæst og anvendt: +Helt fra starten indlæses og håndhæves flg. filterlister: - EasyList - Peter Lowe’s Ad server list - EasyPrivacy -- Malware domains +- Malware-domæner -Flere lister er tilgængelige hvis du ønsker det: +Du kan, om ønsket, vælge fra flere tilgængelige lister: - Fanboy’s Enhanced Tracking List -- Dan Pollock’s hosts file -- hpHosts’s Ad and tracking servers +- Dan Pollocks værtsfil +-Hphosts' annonce- og sporingsservere - MVPS HOSTS - Spam404 -- Osv. +- Og mange flere -Selvfølgelig vil flere aktive filtre betyde højere hukommelsesforbrug. Selv efter tilføjelse af Fanboys to ekstra lister, og hpHosts’s Ad and tracking servers, har uBlock₀ stadig et lavere hukommelsesforbrug end andre blokere derude. +Jo flere aktive filtre, desto højere hukommelsesforbrug, selvfølgelig. Selv efter tilføjelse af Fanboys to ekstra lister samt hpHosts’ annonce- og sporingsservere har uBlock imidlertid stadig et lavere hukommelsesforbrug end andre meget populære blockere. -Vær desuden opmærksom på, at hvis du vælger nogle af disse ekstra lister kan det føre til højere sandsynlighed for, at webstedet bliver vist forkert - især de lister der normalt anvendes som hosts-fil. +Vær også opmærksom på, at vælger du nogle af disse ekstra lister, kan det øge risikoen for fejlviste websteder – især for de lister, som normalt anvendes som hosts-fil. *** -Uden de forudindstillede lister med filtre er denne udvidelse intet. Hvis du nogensinde virkelig ønsker at bidrage med noget, så tænk på de mennesker der arbejder hårdt for at vedligeholde de filterlister du bruger, som alle blev stillet gratis til rådighed for alle. +Uden forvalgslisterne med filtre er denne udvidelse intet værd. Hvis du nogensinde virkelig ønsker at bidrage med noget, så tænk på de personer, som arbejder hårdt for at vedligeholdede filterlisterne, du benytter - lister, som alle frit kan anvende. *** Gratis. Open source med offentlig licens (GPLv3) -For brugere, af brugere. +Til brugere, af brugere. -Bidragydere @ Github: https://github.com/gorhill/uBlock/graphs/contributors -Bidragydere @ Crowdin: https://crowdin.net/project/ublock +Bidragsydere på Github: https://github.com/gorhill/uBlock/graphs/contributors +Bidragsydere på Crowdin: https://crowdin.net/project/ublock *** -Dette er en tidlig version. Hav dette i tankerne når du skriver en anmeldelse. - -Projekt changelog: +Projektændringslog: https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-de.txt b/dist/description/description-de.txt index dd9126968750d..7d9fa2b478c5a 100644 --- a/dist/description/description-de.txt +++ b/dist/description/description-de.txt @@ -1,4 +1,4 @@ -Ein effizienter Blocker: Geringer Speicherbedarf und niedrige CPU-Belastung - und dennoch werden Tausende an Filtern mehr angewendet als bei anderen populären Blockern. +Ein effizienter Blocker: Geringer Speicherbedarf und niedrige CPU-Belastung - und dennoch werden tausende Filter mehr angewendet als bei anderen beliebten Blockern. Ein illustrierter Überblick über seine Effizienz: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared @@ -6,7 +6,7 @@ Benutzung: Der An-/Ausschaltknopf beim Klicken des Erweiterungssymbols dient zum -uBlock ist flexibel, denn es ist mehr als ein "Werbeblocker": Es verarbeitet auch Filter aus mehreren hosts-Dateien. +uBlock ist flexibel, denn es ist mehr als ein „Werbeblocker“: Es verarbeitet auch Filter aus mehreren hosts-Dateien. Standardmäßig werden folgende Filterlisten geladen und angewandt: @@ -30,7 +30,7 @@ Bedenke allerdings, dass durch die Wahl zusätzlicher Listen die Wahrscheinlichk - Wenn du etwas beitragen möchtest, dann denke an die Menschen, die hart dafür arbeiten, die von dir benutzten Filterlisten zu pflegen, und diese für uns alle frei verfügbar gemacht haben. + Wenn du etwas beitragen möchtest, dann denke an die Menschen, die hart dafür arbeiten, die von dir benutzten Filterlisten zu pflegen und diese für uns alle frei verfügbar gemacht haben. diff --git a/dist/description/description-en.txt b/dist/description/description-en.txt index 9fbac7d3c3112..8cbdd250d0e27 100644 --- a/dist/description/description-en.txt +++ b/dist/description/description-en.txt @@ -1,51 +1,33 @@ -An efficient blocker: easy on memory and CPU footprint, and yet can load and enforce thousands more filters than other popular blockers out there. +uBlock Origin (uBO) is a CPU and memory-efficient wide-spectrum content blocker that blocks ads, trackers, coin miners, popups, annoying anti-blockers, etc., using the following list of filters, enabled by default: -Illustrated overview of its efficiency: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared - -Usage: The big power button in the popup is to permanently disable/enable uBlock for the current web site. It applies to the current web site only, it is not a global power button. - -*** - -Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files. - -Out of the box, these lists of filters are loaded and enforced: - -- EasyList -- Peter Lowe’s Ad server list -- EasyPrivacy -- Malware domains +- EasyList (ads) +- EasyPrivacy (tracking) +- Peter Lowe's Blocklist +- Online Malicious URL Blocklist +- uBO filter lists More lists are available for you to select if you wish: -- Fanboy’s Enhanced Tracking List +- EasyList Cookie List +- Fanboy's Annoyance List +- AdGuard Annoyances - Dan Pollock’s hosts file -- hpHosts’s Ad and tracking servers -- MVPS HOSTS -- Spam404 - And many others -Of course, the more filters enabled, the higher the memory footprint. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock Origin still has a lower memory footprint than other very popular blockers out there. - -Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file. +Additionally, you can point-and-click to block JavaScript locally or globally, create your own global or local rules to override entries from filter lists, and many more advanced features. *** -Free. -Open source with public license (GPLv3) -For users by users. - -If ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free. +Free. Open source with public license (GPLv3). For users by users. No donations sought. -*** +If you ever want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free. -Documentation: -https://github.com/gorhill/uBlock#ublock-origin +You can help contribute by translating uBO on Crowdin. -Project change log: -https://github.com/gorhill/uBlock/releases - -Contributors @ Github: -https://github.com/gorhill/uBlock/graphs/contributors +*** -Contributors @ Crowdin: -https://crowdin.net/project/ublock + [Documentation](https://github.com/gorhill/uBlock#ublock-origin-ubo) + [Release Notes](https://github.com/gorhill/uBlock/releases) + [Support Forum on Reddit](https://www.reddit.com/r/uBlockOrigin/) + [Contributors on GitHub](https://github.com/gorhill/uBlock/graphs/contributors) + [Contribute on Crowdin](https://crowdin.com/project/ublock) diff --git a/dist/description/description-en_GB.txt b/dist/description/description-en_GB.txt new file mode 100644 index 0000000000000..78b3d5c18166c --- /dev/null +++ b/dist/description/description-en_GB.txt @@ -0,0 +1,49 @@ +An efficient blocker: easy on memory and CPU footprint, and yet can load and enforce thousands more filters than other popular blockers out there. + +Illustrated overview of its efficiency: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared + +Usage: The big power button in the pop-up is to permanently disable/enable uBlock for the current website. It applies to the current website only; it is not a global power button. + +*** + +Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files. + +Out of the box, these lists of filters are loaded and enforced: + +- EasyList +- Peter Lowe’s Ad server list +- EasyPrivacy +- Malware domains + +More lists are available for you to select if you wish: + +- Fanboy’s Enhanced Tracking List +- Dan Pollock’s hosts file +- hpHosts’s Ad and tracking servers +- MVPS HOSTS +- Spam404 +- And many others + +Of course, the more filters enabled, the higher the memory footprint. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there. + +Also, be aware that selecting some of these extra lists may lead to higher likelihood of website breakage -- especially those lists which are normally used as hosts file. + +*** + +Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free. + +*** + +Free. +Open source with public licence (GPLv3) +For users, by users. + +Contributors @ Github: https://github.com/gorhill/uBlock/graphs/contributors +Contributors @ Crowdin: https://crowdin.net/project/ublock + +*** + +It's quite an early version, keep this in mind when you review. + +Project change log: +https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-eo.txt b/dist/description/description-eo.txt index a22d605f66bf9..debc796a8f0d4 100644 --- a/dist/description/description-eo.txt +++ b/dist/description/description-eo.txt @@ -11,7 +11,7 @@ Fleksebla, ĝi estas pli ol "reklamo-blokilo": ĝi ankaŭ povas legi kaj krei fi Rekte el la kesto, la jenaj filtriloj estas ŝarĝitaj kaj efikigitaj: - EasyList -- Listo de reklamaj serviloj de Peter Lowe +- Listo de Peter Lowe de reklamaj serviloj - EasyPrivacy - Domajnoj kun fiprogramaro diff --git a/dist/description/description-es.txt b/dist/description/description-es.txt index 16fe1a3639e92..d231438369dd6 100644 --- a/dist/description/description-es.txt +++ b/dist/description/description-es.txt @@ -1,19 +1,19 @@ -Un bloqueador eficiente: capaz de cargar y aplicar miles más de filtros en comparación con otros populares bloqueadores, manteniendo un mínimo consumo de memoria y CPU. +Un bloqueador eficiente: capaz de cargar y aplicar miles más de filtros en comparación con otros bloqueadores populares, manteniendo un mínimo consumo de memoria y CPU. Ejemplo con imágenes ilustrando su eficiencia (en inglés): https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared -Uso: El botón grande de apagado/encendido en la ventana de la aplicación, es para desactivar/activar uBlock permanentemente en el sitio web actual. Aplica solo al sitio web actual, no activa o desactiva la extensión de forma general. +Uso: El botón grande de apagado/encendido en la interfaz emergente de la extensión, es para deshabilitar/habilitar uBlock₀ permanentemente en el sitio web actual. Aplica solo al sitio web actual, no habilita o deshabilita la extensión de forma general. *** -Flexible, es más que un "ad blocker": también puede leer y crear filtros desde archivos hosts. +Flexible, es más que un "bloqueador de anuncios": también puede leer y crear filtros desde archivos hosts. Por defecto ya trae configuradas las siguientes listas de filtros: - EasyList -- Lista de servidores de anuncios de Peter Lowe +- Peter Lowe’s Ad server list - EasyPrivacy -- Malware domains +- Online Malicious URL Blocklist Otras listas disponibles pueden ser seleccionadas, si se desea: @@ -22,15 +22,15 @@ Otras listas disponibles pueden ser seleccionadas, si se desea: - hpHosts’s Ad and tracking servers - MVPS HOSTS - Spam404 -- Etc. +- Y muchas más -Por supuesto, mientras más filtros se activen, mayor será el consumo de memoria. No obstante, incluso después de agregar las dos listas adicionales de Fanboy y la 'hpHosts’s Ad and tracking servers', uBlock₀ consume menos memoria que otros bloqueadores similares. +Por supuesto, mientras más filtros se habiliten, mayor será el consumo de memoria. No obstante, incluso después de añadir las dos listas adicionales de "Fanboy" y la "hpHosts’s Ad and tracking servers", uBlock₀ consume menos memoria que otros bloqueadores similares. -También tenga en cuenta que seleccionar algunas de estas listas adicionales puede conducir a una mayor probabilidad de aparición de problemas al mostrar un sitio web -- especialmente las listas utilizadas normalmente como archivo hosts. +También se debe tomar en cuenta que seleccionar algunas de estas listas adicionales puede conducir a una mayor probabilidad de aparición de problemas al mostrar un sitio web -- especialmente las listas utilizadas normalmente como archivo hosts. *** -Sin las listas preestablecidas de filtros, esta extensión no sería nada. Así que si alguna vez realmente quieres aportar algo, piensa en las personas que trabajan duro para mantener estas listas de filtros, disponibles de forma gratuita para todos. +Sin las listas de filtros preestablecidas, esta extensión no sería nada. Así que si alguna vez realmente quieres aportar algo, piensa en las personas que trabajan duro para mantener estas listas de filtros, disponibles de forma gratuita para todos. *** @@ -38,13 +38,10 @@ Libre. Código abierto con licencia pública (GPLv3) Hecho para usuarios por los usuarios. -Colaboradores @ Github (en inglés): https://github.com/gorhill/uBlock/graphs/contributors -Colaboradores @ Crowdin (en inglés): https://crowdin.net/project/ublock -Puede contribuir con la traducción al español, es libre! +Colaboradores @ Github: https://github.com/gorhill/uBlock/graphs/contributors +Colaboradores @ Crowdin: https://crowdin.com/project/ublock *** -Esta es una versión en desarrollo, por favor tómelo en cuenta a la hora de dar su evaluación. - Registro de cambios del proyecto: https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-et.txt b/dist/description/description-et.txt index b76baf78a601b..8f4153cde1f1b 100644 --- a/dist/description/description-et.txt +++ b/dist/description/description-et.txt @@ -6,7 +6,7 @@ Kasutamine: hüpikaknas oleva suure toitenupu abil on võimalik uBlock avatud le *** -Paindlik, midagi rohkemat kui ainult "reklaamide blokeerija" - laiendus suudab lugeda ja luua filtreid ka domeenifailidest. +Paindlik, midagi rohkemat kui ainult "reklaamide blokeerija" - laiendus suudab lugeda ja luua filtreid ka hosts-failidest. Laienduse installimisel kasutatakse järgnevaid soovitatud filtreid: @@ -18,15 +18,15 @@ Laienduse installimisel kasutatakse järgnevaid soovitatud filtreid: Lisaks neile on veel saadaval: - Fanboy täiustatud jälitusloend -- Dan Pollock'i domeenifail +- Dan Pollock'i hosts-fail - hpHosts'i reklaami- ja jälitusserverid - MVPS HOSTS - Spam404 - Ja paljud teised -Mida rohkem filtreid on kasutusel, seda suurem on mälu kasutatavus. Siiski, pärast Fanboy kahe lisaloendi - hpHosts'i reklaami- ja jälitusserverite lisamist kasutab uBlock₀ palju vähem mälu kui ülejäänud tuntud blokeerijad. +Mida rohkem filtreid on kasutusel, seda suurem on mälu kasutatavus. Siiski, pärast Fanboy kahe lisaloendi - hpHosts'i reklaami- ja jälitusserverite lisamist kasutab uBlock siiski palju vähem mälu kui ülejäänud tuntud blokeerijad. -Lisaks pidage meeles, et täiendavate loendite lisamine tõstab saitide valesti kuvamise ohtu -- eriti nende loendite puhul, mida tavaliselt kasutatakse hosts failina. +Lisaks pidage meeles, et täiendavate loendite lisamine tõstab saitide valesti kuvamise ohtu -- eriti nende loendite puhul, mida tavaliselt kasutatakse hosts-failina. *** diff --git a/dist/description/description-fa.txt b/dist/description/description-fa.txt index b204bd8b4c5d0..c9fce70b122a6 100644 --- a/dist/description/description-fa.txt +++ b/dist/description/description-fa.txt @@ -2,11 +2,11 @@ بررسی تصویری از کارایی این محصول: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared -کاربرد: دکمه ی پاور بزرگ در پنجره برای فعال یا غیر فعال کردن uBlock برای صفحه ی جاری است. فقط برای همین سایت اعمال میشود، دکمه ی پاوری برای تمام سایت ها نیست. +روش استفاده: دکمه ی پاور بزرگ در پنجرۀ بالاپَر برای فعال یا غیرفعال کردن دائمی یوبلاک برای وب‌سایت فعلی می‌باشد. این فقط برای همین سایت اعمال میشود، این دکمه ی پاور برای تمام سایت ها نیست. *** -انعطاف پذیری آن بیشتر از "ad blocker" است: همچنین می تواند فیلتر ها را از هاست میزبان، بخواند و بسازد. +انعطاف پذیر، بیشتر از یک "ad blocker" است: همچنین می تواند فیلتر‌هایی را از فایل‌های هاست‌های میزبان، خوانده و بسازد. بیرون از جعبه، این لیست فیلترها بارگذاری و اجرا میشوند: diff --git a/dist/description/description-fil.txt b/dist/description/description-fil.txt index 73ac8c4e5af3d..24942883f327d 100644 --- a/dist/description/description-fil.txt +++ b/dist/description/description-fil.txt @@ -1,4 +1,4 @@ -Isang episyenteng blocker: magaan sa memorya at CPU footprint, pero naka-loload at nag-eenforce ng libo-libong mga filters kaysa sa mga ibang sikat na blockers. +Isang episyenteng blocker: magaan sa memorya at CPU footprint, ngunit nakakapag-loload at nakakapag-enforce ng libo-libong mga filters kumpara sa mga ibang sikat na blockers. Isinalarawan pangkalahatang-ideya ng kahusayan ng uBlock: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared diff --git a/dist/description/description-fr.txt b/dist/description/description-fr.txt index 27e20cc5a3438..cbf4a89b14c7b 100644 --- a/dist/description/description-fr.txt +++ b/dist/description/description-fr.txt @@ -1,14 +1,14 @@ -uBlock est une extension qui bloque les publicités et les pisteurs, légère en empreinte mémoire et en utilisation du processeur et qui pourtant, est capable d'utiliser et de traiter des milliers de filtres de plus que la plupart des autres bloqueurs. +uBlock₀ est un bloqueur efficace de publicités et de pisteurs. Utilisant peu de mémoire vive et de ressources du processeur, il est pourtant capable d'appliquer des milliers de filtres de plus que d'autres bloqueurs populaires. -Consultez cette page en Anglais pour avoir une vue d'ensemble illustrée de son efficacité : https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared +Consultez cette page en anglais pour avoir une vue d'ensemble illustrée de son efficacité : https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared -Utilisation : Le gros bouton power dans la fenêtre pop-up permet de désactiver/activer en permanence uBlock pour le site Web en cours de consultation. Cela s'applique uniquement au site Web actuel, ce n'est pas un bouton power qui affecte entièrement le fonctionnement de l'extension. +Utilisation : Le gros bouton "Power" dans la fenêtre pop-up permet de désactiver/activer en permanence uBlock₀ pour le site Web en cours de consultation. Cela s'applique uniquement au site Web actuel, ce n'est pas un bouton "Power" global. *** -Flexible, uBlock ne prend pas en charge que les filtres de type Adblock, elle peut également lire et créer des filtres depuis des fichiers hosts. +Flexible, uBlock₀ n'est pas qu'un simple bloqueur de publicités. Il peut également lire et créer des filtres depuis des fichiers hosts. -Par défaut, ces listes de filtrage sont chargées et traitées : +Par défaut, ces listes de filtres sont chargées et appliquées : - EasyList (Liste anti-publicités maintenue fréquemment à jour par la communauté) - Peter Lowe’s Ad server list (Liste de serveurs publicitaires maintenue à jour par Peter Lowe) @@ -18,15 +18,15 @@ Par défaut, ces listes de filtrage sont chargées et traitées : Davantage de listes sont disponibles si vous souhaitez renforcer le blocage : - Fanboy’s Enhanced Tracking List (Liste de protection avancée contre le pistage maintenue à jour par Fanboy) -- Dan Pollock’s hosts file (Fichier Hosts bloquant publicités, domaines malveillants et autres pisteurs, maintenue fréquemment à jour par Dan Pollock) -- hpHosts’s Ad and tracking servers (Fichier Hosts bloquant des serveurs publicitaires et des serveurs pistant, maintenue à jour par hpHosts) +- Dan Pollock’s hosts file (Fichier hosts bloquant publicités, domaines malveillants et autres pisteurs, maintenue fréquemment à jour par Dan Pollock) +- hpHosts’s Ad and tracking servers (Fichier hosts bloquant des serveurs publicitaires et des serveurs de pistage, maintenue à jour par hpHosts) - MVPS HOSTS (Fichier Hosts bloquant publicités, domaines malveillants et autres pisteurs, maintenue à jour par MVPS) - Spam404 (Liste de protection contre les spams, maintenue fréquemment à jour par la communauté) -- Et plein d'autres +- Et de nombreuses autres listes -Bien évidemment, plus vous activez de filtres, plus l'empreinte mémoire augmentera. Pourtant, même après avoir ajouté deux listes supplémentaires crées par Fanboy et le fichier Hosts d'hpHosts, uBlock₀ utilise moins de mémoire vive que tous les autres bloqueurs de pubs populaires. +Bien évidemment, plus vous activez de filtres, plus l'empreinte mémoire augmentera. Pourtant, même après avoir ajouté deux listes supplémentaires créées par Fanboy et le fichier hosts d'hpHosts, uBlock₀ utilise moins de mémoire vive que tous les autres bloqueurs populaires. -Veuillez tout de même prendre en compte que le fait de choisir parmi ces listes supplémentaires peut conduire à quelques incompatibilités sur les sites Web que vous visitez, bien que ces listes soient maintenues à jour par leurs auteurs. +Veuillez tout de même prendre en compte qu'utiliser certaines listes supplémentaires peut conduire à quelques incompatibilités sur les sites Web que vous visitez - en particulier les fichiers hosts. *** @@ -34,16 +34,14 @@ Sans les listes prédéfinies de filtres, cette extension (comme d'autres) ne se *** -GRATUIT. -Source libre avec une licence publique GPLv3 -Fait par des utilisateurs pour des utilisateurs. +Gratuit. +Source libre sous licence publique GPLv3 +Conçu par des utilisateurs pour des utilisateurs. -Contributeurs @ Github: https://github.com/gorhill/uBlock/graphs/contributors -Contributeurs @ Crowdin: https://crowdin.net/project/ublock +Contributeurs sur GitHub : https://github.com/gorhill/uBlock/graphs/contributors +Contributeurs sur Crowdin : https://crowdin.net/project/ublock *** -Il s'agit d'une version relativement préliminaire, veuillez garder ça à l'esprit lors de votre évaluation de l'extension. - -Consultez ici en Anglais le Journal des changements concernant le projet : +Journal des changements du projet (en anglais) : https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-gu.txt b/dist/description/description-gu.txt new file mode 100644 index 0000000000000..43af9b585c586 --- /dev/null +++ b/dist/description/description-gu.txt @@ -0,0 +1,49 @@ +An efficient blocker: easy on memory and CPU footprint, and yet can load and enforce thousands more filters than other popular blockers out there. + +Illustrated overview of its efficiency: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared + +Usage: The big power button in the popup is to permanently disable/enable uBlock for the current web site. It applies to the current web site only, it is not a global power button. + +*** + +Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files. + +Out of the box, these lists of filters are loaded and enforced: + +- EasyList +- Peter Lowe’s Ad server list +- EasyPrivacy +- Malware domains + +More lists are available for you to select if you wish: + +- Fanboy’s Enhanced Tracking List +- Dan Pollock’s hosts file +- hpHosts’s Ad and tracking servers +- MVPS HOSTS +- Spam404 +- And many others + +Of course, the more filters enabled, the higher the memory footprint. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there. + +Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file. + +*** + +Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free. + +*** + +Free. +Open source with public license (GPLv3) +For users by users. + +Contributors @ Github: https://github.com/gorhill/uBlock/graphs/contributors +Contributors @ Crowdin: https://crowdin.net/project/ublock + +*** + +It's quite an early version, keep this in mind when you review. + +Project change log: +https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-he.txt b/dist/description/description-he.txt index 83e9320369522..4295132c2a85c 100644 --- a/dist/description/description-he.txt +++ b/dist/description/description-he.txt @@ -34,7 +34,7 @@ *** -חינם. +תוכנה חופשית. קוד פתוח עם רשיון ציבורי (GPLv3) בשביל המשתמשים על ידי המשתמשים. diff --git a/dist/description/description-hi.txt b/dist/description/description-hi.txt index 6bb418ca3f6f3..d770c2e84f46c 100644 --- a/dist/description/description-hi.txt +++ b/dist/description/description-hi.txt @@ -1,41 +1,41 @@ -An efficient blocker: easy on memory and CPU footprint, and yet can load and enforce thousands more filters than other popular blockers out there. +एक बेहतर ब्लॉकर : एक बेहतर ब्लॉक कर जो मेमोरी और सीपीयू पर ज्यादा जोर नहीं देता, और जो हजारों फिल्टरों को आसानी से लोड करके और लागू कर सकता है दूसरे लोकप्रिय ब्लॉकरों से। -अपनी क्षमता का सचित्र अवलोकन: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared +अपनी काबिलियत का ओवरव्यू: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared -Usage: The big power button in the popup is to permanently disable/enable uBlock for the current web site. It applies to the current web site only, it is not a global power button. +इस्तेमाल: बड़ा पावर बटन पॉपअप uBlock को मौजूदा वेबसाइट में बंद या चालू करने के लिए है। यह सिर्फ मौजूदा वेब साइट पर लागू होता है, यह एक ग्लोबल पावर बटन नहीं है। *** -Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files. +लचीला, यह एक "एडब्लॉकर" से ज्यादा है: यह होस्ट फाइलों को और फिल्टरों को पढ़ और बना सकता है। -Out of the box, these lists of filters are loaded and enforced: +इंस्टॉल करते ही इन फिल्टरों को लोड और लागू किया जाएगा: - EasyList -- Peter Lowe’s Ad server list +- Peter Lowe's एड सर्वर सूची - EasyPrivacy - Malware domains -More lists are available for you to select if you wish: +अगर आप चाहें तो चुनने के लिए और भी सूचियाँ उपलब्ध हैं: -- Fanboy’s Enhanced Tracking List -- Dan Pollock’s hosts file -- hpHosts’s Ad and tracking servers -- MVPS HOSTS +- Fanboy कि बढ़ी ट्रैकिंग सूची +- Dan Pollock कि होस्ट फाइल +- hpHosts कि एड और ट्रैकिंग सर्वरस +- MVPS हॉस्ट्स - Spam404 -- And many others +- और बहुत सारे -Of course, the more filters enabled, the higher the memory footprint. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there. +बेशक, ज्यादा फिल्टर्स मतलब ज्यादा मेमोरी फुटप्रिंट। फिर भी, Fanboy की दो और सूचियों, hpHosts के विज्ञापन और ट्रैकिंग सर्वरों को जोड़ने के बाद, uBlock में अभी भी दूसरे लोकप्रिय ब्लॉकर्स की तुलना में कम मेमोरी फ़ुटप्रिंट है। -Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file. +इसके अलावा, ध्यान रखें कि इनमें से कुछ अतिरिक्त सूचियों को चुनने से वेब साइट के टूटने की संभावना ज्यादा हो सकती है -- विशेष रूप से उन सूचियों को जो आमतौर पर होस्ट फ़ाइल के रूप में इस्तेमाल की जाती हैं। *** -Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free. +बिना प्रीसेट फिल्टर सूचियों के, यह एक्सटेंशन कुछ भी नहीं है। इसलिए अगर आप कभी सचमुच में कुछ योगदान करना चाहते हैं, तो उन लोगों के बारे में सोचें जो आपके द्वारा इस्तेमाल की जा रही फ़िल्टर सूचियों को बनाए रखने के लिए कड़ी मेहनत कर रहे हैं, जिन्हें मुफ्त में सभी को इस्तेमाल करने के लिए उपलब्ध कराया गया है। *** नि: शुल्क। -Open source with public license (GPLv3) +ओपन-सोर्स पब्लिक लाइसेंस के साथ (GPLv3) उपयोगकर्ताओं द्वारा उपयोगकर्ताओं के लिए। योगदानकर्ताओं @ Github: https://github.com/gorhill/uBlock/graphs/contributors @@ -45,5 +45,5 @@ Open source with public license (GPLv3) It's quite an early version, keep this in mind when you review. -Project change log: +प्रोजेक्ट परिवर्तन लॉग: https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-hy.txt b/dist/description/description-hy.txt new file mode 100644 index 0000000000000..f46c5ec9f7221 --- /dev/null +++ b/dist/description/description-hy.txt @@ -0,0 +1,47 @@ +Արդյունավետ արգելափակիչ. չի ծանրաբեռնում մշակիչը և օպերատիվ հիշողությունը, միևնույն ժամանակ աջակցում է հազարներով ավելի շատ զտիչիեր, քան այլ հանրաճանաչ արգելափակիչները։ + +Դրա արդյունավետության պատկերազարդ ակնարկ՝ https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared + +Օգտագործումը. ելնող լուսամուտի հոսանքի մեծ կոճակը ծառայում է ընթացիկ կայքի համար uBlock-ն անջատելու/միացնելու համար։ Դա ընդհանուր հոսանքի կոճակ չէ, այլ վերաբերում է միայն ընթացիկ կայքին։ + +*** + +Ճկուն, ավելին, քան պարզապես «գովազդի արգելափակիչ». uBlock֊ն կարող է կարդալ և ստեղծել զտիչներ հոսթ-նիշքերից։ + +Լռելյայն կբեռնվեն և կկիրառվեն զտիչների հետևյալ ցանկերը՝ + +- EasyList +- Գովազդի սպասարկիչների ցանկ Փիթեր Լոուից +- EasyPrivacy +- Վնասակար տիրույթներ + +Ցանկության դեպքում կկարողանաք ընտրել մատչելի այլ ցանկեր՝ + +- Հետագծող սպասարկիչների ընդլայնված ցանկ Fanboy-ից +– Dan Pollock-ի hosts նիշքը +- Գովազդային և հետագծման սպասարկիչներ hpHosts-ից +- MVPS HOSTS +- Spam404 +- Եվ բազում այլ + +Իհարկե, որքան շատ զտիչներ են միացված, այնքան բարձր է հիշողության օգտագործումը։ Այնուամենայնիվ, նույնիսկ Fanboy-ի երկու լրացուցիչ ցանկերը, hpHosts-ի գովազդային և հետագծող սպասարկիչներն ավելացնելուց հետո, uBlock֊ն ավելի քիչ է գործածում հիշողությունը, քան շատ սիրված այլ արգելափակիչները։ + +Նաև նկատի ունեցեք, որ լրացուցիչ ցանկերից մի քանիսը կարող են հանգեցնել կայքի կոտրման մեծ հավանականության, հատկապես այն ցանկերի, որոնք սովորաբար օգտագործվում են որպես hosts նիշք։ + +*** + +Առանց զտիչների նախադրված ցուցակների այս ընդլայնումը ոչինչ է։ Այնպես որ, եթե դուք իսկապես ցանկանում եք ներդրում ունենալ, մտածեք այն մարդկանց մասին, ովքեր ջանասիրաբար աշխատում են զտիչների ցանկերի վրա, որոնք տրամադրվում են անվճար օգտագործման համար։ + +*** + +Անվճար։ +Բաց ելակետային կոդ հրապարակավ թույլատրագրով (GPLv3)։ +Օգտվողներին օգտվողների կողմից։ + +Աջակցողները Github-ում՝ https://github.com/gorhill/uBlock/graphs/contributors +Աջակցողները Crowdin-ում՝ https://crowdin.net/project/ublock + +*** + +Փոփոխությունների մատյան՝ +https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-id.txt b/dist/description/description-id.txt index 53d0b383bacc5..763a03f08d9af 100644 --- a/dist/description/description-id.txt +++ b/dist/description/description-id.txt @@ -15,7 +15,7 @@ Langsung bekerja, daftar filter berikut ini dimuat dan dijalankan: - EasyPrivacy - Domain malware -Jika anda ingin, masih banyak tersedia daftar lain untuk anda pilih: +Jika Anda ingin, masih banyak tersedia daftar lain untuk Anda pilih: - Daftar Pelacakan Fanboy yang DItingkatkan - Berkas host Dan Pollock @@ -30,7 +30,7 @@ Perlu diketahui juga bahwa memilih beberapa daftar ekstra juga berpeluang lebih *** -Tanpa daftar filter yang ada, ekstensi ini bukanlah apa-apa. Jadi, jika Anda benar-benar ingin berkontribusi sesuatu, berpikirlah tentang orang-orang yang bekerja keras mengelola daftar filter yang anda gunakan, yang dibuat dan tersedia untuk digunakan oleh semua dengan gratis. +Tanpa daftar filter yang ada, ekstensi ini bukanlah apa-apa. Jadi, jika Anda benar-benar ingin berkontribusi sesuatu, berpikirlah tentang orang-orang yang bekerja keras mengelola daftar filter yang Anda gunakan, yang dibuat dan tersedia untuk digunakan oleh semua dengan gratis. *** diff --git a/dist/description/description-it.txt b/dist/description/description-it.txt index 27a3970fa0de5..d8b1ec85048e7 100644 --- a/dist/description/description-it.txt +++ b/dist/description/description-it.txt @@ -34,7 +34,7 @@ Senza queste liste di filtri, questa estensione non è niente. osì se vuoi cont *** -Gratuito. +Libero. Open source with public license (GPLv3) Fatto dagli utenti per gli utenti. @@ -43,7 +43,5 @@ Collaboratori @ Crowdin: https://crowdin.net/project/ublock *** -Questa è una versione preliminare, ricordalo quando scriverai una recensione. - Per leggere le novità di ogni versione consulta questa pagina (In Inlgese): https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-ja.txt b/dist/description/description-ja.txt index 67e1387d6f73d..71d429508d68d 100644 --- a/dist/description/description-ja.txt +++ b/dist/description/description-ja.txt @@ -1,15 +1,14 @@ -効率的なブロッカー:コンピュータのメモリとCPUのフットプリントはより少なく -、別の人気のブロッカーよりも何千ものフィルタをロードし、強制的にブロックができます +効率的なブロッカー: メモリーとCPUに優しいため、人気のある他のブロッカーと比べて何千も多くのフィルターを使用することができます。 -他ソフトとの比較: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared +他ソフトとの比較: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared -使用法: ポップアップに表示される大きな電源ボタンは、現在のサイトでuBlockの有効/無効を切り替えます。 現在のサイトのみに適用されます、グローバルボタンではありません。 +使用法: ポップアップに表示される大きな電源ボタンで、現在のサイトのuBlockの有効/無効を切り替えます。 変更は現在のサイトへのみ適用されます。他のサイトとの共通ボタンではありません。 *** ただの「広告ブロッカー」より柔軟です:ホストファイルを読み込みフィルターを作成できます。 -要するに、以下のフィルターが読み込まれ、適用されます: +初回起動時の設定では、以下のフィルターが読み込まれ、適用されています: - EasyList - Peter Lowe’s Ad server list @@ -23,9 +22,9 @@ - hpHosts’s Ad and tracking servers - MVPS HOSTS - Spam404 -- その他たくさん +- などなど -もちろん、多くのフィルターを適用すれば使用メモリーは増えます。 ただ、それでも、Fanboy's Special Blocking List、Fanboy's Enhanced Tracking List、hpHost's Ad and tracking serversの三つのリストを追加で適用しても、uBlockは他の人気のブロッカーより少ないメモリー消費を実現しています。 +もちろん、多くのフィルターを適用すれば使用メモリーは増えます。 それでも、Fanboy's Special Blocking List、Fanboy's Enhanced Tracking List、hpHost's Ad and tracking serversの3つを追加してもなお、他の人気のブロッカーよりも少ないメモリー消費を実現しています。 それと、多くのリストの適用は(特にホストファイルとしてよく使われているリスト)ウェブサイトの崩壊を起こしかねないことに注意してください。 diff --git a/dist/description/description-ka.txt b/dist/description/description-ka.txt new file mode 100644 index 0000000000000..e275750ee1d35 --- /dev/null +++ b/dist/description/description-ka.txt @@ -0,0 +1,49 @@ +რეკლამების შედეგიანი შემზღუდავი: მეხსიერებისა და პროცესორის შემსუბუქებული მოხმარება, რეკლამების სხვა შემზღუდავებთან შედარებით, ათასობით მეტი ფილტრის გამოყენების პირობებშიც კი. + +შედეგიანობის მიმოხილვა იხილეთ ბმულზე: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared + +გამოყენება: ჩართვის დიდი ღილაკით, ჩამოშლილ მენიუში, შესაძლებელია uBlock-ის ჩართვა/გამორთვა მიმდინარე ვებსაიტზე. ეს ღილაკი მოქმედებს მხოლოდ არსებულ საიტზე და არ გამოიყენება ზოგადად ჩართვა/გამორთვისთვის. + +*** + +მეტად მოქნილი, ეს არაა უბრალოდ „რეკლამების შემზღუდავი“: ასევე შესაძლებელია hosts ფაილის წაკითხვა და ფილტრების შექმნა. + +გარდა ამისა, ნაგულისხმევად ჩართულია და გამოიყენება შემდეგი გასაფილტრი სიები: + +- EasyList +- Peter Lowe-ის სარეკლამო სერვერების სია +- EasyPrivacy +- მავნე დომენები + +ასევე, ხელმისაწვდომია სიები სურვილისამებრ შესარჩევად: + +- Fanboy-ის გაუმჯობესებული წესები თვალყურისმდევნებლების შესაზღუდად +- Dan Pollock-ის hosts ფაილი +- hpHosts-ის სარეკლამო და თვალყურისმდევნელი სერვერები +- MVPS HOSTS +- Spam404 +- და კიდევ ბევრი + +რასაკვირველია, რაც უფრო მეტი ფილტრია ჩართული, მეხსიერების გამოყენება იზრდება. თუმცა, Fanboy-ის გაფართოებული წესების, hpHosts-ის სარეკლამო და თვალყურისმდევნელი სერვერების დამატების შემთხვევაშიც კი, uBlock მაინც ნაკლებ მეხსიერებას იყენებს, ვიდრე ყველა სხვა ცნობილი შემზღუდავი პროგრამები. + +ამასთან, გაითვალისწინეთ, რომ ზოგიერთი დამატებითი წესების შერჩევის შედეგად, შესაძლოა ვებსაიტები არ გამოჩნდეს გამართულად -- განსაკუთრებით იმ წესების შემთხვევაში, რომელიც ჩვეულებრივ, hosts ფაილად გამოიყენება. + +*** + +წინასწარ შედგენილ წესებს, მნიშვნელოვანი ადგილი უჭირავს ამ გაფართოების შედეგიან მუშაობაში. ასე რომ, თუ ოდესმე გადაწყვეტთ ვინმესთვის შემოწირულობის გაღებას, იფიქრეთ იმ ადამიანებზე, რომლებიც თავდაუზოგავად შრომობენ იმ გასაფილტრი წესების მუდმივ განახლებაზე, რომლითაც სარგებლობთ და რომელიც ხელმისაწვდომია ყველასთვის უფასოდ. + +*** + +უფასო. +ღია წყაროს მქონე საჯარო ლიცენზიით (GPLv3) +მომხმარებლების მიერ, მომხმარებლებისთვის. + +წვლილის შემტანები @ Github: https://github.com/gorhill/uBlock/graphs/contributors +წვლილის შემტანები @ Crowdin: https://crowdin.net/project/ublock + +*** + +It's quite an early version, keep this in mind when you review. + +ცვლილებების ჩამონათვალი: +https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-kk.txt b/dist/description/description-kk.txt new file mode 100644 index 0000000000000..0407a694837a8 --- /dev/null +++ b/dist/description/description-kk.txt @@ -0,0 +1,49 @@ +An efficient blocker: easy on memory and CPU footprint, and yet can load and enforce thousands more filters than other popular blockers out there. + +Illustrated overview of its efficiency: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared + +Usage: The big power button in the popup is to permanently disable/enable uBlock for the current web site. It applies to the current web site only, it is not a global power button. + +*** + +Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files. + +Out of the box, these lists of filters are loaded and enforced: + +- EasyList +- Peter Lowe’s Ad server list +- EasyPrivacy +- Malware domains + +More lists are available for you to select if you wish: + +- Fanboy’s Enhanced Tracking List +- Dan Pollock’s hosts file +- hpHosts’s Ad and tracking servers +- MVPS HOSTS +- Spam404 +- And many others + +Of course, the more filters enabled, the higher the memory footprint. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there. + +Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file. + +*** + +Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free. + +*** + +Еркін. +Open source with public license (GPLv3) +For users by users. + +Contributors @ Github: https://github.com/gorhill/uBlock/graphs/contributors +Contributors @ Crowdin: https://crowdin.net/project/ublock + +*** + +It's quite an early version, keep this in mind when you review. + +Project change log: +https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-kn.txt b/dist/description/description-kn.txt new file mode 100644 index 0000000000000..72679f6cb2c9f --- /dev/null +++ b/dist/description/description-kn.txt @@ -0,0 +1,50 @@ +ಒಂದು ದಕ್ಷ ನಿರ್ಬಂಧಕ: ಮಿತವಾದ ಮೆಮೊರಿ ಹಾಗೂ ಸಿಪಿಯೂ ಹೆಜ್ಜೆಗುರುತು ಇದ್ದರೂ, ಇತರ ಜನಪ್ರಿಯ ನಿರ್ಬಂಧಕಗಳಿಗಿಂತ ಸಾವಿರಾರು ಹೆಚ್ಚು ಶೋಧಕಗಳನ್ನು ಹಾಕಿ ಮತ್ತು ಜಾರಿಗೆ ತರಬಲ್ಲದು. + +ಇದರ ದಕ್ಷತೆಯ ಸಚಿತ್ರ ಪಕ್ಷಿನೋಟ: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared + +ಬಳಕೆ: ಪಾಪ್ಅಪ್ ದೊಡ್ಡ ವಿದ್ಯುತ್ ಬಟನ್ ಶಾಶ್ವತವಾಗಿ / ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬಹುದು ಪ್ರಸ್ತುತ ವೆಬ್ ಸೈಟ್ uBlock ಸಕ್ರಿಯಗೊಳಿಸಲು ಹೊಂದಿದೆ. ಇದು ಜಾಗತಿಕ ವಿದ್ಯುತ್ ಬಟನ್ ಅಲ್ಲ, ಪ್ರಸ್ತುತ ಜಾಲತಾಣಕ್ಕೆ ಮಾತ್ರ ಅನ್ವಯಿಸುತ್ತದೆ. + +*** + +ಹೊಂದಿಕೊಳ್ಳುವಿಕೆ, ಇದು ಒಂದು "ಜಾಹೀರಾತು ನಿರ್ಬಂಧಕಕ್ಕಿಂತ" ಹೆಚ್ಚು: ಇದು ಅತಿಥೇಯಗಳ ಕಡತಗಳನ್ನು ಓದಬಲ್ಲದು ಹಾಗೂ ಶೋಧಕಗಳು ರಚಿಸಬಲ್ಲದು. + +ಫಿಲ್ಟರ್ಗಳ ಪಟ್ಟಿಗಳನ್ನು ಲೋಡ್ ಮಾಡಿ ಸಂಪೂರ್ಣವಾಗಿ ವಿಧಿಸಲಾಗಿದೆ: + +ಸರಳವಾದ ಪಟ್ಟಿ +ಪೀಟರ್ ಲೋವೆ ಜಾಹೀರಾತು ಸರ್ವರ್ ಪಟ್ಟಿ +ಸರಳ ಗೌಪ್ಯತೆ +ಮಾಲ್ವೇರ್ ಡೊಮೇನ್ಗಳ + +ನೀವು ಬಯಸಿದರೆ, ಆಯ್ಕೆ ಮಾಡಲು ಹೆಚ್ಚು ಪಟ್ಟಿಗಳನ್ನು ಲಭ್ಯವಿದೆ: + +ಫ್ಯಾನ್ಬಾಯ್ ಅವರ ಉತ್ತಮ ಸುಧಾರಿತ ಪಟ್ಟಿ +ಡಾನ್ ಪೊಲಾಕ್ ಅತಿಥೇಯಗಳ ಕಡತ +- ಹೆಚ್ಪಿಹೋಸ್ಟ್ನ ಜಾಹೀರಾತು ಮತ್ತು ಜಾಡುಹಿಡಿಯುವಿಕೆಯ ಸರ್ವರ್ಗಳು +-ಎಮ್ ವಿ ಪಿ ಎಸ್ ಹೋಸ್ಟ್ಗಳು +ಸ್ಪಾಮ್ ೪೦೪ +- ಹಾಗೂ ಹಲವಾರು + +ಸಹಜವಾಗಿ, ಹೆಚ್ಚು ಶೋಧಕಗಳು ಸಕ್ರಿಯವಾಗಿದ್ದಲ್ಲಿ, ಹೆಚ್ಚಿನ ಸ್ಮೃತಿ ಹೆಜ್ಜೆಗುರುತು. ಹೆಚ್ಪಿಹೋಸ್ಟ್ನ ಜಾಹೀರಾತು ಮತ್ತು ಜಾಡುಹಿಡಿಯುವಿಕೆಯ ಸರ್ವರ್ಗಳು ಫ್ಯಾನ್ಬಾಯ್ ಎರಡು ಹೆಚ್ಚುವರಿ ಪಟ್ಟಿಗಳನ್ನು ಸೇರಿಸಿದ ನಂತರವೂ, uBlock ಇತರ ಜನಪ್ರಿಯ ನಿರ್ಬಂಧಕಗಳಿಗಿಂತ ಕಡಿಮೆ ಸ್ಮೃತಿ ಹೆಜ್ಜೆಗುರುತನ್ನು ಹೊಂದಿದೆ. + +ಅಲ್ಲದೆ, ಸಾಮಾನ್ಯವಾಗಿ ಈ ಹೆಚ್ಚುವರಿ ಪಟ್ಟಿಗಳಲ್ಲಿ ಕೆಲವನ್ನು ಆಯ್ಕೆ ಮಾಡುವುದು, ಜಾಲತಾಣ ಒಡೆಯುವಿಕೆಯ ಹೆಚ್ಚಿನ ಸಂಭವನೀಯತೆಗೆ ಕಾರಣವಾಗಬಹುದು, ವಿಶೇಷವಾಗಿ ಅತಿಥೇಯ ಕಡತವಾಗಿ ಬಳಸಲ್ಪಡುವ ಪಟ್ಟಿಗಳು - ತಿಳಿದಿರಲಿ. + +*** + +ಪೂರ್ವನಿಯೋಜಿತ ಶೋಧಕಗಳ ಪಟ್ಟಿಗಳಿಲ್ಲದೆ, ಈ ಎಕ್ಸಟೆನ್ಶನ್ ಏನೂ ಅಲ್ಲ. ನೀವು ಎಂದಾದರೂ, ನಿಜವಾಗಿಯೂ ಏನಾದರೂ ಕೊಡುಗೆ ನೀಡಬೇಕು ಎಂದೆನಿಸಿದರೆ, +ಎಲ್ಲರೂ ಉಚಿತವಾಗಿ ಬಳಸಲು ದೊರೆಯುವಂತಾಗಿರುವಾ, ನೀವು ಬಳಸುವ ಶೋಧಕಪಟ್ಟಿಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಕಷ್ಟಪಟ್ಟು ಕೆಲಸ ಮಾಡುತಿರುವವರ ಬಗ್ಗೆ ಯೋಚಿಸಿ. + +*** + +ಉಚಿತ. +ಸಾರ್ವಜನಿಕ ಪರವಾನಗಿ ಮುಕ್ತ ಆಕರ (ಜಿ. ಪಿ. ಎಲ್. ವಿ೩) +ಬಳಕೆದಾರರಿಂದ ಬಳಕೆದಾರರಿಗಾಗಿ. + +ನೀಡುಗರು @ ಗಿಟ್ಹಬ್: https://github.com/gorhill/uBlock/graphs/contributors +ನೀಡುಗರು @ ಕ್ರೌಡ್ಇನ್: https://crowdin.net/project/ublock + +*** + +ಇದು ಸಾಕಷ್ಟು ಆರಂಭಿಕ ಆವೃತ್ತಿ, ನೀವು ಪರಿಶೀಲಿಸುವಾಗ ಇದನ್ನು ಮನಸ್ಸಿನಲ್ಲಿ ಇರಿಸಿಕೊಳ್ಳಿ. + +ಪ್ರಾಜೆಕ್ಟ್ ಬದಲಾವಣೆಗಳ ಲಾಗ್ : +https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-mk.txt b/dist/description/description-mk.txt new file mode 100644 index 0000000000000..9995ef6f814c0 --- /dev/null +++ b/dist/description/description-mk.txt @@ -0,0 +1,49 @@ +Ефикасен блокер: лесен на меморија и процесор, но сепак може да вчита и да наметне илјадници филтри повеќе од другите популарни блокери. + +Илустриран преглед на ефикасноста: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared + +Користење: Големото копче за "струја" во попапот се користи за трајно да се исклучи/уклучи уБлок за моменталниот веб сајт. Се однесува само на моменталниот веб-страница, не е копче за глобално вклучување/исклучување. + +*** + +Флексибилно, може да биде повеќе од само "блокирач на реклами": може исто да чита и прави филтери од хост фајлови. + +Без подесување, овие списоци на филтри се вчитуваат и се присилуваат: + +- EasyList (ИзиЛиста) +- Peter Lowe’s Ad server list (Peter Lowe’s листа на рекламни сервери) +- EasyPrivacy (ЛеснаПриватност) +- Домени на малвер + +Повеќе листи се достапни за вас да ги одберете ако сакате: + +- Fanboy’s Enhanced Tracking List +- Dan Pollock’s hosts file +- hpHosts’s Ad and tracking servers +- MVPS HOSTS +- Spam404 +- и много други + +Се разбира, што повеќе филтри се enabled, поголема ќе биде зафатената меморија. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there. + +Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file. + +*** + +Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free. + +*** + +Бесплатно. +Отворен изворен код со јавна лиценза (ГПЛв3) +За корисници од корисници. + +Соработници @ Гитхаб: https://github.com/gorhill/uBlock/graphs/contributors +Преведување @ Crowdin: https://crowdin.net/project/ublock + +*** + +It's quite an early version, keep this in mind when you review. + +Project change log: +https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-ml.txt b/dist/description/description-ml.txt new file mode 100644 index 0000000000000..029603755c22e --- /dev/null +++ b/dist/description/description-ml.txt @@ -0,0 +1,49 @@ +കാര്യക്ഷമമായ ഒരു ബ്ലോക്കര്‍: മെമ്മറിയും സിപിയുവും ഉദാരമായി ഉപയോഗിക്കുന്നു, എന്നിരുന്നാലും ആയിരക്കണക്കിന് ഫില്‍ട്ടറുകള്‍ ലോഡ് ചെയ്യാനാകുന്നു, മറ്റുള്ള ബ്ലോക്കേര്‍സിനെ അപേക്ഷിച്ച്. + +ഇതിന്‍റെ കാര്യക്ഷമതയുടെ ഓവര്‍വ്യൂ ചിത്രം: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared + +ഉപയോഗരീതി: പോപ്‌അപ്പിള്‍ ഉള്ള വലിയ പവര്‍ ബട്ടണ്‍, ഇപ്പോള്‍ ലോഡ് ചെയ്യപ്പെട്ട വെബ്‌സൈറ്റില്‍ യുബ്ലോക്ക് സ്ഥിരമായി എനേബിള്‍/ഡിസേബിള്‍ ചെയ്യാന്‍ ഉപയോഗിക്കാം. ഇത് ഇപ്പോള്‍ നിലവില്‍ ഇരിക്കുന്ന വെബ്‌ സൈറ്റില്‍ മാത്രമേ അപ്ലൈ ചെയ്യപെടുകയുള്ളൂ. ഇത് ഒരു ഗ്ലോബല്‍ പവര്‍ ബട്ടന്‍ അല്ല. + +*** + +ഫ്ലെക്സിബിള്‍ ആയ യുബ്ലോക്ക് വെറുമൊരു "പരസ്യ ബ്ലോക്കര്‍" മാത്രമല്ല: ഇതിനു ഹോസ്റ്റ് ഫയലുകളില്‍ നിന്നും റീഡ് ചെയ്യുവാനും ഫില്‍ട്ടറുകള്‍ ക്രിയേറ്റ് ചെയ്യുവാനും കഴിയും. + +പെട്ടിയില്‍ നിന്നും പുറത്തെടുക്കുമ്പോള്‍ ചുവടെ ഉള്ള ഫില്‍റ്റര്‍ ലിസ്റ്റുകള്‍ ലോഡ് ചെയ്ത് എന്‍ഫോര്‍സ് ചെയ്യപ്പെടുന്നു: + +-ഈസി ലിസ്റ്റ് +-പീറ്റര്‍ ലോവ്ന്‍റെ ആഡ് സെര്‍വര്‍ ലിസ്റ്റ് +-ഈസി പ്രൈവസി +- മാല്‍വയര്‍ ഡൊമൈനുകള്‍ + +താങ്കള്‍ക്ക് ആവശ്യമെങ്കില്‍ കൂടുതല്‍ പട്ടികകള്‍ ലഭ്യം: + +-ഫാന്‍ബോയ്യുടെ എന്‍ഹാന്‍സ്ഡ് ട്രാക്കിംഗ് ലിസ്റ്റ് +-ഡാന്‍ പൊള്ളോക്കിന്‍റെ ഹോസ്റ്റ് ഫയല്‍ +-എച്പി ഹോസ്റ്റ്-ന്‍റെ ആഡ് & ട്രാക്കിംഗ് സെര്‍വറുകള്‍ +-എംവിപിഎസ് ഹോസ്റ്റുകള്‍ +-സ്പാം404 +-കൂടാതെ മറ്റ് അനവധി + +തീര്‍ച്ചയായും, കൂടുതല്‍ ഫില്‍ട്ടറുകള്‍ എനേബിള്‍ ചെയ്യുംതോറും മെമ്മറി ഉപഭോഗം കൂടുന്നതാണ്. എന്നിട്ടും, ഫാൻ‌ബോയിയുടെ രണ്ട് അധിക ലിസ്റ്റുകളായ എച്ച്പി ഹോസ്റ്റുകളുടെ പരസ്യവും ട്രാക്കിംഗ് സെർ‌വറുകളും ചേർ‌ത്തിട്ടും, യു‌ബ്ലോക്കിന് അവിടെയുള്ള മറ്റ് ജനപ്രിയ ബ്ലോക്കറുകളേക്കാൾ കുറഞ്ഞ മെമ്മറി കാൽ‌നോട്ടമുണ്ട്. + +കൂടാതെ, ഈ അധിക ലിസ്റ്റുകളിൽ ചിലത് തിരഞ്ഞെടുക്കുന്നത് വെബ് സൈറ്റ് തകരാനുള്ള സാധ്യതയിലേക്ക് നയിച്ചേക്കാം - പ്രത്യേകിച്ചും ഹോസ്റ്റ് ഫയലായി സാധാരണയായി ഉപയോഗിക്കുന്ന ലിസ്റ്റുകൾ. + +*** + +ഫിൽട്ടറുകളുടെ പ്രീസെറ്റ് ലിസ്റ്റുകൾ ഇല്ലാതെ, ഈ വിപുലീകരണം ഒന്നുമല്ല. അതിനാൽ നിങ്ങൾ എപ്പോഴെങ്കിലും എന്തെങ്കിലും സംഭാവന ചെയ്യാൻ ആഗ്രഹിക്കുന്നുവെങ്കിൽ, നിങ്ങൾ ഉപയോഗിക്കുന്ന ഫിൽട്ടർ ലിസ്റ്റുകൾ പരിപാലിക്കാൻ കഠിനമായി പരിശ്രമിക്കുന്ന ആളുകളെക്കുറിച്ച് ചിന്തിക്കുക, അവ എല്ലാവർക്കും സ use ജന്യമായി ഉപയോഗിക്കാൻ ലഭ്യമാക്കി. + +*** + +സൗ ജന്യം +ഓപ്പണ്‍‌സോഴ്സ് പബ്ലിക്‌ ലൈസന്‍സ് (ജിപിഎല്‍വി3) +ഉഭയോക്താക്കള്‍ക്ക്‌ ഉഭയോക്താക്കളില്‍ നിന്നും. + +കോണ്‍ട്രിബ്യൂട്ടര്‍മാര്‍ @ ഗിറ്റ്ഹബ്: https://github.com/gorhill/uBlock/graphs/contributors +കോണ്‍ട്രിബ്യൂട്ടര്‍മാര്‍ @ ക്രൌവ്ഡിന്‍: https://crowdin.net/project/ublock + +*** + +ഇത് സാമാന്യം ശൈശവ വേര്‍ഷന്‍ ആണ്, റിവ്യൂ ചെയ്യുമ്പോള്‍ ഇക്കാര്യം മനസ്സില്‍ വയ്ക്കൂ. + +പ്രൊജെക്റ്റ് മാറ്റങ്ങളുടെ ലോഗ്: +https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-ms.txt b/dist/description/description-ms.txt index 415bcf5c36cdb..4b9cf3bdcf55b 100644 --- a/dist/description/description-ms.txt +++ b/dist/description/description-ms.txt @@ -4,31 +4,31 @@ Kecekapan yang digambarkan: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared (Bahasa English) -Usage: The big power button in the popup is to permanently disable/enable uBlock for the current web site. It applies to the current web site only, it is not a global power button. +Cara menguna: Butang besar di dalam popup adalah untuk mengaktifkan/menyahaktifkan uBlock bagi laman web yang terkini. Ini hanya boleh diggunakan dalam laman web ini sahaja, ini bukan satu butang kuasa global. *** -Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files. +Fleksibel, ini lebih daripada satu "penghalang": ia boleh membaca dan menghasilkan penapis daripada fail hosts. -Out of the box, these lists of filters are loaded and enforced: +Senarai penapis yang telah dimuatkan dan dikuatkuasakan adalah seperti berikut: - EasyList - Peter Lowe’s Ad server list - EasyPrivacy -- Malware domains +- Domain mengandungi malware -More lists are available for you to select if you wish: +Banyak lagi senarai penapis yang boleh anda pilih jika anda ingin seperti: - Fanboy’s Enhanced Tracking List - Dan Pollock’s hosts file - hpHosts’s Ad and tracking servers - MVPS HOSTS - Spam404 -- And many others +- dan banyak lagi -Of course, the more filters enabled, the higher the memory footprint. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there. +Sudah tentu, dengan lebih banyak penapis yang diaktifkan, jejakan memori lebih tinggi. Lagi, walaupun sudah menambah dua senarai tambahan Fanboy, hpHosts's Ad and tracking servers, uBlock masih kekal mempunyai jejakan memori yang rendah berbanding dengan penghalang yang terkenal di luar sana. -Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file. +Juga, berhati-hati memilih sesetengah senarai tambahan yang kemungkinan besar membawa kepada kerosakan laman web -- terutamanya senarai yang biasanya digunakan sebagai fail hosts. *** diff --git a/dist/description/description-nb.txt b/dist/description/description-nb.txt new file mode 100644 index 0000000000000..3b8097d172466 --- /dev/null +++ b/dist/description/description-nb.txt @@ -0,0 +1,49 @@ +Effektiv blokkering av reklame, sporing mm., lavt CPU- og minnebruk, og kan likevel laste og bruke tusenvis av flere filtre enn andre populære utvidelser for blokkering. + +Illustrert oversikt over effektiviteten: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared + +Anvendelse: Den store av/på-knappen i oppsprettsvinduet er for å permanent deaktivere/aktivere uBlock for det gjeldende nettstedet. Dette gjelder bare for det gjeldende nettstedet, det er ikke en global av/på-knapp. + +*** + +Fleksibel, uBlock er mer enn en "reklameblokkerer": uBlock kan også lese og opprette filtre fra vertsfiler. + +Som standard er disse filterlistene lastet og i bruk: + +- EasyList +- Peter Lowe’s Ad server list +- EasyPrivacy +- Online Malicious URL Blocklist + +Flere lister er tilgjengelige om ønskelig: + +- Fanboy’s Enhanced Tracking List +- Dan Pollock’s hosts file +- hpHosts’s Ad and tracking servers +- MVPS HOSTS +- Spam404 +- Og mange andre + +Jo flere filtre som er aktivert, desto høyere minnebruk. Men selv etter å ha lagt til Fanboys to ekstra lister og "hpHosts’s Ad and tracking servers", har uBlock Origin fortsatt lavere minnebruk enn andre populære utvidelser for blokkering. + +Vær også oppmerksom på at å velge noen av disse ekstra listene kan lede til høyere sannsynlighet for at nettsider ikke lastes riktig -- spesielt de listene som normalt brukes som vertsfil. + +*** + + Hvis du virkelig ønsker å bidra med noe, tenk på folkene som arbeider hardt for å opprettholde filterlistene du bruker, som blir gjort tilgjengelige for alle - helt gratis. + +*** + +Gratis. +Åpen kildekode med offentlig lisens (GPLv3) +For brukere, av brukere. + +Bidragsytere @ Github: https://github.com/gorhill/uBlock/graphs/contributors +Bidragsytere @ Crowdin: https://crowdin.net/project/ublock + +*** + + + +Endringslogg for prosjektet: +https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-nl.txt b/dist/description/description-nl.txt index 63a8bbc92d87e..773cc7fc9d18f 100644 --- a/dist/description/description-nl.txt +++ b/dist/description/description-nl.txt @@ -2,7 +2,7 @@ Een efficiënte adblocker: gebruikt weinig processorkracht en geheugen. Toch kan Geïllustreerde efficiëntievergelijking: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared -Gebruik: met de grote aan-uitknop in de pop-up kan uBlock voor de huidige website permanent worden in- of uitgeschakeld. Het wordt alleen op de huidige website toegepast; dit is geen algemene aan-uitknop. +Gebruik: met de grote aan-uitknop in de pop-up kan uBlock voor de huidige website permanent worden in- of uitgeschakeld. Dit wordt alleen op de huidige website toegepast; het is geen algemene aan-uitknop. *** @@ -26,7 +26,7 @@ Er zijn meer lijsten beschikbaar die u kunt inschakelen: Natuurlijk wordt het geheugengebruik groter naarmate er meer filters worden ingeschakeld. Maar zelfs na het inschakelen van Fanboy’s twee extra lijsten, hpHosts’s Ad en tracking servers, heeft uBlock een lager geheugengebruik dan andere populaire blockers. -Houd er ook rekening mee dat het gebruik van sommige van deze extra lijsten de kans verhoogt dat websites niet goed worden weergegeven - met name de lijsten die doorgaans als hosts-bestand worden gebruikt. +Houd er ook rekening mee dat het gebruik van sommige van deze extra lijsten de kans vergroot dat websites niet goed worden weergegeven - met name de lijsten die doorgaans als hosts-bestand worden gebruikt. *** @@ -43,7 +43,5 @@ Medewerkers @ Crowdin: https://crowdin.net/project/ublock *** -Onthoud dat dit een hele vroege versie is wanneer u een beoordeling geeft. - Projectwijzigingenlogboek: https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-no.txt b/dist/description/description-no.txt deleted file mode 100644 index f8a1b523f9262..0000000000000 --- a/dist/description/description-no.txt +++ /dev/null @@ -1,49 +0,0 @@ -Effektiv blokkering av reklame, sporing mm., lavt CPU- og minnebruk, og kan likevel laste og bruke tusenvis av flere filtre enn andre populære utvidelser for blokkering. - -Illustrert oversikt over effektiviteten: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared - -Anvendelse: Den store av/på-knappen i oppsprettsvinduet er for å permanent deaktivere/aktivere uBlock for det gjeldende nettstedet. Dette gjelder bare for det gjeldende nettstedet, det er ikke en global av/på-knapp. - -*** - -Fleksibel, uBlock er mer enn en "reklameblokkerer": uBlock kan også lese og opprette filtre fra vertsfiler. - -Som standard er disse filterlistene lastet og i bruk: - -- EasyList -- Peter Lowe's Ad server list -- EasyPrivacy -- Malware domains - -Flere lister er tilgjengelige om ønskelig: - -- Fanboy’s Enhanced Tracking List -- Dan Pollock’s hosts file -- hpHosts’s Ad and tracking servers -- MVPS HOSTS -- Spam404 -- Og mange andre - -Jo flere filtre som er aktivert, desto høyere minnebruk. Men selv etter å ha lagt til Fanboys to ekstra lister og "hpHosts’s Ad and tracking servers", har uBlock fortsatt lavere minnebruk enn andre populære utvidelser for blokkering. - -Vær også oppmerksom på at å velge noen av disse ekstra listene kan lede til høyere sannsynlighet for at nettsider ikke lastes riktig -- spesielt de listene som normalt brukes som vertsfil. - -*** - -Uten de forhåndsgitte filterlistene er denne utvidelsen ubrukelig. Så hvis du ønsker å bidra med noe, tenk på folkene som arbeider hardt for å opprettholde filterlistene du bruker, som blir gjort tilgjengelige for alle - helt gratis. - -*** - -Gratis. -Åpen kildekode med offentlig lisens (GPLv3) -For brukere, av brukere. - -Bidragsytere @ Github: https://github.com/gorhill/uBlock/graphs/contributors -Bidragsytere @ Crowdin: https://crowdin.net/project/ublock - -*** - -Dette er en tidlig versjon, ha det i tankene når du bedømmer den. - -Endringslogg for prosjektet: -https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-oc.txt b/dist/description/description-oc.txt new file mode 100644 index 0000000000000..43af9b585c586 --- /dev/null +++ b/dist/description/description-oc.txt @@ -0,0 +1,49 @@ +An efficient blocker: easy on memory and CPU footprint, and yet can load and enforce thousands more filters than other popular blockers out there. + +Illustrated overview of its efficiency: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared + +Usage: The big power button in the popup is to permanently disable/enable uBlock for the current web site. It applies to the current web site only, it is not a global power button. + +*** + +Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files. + +Out of the box, these lists of filters are loaded and enforced: + +- EasyList +- Peter Lowe’s Ad server list +- EasyPrivacy +- Malware domains + +More lists are available for you to select if you wish: + +- Fanboy’s Enhanced Tracking List +- Dan Pollock’s hosts file +- hpHosts’s Ad and tracking servers +- MVPS HOSTS +- Spam404 +- And many others + +Of course, the more filters enabled, the higher the memory footprint. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there. + +Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file. + +*** + +Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free. + +*** + +Free. +Open source with public license (GPLv3) +For users by users. + +Contributors @ Github: https://github.com/gorhill/uBlock/graphs/contributors +Contributors @ Crowdin: https://crowdin.net/project/ublock + +*** + +It's quite an early version, keep this in mind when you review. + +Project change log: +https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-pl.txt b/dist/description/description-pl.txt index b4d97d43fed98..7f76e2e888b08 100644 --- a/dist/description/description-pl.txt +++ b/dist/description/description-pl.txt @@ -1,6 +1,6 @@ -Skutecznie blokuje reklamy, używa mało pamięci RAM i zasobów procesora, a przy tym może wczytywać i stosować o wiele więcej filtrów niż inne popularne rozszerzenia do blokowania reklam. +Skuteczny bloker, który używa mało pamięci RAM i zasobów procesora, a przy tym może wczytywać i stosować o wiele więcej filtrów niż inne popularne rozszerzenia do blokowania. -Ilustrowane porównanie z dodatkiem Adblock Plus: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared +Ilustrowany przegląd jego skuteczności: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-Efficiency-Compared Sposób użycia: Wyświetlany w panelu duży przycisk oznaczony symbolem zasilania służy do trwałego włączenia/wyłączenia uBlocka na bieżącej stronie internetowej. Działanie przycisku ma zastosowanie tylko na bieżącej witrynie – nie działa globalnie. @@ -10,27 +10,27 @@ Elastyczny. Jest czymś więcej niż „blokerem reklam”. Może czytać i twor Po zainstalowaniu są wczytywane i stosowane następujące listy filtrów: -- EasyList -- Lista serwerów reklam Petera Lowe'a -- EasyPrivacy -- Domeny malware +– EasyList +– Peter Lowe’s Ad server list +– EasyPrivacy +– Online Malicious URL Blocklist Można wybrać więcej list filtrów: -- Rozszerzona lista śledzenia dla fanboyów -- Plik hosts Dana Pollocka -- Lista serwerów śledzących i reklamowych hpHosts -- MVPS HOSTS -- Spam404 -- I wiele innych +– Fanboy's Enhanced Tracking List +– Dan Pollock’s hosts file +– hpHosts’s Ad and tracking servers +– MVPS HOSTS +– Spam404 +– i wiele innych. -Im więcej filtrów jest włączonych, tym większe jest użycie pamięci RAM. Nawet po dodaniu dwóch dodatkowych list filtrów dla fanboyów – listy serwerów reklamowych i śledzących hpHosts – µBlock₀ używa mniej pamięci RAM niż inne popularne dodatki do blokowania reklam. +Oczywiście, im więcej filtrów jest włączonych, tym wyższe jest zużycie pamięci. Jednak nawet po dodaniu dwóch dodatkowych list filtrów Fanboya, oraz listy hpHosts’ Ad and tracking servers, uBlock ma nadal niższe zużycie pamięci niż inne bardzo popularne blokery. Należy pamiętać, że wybranie niektórych dodatkowych list może prowadzić do wzrostu prawdopodobieństwa uszkodzenia witryny internetowej – zwłaszcza tych list, które są zwykle używane jako plik hostów. *** -Bez ustawionej listy filtrów, to rozszerzenie jest bezużyteczne. Pomyśl zatem o osobach, które ciężko pracują, tworząc i utrzymując udostępniane za darmo używane przez ciebie listy filtrów. +Bez ustawionej listy filtrów, to rozszerzenie jest bezużyteczne. Więc jeśli rzeczywiście chciałbyś przekazać jakieś wsparcie, pomyśl o osobach, które ciężko pracują, tworząc i utrzymując udostępniane za darmo używane przez ciebie listy filtrów. *** diff --git a/dist/description/description-pt_BR.txt b/dist/description/description-pt_BR.txt index 8c18cc7726a74..5dac2d4bfb10f 100644 --- a/dist/description/description-pt_BR.txt +++ b/dist/description/description-pt_BR.txt @@ -1,12 +1,12 @@ -Um bloqueador eficaz: Com baixo consumo de memória e CPU e ainda pode carregar e aplicar milhares de filtros. Mais do que outros bloqueadores populares lá fora. +Um bloqueador eficiente: com baixo consumo de memória e CPU, e ainda pode carregar e aplicar milhares de filtros a mais do quê qualquer outro bloqueador popular por aí. -Visão geral ilustrada de sua eficiência: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP :-Efficiency-compared +Visão geral ilustrada de sua eficiência: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared Utilização: Use o botão de energia no pop-up para desativar/ativar o uBlock₀ para o site atual. Isso se aplica apenas ao site atual, não é um botão global. *** -Flexível, é mais do que um "ad blocker": também pode ler e criar filtros a partir de arquivos de hosts. +Flexível, é mais do que um "bloqueador de anúncios": ele também consegue ler e criar filtros de arquivos de hosts. Por padrão, essas listas de filtros são carregadas e aplicadas: @@ -22,15 +22,15 @@ Mais listas estão disponíveis para você escolher, se desejar: - hpHosts’s Ad and tracking servers - MVPS HOSTS - Spam404 -- E varios outros +- E varias outras -Claro, quanto mais filtros habilitados, maior o consumo de memória. Ainda, mesmo após a adição do Fanboy's duas listas extras, hpHosts’s e servidores de rastreamento, uBlock₀ ainda tem o consumo de memória menor do que outros bloqueadores populares lá fora. +Claro, quanto mais filtros ativados, maior o consumo de memória. Ainda, mesmo após adicionar duas listas extras Fanboy's e hpHosts’s, o uBlock₀ ainda tem o consumo de memória menor do que outros bloqueadores populares lá fora. -Também, esteja ciente de que selecionar algumas dessas listas extras pode levar à maior probabilidade de quebra do layout do site, especialmente aquelas listas que são normalmente usadas como arquivo hosts. +Também, esteja ciente de que selecionar algumas dessas listas extras pode levar em uma maior probabilidade de quebrar o layout do site, especialmente aquelas listas que são normalmente usadas como arquivo hosts. *** -Sem as listas predefinidas de filtros, esta extensão não é nada. Por isso, se você nunca contribuiu com alguma coisa, pense nas pessoas que trabalham duro para manter as listas de filtro que você está usando, que foram disponibilizadas para usar tudo de graça. +Sem as listas de filtros selecionadas por padrão, esta extensão não é nada. Por isso, se você nunca contribuiu com alguma coisa, pense nas pessoas que trabalham duro para manter as listas de filtros que você está usando, que foram disponibilizadas para usar, tudo de graça. *** @@ -38,12 +38,11 @@ Gratuito Código aberto com licença pública (GPLv3) De usuários para usuários. -Contribuidores no Github: https://github.com/gorhill/uBlock/graphs/contributors +Contribuidores no GitHub: https://github.com/gorhill/uBlock/graphs/contributors Contribuidores no Crowdin: https://crowdin.net/project/ublock *** -Essa é uma versão ainda em desenvolvimento, tenha isso em mente quando você avaliar. Registro de alterações do projeto: https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-pt_PT.txt b/dist/description/description-pt_PT.txt index 51f9510d7c39c..12c8ad7605279 100644 --- a/dist/description/description-pt_PT.txt +++ b/dist/description/description-pt_PT.txt @@ -3,11 +3,11 @@ Um bloqueador eficiente: leve na memória e CPU e, no entanto, consegue carregar Visão geral ilustradora da sua eficiência: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared -Utilização: O botão grande de energia na janela serve para desativar ou ativar, permanentemente, o uBlock para o web site atual. Aplica-se unicamente ao web site atual, não sendo um botão de energia global. +Utilização: O botão grande de energia na janela serve para desativar/ativar permanentemente o uBlock para o web site atual. Aplica-se unicamente ao web site atual, não sendo um botão de energia global. *** -Flexível, é mais do que um bloqueador de anúncios. Pode também ler e criar filtros a partir de ficheiros de servidores. +Flexível, é mais do que um "bloqueador de anúncios": pode também ler e criar filtros a partir de ficheiros de servidores. Por predefinição, estas listas de filtros são carregadas e aplicadas: @@ -27,7 +27,7 @@ Se quiser, estão disponíveis mais listas para seleção: Obviamente que quanto maior o número de filtros ativos, maior será o consumo de memória. No entanto, mesmo após adicionar as duas listas extra do Fanboy, hpHosts Ad and tracking servers, o uBlock₀ continua a consumir menos memória do que outros bloqueadores populares disponíveis. -Esteja ciente de que se selecionar algumas destas listas extra pode resultar numa probabilidade acrescida de rutura em alguns web sites -- especialmente nas listas que são normalmente utilizadas como ficheiro de servidores. +Esteja ciente de que selecionar algumas destas listas extra pode resultar numa probabilidade acrescida de rutura em alguns web sites -- especialmente as listas que são normalmente utilizadas como ficheiro de servidores. *** @@ -35,7 +35,7 @@ Sem as listas de filtros predefinidas, esta extensão não é nada. Se realmente *** -Grátis. +Livre. Código aberto com licença pública (GPLv3) De utilizadores para utilizadores. diff --git a/dist/description/description-ru.txt b/dist/description/description-ru.txt index 6767ade7f4203..4b1f5cc4114c1 100644 --- a/dist/description/description-ru.txt +++ b/dist/description/description-ru.txt @@ -1,12 +1,12 @@ -Эффективный блокировщик: не нагружает процессор и оперативную память, может загружать и применять больше фильтров, чем другие популярные блокировщики. +Эффективный блокировщик: не нагружает процессор и оперативную память, поддерживает больше фильтров, чем другие популярные блокировщики. Иллюстрированный обзор его эффективности: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared -Использование: Большая кнопка питания в выпадающем окне служит для выключения/включения uBlock для текущего сайта. Это неглобальная кнопка, она применяется только для текущего сайта. +Использование: Большая кнопка питания в выпадающем окне служит для выключения/включения uBlock для текущего сайта. Это не глобальная кнопка, она применяется только для текущего сайта. *** -Будучи гибким, это нечто большее, чем просто «блокировщик рекламы»: он также может считывать и создавать фильтры из хост-файлов. +Гибкий, больше, чем просто «блокировщик рекламы»: uBlock может читать и создавать фильтры из хост-файлов. По умолчанию будут загружены и применены следующие списки фильтров: @@ -24,13 +24,13 @@ - Spam404 - И многие другие -Разумеется, чем больше включено фильтров, тем больше будет использовано памяти. Тем не менее, даже после добавления двух экстра списков от Fanboy, рекламных и отслеживающих серверов от hpHosts, uBlock₀ всё ещё потребляет меньше памяти, чем другие популярные блокировщики. +Разумеется, чем больше включено фильтров, тем больше будет использовано памяти. Тем не менее, даже после добавления двух дополнительных списков от Fanboy, рекламных и отслеживающих серверов от hpHosts, uBlock потребляет меньше памяти, чем другие популярные блокировщики. -Также имейте в виду, что некоторые их этих списков имеют высокую вероятность поломать веб-сайт, особенно те, что созданы из хост-файлов. +Также имейте в виду, что некоторые из этих списков имеют высокую вероятность поломать веб-сайт, особенно те, что созданы из хост-файлов. *** -Без предустановленных списков фильтров это расширение — ничто. Так что, если вы действительно хотите внести свой вклад, подумайте о людях, усердно поддерживающих списки фильтров, предоставленные Вам для бесплатного использования. +Без предустановленных списков фильтров это расширение — ничто. Так что, если вы действительно хотите внести свой вклад, подумайте о людях, усердно поддерживающих списки фильтров, предоставленные вам для бесплатного использования. *** diff --git a/dist/description/description-si.txt b/dist/description/description-si.txt new file mode 100644 index 0000000000000..43af9b585c586 --- /dev/null +++ b/dist/description/description-si.txt @@ -0,0 +1,49 @@ +An efficient blocker: easy on memory and CPU footprint, and yet can load and enforce thousands more filters than other popular blockers out there. + +Illustrated overview of its efficiency: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared + +Usage: The big power button in the popup is to permanently disable/enable uBlock for the current web site. It applies to the current web site only, it is not a global power button. + +*** + +Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files. + +Out of the box, these lists of filters are loaded and enforced: + +- EasyList +- Peter Lowe’s Ad server list +- EasyPrivacy +- Malware domains + +More lists are available for you to select if you wish: + +- Fanboy’s Enhanced Tracking List +- Dan Pollock’s hosts file +- hpHosts’s Ad and tracking servers +- MVPS HOSTS +- Spam404 +- And many others + +Of course, the more filters enabled, the higher the memory footprint. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there. + +Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file. + +*** + +Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free. + +*** + +Free. +Open source with public license (GPLv3) +For users by users. + +Contributors @ Github: https://github.com/gorhill/uBlock/graphs/contributors +Contributors @ Crowdin: https://crowdin.net/project/ublock + +*** + +It's quite an early version, keep this in mind when you review. + +Project change log: +https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-so.txt b/dist/description/description-so.txt new file mode 100644 index 0000000000000..43af9b585c586 --- /dev/null +++ b/dist/description/description-so.txt @@ -0,0 +1,49 @@ +An efficient blocker: easy on memory and CPU footprint, and yet can load and enforce thousands more filters than other popular blockers out there. + +Illustrated overview of its efficiency: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared + +Usage: The big power button in the popup is to permanently disable/enable uBlock for the current web site. It applies to the current web site only, it is not a global power button. + +*** + +Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files. + +Out of the box, these lists of filters are loaded and enforced: + +- EasyList +- Peter Lowe’s Ad server list +- EasyPrivacy +- Malware domains + +More lists are available for you to select if you wish: + +- Fanboy’s Enhanced Tracking List +- Dan Pollock’s hosts file +- hpHosts’s Ad and tracking servers +- MVPS HOSTS +- Spam404 +- And many others + +Of course, the more filters enabled, the higher the memory footprint. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there. + +Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file. + +*** + +Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free. + +*** + +Free. +Open source with public license (GPLv3) +For users by users. + +Contributors @ Github: https://github.com/gorhill/uBlock/graphs/contributors +Contributors @ Crowdin: https://crowdin.net/project/ublock + +*** + +It's quite an early version, keep this in mind when you review. + +Project change log: +https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-sq.txt b/dist/description/description-sq.txt index a60c524934211..4915ea51a915e 100644 --- a/dist/description/description-sq.txt +++ b/dist/description/description-sq.txt @@ -1,4 +1,4 @@ -Një bllokues efikas: me impakt të vogël te memorja dhe procesori, por mund të hapë dhe të zbatojë mijëra filtra më shumë sesa bllokuesit e tjerë të njohur. +Një bllokues efikas: me impakt të vogël te memoria dhe procesori, por mund të hapë dhe të zbatojë mijëra filtra më shumë sesa bllokuesit e tjerë të njohur. Përmbledhje e ilustruar e efikasitetit të tij: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared @@ -6,7 +6,7 @@ Përdorimi: Çelësi i komandimit te dritarja e vogël e bën uBlock përherë j *** -Është fleksibël dhe jo thjesht një "bllokues reklamash": mund të lexojë dhe të krijojë filtra nga skedat "hosts". +Është fleksibël dhe jo thjesht një "bllokues reklamash": mund të lexojë dhe të krijojë filtra nga skedarët "hosts". Filtrat e listuar këtu hapen dhe zbatohen pas instalimit: @@ -24,9 +24,9 @@ Po të doni, ka edhe shumë lista të tjera të gatshme: - Spam404 - Dhe shumë të tjera -Sigurisht që sa më shumë filtra të aktivizoni, aq më i madh do të jetë impakti te memorja. Edhe sikur të shtoni dy listat e tjera të Fanboy, hpHosts’s Ad and tracking servers, uBlock përsëri ka impakt më të ulët te memorja sesa bllokuesit e tjerë shumë të njohur. +Sigurisht që sa më shumë filtra të aktivizoni, aq më i madh do të jetë impakti te memoria. Edhe sikur të shtoni dy listat e tjera të Fanboy, hpHosts’s Ad and tracking servers, uBlock përsëri ka impakt më të ulët te memoria sesa bllokuesit e tjerë shumë të njohur. -Por, kujdes, sepse duke përzgjedhur disa prej këtyre listave, gjasat që faqet të shfaqin probleme do të jenë më të mëdha -- sidomos listat që normalisht përdoren si skeda "hosts". +Por, kujdes, sepse duke përzgjedhur disa prej këtyre listave, gjasat që faqet të shfaqin probleme do të jenë më të mëdha -- sidomos listat që normalisht përdoren si skedarë "hosts". *** diff --git a/dist/description/description-sr.txt b/dist/description/description-sr.txt index 0a201b0c38b8b..84f7c96bb1627 100644 --- a/dist/description/description-sr.txt +++ b/dist/description/description-sr.txt @@ -1,4 +1,4 @@ -Ефикасан блокатор: ниски процесорски и меморијски захтеви и може учитати и применити хиљаде филтера више него остали популарни блокатори. +Ефикасан блокатор: ниски процесорски и меморијски захтеви а може учитати и применити хиљаде филтера више него остали популарни блокатори. Илустровани преглед његове ефикасности: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared @@ -6,7 +6,7 @@ *** -Флексибилан је, више је од блокатора реклама: може читати и стварати филтере из хост датотека. +Флексибилан је, више је од блокатора реклама: може читати и креирати филтере из хост датотека. Одмах по инсталирању, следећи спискови филтера су учитани и спроведени: @@ -30,7 +30,7 @@ *** -Без предефинисаних спискова филтера, ово проширење је ништа. Тако да ако икад желите да допринесете нешто, размислите о људима који напорно раде одржавајући спискове филтера које користите и који су доступни за бесплатно коришћење свима. +Без предефинисаних спискова филтера, ово проширење је ништа. Тако да ако икад желите да допринесете нечим, размислите о људима који напорно раде одржавајући спискове филтера које користите и који су доступни за бесплатно коришћење свима. *** @@ -45,5 +45,5 @@ Ово је рана верзија, имајте то на уму када будете оцењивали. -Листа измена: +Евиденција промена: https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-sv.txt b/dist/description/description-sv.txt index 3014304db201e..671c406994671 100644 --- a/dist/description/description-sv.txt +++ b/dist/description/description-sv.txt @@ -3,35 +3,35 @@ En effektiv blockerare: lätt på minne och CPU-fotavtryck, som ändå kan ladda Illustrerad översikt av dess effektivitet: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared -Användning: Den stora strömbrytarikonen i popuprutan är till för att avaktivera/aktivera uBlock₀ på den aktuella webbplatsen permanent. Detta gäller enbart för den aktuella webbplatsen, det är inte en global strömbrytare. +Användning: Den stora strömbrytaren i popup-rutan är tillför att permanent inaktivera/aktivera uBlock för den aktuella webbplatsen. Detta gäller enbart för den aktuella webbplatsen, det är inte en global strömbrytare. *** -Flexibel. uBlock₀ är inte enbart en "reklamblockerare": den kan också läsa och skapa filter från hosts-filer. +Flexibel, uBlock₀ är inte enbart en "reklamblockerare": den kan också läsa och skapa filter från hosts-filer. -Som standard är följande filterlistor laddade och applicerade: +Som standard är följande filterlistor laddade och tillämpade: - EasyList -- Peter Lowe’s Ad server list +- Peter Lowes reklamserverlista - EasyPrivacy - Malware domains Fler filterlistor finns tillgängliga att använda om du vill: - Fanboy’s Enhanced Tracking List -- Dan Pollock’s hosts file -- hpHosts’s Ad and tracking servers +- Dan Pollocks hosts-fil +- hpHosts reklam- och spårarservrar - MVPS HOSTS - Spam404 - med flera -Ju fler aktiverade filter, desto högre minnesanvändning. Men även efter att ha lagt till Fanboys två extra filterlistor och hpHosts' Ad and tracking servers så använder uBlock₀ mindre minne än andra väldigt populära blockerare. +Givetvis gör fler aktiverade filter att minnesanvändningen blir högre. Även efter att ha lagt till Fanboys två extra filterlistor och hpHosts reklam- och spårarservrar, använder ändå uBlock mindre minnesanvändning än andra populära reklamblockerare. -Tänk på att genom att aktivera vissa av dessa extra filterlistor finns det större risk att webbplatser går sönder - särskilt de listor som i normala fall används som hosts-filer. +Tänk på att genom att aktivera vissa av dessa extra filterlistor finns det större risk att webbplatser går sönder -- särskilt de listor som i normala fall används som hosts-fil. *** -uBlock₀ vore ingenting utan filterlistorna. Så om du vill bidra med någonting, tänk på människorna som arbetar hårt med att upprätthålla de filterlistor du använder, vilka är fritt tillgängliga för allas användning. +Utan de förinställda filterlistorna är detta tillägg ingenting. Så om du vill bidra med någonting, tänk på personerna som arbetar hårt med att upprätthålla de filterlistor du använder, vilka är fritt tillgängliga för allas användning. *** diff --git a/dist/description/description-sw.txt b/dist/description/description-sw.txt new file mode 100644 index 0000000000000..e08ca2a59eefe --- /dev/null +++ b/dist/description/description-sw.txt @@ -0,0 +1,49 @@ +Kizuizi kinachofaa: nyepesi kwenye kumbukumbu na nyayo za CPU, na bado inawezapakia na kuamrisha maelfu ya vichujio kuliko vizuizi vingine. + +Kielelezo cha ufanisi wake: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared + +Utumiaji: Kitufe kikubwa cha nishati kinalemaza/kuwezesha kabisa uBlock kwenye tovuti ya sasa. Inatekelezeka kwenye tovutio ya sasa pekee, si kitufe cha kila mahali. + +*** + +Inawezabadilishwa, na ni zaidi ya "kizuizi cha matangazo": inawezasoma na kuunda vichujio kutoka faili za wenyeji. + +Punde inapoanza kutumiwa, vichujio hivi vinapakiwa na kuamrishwa: + +- EasyList +-Orodha ya Peter Lowe ya seva za matangazo +- EasyPrivacy +- Vikoa vya programu-hasidi + +Orodha zaidi zinawezateuliwa iwapo unataka: + +- Orodha fuatiliaji yake Fanboy iliyoboreshwa +- Faili yake Dan Pollock ya wenyeji +- seva za hpHosts za matangazo na ufuatiliaji +- Wenyeji wa MVPS +- Spam404 +- Na mengineo + +Inajulikana kuwa unavyowezesha vichujio zaidi, ndipo kumbukumbu inavyotumika zaidi. Hata hivyo, hata baada ya kuongeza orodha mbili anuwai za Fanboy, seva za hpHosts za matangazo, na za ufuatiliaji, uBlock bado inatumia kumbukumbu kidogo kuliko vizuizi vingine vinavyopatikana kule nje. + +Pia, unahamasishwa kuwa kuteua baadhi ya orodha hizi huenda kukaongeza hatari ya tovuti kuvunjika -- sana sana zile orodha ambazo hutumika kama faili za wenyeji. + +*** + +Bila orodha setiawali za vichujio, kiendelezi hiki sii kitu. Kwa hivyo, iwapo ungependa kuchangia kitu cha maana, fikiria wale wanaotia bidii kudumisha orodha za vichujio unayotumia, na zilizofanywa huria kwa kila mmoja. + +*** + +Huru +Programu huria yenye leseni ya umma (GPLv3) +Na watumiaji kwa watumiaji + +Wachangiaji @ Github: https://github.com/gorhill/uBlock/graphs/contributors +Wachangiaji @ Crowdin: https://crowdin.net/project/ublock + +*** + +It's quite an early version, keep this in mind when you review. + +Batli ya mabadiliko ya mradi: +https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-ta.txt b/dist/description/description-ta.txt index 43af9b585c586..a150b3ec5f3ad 100644 --- a/dist/description/description-ta.txt +++ b/dist/description/description-ta.txt @@ -1,49 +1,52 @@ -An efficient blocker: easy on memory and CPU footprint, and yet can load and enforce thousands more filters than other popular blockers out there. +ஒரு திறமையான தடுப்பான்: நினைவகம் மற்றும் CPU தடம் எளிதானது, ஆனால் அங்குள்ள பிற பிரபலமான தடுப்பான்களைக் காட்டிலும் ஆயிரக்கணக்கான வடிப்பான்களை ஏற்றலாம் மற்றும் செயல்படுத்தலாம். -Illustrated overview of its efficiency: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared +அதன் செயல்திறனைப் பற்றிய விளக்கமான கண்ணோட்டம்: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared -Usage: The big power button in the popup is to permanently disable/enable uBlock for the current web site. It applies to the current web site only, it is not a global power button. +பயன்பாடு: தற்போதைய வலைத்தளத்திற்கான uBlock ஐ நிரந்தரமாக முடக்க / இயக்குவதே பாப்அப்பில் உள்ள பெரிய ஆற்றல் பொத்தான். இது தற்போதைய வலைத்தளத்திற்கு மட்டுமே பொருந்தும், இது உலகளாவிய சக்தி பொத்தான் அல்ல. *** -Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files. +நெகிழ்வான, இது ஒரு "விளம்பரத் தடுப்பான்" ஐ விட அதிகம்: இது ஹோஸ்ட் கோப்புகளிலிருந்து வடிப்பான்களைப் படித்து உருவாக்கலாம். -Out of the box, these lists of filters are loaded and enforced: +பெட்டியின் வெளியே, இந்த வடிப்பான்களின் பட்டியல்கள் ஏற்றப்பட்டு செயல்படுத்தப்படுகின்றன: - EasyList + - Peter Lowe’s Ad server list + - EasyPrivacy -- Malware domains -More lists are available for you to select if you wish: +- தீம்பொருள் களங்கள் + +நீங்கள் விரும்பினால் தேர்ந்தெடுக்க கூடுதல் பட்டியல்கள் கிடைக்கின்றன: -- Fanboy’s Enhanced Tracking List -- Dan Pollock’s hosts file -- hpHosts’s Ad and tracking servers -- MVPS HOSTS -- Spam404 -- And many others +- ஃபான்பாயின் மேம்படுத்தப்பட்ட கண்காணிப்பு பட்டியல் +- டான் பொல்லாக் ஹோஸ்ட்கள் கோப்பு +- hpHosts இன் விளம்பரம் மற்றும் கண்காணிப்பு சேவையகங்கள் +- எம்விபிஎஸ் ஹோஸ்ட்ஸ் +- ஸ்பேம் 404 +- மற்றும் பலர் -Of course, the more filters enabled, the higher the memory footprint. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there. +நிச்சயமாக, அதிகமான வடிப்பான்கள் இயக்கப்பட்டன, நினைவக தடம் அதிகமாகும். இருப்பினும், ஃபான்பாயின் இரண்டு கூடுதல் பட்டியல்களான hpHosts இன் விளம்பரம் மற்றும் கண்காணிப்பு சேவையகங்களைச் சேர்த்த பிறகும், uBlock இன்னும் பிரபலமான பிற தடுப்பான்களைக் காட்டிலும் குறைந்த நினைவக தடம் உள்ளது. -Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file. +மேலும், இந்த கூடுதல் பட்டியல்களில் சிலவற்றைத் தேர்ந்தெடுப்பது வலைத்தள உடைப்புக்கான அதிக வாய்ப்புக்கு வழிவகுக்கும் என்பதை அறிந்து கொள்ளுங்கள் - குறிப்பாக அந்த பட்டியல்கள் பொதுவாக ஹோஸ்ட்கள் கோப்பாகப் பயன்படுத்தப்படுகின்றன. *** -Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free. +வடிப்பான்களின் முன்னமைக்கப்பட்ட பட்டியல்கள் இல்லாமல், இந்த நீட்டிப்பு எதுவும் இல்லை. ஆகவே, நீங்கள் உண்மையிலேயே ஏதாவது பங்களிக்க விரும்பினால், நீங்கள் பயன்படுத்தும் வடிகட்டி பட்டியல்களைப் பராமரிக்க கடினமாக உழைக்கும் நபர்களைப் பற்றி சிந்தியுங்கள், அவை அனைவருக்கும் இலவசமாகப் பயன்படுத்தக் கிடைத்தன. *** -Free. -Open source with public license (GPLv3) -For users by users. +இலவசம். +பொது உரிமத்துடன் திறந்த மூல (GPLv3) +பயனர்களால் பயனர்களுக்கு. -Contributors @ Github: https://github.com/gorhill/uBlock/graphs/contributors -Contributors @ Crowdin: https://crowdin.net/project/ublock +பங்களிப்பாளர்கள் @ கிதுப்: https://github.com/gorhill/uBlock/graphs/contributors +பங்களிப்பாளர்கள் @ க்ரவுடின்: https://crowdin.net/project/ublock *** It's quite an early version, keep this in mind when you review. -Project change log: +திட்ட மாற்ற பதிவு: https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-th.txt b/dist/description/description-th.txt new file mode 100644 index 0000000000000..c7130d846b050 --- /dev/null +++ b/dist/description/description-th.txt @@ -0,0 +1,49 @@ +An efficient blocker: easy on memory and CPU footprint, and yet can load and enforce thousands more filters than other popular blockers out there. + +Illustrated overview of its efficiency: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared + +Usage: The big power button in the popup is to permanently disable/enable uBlock for the current web site. It applies to the current web site only, it is not a global power button. + +*** + +Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files. + +Out of the box, these lists of filters are loaded and enforced: + +- EasyList +- Seznam oglaševalskih strežnikov Peter Lowe +- EasyPrivacy +- Malware domains + +More lists are available for you to select if you wish: + +- Fanboy’s Enhanced Tracking List +- Dan Pollock’s hosts file +- hpHosts’s Ad and tracking servers +- MVPS HOSTS +- Spam404 +- And many others + +Of course, the more filters enabled, the higher the memory footprint. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there. + +Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file. + +*** + +Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free. + +*** + +Free. +Open source with public license (GPLv3) +For users by users. + +Contributors @ Github: https://github.com/gorhill/uBlock/graphs/contributors +Contributors @ Crowdin: https://crowdin.net/project/ublock + +*** + +It's quite an early version, keep this in mind when you review. + +Project change log: +https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-tr.txt b/dist/description/description-tr.txt index 7c2cf780ee6ba..69674c3de86da 100644 --- a/dist/description/description-tr.txt +++ b/dist/description/description-tr.txt @@ -1,20 +1,20 @@ -Etkili bir engelleyici: Belleği ve işlemciyi zorlamaz, yine de diğer popüler engelleyicilere göre binlerce daha çok süzgeci yükleyip uygulayabilir. +Etkili bir engelleyici: Belleği ve işlemciyi yormaz, yine de diğer popüler engelleyicilere göre binlerce daha çok filtreyi yükleyip uygulayabilir. -Verimliliğinin resmedilen genel bakışı: +Verimliliğine örneklendirilmiş genel bakış: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared -Kullanımı: Arayüzdeki büyük güç düğmesi mevcut web sitesinde uBlock'u kalıcı olarak devre dışı bırakır/etkinleştirir. Bu yalnızca mevcut web sitesine uygulanır, evrensel bir güç düğmesi değildir. +Kullanımı: Arayüzdeki büyük güç düğmesi o anki web sitesinde, uBlock'u kalıcı olarak devre dışı bırakmak/etkinleştirmek içindir. Bu yalnızca o anki web sitesine uygulanır, evrensel bir güç düğmesi değildir. *** -Esnek, bir "reklam engelleyici"den daha fazlası: Alan adları dosyalarınızdan süzgeçleri okuyabilir ve oluşturabilir. +Esnek, bir "reklam engelleyici"den daha fazlası: Ayrıca alan adları dosyalarınızdan filtreleri okuyabilir ve oluşturabilir. -Hazır olarak şu süzgeç listeleri yüklüdür ve uygulanır: +Hazır olarak, şu filtre listeleri yüklüdür ve uygulanır: - EasyList -- Peter Lowe'un reklam sunucu listesi +- Peter Lowe'un Reklam sunucu listesi - EasyPrivacy -- Zararlı alan adları +- Malware domains İsterseniz seçebileceğiniz daha fazla liste var: @@ -23,15 +23,15 @@ Hazır olarak şu süzgeç listeleri yüklüdür ve uygulanır: - hpHosts'un Reklam ve izleyici sunucuları - MVPS HOSTS - Spam404 -- Ve daha birçoğu +- Ve diğer birçoğu -Tabii ki, daha fazla süzgeç etkinleştirildikçe, bellek kullanımı da yükselir. Ama, Fanboy'un iki ekstra listesi, hpHosts'un reklam ve izleyici sunucuları ekledikten sonra dahi uBlock diğer oldukça popüler olan engelleyicilere göre daha az bellek kullanır. +Tabii ki, ne kadar çok filtre etkinleştirilirse, bellek kullanımı da o kadar yüksek olur. Yine de, Fanboy'un iki ekstra listesi, hpHosts'un reklam ve izleyici sunucuları ekledikten sonra bile uBlock diğer oldukça popüler engelleyicilere göre daha az bellek kullanır. Ayrıca, bazı ekstra listelerin seçilmesinin web sitelerinin bozulması olasılığını artırabileceğini unutmayın -- özellikle normalde alan adları dosyası olarak kullanılan listelerin. *** -Ön yüklü gelen süzgeç listeleri olmadan, bu eklenti hiçbir işe yaramaz. Eğer gerçekten bir şekilde katkıda bulunmak isterseniz, herkes tarafından özgürce kullanıma imkan veren, kullandığınız süzgeç listelerini oluşturmak için uğraşan insanları düşünün. +Ön ayarlı filtre listeleri olmadan, bu eklenti bir işe yaramaz. Bu yüzden, gerçekten bir şeylerle katkıda bulunmak isterseniz, herkesin özgürce kullanması için sunulan kullandığınız filtre listelerini sürdürmek için uğraşan insanları düşünün. *** @@ -44,7 +44,7 @@ Katkıda bulunanlar @ Crowdin: https://crowdin.net/project/ublock *** -Bu çok erken bir sürüm, gözden geçirirken, bunu göz önünde bulundurun. +Bu çok erken bir sürüm, gözden geçirirken bunu göz önünde bulundurun. Proje değişiklik günlüğü: https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-ur.txt b/dist/description/description-ur.txt new file mode 100644 index 0000000000000..f13fff826b9a7 --- /dev/null +++ b/dist/description/description-ur.txt @@ -0,0 +1,52 @@ +ایک زبردست اشتہارات کو روکنے والا سافٹویئر. کم میموری اور cpu استعمال کرتا ہے مگر کام بہترین کرتا ہے. + +اس کا بہترین اور پراثر کام کرنے کی تصاویر: +https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared + +ہدایات: بڑا آن/ آف کا بٹن دبا کر آپ موجودہ ویب سائٹ پر uBlock کو فعال یا غیر فعال کر سکتے ہیں. یہ بٹن صرف موجودہ ویب سائٹ کے لئے ہے، باقی ویب سائٹس کو اس سے کوئی فرق نہیں پڑے گا. + +*** + +Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files. + +یہ والے فلٹر پہلے سے لاگو ہوں گے: + +- EasyList +- Peter Lowe’s Ad server list +- EasyPrivacy +- Malware domains + +More lists are available for you to select if you wish: + +- Fanboy’s Enhanced Tracking List +- Dan Pollock’s hosts file +- hpHosts’s Ad and tracking servers +- MVPS HOSTS +- Spam404 +- And many others + +جتنے زیادہ فلٹر لگائیں گے اتنی زیادہ میموری لے گا. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there. + +Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file. + +*** + +Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free. + +*** + +مفت. +اوپن سورس عوامی لائسنس(جی.پی.ایل ورژن ٣) کے ساتھ +عوام کے لیے، عوام کا بنایا ہوا. + +معاونین کی فہرست Github پر دیکھیں: +https://github.com/gorhill/uBlock/graphs/contributors +مترجمین کی فہرست Crowdin پر دیکھیں: +https://crowdin.net/project/ublock + +*** + +It's quite an early version, keep this in mind when you review. + +پراجیکٹ میں ترقیاتی کام کا ریکارڈ: +https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-zh_CN.txt b/dist/description/description-zh_CN.txt index 57be18bc53976..be4e2c08e7110 100644 --- a/dist/description/description-zh_CN.txt +++ b/dist/description/description-zh_CN.txt @@ -1,22 +1,22 @@ -一款高效的请求过滤工具:占用极低的内存和CPU,和其他常见的过滤工具相比,它能够加载并执行上千条过滤规则。 +一款高效的请求过滤工具:占用极低的内存和 CPU,与其他常见的过滤器相比,它能够多加载并执行上千条过滤规则。 -效率概述说明: +带图表的效率概述说明: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared -用法:点击弹出窗口中的电源按钮,uBlock 将对当前网页永久禁用/启用过滤功能。 它只控制当前网页的请求过滤,而不是一个全局开关。 它只控制当前网页的请求过滤,而不是一个全局开关。 +用法:点击弹出窗口中的电源按钮,uBlock 将对当前网站永久禁用/启用过滤功能。 它仅应用于当前网站,而非全局性的开关。 *** -它不只是一个广告拦截工具,它还可以从 hosts 文件里读取和创建过滤规则。 +它很灵活,不只是一个“广告拦截器”:它还能从 hosts 文件中读取、创建过滤规则。 -初始默认加载和执行下列过滤规则列表: +初始默认加载和执行下列过滤规则: - EasyList - Peter Lowe’s Ad server list - EasyPrivacy - Malware domains -这里还有更多的规则列表供你选择: +这里还有更多规则列表可供您选择: - Fanboy’s Enhanced Tracking List - Dan Pollock’s hosts file @@ -25,9 +25,9 @@ https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared - Spam404 - 等等 -当然,启用越多的过滤规则就会产生越高的内存占用。 然而,即使再添加 Fanboy 额外的两个规则列表,如 hpHosts’s Ad 和 tracking servers,uBlock 的内存占用依然比其他常见的过滤工具要低的多。 +当然,启用的过滤规则越多,占用的内存也就越高。 然而,即使再添加 Fanboy 的两个额外规则列表与 hpHosts’s Ad and tracking servers,uBlock 的内存占用依然比其他流行的过滤器更低。 -另外请注意,选择一些额外的列表可能会导致网页破损可能性增高 —— 尤其是那些通常被用作 hosts 文件的列表。 +另外,请注意,一些额外的规则列表可能会导致网站出现错误 —— 尤其是那些一般被作为 hosts 文件使用的列表。 *** @@ -35,13 +35,13 @@ https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared *** -免费。 -遵从 GPLv3 公共许可协议开源。 -一切为了用户。 +自由并且免费。 +使用 GPLv3 公共许可协议开源。 +来自用户,只为用户。 -贡献者 @ Github: +Github 上的贡献者们: https://github.com/gorhill/uBlock/graphs/contributors -贡献者 @ Crowdin: +Crowdin 上的翻译者们: https://crowdin.net/project/ublock *** diff --git a/dist/description/description-zh_TW.txt b/dist/description/description-zh_TW.txt index cea79ed484501..1f7197f6eaf99 100644 --- a/dist/description/description-zh_TW.txt +++ b/dist/description/description-zh_TW.txt @@ -1,21 +1,21 @@ -一個高效率的阻擋器:使用不多的記憶體以及 CPU 資源,但卻能比市面上其他熱門的阻擋器,載入並執行數以千計的過濾規則。 +一個高效率的阻擋器:uBO 使用不多的記憶體 (RAM) 以及 CPU 資源,但卻能比其他熱門的阻擋器多載入並執行數以千計的過濾規則。 -效能比較的概述圖例:https://github.com/gorhill/uBlock/wiki/%C2%B5Block-vs.-ABP:-efficiency-compared +效能比較示意圖:https://github.com/gorhill/uBlock/wiki/%C2%B5Block-vs.-ABP:-efficiency-compared -用法:在彈出式選單中的大電源按鈕,是用來設定是否在目前的網站永久的禁用/啟用 uBlock。 此按鈕僅於目前所在的網站有效,它並非是此擴展套件的總開關按鈕。 +用法:在彈出式選單中的大電源按鈕,是用來設定是否在目前的網站永久的禁用/啟用 uBlock₀ 。 此按鈕僅於目前所在的網站有效,它並非是此擴展套件的總開關按鈕。 *** -彈性化,這並不僅僅是一個 "廣告阻擋器":它甚至能從 host 檔案中讀取並建立過濾規則。 +非常彈性:這不僅是「廣告阻擋器」,甚至能從 host 檔案中讀取並建立過濾規則。 -下列的過濾規則列表,是預設被載入及啟用的: +首次安裝後,預設就會載入套用下列過濾規則: - EasyList - Peter Lowe’s Ad server list - EasyPrivacy - Malware domains -您可以依照您的意願選擇更多的過濾規則列表: +您可以自由選擇更多過濾規則: - Fanboy’s Enhanced Tracking List - Dan Pollock’s hosts file @@ -24,26 +24,26 @@ - Spam404 - 以及其他更多 -當啟用更多的過濾規則,記憶體資源也理所當然地使用越多。 但哪怕加入了 Fanboy 的 2 個額外的過濾規則列表,hpHosts’s Ad and tracking servers 過濾規則列表,uBlock 仍比市面上其他熱門的阻擋器使用更少的記憶體資源。 +當然,啟用更多的過濾規則的話,就會使用更多記憶體資源。 但哪怕加入了 Fanboy 的 2 個額外的過濾規則列表,hpHosts’s Ad and tracking servers 過濾規則列表,uBlock 仍比市面上其他熱門的阻擋器使用更少的記憶體資源。 -另外,請注意,當啟用部份額外的過濾規則列表,將有可能增加網站排版破損的機率 -- 尤其是那些通常被用作 host 檔案的過濾規則列表。 +另外,請注意,某些過濾規則載入後可能造成網站版面出現問題 -- 尤其是通常作為 host 檔案的過濾規則。 *** -若是沒有這些預置的過濾規則列表,這個過展套件本身並沒有什麼。 所以當您真的想要貢獻些什麼的時候,請想想那些,您正在使用的,被人們努力維護並免費提供給所有人的過濾規則列表。 +若沒有這些預設的過濾規則,這個擴充套件本身沒什麼用, 所以若您真的想要貢獻些什麼的話,請想想那些人們花時間努力維護並免費提供給您與其他人使用的過濾規則。 *** -免費。 -以公眾授權開放原始程式碼(GPLv3) +免費且自由。 +以公眾授權開放程式原始碼(GPLv3)。 獻給所有人。 貢獻者 @ Github: https://github.com/gorhill/uBlock/graphs/contributors -貢獻者 @ Crowdin: https://crowdin.net/project/ublock +翻譯者 @ Crowdin: https://crowdin.net/project/ublock *** -當您在做評論時,請在您的心中記住一件事,此擴展套件目前僅是一個相當初期的版本。 +當您做評論時,請記住,此擴展套件目前仍是相當初期的版本。 專案更新日誌: https://github.com/gorhill/uBlock/releases diff --git a/dist/firefox/updates.json b/dist/firefox/updates.json new file mode 100644 index 0000000000000..e5773b61a320e --- /dev/null +++ b/dist/firefox/updates.json @@ -0,0 +1,17 @@ +{ + "addons": { + "uBlock0@raymondhill.net": { + "updates": [ + { + "version": "1.69.1.4", + "browser_specific_settings": { + "gecko": { + "strict_min_version": "115.0" + } + }, + "update_link": "https://github.com/gorhill/uBlock/releases/download/1.69.1b4/uBlock0_1.69.1b4.firefox.signed.xpi" + } + ] + } + } +} \ No newline at end of file diff --git a/dist/version b/dist/version new file mode 100644 index 0000000000000..a15f3c2bab47f --- /dev/null +++ b/dist/version @@ -0,0 +1 @@ +1.69.1.4 \ No newline at end of file diff --git a/doc/benchmarks/cpu-usage-overall-20141226.ods b/doc/benchmarks/cpu-usage-overall-20141226.ods deleted file mode 100644 index ee20c20e6f2a1..0000000000000 Binary files a/doc/benchmarks/cpu-usage-overall-20141226.ods and /dev/null differ diff --git a/doc/benchmarks/cpu-usage-overall-chart-20141226.png b/doc/benchmarks/cpu-usage-overall-chart-20141226.png deleted file mode 100644 index 148a663fa152c..0000000000000 Binary files a/doc/benchmarks/cpu-usage-overall-chart-20141226.png and /dev/null differ diff --git a/doc/benchmarks/cpu-usage-overall-notes.txt b/doc/benchmarks/cpu-usage-overall-notes.txt deleted file mode 100644 index 78cbf643de356..0000000000000 --- a/doc/benchmarks/cpu-usage-overall-notes.txt +++ /dev/null @@ -1,31 +0,0 @@ -Steps, roughly: - -Capture Task Manager using SimpleScreenRecorder - -Launch reference benchmark - -Stop and save capture once reference benchmark completes - -Extract/crop/scale area to OCR (the CPU figures) - - avconv -i ublock-cpu.webm -r 4 -vsync 1 -vf "[in] crop=40:86:310:100 [T1], [T1] scale=160:360 [out]" -t 2400 img/img-%04d.png - -Execute tesseract custom script: - - ./tessall - -`all.txt` contains a csv of the results. -Paste in spreadsheet. Etc. - - -`tessal` script: - - #!/bin/sh - rm all.txt - echo - for i in img/img*.png; do - echo -ne '\r' $i - b=`basename $i .png` - tesseract $i out -psm 6 digits 1>/dev/null 2>&1 - cat out.txt | perl -p -000 -e 's/(\d+)\s+/\1,/g' | perl -pe 's/,$/\n/' >> all.txt - done \ No newline at end of file diff --git a/doc/benchmarks/filters-load-performance-0.8.9.0.png b/doc/benchmarks/filters-load-performance-0.8.9.0.png deleted file mode 100644 index 264a873e8e625..0000000000000 Binary files a/doc/benchmarks/filters-load-performance-0.8.9.0.png and /dev/null differ diff --git a/doc/benchmarks/mem-usage-20140918-after.png b/doc/benchmarks/mem-usage-20140918-after.png deleted file mode 100644 index b0f8dc40a720e..0000000000000 Binary files a/doc/benchmarks/mem-usage-20140918-after.png and /dev/null differ diff --git a/doc/benchmarks/mem-usage-20140918-before.png b/doc/benchmarks/mem-usage-20140918-before.png deleted file mode 100644 index fc9724362eacf..0000000000000 Binary files a/doc/benchmarks/mem-usage-20140918-before.png and /dev/null differ diff --git a/doc/benchmarks/mem-usage-20141223-after.png b/doc/benchmarks/mem-usage-20141223-after.png deleted file mode 100644 index fbf32b1a34764..0000000000000 Binary files a/doc/benchmarks/mem-usage-20141223-after.png and /dev/null differ diff --git a/doc/benchmarks/mem-usage-20141223-before.png b/doc/benchmarks/mem-usage-20141223-before.png deleted file mode 100644 index 33a91e94f127c..0000000000000 Binary files a/doc/benchmarks/mem-usage-20141223-before.png and /dev/null differ diff --git a/doc/benchmarks/mem-usage-in-page-20140919-abp.png b/doc/benchmarks/mem-usage-in-page-20140919-abp.png deleted file mode 100644 index 2cb61d0649de3..0000000000000 Binary files a/doc/benchmarks/mem-usage-in-page-20140919-abp.png and /dev/null differ diff --git a/doc/benchmarks/mem-usage-in-page-20140919-none.png b/doc/benchmarks/mem-usage-in-page-20140919-none.png deleted file mode 100644 index c2d2c244d9ac4..0000000000000 Binary files a/doc/benchmarks/mem-usage-in-page-20140919-none.png and /dev/null differ diff --git a/doc/benchmarks/mem-usage-in-page-20140919-ublock.png b/doc/benchmarks/mem-usage-in-page-20140919-ublock.png deleted file mode 100644 index 7e22d8608dab4..0000000000000 Binary files a/doc/benchmarks/mem-usage-in-page-20140919-ublock.png and /dev/null differ diff --git a/doc/benchmarks/mem-usage-in-page-20141224-abp-more.png b/doc/benchmarks/mem-usage-in-page-20141224-abp-more.png deleted file mode 100644 index 673c877fb4bdd..0000000000000 Binary files a/doc/benchmarks/mem-usage-in-page-20141224-abp-more.png and /dev/null differ diff --git a/doc/benchmarks/mem-usage-in-page-20141224-abp.png b/doc/benchmarks/mem-usage-in-page-20141224-abp.png deleted file mode 100644 index 67480a9043af4..0000000000000 Binary files a/doc/benchmarks/mem-usage-in-page-20141224-abp.png and /dev/null differ diff --git a/doc/benchmarks/mem-usage-in-page-20141224-none.png b/doc/benchmarks/mem-usage-in-page-20141224-none.png deleted file mode 100644 index fcc7004144f42..0000000000000 Binary files a/doc/benchmarks/mem-usage-in-page-20141224-none.png and /dev/null differ diff --git a/doc/benchmarks/mem-usage-in-page-20141224-ublock.png b/doc/benchmarks/mem-usage-in-page-20141224-ublock.png deleted file mode 100644 index b5e4d0b8fd20a..0000000000000 Binary files a/doc/benchmarks/mem-usage-in-page-20141224-ublock.png and /dev/null differ diff --git a/doc/benchmarks/mem-usage-overall-20141224.ods b/doc/benchmarks/mem-usage-overall-20141224.ods deleted file mode 100644 index 6dd9a671d907e..0000000000000 Binary files a/doc/benchmarks/mem-usage-overall-20141224.ods and /dev/null differ diff --git a/doc/benchmarks/mem-usage-overall-chart-20141224.png b/doc/benchmarks/mem-usage-overall-chart-20141224.png deleted file mode 100644 index e6f89e3935134..0000000000000 Binary files a/doc/benchmarks/mem-usage-overall-chart-20141224.png and /dev/null differ diff --git a/doc/benchmarks/mem-usage-overall-chart-20150205.png b/doc/benchmarks/mem-usage-overall-chart-20150205.png deleted file mode 100644 index d817fa440de36..0000000000000 Binary files a/doc/benchmarks/mem-usage-overall-chart-20150205.png and /dev/null differ diff --git a/doc/benchmarks/mem-usage-overall-chart-safari-20150205.png b/doc/benchmarks/mem-usage-overall-chart-safari-20150205.png deleted file mode 100644 index 3a3d511a84b1b..0000000000000 Binary files a/doc/benchmarks/mem-usage-overall-chart-safari-20150205.png and /dev/null differ diff --git a/doc/benchmarks/privex-201407-22.ods b/doc/benchmarks/privex-201407-22.ods deleted file mode 100644 index 895684b140adf..0000000000000 Binary files a/doc/benchmarks/privex-201407-22.ods and /dev/null differ diff --git a/doc/benchmarks/privex-201409-30.ods b/doc/benchmarks/privex-201409-30.ods deleted file mode 100644 index ced2f0f74aa73..0000000000000 Binary files a/doc/benchmarks/privex-201409-30.ods and /dev/null differ diff --git a/doc/benchmarks/privex-201409-30.png b/doc/benchmarks/privex-201409-30.png deleted file mode 100644 index 3f6935dbbe22a..0000000000000 Binary files a/doc/benchmarks/privex-201409-30.png and /dev/null differ diff --git a/doc/benchmarks/privex-201502-16.ods b/doc/benchmarks/privex-201502-16.ods deleted file mode 100644 index e4b103014b941..0000000000000 Binary files a/doc/benchmarks/privex-201502-16.ods and /dev/null differ diff --git a/doc/benchmarks/privex-201502-16.png b/doc/benchmarks/privex-201502-16.png deleted file mode 100644 index 9201652405a21..0000000000000 Binary files a/doc/benchmarks/privex-201502-16.png and /dev/null differ diff --git a/doc/benchmarks/setup-performance-0.8.9.0.ods b/doc/benchmarks/setup-performance-0.8.9.0.ods deleted file mode 100644 index 5cdf386fa9361..0000000000000 Binary files a/doc/benchmarks/setup-performance-0.8.9.0.ods and /dev/null differ diff --git a/doc/benchmarks/setup-performance-0.8.9.0.png b/doc/benchmarks/setup-performance-0.8.9.0.png deleted file mode 100644 index 3ef5d26afae49..0000000000000 Binary files a/doc/benchmarks/setup-performance-0.8.9.0.png and /dev/null differ diff --git a/doc/benchmarks/setup-performance-internals.png b/doc/benchmarks/setup-performance-internals.png deleted file mode 100644 index 16922923cb9f4..0000000000000 Binary files a/doc/benchmarks/setup-performance-internals.png and /dev/null differ diff --git a/doc/benchmarks/ublock-vs-abp-timeline.ods b/doc/benchmarks/ublock-vs-abp-timeline.ods deleted file mode 100644 index 8dcba54cd966d..0000000000000 Binary files a/doc/benchmarks/ublock-vs-abp-timeline.ods and /dev/null differ diff --git a/doc/benchmarks/vim-test-abp-vs-ublock.png b/doc/benchmarks/vim-test-abp-vs-ublock.png deleted file mode 100644 index 0d8abc4cc4169..0000000000000 Binary files a/doc/benchmarks/vim-test-abp-vs-ublock.png and /dev/null differ diff --git a/doc/img/3rd-party-filters-custom.png b/doc/img/3rd-party-filters-custom.png deleted file mode 100644 index 228f45c934914..0000000000000 Binary files a/doc/img/3rd-party-filters-custom.png and /dev/null differ diff --git a/doc/img/abp-abe.png b/doc/img/abp-abe.png deleted file mode 100644 index 924fce08c45a1..0000000000000 Binary files a/doc/img/abp-abe.png and /dev/null differ diff --git a/doc/img/abp-obr.png b/doc/img/abp-obr.png deleted file mode 100644 index 9556b3b670c47..0000000000000 Binary files a/doc/img/abp-obr.png and /dev/null differ diff --git a/doc/img/abp-own-mem.png b/doc/img/abp-own-mem.png deleted file mode 100644 index 45e4f9316945f..0000000000000 Binary files a/doc/img/abp-own-mem.png and /dev/null differ diff --git a/doc/img/abp-vs-ublock-page-1.png b/doc/img/abp-vs-ublock-page-1.png deleted file mode 100644 index 299c354e60d4e..0000000000000 Binary files a/doc/img/abp-vs-ublock-page-1.png and /dev/null differ diff --git a/doc/img/acid3test-mem.png b/doc/img/acid3test-mem.png deleted file mode 100644 index 9a494dd93def0..0000000000000 Binary files a/doc/img/acid3test-mem.png and /dev/null differ diff --git a/doc/img/behind-the-scene-popup.gif b/doc/img/behind-the-scene-popup.gif deleted file mode 100644 index d7d0af50f15ac..0000000000000 Binary files a/doc/img/behind-the-scene-popup.gif and /dev/null differ diff --git a/doc/img/bgpage-cpu-si.comx10.png b/doc/img/bgpage-cpu-si.comx10.png deleted file mode 100644 index 59a43bd673350..0000000000000 Binary files a/doc/img/bgpage-cpu-si.comx10.png and /dev/null differ diff --git a/doc/img/chrome-store-david-h-mason.png b/doc/img/chrome-store-david-h-mason.png deleted file mode 100644 index 3a214dbd13afa..0000000000000 Binary files a/doc/img/chrome-store-david-h-mason.png and /dev/null differ diff --git a/doc/img/df-dd-01.png b/doc/img/df-dd-01.png deleted file mode 100644 index c0a91e976b5bc..0000000000000 Binary files a/doc/img/df-dd-01.png and /dev/null differ diff --git a/doc/img/df-dd-02.png b/doc/img/df-dd-02.png deleted file mode 100644 index 13b2af7bbcf69..0000000000000 Binary files a/doc/img/df-dd-02.png and /dev/null differ diff --git a/doc/img/df-dd-03.png b/doc/img/df-dd-03.png deleted file mode 100644 index df399ad1b53d8..0000000000000 Binary files a/doc/img/df-dd-03.png and /dev/null differ diff --git a/doc/img/df-qg-01.png b/doc/img/df-qg-01.png deleted file mode 100644 index 3c0a4a84694c7..0000000000000 Binary files a/doc/img/df-qg-01.png and /dev/null differ diff --git a/doc/img/df-qg-02.png b/doc/img/df-qg-02.png deleted file mode 100644 index 0e2f10ad4c0b7..0000000000000 Binary files a/doc/img/df-qg-02.png and /dev/null differ diff --git a/doc/img/df-qg-03.png b/doc/img/df-qg-03.png deleted file mode 100644 index f8b32e7d8c74d..0000000000000 Binary files a/doc/img/df-qg-03.png and /dev/null differ diff --git a/doc/img/df-qg-04.png b/doc/img/df-qg-04.png deleted file mode 100644 index fb0c23f6764fd..0000000000000 Binary files a/doc/img/df-qg-04.png and /dev/null differ diff --git a/doc/img/df-qg-05.png b/doc/img/df-qg-05.png deleted file mode 100644 index 18644fd55dee4..0000000000000 Binary files a/doc/img/df-qg-05.png and /dev/null differ diff --git a/doc/img/df-qg-06.png b/doc/img/df-qg-06.png deleted file mode 100644 index 87455784e43fa..0000000000000 Binary files a/doc/img/df-qg-06.png and /dev/null differ diff --git a/doc/img/df-qg-07.png b/doc/img/df-qg-07.png deleted file mode 100644 index 7754c1c6e8ac4..0000000000000 Binary files a/doc/img/df-qg-07.png and /dev/null differ diff --git a/doc/img/df-qg-08.png b/doc/img/df-qg-08.png deleted file mode 100644 index 9f94271093849..0000000000000 Binary files a/doc/img/df-qg-08.png and /dev/null differ diff --git a/doc/img/df-qg-09.png b/doc/img/df-qg-09.png deleted file mode 100644 index 91de6acb7f1ba..0000000000000 Binary files a/doc/img/df-qg-09.png and /dev/null differ diff --git a/doc/img/df-qg-10.png b/doc/img/df-qg-10.png deleted file mode 100644 index 76b3ed613d332..0000000000000 Binary files a/doc/img/df-qg-10.png and /dev/null differ diff --git a/doc/img/df-qg-11.png b/doc/img/df-qg-11.png deleted file mode 100644 index b4a92d312aee2..0000000000000 Binary files a/doc/img/df-qg-11.png and /dev/null differ diff --git a/doc/img/df-qg-12.png b/doc/img/df-qg-12.png deleted file mode 100644 index 5980ae1cb8ac6..0000000000000 Binary files a/doc/img/df-qg-12.png and /dev/null differ diff --git a/doc/img/df-turn-off-cosmetic.gif b/doc/img/df-turn-off-cosmetic.gif deleted file mode 100644 index f3e2dc96c25ca..0000000000000 Binary files a/doc/img/df-turn-off-cosmetic.gif and /dev/null differ diff --git a/doc/img/df-tut-01.png b/doc/img/df-tut-01.png deleted file mode 100644 index f396c455da666..0000000000000 Binary files a/doc/img/df-tut-01.png and /dev/null differ diff --git a/doc/img/df-tut-02.png b/doc/img/df-tut-02.png deleted file mode 100644 index dac6ef340921a..0000000000000 Binary files a/doc/img/df-tut-02.png and /dev/null differ diff --git a/doc/img/df-tut-03.png b/doc/img/df-tut-03.png deleted file mode 100644 index a7287dbf88eb6..0000000000000 Binary files a/doc/img/df-tut-03.png and /dev/null differ diff --git a/doc/img/df-tut-04.png b/doc/img/df-tut-04.png deleted file mode 100644 index 91569e7589c31..0000000000000 Binary files a/doc/img/df-tut-04.png and /dev/null differ diff --git a/doc/img/df-tut-05.png b/doc/img/df-tut-05.png deleted file mode 100644 index 23aeb3d4e67b7..0000000000000 Binary files a/doc/img/df-tut-05.png and /dev/null differ diff --git a/doc/img/df-tut-06.png b/doc/img/df-tut-06.png deleted file mode 100644 index 9c4bdaee657fe..0000000000000 Binary files a/doc/img/df-tut-06.png and /dev/null differ diff --git a/doc/img/dynamic-filtering-1.png b/doc/img/dynamic-filtering-1.png deleted file mode 100644 index 76e9bbc545c4e..0000000000000 Binary files a/doc/img/dynamic-filtering-1.png and /dev/null differ diff --git a/doc/img/dynamic-filtering-2.png b/doc/img/dynamic-filtering-2.png deleted file mode 100644 index 9a99cd0294c45..0000000000000 Binary files a/doc/img/dynamic-filtering-2.png and /dev/null differ diff --git a/doc/img/dynamic-filtering-3.png b/doc/img/dynamic-filtering-3.png deleted file mode 100644 index ab24f069c50f5..0000000000000 Binary files a/doc/img/dynamic-filtering-3.png and /dev/null differ diff --git a/doc/img/dynamic-filtering-4.png b/doc/img/dynamic-filtering-4.png deleted file mode 100644 index 48eeb6df73894..0000000000000 Binary files a/doc/img/dynamic-filtering-4.png and /dev/null differ diff --git a/doc/img/dynamic-filtering-5.png b/doc/img/dynamic-filtering-5.png deleted file mode 100644 index 33c18bd25d254..0000000000000 Binary files a/doc/img/dynamic-filtering-5.png and /dev/null differ diff --git a/doc/img/dynamic-filtering-6.png b/doc/img/dynamic-filtering-6.png deleted file mode 100644 index be7982a490ee6..0000000000000 Binary files a/doc/img/dynamic-filtering-6.png and /dev/null differ diff --git a/doc/img/dynamic-filtering-7.png b/doc/img/dynamic-filtering-7.png deleted file mode 100644 index 1a336866d9a64..0000000000000 Binary files a/doc/img/dynamic-filtering-7.png and /dev/null differ diff --git a/doc/img/dynamic-filtering-8.png b/doc/img/dynamic-filtering-8.png deleted file mode 100644 index 8c9f6715307af..0000000000000 Binary files a/doc/img/dynamic-filtering-8.png and /dev/null differ diff --git a/doc/img/dynamic-filtering-9.png b/doc/img/dynamic-filtering-9.png deleted file mode 100644 index 98acfd9efc2b8..0000000000000 Binary files a/doc/img/dynamic-filtering-9.png and /dev/null differ diff --git a/doc/img/filtering-overview-plain.svg b/doc/img/filtering-overview-plain.svg deleted file mode 100644 index 53cd343cf051e..0000000000000 --- a/doc/img/filtering-overview-plain.svg +++ /dev/null @@ -1,1110 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - contextwhitelisted? - local dynamicfiltering rule? - - allow - - no - noop - - no - - - global dynamicfiltering rule? - - allow - noop - - no - - - static filtering? - - - - advanced usermode? - yes - - - no - - - - - no filter - context - URL ofresource - URL of page - - block - - block - - exception filter - - block filter - remote server - yes - - - your browser - - - url filtering rule? - - allow - - block - no - - - noop - - - diff --git a/doc/img/hn-abp.png b/doc/img/hn-abp.png deleted file mode 100644 index 83affe96acb63..0000000000000 Binary files a/doc/img/hn-abp.png and /dev/null differ diff --git a/doc/img/hn-alone.png b/doc/img/hn-alone.png deleted file mode 100644 index 0af6741e95022..0000000000000 Binary files a/doc/img/hn-alone.png and /dev/null differ diff --git a/doc/img/hn-ublock.png b/doc/img/hn-ublock.png deleted file mode 100644 index e736f3c3b09ea..0000000000000 Binary files a/doc/img/hn-ublock.png and /dev/null differ diff --git a/doc/img/icon38.png b/doc/img/icon38.png deleted file mode 100644 index 09a57d2ffb6e3..0000000000000 Binary files a/doc/img/icon38.png and /dev/null differ diff --git a/doc/img/icon38@2x.png b/doc/img/icon38@2x.png deleted file mode 100644 index b95e8fb870c2a..0000000000000 Binary files a/doc/img/icon38@2x.png and /dev/null differ diff --git a/doc/img/languageicon-36.png b/doc/img/languageicon-36.png deleted file mode 100644 index 486f891cbcf84..0000000000000 Binary files a/doc/img/languageicon-36.png and /dev/null differ diff --git a/doc/img/leaverou-adblock-is-theft.png b/doc/img/leaverou-adblock-is-theft.png deleted file mode 100644 index 20eb5fd7da858..0000000000000 Binary files a/doc/img/leaverou-adblock-is-theft.png and /dev/null differ diff --git a/doc/img/local-mirroring-example-1.png b/doc/img/local-mirroring-example-1.png deleted file mode 100644 index 14f958705ebc6..0000000000000 Binary files a/doc/img/local-mirroring-example-1.png and /dev/null differ diff --git a/doc/img/local-mirroring.png b/doc/img/local-mirroring.png deleted file mode 100644 index c8bb290249873..0000000000000 Binary files a/doc/img/local-mirroring.png and /dev/null differ diff --git a/doc/img/mem-footprint-at-launch-time.png b/doc/img/mem-footprint-at-launch-time.png deleted file mode 100644 index 5cf2e5f7645ed..0000000000000 Binary files a/doc/img/mem-footprint-at-launch-time.png and /dev/null differ diff --git a/doc/img/opera-300x188.png b/doc/img/opera-300x188.png deleted file mode 100644 index 51b8324aeef21..0000000000000 Binary files a/doc/img/opera-300x188.png and /dev/null differ diff --git a/doc/img/page-block.png b/doc/img/page-block.png deleted file mode 100644 index 9b70df070f913..0000000000000 Binary files a/doc/img/page-block.png and /dev/null differ diff --git a/doc/img/popup-1.png b/doc/img/popup-1.png deleted file mode 100644 index fbf9a178dc43f..0000000000000 Binary files a/doc/img/popup-1.png and /dev/null differ diff --git a/doc/img/popup-1a.png b/doc/img/popup-1a.png deleted file mode 100644 index 9f3a226bf5d21..0000000000000 Binary files a/doc/img/popup-1a.png and /dev/null differ diff --git a/doc/img/popup-1b.png b/doc/img/popup-1b.png deleted file mode 100644 index 414001a397d9c..0000000000000 Binary files a/doc/img/popup-1b.png and /dev/null differ diff --git a/doc/img/popup-1c-1.png b/doc/img/popup-1c-1.png deleted file mode 100644 index cba876e57a77c..0000000000000 Binary files a/doc/img/popup-1c-1.png and /dev/null differ diff --git a/doc/img/popup-1c.png b/doc/img/popup-1c.png deleted file mode 100644 index 5191f129e48c4..0000000000000 Binary files a/doc/img/popup-1c.png and /dev/null differ diff --git a/doc/img/popup-1d.png b/doc/img/popup-1d.png deleted file mode 100644 index 52341fbf3aee6..0000000000000 Binary files a/doc/img/popup-1d.png and /dev/null differ diff --git a/doc/img/popup-1e.png b/doc/img/popup-1e.png deleted file mode 100644 index 5b3eb028db525..0000000000000 Binary files a/doc/img/popup-1e.png and /dev/null differ diff --git a/doc/img/popup-1f.png b/doc/img/popup-1f.png deleted file mode 100644 index 04284e1b9993c..0000000000000 Binary files a/doc/img/popup-1f.png and /dev/null differ diff --git a/doc/img/popup-1g.png b/doc/img/popup-1g.png deleted file mode 100644 index fbca0d8011644..0000000000000 Binary files a/doc/img/popup-1g.png and /dev/null differ diff --git a/doc/img/popup-1h.png b/doc/img/popup-1h.png deleted file mode 100644 index 671af46ced142..0000000000000 Binary files a/doc/img/popup-1h.png and /dev/null differ diff --git a/doc/img/popup-1i.png b/doc/img/popup-1i.png deleted file mode 100644 index dab780198e54e..0000000000000 Binary files a/doc/img/popup-1i.png and /dev/null differ diff --git a/doc/img/popup-1j.png b/doc/img/popup-1j.png deleted file mode 100644 index 0b3f0ce26a382..0000000000000 Binary files a/doc/img/popup-1j.png and /dev/null differ diff --git a/doc/img/popup-1k.png b/doc/img/popup-1k.png deleted file mode 100644 index 1c78cb122403c..0000000000000 Binary files a/doc/img/popup-1k.png and /dev/null differ diff --git a/doc/img/popup-2.png b/doc/img/popup-2.png deleted file mode 100644 index e9f50109c7cb5..0000000000000 Binary files a/doc/img/popup-2.png and /dev/null differ diff --git a/doc/img/privacy-benchmark.png b/doc/img/privacy-benchmark.png deleted file mode 100644 index 3e93b5d688dd8..0000000000000 Binary files a/doc/img/privacy-benchmark.png and /dev/null differ diff --git a/doc/img/profiling-cosmetic-filters-v0.3.png b/doc/img/profiling-cosmetic-filters-v0.3.png deleted file mode 100644 index a9b1abf1a194d..0000000000000 Binary files a/doc/img/profiling-cosmetic-filters-v0.3.png and /dev/null differ diff --git a/doc/img/profiling-cosmetic-filters-v0.4.png b/doc/img/profiling-cosmetic-filters-v0.4.png deleted file mode 100644 index b84c996e542ec..0000000000000 Binary files a/doc/img/profiling-cosmetic-filters-v0.4.png and /dev/null differ diff --git a/doc/img/rlogger-01.png b/doc/img/rlogger-01.png deleted file mode 100644 index b25e7b1268006..0000000000000 Binary files a/doc/img/rlogger-01.png and /dev/null differ diff --git a/doc/img/rlogger-02.png b/doc/img/rlogger-02.png deleted file mode 100644 index 8e6a1fc98ae6d..0000000000000 Binary files a/doc/img/rlogger-02.png and /dev/null differ diff --git a/doc/img/rlogger-03.png b/doc/img/rlogger-03.png deleted file mode 100644 index fde49f26f71f6..0000000000000 Binary files a/doc/img/rlogger-03.png and /dev/null differ diff --git a/doc/img/rlogger-04.png b/doc/img/rlogger-04.png deleted file mode 100644 index f27db528312af..0000000000000 Binary files a/doc/img/rlogger-04.png and /dev/null differ diff --git a/doc/img/rlogger-05.png b/doc/img/rlogger-05.png deleted file mode 100644 index de66d0a40e5d7..0000000000000 Binary files a/doc/img/rlogger-05.png and /dev/null differ diff --git a/doc/img/rlogger-06.png b/doc/img/rlogger-06.png deleted file mode 100644 index cce3aaeea4489..0000000000000 Binary files a/doc/img/rlogger-06.png and /dev/null differ diff --git a/doc/img/ss-chromium-1.png b/doc/img/ss-chromium-1.png deleted file mode 100644 index 13776d9ac6b07..0000000000000 Binary files a/doc/img/ss-chromium-1.png and /dev/null differ diff --git a/doc/img/ss-chromium-2.png b/doc/img/ss-chromium-2.png deleted file mode 100644 index e63ed4ed33206..0000000000000 Binary files a/doc/img/ss-chromium-2.png and /dev/null differ diff --git a/doc/img/ss-chromium-3.png b/doc/img/ss-chromium-3.png deleted file mode 100644 index 6bb860439dd5e..0000000000000 Binary files a/doc/img/ss-chromium-3.png and /dev/null differ diff --git a/doc/img/ss-chromium-4.png b/doc/img/ss-chromium-4.png deleted file mode 100644 index 8992ec71f3389..0000000000000 Binary files a/doc/img/ss-chromium-4.png and /dev/null differ diff --git a/doc/img/ss-element-picker.png b/doc/img/ss-element-picker.png deleted file mode 100644 index dc9afe9743e7e..0000000000000 Binary files a/doc/img/ss-element-picker.png and /dev/null differ diff --git a/doc/img/ss-opera-1.png b/doc/img/ss-opera-1.png deleted file mode 100644 index 4e0c349428a0f..0000000000000 Binary files a/doc/img/ss-opera-1.png and /dev/null differ diff --git a/doc/img/ss-opera-2.png b/doc/img/ss-opera-2.png deleted file mode 100644 index bffef376cde21..0000000000000 Binary files a/doc/img/ss-opera-2.png and /dev/null differ diff --git a/doc/img/ss-opera-3.png b/doc/img/ss-opera-3.png deleted file mode 100644 index 3c3bde10fceec..0000000000000 Binary files a/doc/img/ss-opera-3.png and /dev/null differ diff --git a/doc/img/tips-n-tricks-001.png b/doc/img/tips-n-tricks-001.png deleted file mode 100644 index bbb4647f2f841..0000000000000 Binary files a/doc/img/tips-n-tricks-001.png and /dev/null differ diff --git a/doc/img/tips-n-tricks-002.png b/doc/img/tips-n-tricks-002.png deleted file mode 100644 index 840adafeeb616..0000000000000 Binary files a/doc/img/tips-n-tricks-002.png and /dev/null differ diff --git a/doc/img/ublock-16.svg b/doc/img/ublock-16.svg deleted file mode 100644 index 381743023bfcb..0000000000000 --- a/doc/img/ublock-16.svg +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - Use gray 50% for the "off" color - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/img/ublock-blocks.gif b/doc/img/ublock-blocks.gif deleted file mode 100644 index 9e26c091179f8..0000000000000 Binary files a/doc/img/ublock-blocks.gif and /dev/null differ diff --git a/doc/img/ublock-obr.png b/doc/img/ublock-obr.png deleted file mode 100644 index 9840aa1db28bb..0000000000000 Binary files a/doc/img/ublock-obr.png and /dev/null differ diff --git a/doc/img/ublock-own-mem.png b/doc/img/ublock-own-mem.png deleted file mode 100644 index 3172f308d85da..0000000000000 Binary files a/doc/img/ublock-own-mem.png and /dev/null differ diff --git a/doc/img/ublock-vs-abp-memory-201409-a.png b/doc/img/ublock-vs-abp-memory-201409-a.png deleted file mode 100644 index baf8fe40f77d4..0000000000000 Binary files a/doc/img/ublock-vs-abp-memory-201409-a.png and /dev/null differ diff --git a/doc/img/ublock-vs-abp-memory-201409-b.png b/doc/img/ublock-vs-abp-memory-201409-b.png deleted file mode 100644 index 6c13a944e05d0..0000000000000 Binary files a/doc/img/ublock-vs-abp-memory-201409-b.png and /dev/null differ diff --git a/doc/img/ublock.svg b/doc/img/ublock.svg deleted file mode 100644 index db70ac0a9d59e..0000000000000 --- a/doc/img/ublock.svg +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - Use gray 50% for the "off" color - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/img/wiki-hphosts.png b/doc/img/wiki-hphosts.png deleted file mode 100644 index 1789a5c235d8c..0000000000000 Binary files a/doc/img/wiki-hphosts.png and /dev/null differ diff --git a/doc/media/abp-vs-ublock-ns.webm b/doc/media/abp-vs-ublock-ns.webm deleted file mode 100644 index 7202f83fa6b84..0000000000000 Binary files a/doc/media/abp-vs-ublock-ns.webm and /dev/null differ diff --git a/doc/media/ublock-vs-abp-cpu-2.png b/doc/media/ublock-vs-abp-cpu-2.png deleted file mode 100644 index 3885a7fbf97b9..0000000000000 Binary files a/doc/media/ublock-vs-abp-cpu-2.png and /dev/null differ diff --git a/doc/media/ublock-vs-abp-cpu-2.webm b/doc/media/ublock-vs-abp-cpu-2.webm deleted file mode 100644 index bb13d12f19cc7..0000000000000 Binary files a/doc/media/ublock-vs-abp-cpu-2.webm and /dev/null differ diff --git a/doc/media/ublock-vs-none-ns.webm b/doc/media/ublock-vs-none-ns.webm deleted file mode 100644 index 6a148a4f7fc2e..0000000000000 Binary files a/doc/media/ublock-vs-none-ns.webm and /dev/null differ diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000000000..6e0353f2dffea --- /dev/null +++ b/docs/README.md @@ -0,0 +1,3 @@ +## uBlock Origin pages + +HTML: . \ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000000000..eccb4f7d7c2b7 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,14 @@ + + + + + +uBlock Origin pages + + +

uBlock Origin pages

+ + + diff --git a/docs/tests/css-selector-based-cosmetic-filters.html b/docs/tests/css-selector-based-cosmetic-filters.html new file mode 100644 index 0000000000000..9c19981218a68 --- /dev/null +++ b/docs/tests/css-selector-based-cosmetic-filters.html @@ -0,0 +1,150 @@ + + + + + +CSS selector-based cosmetic filters + + + +

CSS selector-based cosmetic filters

+

Back +

+

Filters

+
+ +

Tests

+
+ +
+
+ #ccf #a1 .fail +
+ +
+
+ #ccf #a2 .fail:not(.a2) +
+ +
+
+ #ccf #a3 .fail +
+ +
+
+ #ccf #a4 .fail:not(.a4) +
+ +
+
+ #ccf #a5 .fail:style(visibility: hidden) +
+ +
+
+ #ccf #a6 .fail-pseudo::before +
+ +
+
+ #ccf #a7 .fail-pseudo::before +
+ +
+
+ #ccf #a8 .fail-pseudo::before:style(visibility: hidden) +
+ +
+ + + + diff --git a/docs/tests/hnbigset-benchmark.html b/docs/tests/hnbigset-benchmark.html new file mode 100644 index 0000000000000..6816f4fd0dfed --- /dev/null +++ b/docs/tests/hnbigset-benchmark.html @@ -0,0 +1,268 @@ + + + + + + + +

Benchmark of hostname-lookup from small to large set:
Set, HNTrie

+

Back

+

 

+

+
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/docs/tests/hnset-benchmark.html b/docs/tests/hnset-benchmark.html new file mode 100644 index 0000000000000..694a6204b9dc4 --- /dev/null +++ b/docs/tests/hnset-benchmark.html @@ -0,0 +1,424 @@ + + + + + + + +

Benchmark of hostname-lookup from small to medium set:
Set, RegExp, HNTrie

+

Back

+

 

+

+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/docs/tests/hntrie-test.html b/docs/tests/hntrie-test.html new file mode 100644 index 0000000000000..ada8ecd68b48b --- /dev/null +++ b/docs/tests/hntrie-test.html @@ -0,0 +1,226 @@ + + + + + + + +

HNTrieContainer test

+

Back

+

 

+
+
+ + + + + + diff --git a/docs/tests/hostname-pool.js b/docs/tests/hostname-pool.js new file mode 100644 index 0000000000000..57c959e5def67 --- /dev/null +++ b/docs/tests/hostname-pool.js @@ -0,0 +1,45762 @@ +/* exported hostnamePool */ + +'use strict'; + +// Following hostnames were extracted from', +// "hpHosts - Ad and Tracking servers only",', +// except for the first few I added to test', +// specific cases.', +const hostnamePool = [ +'a', +'b.a', +'cb.a', +'005.free-counter.co.uk', +'006.free-adult-counters.x-xtra.com', +'006.free-counter.co.uk', +'007.free-counter.co.uk', +'007.go2cloud.org', +'0075-7112-e7eb-f9b9.reporo.net', +'008.free-counter.co.uk', +'00zasdf.pw', +'011i5.voluumtrk.com', +'0124498474f7c13ac9a2-6b191446002b31342189d56cabcf5227.r11.cf2.rackcdn.com', +'02gzx.voluumtrk.com', +'0427d7.se', +'04fd-74b3-b2f6-c645.reporo.net', +'050003.voodoo.com', +'050005.voodoo.com', +'05ni7.voluumtrk.com', +'0602v.voluumtrk.com', +'060810131024.c.mystat-in.net', +'06c5-dbbd-eb79-4cd4.reporo.net', +'06rph.voluumtrk.com', +'08.185.87.0.liveadvert.com', +'08.185.87.00.liveadvert.com', +'08.185.87.01.liveadvert.com', +'08.185.87.02.liveadvert.com', +'08.185.87.03.liveadvert.com', +'08.185.87.04.liveadvert.com', +'08.185.87.05.liveadvert.com', +'08.185.87.06.liveadvert.com', +'08.185.87.07.liveadvert.com', +'08.185.87.08.liveadvert.com', +'08.185.87.09.liveadvert.com', +'08.185.87.1.liveadvert.com', +'08.185.87.10.liveadvert.com', +'08.185.87.100.liveadvert.com', +'08.185.87.101.liveadvert.com', +'08.185.87.103.liveadvert.com', +'08.185.87.104.liveadvert.com', +'08.185.87.105.liveadvert.com', +'08.185.87.106.liveadvert.com', +'08.185.87.107.liveadvert.com', +'08.185.87.108.liveadvert.com', +'08.185.87.109.liveadvert.com', +'08.185.87.11.liveadvert.com', +'08.185.87.110.liveadvert.com', +'08.185.87.111.liveadvert.com', +'08.185.87.113.liveadvert.com', +'08.185.87.114.liveadvert.com', +'08.185.87.115.liveadvert.com', +'08.185.87.116.liveadvert.com', +'08.185.87.117.liveadvert.com', +'08.185.87.118.liveadvert.com', +'08.185.87.119.liveadvert.com', +'08.185.87.13.liveadvert.com', +'08.185.87.130.liveadvert.com', +'08.185.87.131.liveadvert.com', +'08.185.87.133.liveadvert.com', +'08.185.87.134.liveadvert.com', +'08.185.87.135.liveadvert.com', +'08.185.87.136.liveadvert.com', +'08.185.87.137.liveadvert.com', +'08.185.87.138.liveadvert.com', +'08.185.87.139.liveadvert.com', +'08.185.87.14.liveadvert.com', +'08.185.87.140.liveadvert.com', +'08.185.87.141.liveadvert.com', +'08.185.87.143.liveadvert.com', +'08.185.87.144.liveadvert.com', +'08.185.87.145.liveadvert.com', +'08.185.87.146.liveadvert.com', +'08.185.87.147.liveadvert.com', +'08.185.87.148.liveadvert.com', +'08.185.87.149.liveadvert.com', +'08.185.87.15.liveadvert.com', +'08.185.87.150.liveadvert.com', +'08.185.87.151.liveadvert.com', +'08.185.87.153.liveadvert.com', +'08.185.87.154.liveadvert.com', +'08.185.87.155.liveadvert.com', +'08.185.87.156.liveadvert.com', +'08.185.87.157.liveadvert.com', +'08.185.87.158.liveadvert.com', +'08.185.87.159.liveadvert.com', +'08.185.87.16.liveadvert.com', +'08.185.87.160.liveadvert.com', +'08.185.87.161.liveadvert.com', +'08.185.87.163.liveadvert.com', +'08.185.87.164.liveadvert.com', +'08.185.87.165.liveadvert.com', +'08.185.87.166.liveadvert.com', +'08.185.87.167.liveadvert.com', +'08.185.87.168.liveadvert.com', +'08.185.87.169.liveadvert.com', +'08.185.87.17.liveadvert.com', +'08.185.87.170.liveadvert.com', +'08.185.87.171.liveadvert.com', +'08.185.87.173.liveadvert.com', +'08.185.87.174.liveadvert.com', +'08.185.87.175.liveadvert.com', +'08.185.87.176.liveadvert.com', +'08.185.87.177.liveadvert.com', +'08.185.87.178.liveadvert.com', +'08.185.87.179.liveadvert.com', +'08.185.87.18.liveadvert.com', +'08.185.87.180.liveadvert.com', +'08.185.87.181.liveadvert.com', +'08.185.87.183.liveadvert.com', +'08.185.87.184.liveadvert.com', +'08.185.87.185.liveadvert.com', +'08.185.87.186.liveadvert.com', +'08.185.87.187.liveadvert.com', +'08.185.87.188.liveadvert.com', +'08.185.87.189.liveadvert.com', +'08.185.87.19.liveadvert.com', +'08.185.87.190.liveadvert.com', +'08.185.87.191.liveadvert.com', +'08.185.87.193.liveadvert.com', +'08.185.87.194.liveadvert.com', +'08.185.87.195.liveadvert.com', +'08.185.87.196.liveadvert.com', +'08.185.87.197.liveadvert.com', +'08.185.87.198.liveadvert.com', +'08.185.87.199.liveadvert.com', +'08.185.87.3.liveadvert.com', +'08.185.87.30.liveadvert.com', +'08.185.87.31.liveadvert.com', +'08.185.87.33.liveadvert.com', +'08.185.87.34.liveadvert.com', +'08.185.87.35.liveadvert.com', +'08.185.87.36.liveadvert.com', +'08.185.87.37.liveadvert.com', +'08.185.87.38.liveadvert.com', +'08.185.87.39.liveadvert.com', +'08.185.87.4.liveadvert.com', +'08.185.87.40.liveadvert.com', +'08.185.87.41.liveadvert.com', +'08.185.87.43.liveadvert.com', +'08.185.87.44.liveadvert.com', +'08.185.87.45.liveadvert.com', +'08.185.87.46.liveadvert.com', +'08.185.87.47.liveadvert.com', +'08.185.87.48.liveadvert.com', +'08.185.87.49.liveadvert.com', +'08.185.87.5.liveadvert.com', +'08.185.87.50.liveadvert.com', +'08.185.87.51.liveadvert.com', +'08.185.87.53.liveadvert.com', +'08.185.87.54.liveadvert.com', +'08.185.87.55.liveadvert.com', +'08.185.87.56.liveadvert.com', +'08.185.87.57.liveadvert.com', +'08.185.87.58.liveadvert.com', +'08.185.87.59.liveadvert.com', +'08.185.87.6.liveadvert.com', +'08.185.87.60.liveadvert.com', +'08.185.87.61.liveadvert.com', +'08.185.87.63.liveadvert.com', +'08.185.87.64.liveadvert.com', +'08.185.87.65.liveadvert.com', +'08.185.87.66.liveadvert.com', +'08.185.87.67.liveadvert.com', +'08.185.87.68.liveadvert.com', +'08.185.87.69.liveadvert.com', +'08.185.87.7.liveadvert.com', +'08.185.87.70.liveadvert.com', +'08.185.87.71.liveadvert.com', +'08.185.87.73.liveadvert.com', +'08.185.87.74.liveadvert.com', +'08.185.87.75.liveadvert.com', +'08.185.87.76.liveadvert.com', +'08.185.87.77.liveadvert.com', +'08.185.87.78.liveadvert.com', +'08.185.87.79.liveadvert.com', +'08.185.87.8.liveadvert.com', +'08.185.87.80.liveadvert.com', +'08.185.87.81.liveadvert.com', +'08.185.87.83.liveadvert.com', +'08.185.87.84.liveadvert.com', +'08.185.87.85.liveadvert.com', +'08.185.87.86.liveadvert.com', +'08.185.87.87.liveadvert.com', +'08.185.87.88.liveadvert.com', +'08.185.87.89.liveadvert.com', +'08.185.87.9.liveadvert.com', +'08.185.87.90.liveadvert.com', +'08.185.87.91.liveadvert.com', +'08.185.87.93.liveadvert.com', +'08.185.87.94.liveadvert.com', +'08.185.87.95.liveadvert.com', +'08.185.87.96.liveadvert.com', +'08.185.87.97.liveadvert.com', +'08.185.87.98.liveadvert.com', +'08.185.87.99.liveadvert.com', +'0896-c1b9-ed40-acad.reporo.net', +'0aac4e6a54c170b0.se', +'0alha.voluumtrk.com', +'0b1xr.voluumtrk.com', +'0bfn6.voluumtrk.com', +'0br.realsecuredredirect.com', +'0cfe-e814-fd2a-7ffc.reporo.net', +'0cwjs.voluumtrk.com', +'0dedx.voluumtrk.com', +'0ftgo.voluumtrk.com', +'0gitx.voluumtrk.com', +'0hna.com', +'0iiml.voluumtrk.com', +'0latfee.ero-advertising.com', +'0llii0g6.com', +'0md5e.voluumtrk.com', +'0mt66.voluumtrk.com', +'0muvp.voluumtrk.com', +'0ny3m.voluumtrk.com', +'0qhuv.voluumtrk.com', +'0rlbs.voluumtrk.com', +'0wptk.voluumtrk.com', +'0yn3h.voluumtrk.com', +'1-1ads.com', +'1.chipde.damoh.schneevonmorgen.com', +'1.coolestmobi.com', +'1.gmxnet.damoh.schneevonmorgen.com', +'1.im.cz', +'1.psfree.pay.clickbank.net', +'1.ptp22.com', +'1.quicktrkr.com', +'10.6.87.194.dynamic.dol.ru', +'10.ptp22.com', +'100.6.87.194.dynamic.dol.ru', +'100023.live173.com', +'101.6.87.194.dynamic.dol.ru', +'1016557.fls.doubleclick.net', +'1017680.109mview.atdmt.com.1.6000.302br.net', +'101order.com', +'102.112.2o7.net', +'102.122.2o7.net', +'102.6.87.194.dynamic.dol.ru', +'10267.10cms.com', +'103.6.87.194.dynamic.dol.ru', +'1030.go2cloud.org', +'1033.bitterstrawberry.com', +'104.6.87.194.dynamic.dol.ru', +'105.6.87.194.dynamic.dol.ru', +'106.6.87.194.dynamic.dol.ru', +'106794.hittail.com', +'107.6.87.194.dynamic.dol.ru', +'10712824.qqc.co', +'108.6.87.194.dynamic.dol.ru', +'108434.hittail.com', +'109.6.87.194.dynamic.dol.ru', +'10fbb07a4b0.se', +'11.6.87.194.dynamic.dol.ru', +'11.ptp22.com', +'11.rtstats.com', +'110.6.87.194.dynamic.dol.ru', +'111.6.87.194.dynamic.dol.ru', +'11163929-2268.c2.adprotect.net', +'11163929-2315.c2.adprotect.net', +'11163929-2410.c.adprotect.net', +'11163929-2410.c2.adprotect.net', +'11163929-3212.c.adprotect.net', +'11163929-3212.c2.adprotect.net', +'11163929-3367.c2.adprotect.net', +'11163929-3482.c2.adprotect.net', +'11163943.c.adprotect.net', +'11164000-690.c.adprotect.net', +'11167236.adscreendirect.com', +'112.6.87.194.dynamic.dol.ru', +'11262.engine.mobileapptracking.com', +'113.6.87.194.dynamic.dol.ru', +'114.6.87.194.dynamic.dol.ru', +'115.6.87.194.dynamic.dol.ru', +'116.6.87.194.dynamic.dol.ru', +'117.6.87.194.dynamic.dol.ru', +'118.6.87.194.dynamic.dol.ru', +'118d654612df63bc8395-aecfeaabe29a34ea9a877711ec6d8aed.r37.cf2.rackcdn.com', +'119.6.87.194.dynamic.dol.ru', +'119xpg.go2cloud.org', +'12.ptp22.com', +'120.6.87.194.dynamic.dol.ru', +'120.duba.net', +'120mk.voluumtrk.com', +'121.2cnt.net', +'121.6.87.194.dynamic.dol.ru', +'1212.bitterstrawberry.com', +'122.6.87.194.dynamic.dol.ru', +'1221.bitterstrawberry.com', +'1223.xg4ken.com', +'122807155757.c.mystat-in.net', +'123.6.87.194.dynamic.dol.ru', +'123.dominoad.com', +'123.duba.net', +'1239.9014.302br.net', +'123ads.nl', +'123advertising.nl', +'123banners.com', +'123count.com', +'123counter.mycomputer.com', +'123counter.superstats.com', +'123counts.com', +'123jmdmediagroupllc.go2cloud.org', +'123spill.no', +'123srv.com', +'123stat.com', +'123webmarketing.com', +'124.6.87.194.dynamic.dol.ru', +'125.6.87.194.dynamic.dol.ru', +'126.6.87.194.dynamic.dol.ru', +'126.xg4ken.com', +'1268402.fls.doubleclick.net', +'127.6.87.194.dynamic.dol.ru', +'128.6.87.194.dynamic.dol.ru', +'129.6.87.194.dynamic.dol.ru', +'12place.com', +'13.6.87.194.dynamic.dol.ru', +'13.ptp22.com', +'130.6.87.194.dynamic.dol.ru', +'131.6.87.194.dynamic.dol.ru', +'132.6.87.194.dynamic.dol.ru', +'1326154.fls.doubleclick.net', +'133.6.87.194.dynamic.dol.ru', +'1330903.fls.doubleclick.net', +'134.6.87.194.dynamic.dol.ru', +'135.6.87.194.dynamic.dol.ru', +'1359940.fls.doubleclick.net', +'136.6.87.194.dynamic.dol.ru', +'13618.9005.302br.net', +'137.6.87.194.dynamic.dol.ru', +'137852403.log.optimizely.com', +'138.6.87.194.dynamic.dol.ru', +'139.6.87.194.dynamic.dol.ru', +'14.6.87.194.dynamic.dol.ru', +'14.ptp22.com', +'140.6.87.194.dynamic.dol.ru', +'140cc.v.fwmrm.net', +'140proof.com', +'141.6.87.194.dynamic.dol.ru', +'14119276be0852.com', +'1412173.fls.doubleclick.net', +'141aa.voluumtrk.com', +'142.6.87.194.dynamic.dol.ru', +'143.6.87.194.dynamic.dol.ru', +'1435575.fls.doubleclick.net', +'144.6.87.194.dynamic.dol.ru', +'145.6.87.194.dynamic.dol.ru', +'146.6.87.194.dynamic.dol.ru', +'147.6.87.194.dynamic.dol.ru', +'148.6.87.194.dynamic.dol.ru', +'149.6.87.194.dynamic.dol.ru', +'15.6.87.194.dynamic.dol.ru', +'15.ptp22.com', +'150.6.87.194.dynamic.dol.ru', +'151.6.87.194.dynamic.dol.ru', +'1513878.fls.doubleclick.net', +'152.6.87.194.dynamic.dol.ru', +'152media.adk2x.com', +'153.6.87.194.dynamic.dol.ru', +'154.6.87.194.dynamic.dol.ru', +'155.6.87.194.dynamic.dol.ru', +'156.6.87.194.dynamic.dol.ru', +'157-events.olark.com', +'157.6.87.194.dynamic.dol.ru', +'158.6.87.194.dynamic.dol.ru', +'159.6.87.194.dynamic.dol.ru', +'15cen.redirectvoluum.com', +'15qhn.voluumtrk.com', +'15view.atdmt.com.319.6000.302br.net', +'16.6.87.194.dynamic.dol.ru', +'16.ptp22.com', +'160.6.87.194.dynamic.dol.ru', +'160tracker.com', +'160x600.exad.me', +'161.6.87.194.dynamic.dol.ru', +'162.6.87.194.dynamic.dol.ru', +'163.6.87.194.dynamic.dol.ru', +'163.wrating.com', +'164.6.87.194.dynamic.dol.ru', +'165.6.87.194.dynamic.dol.ru', +'1651.bitterstrawberry.com', +'1652.bitterstrawberry.com', +'1653.bitterstrawberry.com', +'1655.bitterstrawberry.com', +'166.6.87.194.dynamic.dol.ru', +'1669323.r.msn.com', +'1669437.r.msn.com', +'167.6.87.194.dynamic.dol.ru', +'168.112.207.net', +'168.6.87.194.dynamic.dol.ru', +'169.6.87.194.dynamic.dol.ru', +'1695693.r.msn.com', +'1695842.r.msn.com', +'1696908298.rsc.cdn77.org', +'16qul.voluumtrk.com', +'17.6.87.194.dynamic.dol.ru', +'17.ptp22.com', +'170.6.87.194.dynamic.dol.ru', +'1707489.r.msn.com', +'171.6.87.194.dynamic.dol.ru', +'172.6.87.194.dynamic.dol.ru', +'172degrees.go2cloud.org', +'173.6.87.194.dynamic.dol.ru', +'174.6.87.194.dynamic.dol.ru', +'1742177.fls.doubleclick.net', +'175.6.87.194.dynamic.dol.ru', +'176.6.87.194.dynamic.dol.ru', +'177.6.87.194.dynamic.dol.ru', +'178.6.87.194.dynamic.dol.ru', +'179.6.87.194.dynamic.dol.ru', +'17b4-7817-18f7-3abd.reporo.net', +'17k.originalsafteyredir.com', +'17oez.voluumtrk.com', +'18.6.87.194.dynamic.dol.ru', +'18.ptp22.com', +'180.6.87.194.dynamic.dol.ru', +'1800inkfarm.go2cloud.org', +'181.6.87.194.dynamic.dol.ru', +'182.6.87.194.dynamic.dol.ru', +'18205.voluumtrk.com', +'1821.bitterstrawberry.com', +'1822333.r.msn.com', +'1829.bitterstrawberry.com', +'183.6.87.194.dynamic.dol.ru', +'184.6.87.194.dynamic.dol.ru', +'18439.rejectclick.com', +'1846.bitterstrawberry.com', +'185.6.87.194.dynamic.dol.ru', +'186.6.87.194.dynamic.dol.ru', +'187.6.87.194.dynamic.dol.ru', +'188.6.87.194.dynamic.dol.ru', +'189.6.87.194.dynamic.dol.ru', +'18clicks.com', +'19.6.87.194.dynamic.dol.ru', +'19.ptp22.com', +'190.6.87.194.dynamic.dol.ru', +'191.6.87.194.dynamic.dol.ru', +'192.168.112.2o7.net', +'192.168.ads.trafficjunky.net', +'192.168.ads2.contentabc.com', +'192.168.cdn-a2.contentabc.com', +'192.168.cdn11.contentabc.com', +'192.168.media.trafficjunky.net', +'192.168.ss.xxxmyself.com', +'192.6.87.194.dynamic.dol.ru', +'192.com', +'192com.112.2o7.net', +'193.6.87.194.dynamic.dol.ru', +'194.6.87.194.dynamic.dol.ru', +'1940.bitterstrawberry.com', +'195.6.87.194.dynamic.dol.ru', +'196.6.87.194.dynamic.dol.ru', +'196179102.log.optimizely.com', +'197.6.87.194.dynamic.dol.ru', +'198.6.87.194.dynamic.dol.ru', +'199.6.87.194.dynamic.dol.ru', +'199ea.voluumtrk.com', +'1acpa.go2cloud.org', +'1ad.de', +'1app.blob.core.windows.net', +'1artgalleryplus.go2cloud.org', +'1au.cqcounter.com', +'1bm.cqcounter.com', +'1ca.cqcounter.com', +'1cash.net', +'1cgi.hitbox.com', +'1clickscpa.go2cloud.org', +'1dbxc.voluumtrk.com', +'1de.cqcounter.com', +'1de5g.voluumtrk.com', +'1do16.voluumtrk.com', +'1es.cqcounter.com', +'1f62-ac07-3838-8236.reporo.net', +'1f64-9327-ddd3-a591.reporo.net', +'1fm8o.voluumtrk.com', +'1fr.cqcounter.com', +'1in.cqcounter.com', +'1jo.cqcounter.com', +'1k7uk.voluumtrk.com', +'1m1mage.tr553.com', +'1mp.mobi', +'1mpo6.voluumtrk.com', +'1msro.voluumtrk.com', +'1naf9.voluumtrk.com', +'1nl.cqcounter.com', +'1no.cqcounter.com', +'1nvrm.voluumtrk.com', +'1pgna.voluumtrk.com', +'1phads.com', +'1pt.cqcounter.com', +'1rcu4.voluumtrk.com', +'1se.cqcounter.com', +'1src.us.intellitxt.com', +'1streamline.go2cloud.org', +'1uk.cqcounter.com', +'1ul8dvwz0a.s.ad6media.fr', +'1us.cqcounter.com', +'1w0xj.voluumtrk.com', +'1wu2u.voluumtrk.com', +'1xxx.cqcounter.com', +'1zl86.voluumtrk.com', +'1zlni.voluumtrk.com', +'2.chipde.damoh.schneevonmorgen.com', +'2.livejasmin.com', +'2.ptp22.com', +'20.ptp22.com', +'200.6.87.194.dynamic.dol.ru', +'2002.bitterstrawberry.com', +'201.6.87.194.dynamic.dol.ru', +'2013561.fls.doubleclick.net', +'2013hk.go2cloud.org', +'202.6.87.194.dynamic.dol.ru', +'2026953308.go2cloud.org', +'203.6.87.194.dynamic.dol.ru', +'204.6.87.194.dynamic.dol.ru', +'204.bitterstrawberry.com', +'205.6.87.194.dynamic.dol.ru', +'20501671p.rfihub.com', +'20510777p.rfihub.com', +'20514681p.rfihub.com', +'20554339p.rfihub.com', +'2056.bitterstrawberry.com', +'20574919p.rfihub.com', +'20576983p.rfihub.com', +'20576991p.rfihub.com', +'20591617p.rfihub.com', +'206.6.87.194.dynamic.dol.ru', +'207.6.87.194.dynamic.dol.ru', +'208.185.87.1.liveadvert.com', +'208.185.87.10.liveadvert.com', +'208.185.87.100.liveadvert.com', +'208.185.87.101.liveadvert.com', +'208.185.87.102.liveadvert.com', +'208.185.87.103.liveadvert.com', +'208.185.87.104.liveadvert.com', +'208.185.87.105.liveadvert.com', +'208.185.87.106.liveadvert.com', +'208.185.87.107.liveadvert.com', +'208.185.87.108.liveadvert.com', +'208.185.87.109.liveadvert.com', +'208.185.87.11.liveadvert.com', +'208.185.87.110.liveadvert.com', +'208.185.87.111.liveadvert.com', +'208.185.87.112.liveadvert.com', +'208.185.87.113.liveadvert.com', +'208.185.87.114.liveadvert.com', +'208.185.87.115.liveadvert.com', +'208.185.87.116.liveadvert.com', +'208.185.87.117.liveadvert.com', +'208.185.87.118.liveadvert.com', +'208.185.87.119.liveadvert.com', +'208.185.87.12.liveadvert.com', +'208.185.87.120.liveadvert.com', +'208.185.87.121.liveadvert.com', +'208.185.87.122.liveadvert.com', +'208.185.87.123.liveadvert.com', +'208.185.87.124.liveadvert.com', +'208.185.87.125.liveadvert.com', +'208.185.87.126.liveadvert.com', +'208.185.87.127.liveadvert.com', +'208.185.87.128.liveadvert.com', +'208.185.87.129.liveadvert.com', +'208.185.87.13.liveadvert.com', +'208.185.87.130.liveadvert.com', +'208.185.87.131.liveadvert.com', +'208.185.87.132.liveadvert.com', +'208.185.87.133.liveadvert.com', +'208.185.87.134.liveadvert.com', +'208.185.87.135.liveadvert.com', +'208.185.87.136.liveadvert.com', +'208.185.87.137.liveadvert.com', +'208.185.87.138.liveadvert.com', +'208.185.87.139.liveadvert.com', +'208.185.87.14.liveadvert.com', +'208.185.87.140.liveadvert.com', +'208.185.87.141.liveadvert.com', +'208.185.87.142.liveadvert.com', +'208.185.87.143.liveadvert.com', +'208.185.87.144.liveadvert.com', +'208.185.87.145.liveadvert.com', +'208.185.87.146.liveadvert.com', +'208.185.87.147.liveadvert.com', +'208.185.87.148.liveadvert.com', +'208.185.87.149.liveadvert.com', +'208.185.87.15.liveadvert.com', +'208.185.87.150.liveadvert.com', +'208.185.87.151.liveadvert.com', +'208.185.87.152.liveadvert.com', +'208.185.87.153.liveadvert.com', +'208.185.87.154.liveadvert.com', +'208.185.87.155.liveadvert.com', +'208.185.87.156.liveadvert.com', +'208.185.87.157.liveadvert.com', +'208.185.87.158.liveadvert.com', +'208.185.87.159.liveadvert.com', +'208.185.87.16.liveadvert.com', +'208.185.87.160.liveadvert.com', +'208.185.87.161.liveadvert.com', +'208.185.87.162.liveadvert.com', +'208.185.87.163.liveadvert.com', +'208.185.87.164.liveadvert.com', +'208.185.87.165.liveadvert.com', +'208.185.87.166.liveadvert.com', +'208.185.87.167.liveadvert.com', +'208.185.87.168.liveadvert.com', +'208.185.87.169.liveadvert.com', +'208.185.87.17.liveadvert.com', +'208.185.87.170.liveadvert.com', +'208.185.87.171.liveadvert.com', +'208.185.87.172.liveadvert.com', +'208.185.87.173.liveadvert.com', +'208.185.87.174.liveadvert.com', +'208.185.87.175.liveadvert.com', +'208.185.87.176.liveadvert.com', +'208.185.87.177.liveadvert.com', +'208.185.87.178.liveadvert.com', +'208.185.87.179.liveadvert.com', +'208.185.87.18.liveadvert.com', +'208.185.87.180.liveadvert.com', +'208.185.87.181.liveadvert.com', +'208.185.87.182.liveadvert.com', +'208.185.87.183.liveadvert.com', +'208.185.87.184.liveadvert.com', +'208.185.87.185.liveadvert.com', +'208.185.87.186.liveadvert.com', +'208.185.87.187.liveadvert.com', +'208.185.87.188.liveadvert.com', +'208.185.87.189.liveadvert.com', +'208.185.87.19.liveadvert.com', +'208.185.87.190.liveadvert.com', +'208.185.87.191.liveadvert.com', +'208.185.87.192.liveadvert.com', +'208.185.87.193.liveadvert.com', +'208.185.87.194.liveadvert.com', +'208.185.87.195.liveadvert.com', +'208.185.87.196.liveadvert.com', +'208.185.87.197.liveadvert.com', +'208.185.87.198.liveadvert.com', +'208.185.87.199.liveadvert.com', +'208.185.87.2.liveadvert.com', +'208.185.87.20.liveadvert.com', +'208.185.87.200.liveadvert.com', +'208.185.87.201.liveadvert.com', +'208.185.87.202.liveadvert.com', +'208.185.87.203.liveadvert.com', +'208.185.87.204.liveadvert.com', +'208.185.87.205.liveadvert.com', +'208.185.87.206.liveadvert.com', +'208.185.87.207.liveadvert.com', +'208.185.87.208.liveadvert.com', +'208.185.87.209.liveadvert.com', +'208.185.87.21.liveadvert.com', +'208.185.87.210.liveadvert.com', +'208.185.87.211.liveadvert.com', +'208.185.87.212.liveadvert.com', +'208.185.87.213.liveadvert.com', +'208.185.87.214.liveadvert.com', +'208.185.87.215.liveadvert.com', +'208.185.87.216.liveadvert.com', +'208.185.87.217.liveadvert.com', +'208.185.87.218.liveadvert.com', +'208.185.87.219.liveadvert.com', +'208.185.87.22.liveadvert.com', +'208.185.87.220.liveadvert.com', +'208.185.87.221.liveadvert.com', +'208.185.87.222.liveadvert.com', +'208.185.87.223.liveadvert.com', +'208.185.87.224.liveadvert.com', +'208.185.87.225.liveadvert.com', +'208.185.87.226.liveadvert.com', +'208.185.87.227.liveadvert.com', +'208.185.87.228.liveadvert.com', +'208.185.87.229.liveadvert.com', +'208.185.87.23.liveadvert.com', +'208.185.87.230.liveadvert.com', +'208.185.87.231.liveadvert.com', +'208.185.87.232.liveadvert.com', +'208.185.87.233.liveadvert.com', +'208.185.87.234.liveadvert.com', +'208.185.87.235.liveadvert.com', +'208.185.87.236.liveadvert.com', +'208.185.87.237.liveadvert.com', +'208.185.87.238.liveadvert.com', +'208.185.87.239.liveadvert.com', +'208.185.87.24.liveadvert.com', +'208.185.87.240.liveadvert.com', +'208.185.87.241.liveadvert.com', +'208.185.87.242.liveadvert.com', +'208.185.87.243.liveadvert.com', +'208.185.87.244.liveadvert.com', +'208.185.87.245.liveadvert.com', +'208.185.87.246.liveadvert.com', +'208.185.87.247.liveadvert.com', +'208.185.87.248.liveadvert.com', +'208.185.87.249.liveadvert.com', +'208.185.87.25.liveadvert.com', +'208.185.87.250.liveadvert.com', +'208.185.87.251.liveadvert.com', +'208.185.87.252.liveadvert.com', +'208.185.87.253.liveadvert.com', +'208.185.87.254.liveadvert.com', +'208.185.87.26.liveadvert.com', +'208.185.87.27.liveadvert.com', +'208.185.87.28.liveadvert.com', +'208.185.87.29.liveadvert.com', +'208.185.87.3.liveadvert.com', +'208.185.87.30.liveadvert.com', +'208.185.87.31.liveadvert.com', +'208.185.87.32.liveadvert.com', +'208.185.87.33.liveadvert.com', +'208.185.87.34.liveadvert.com', +'208.185.87.35.liveadvert.com', +'208.185.87.36.liveadvert.com', +'208.185.87.37.liveadvert.com', +'208.185.87.38.liveadvert.com', +'208.185.87.39.liveadvert.com', +'208.185.87.4.liveadvert.com', +'208.185.87.40.liveadvert.com', +'208.185.87.41.liveadvert.com', +'208.185.87.42.liveadvert.com', +'208.185.87.43.liveadvert.com', +'208.185.87.44.liveadvert.com', +'208.185.87.45.liveadvert.com', +'208.185.87.46.liveadvert.com', +'208.185.87.47.liveadvert.com', +'208.185.87.48.liveadvert.com', +'208.185.87.49.liveadvert.com', +'208.185.87.5.liveadvert.com', +'208.185.87.50.liveadvert.com', +'208.185.87.51.liveadvert.com', +'208.185.87.52.liveadvert.com', +'208.185.87.53.liveadvert.com', +'208.185.87.54.liveadvert.com', +'208.185.87.55.liveadvert.com', +'208.185.87.56.liveadvert.com', +'208.185.87.57.liveadvert.com', +'208.185.87.58.liveadvert.com', +'208.185.87.59.liveadvert.com', +'208.185.87.6.liveadvert.com', +'208.185.87.60.liveadvert.com', +'208.185.87.61.liveadvert.com', +'208.185.87.62.liveadvert.com', +'208.185.87.63.liveadvert.com', +'208.185.87.64.liveadvert.com', +'208.185.87.65.liveadvert.com', +'208.185.87.66.liveadvert.com', +'208.185.87.67.liveadvert.com', +'208.185.87.68.liveadvert.com', +'208.185.87.69.liveadvert.com', +'208.185.87.7.liveadvert.com', +'208.185.87.70.liveadvert.com', +'208.185.87.71.liveadvert.com', +'208.185.87.72.liveadvert.com', +'208.185.87.73.liveadvert.com', +'208.185.87.74.liveadvert.com', +'208.185.87.75.liveadvert.com', +'208.185.87.76.liveadvert.com', +'208.185.87.77.liveadvert.com', +'208.185.87.78.liveadvert.com', +'208.185.87.79.liveadvert.com', +'208.185.87.8.liveadvert.com', +'208.185.87.80.liveadvert.com', +'208.185.87.81.liveadvert.com', +'208.185.87.82.liveadvert.com', +'208.185.87.83.liveadvert.com', +'208.185.87.84.liveadvert.com', +'208.185.87.85.liveadvert.com', +'208.185.87.86.liveadvert.com', +'208.185.87.87.liveadvert.com', +'208.185.87.88.liveadvert.com', +'208.185.87.89.liveadvert.com', +'208.185.87.9.liveadvert.com', +'208.185.87.90.liveadvert.com', +'208.185.87.91.liveadvert.com', +'208.185.87.92.liveadvert.com', +'208.185.87.93.liveadvert.com', +'208.185.87.94.liveadvert.com', +'208.185.87.95.liveadvert.com', +'208.185.87.96.liveadvert.com', +'208.185.87.97.liveadvert.com', +'208.185.87.98.liveadvert.com', +'208.185.87.99.liveadvert.com', +'208.6.87.194.dynamic.dol.ru', +'209.6.87.194.dynamic.dol.ru', +'20996-1061.popunder.loading-delivery1.com', +'20d625b48e.se', +'20minde.wemfbox.ch', +'20popup.com', +'210.6.87.194.dynamic.dol.ru', +'21011-1061.popunder.loading-delivery1.com', +'211.6.87.194.dynamic.dol.ru', +'212.6.87.194.dynamic.dol.ru', +'213.6.87.194.dynamic.dol.ru', +'214.6.87.194.dynamic.dol.ru', +'2149921.r.msn.com', +'215.6.87.194.dynamic.dol.ru', +'2154.bitterstrawberry.com', +'2156.bitterstrawberry.com', +'216.6.87.194.dynamic.dol.ru', +'2161.bitterstrawberry.com', +'217.6.87.194.dynamic.dol.ru', +'218.6.87.194.dynamic.dol.ru', +'219.6.87.194.dynamic.dol.ru', +'2191.engine.mobileapptracking.com', +'2196503.fls.doubleclick.net', +'21v6m.realsecuredredirect.com', +'220.6.87.194.dynamic.dol.ru', +'2200.bitterstrawberry.com', +'2205.bitterstrawberry.com', +'2207.bitterstrawberry.com', +'221.6.87.194.dynamic.dol.ru', +'222.6.87.194.dynamic.dol.ru', +'223.6.87.194.dynamic.dol.ru', +'22329-406.popunder.loading-delivery1.com', +'2233.bitterstrawberry.com', +'224.6.87.194.dynamic.dol.ru', +'225.6.87.194.dynamic.dol.ru', +'226.6.87.194.dynamic.dol.ru', +'227.6.87.194.dynamic.dol.ru', +'22774.9133.302br.net', +'228.6.87.194.dynamic.dol.ru', +'229.6.87.194.dynamic.dol.ru', +'2297.bitterstrawberry.com', +'230.6.87.194.dynamic.dol.ru', +'231.6.87.194.dynamic.dol.ru', +'231c-356f-e194-8857.reporo.net', +'232.6.87.194.dynamic.dol.ru', +'232.bitterstrawberry.com', +'233.6.87.194.dynamic.dol.ru', +'233.bitterstrawberry.com', +'2332696.fls.doubleclick.net', +'2336.bitterstrawberry.com', +'234.6.87.194.dynamic.dol.ru', +'235.6.87.194.dynamic.dol.ru', +'235.bitterstrawberry.com', +'236.6.87.194.dynamic.dol.ru', +'237.6.87.194.dynamic.dol.ru', +'237.bitterstrawberry.com', +'2370.bitterstrawberry.com', +'238.6.87.194.dynamic.dol.ru', +'239.6.87.194.dynamic.dol.ru', +'2398.bitterstrawberry.com', +'2400.bitterstrawberry.com', +'2426010203.log.optimizely.com', +'24290.9170.302br.net', +'24293.9170.302br.net', +'2449650414.log.optimizely.com', +'245.bitterstrawberry.com', +'2463678.fls.doubleclick.net', +'247media.com', +'247media.net', +'247realmedia.com', +'247support.adtech.fr', +'247wsr.com', +'2499034.fls.doubleclick.net', +'24fun.2cnt.net', +'24partners.go2cloud.org', +'24pm-affiliation.com', +'24x7adservice.com', +'2507573.fls.doubleclick.net', +'253.bitterstrawberry.com', +'254.bitterstrawberry.com', +'2542116.fls.doubleclick.net', +'2551-ebc7-ebcf-4aff.reporo.net', +'256.bitterstrawberry.com', +'2565.bitterstrawberry.com', +'2570540166.log.optimizely.com', +'2573.bitterstrawberry.com', +'2674011.r.msn.com', +'27.6.87.194.dynamic.dol.ru', +'27220337.go2cloud.org', +'2769185.r.msn.com', +'2793343.fls.doubleclick.net', +'279r.realsecuredredirect.com', +'28.6.87.194.dynamic.dol.ru', +'2895566.fls.doubleclick.net', +'2896678.fls.doubleclick.net', +'29.6.87.194.dynamic.dol.ru', +'2912a.v.fwmrm.net', +'29193.9215.302br.net', +'2926210385.log.optimizely.com', +'2975c.v.fwmrm.net', +'29bca6cb72a665c8.se', +'29rhino.go2cloud.org', +'2a.com.112.207.net', +'2baners.ero-advertising.com', +'2bibi.voluumtrk.com', +'2c60-1723-23d3-2b28.reporo.net', +'2cgi.hitbox.com', +'2ds.ero-advertising.com', +'2e1ck.voluumtrk.com', +'2fbanners.ero-advertising.com', +'2fflatfee.ero-advertising.com', +'2finteryield.jmp9.com', +'2fspeedclicks.ero-advertising.com', +'2fview.atdmt.com.24492.9179.302br.net', +'2fview.atdmt.com.60413.9342.302br.net', +'2fview.atdmt.com.60416.9342.302br.net', +'2gtstrk.com', +'2ijmu.voluumtrk.com', +'2ik1o.voluumtrk.com', +'2inp7.voluumtrk.com', +'2jy2d.voluumtrk.com', +'2kd7g.voluumtrk.com', +'2kygq.voluumtrk.com', +'2lafc.voluumtrk.com', +'2o7.net', +'2options.go2cloud.org', +'2qtn9.voluumtrk.com', +'2sbd3.voluumtrk.com', +'2sksk.voluumtrk.com', +'2snla.voluumtrk.com', +'2spyware.us.intellitxt.com', +'2ttb4.voluumtrk.com', +'2usdj.voluumtrk.com', +'2vci0.voluumtrk.com', +'2vie.catdmt.omc.324.6000.302br.net', +'2wiz6.voluumtrk.com', +'2xkft.voluumtrk.com', +'2xxis.voluumtrk.com', +'2xz5e.voluumtrk.com', +'2y54x.voluumtrk.com', +'2yo1y.voluumtrk.com', +'3.2cnt.net', +'3.ptp22.com', +'30.6.87.194.dynamic.dol.ru', +'302br.net', +'303net.net', +'306.bitterstrawberry.com', +'309.bitterstrawberry.com', +'30klc.voluumtrk.com', +'31.6.87.194.dynamic.dol.ru', +'3130320.fls.doubleclick.net', +'32.6.87.194.dynamic.dol.ru', +'3217776.r.msn.com', +'3252817.r.msn.com', +'3276817.fls.doubleclick.net', +'32d1d3b9c.se', +'33.6.87.194.dynamic.dol.ru', +'33526.9243.302br.net', +'33qx.secoptim.com', +'34.6.87.194.dynamic.dol.ru', +'34245.hittail.com', +'343.bitterstrawberry.com', +'3480025.log.optimizely.com', +'35.6.87.194.dynamic.dol.ru', +'3501113.fls.doubleclick.net', +'35082.9255.302br.net', +'350media.com', +'35369.9265.302br.net', +'36.6.87.194.dynamic.dol.ru', +'360.yahoo.com', +'360ads.go2cloud.org', +'360popunder.com', +'360redirect.com', +'360switch.net', +'360training.go2cloud.org', +'360unitedmedia.go2cloud.org', +'36222.seu.cleverreach.com', +'3689-7dbc-ddf7-a45f.reporo.net', +'36igq.voluumtrk.com', +'37.6.87.194.dynamic.dol.ru', +'3738527.fls.doubleclick.net', +'3773523.fls.doubleclick.net', +'37dyq.voluumtrk.com', +'38.6.87.194.dynamic.dol.ru', +'38179760.log.optimizely.com', +'3879194.fls.doubleclick.net', +'39.6.87.194.dynamic.dol.ru', +'390.bitterstrawberry.com', +'3941123.fls.doubleclick.net', +'3973258.fls.doubleclick.net', +'3982178.fls.doubleclick.net', +'3axp9.voluumtrk.com', +'3b9cc85dcf732d5.se', +'3c41ddc0.se', +'3c45d848d99.se', +'3cinteractive.com', +'3cnce854.com', +'3d05q.voluumtrk.com', +'3dc265e90c6d9fa3cc0c-3f982316dc17e6e99fe1b47483239d63.r95.cf2.rackcdn.com', +'3ds.ero-advertising.com', +'3dstats.com', +'3ece-5608-732a-5bbd.reporo.net', +'3flv2.voluumtrk.com', +'3grs6.voluumtrk.com', +'3hfag.voluumtrk.com', +'3m56h.voluumtrk.com', +'3point14.go2affise.com', +'3rdeye.go2cloud.org', +'3rih9.voluumtrk.com', +'3ukg5.voluumtrk.com', +'3uuak.voluumtrk.com', +'3uzzo.voluumtrk.com', +'3wykr.voluumtrk.com', +'3xvh4.voluumtrk.com', +'3yp7i.voluumtrk.com', +'3zkgw.voluumtrk.com', +'4.6.87.194.dynamic.dol.ru', +'4.ptp22.com', +'40.6.87.194.dynamic.dol.ru', +'4002dbde88aebefdb1f7-8f93653c470e43727b1b565964867247.r51.cf2.rackcdn.com', +'401591473.log.optimizely.com', +'401ads.go2cloud.org', +'4055.xg4ken.com', +'40ohl.voluumtrk.com', +'40xbfzk8.com', +'41.6.87.194.dynamic.dol.ru', +'411affiliates.ca', +'4177752.fls.doubleclick.net', +'418e158b80bc0381719c-c51e63b7e27054c59548bc9120302775.r53.cf2.rackcdn.com', +'4191036.fls.doubleclick.net', +'4191748.fls.doubleclick.net', +'42.6.87.194.dynamic.dol.ru', +'4228414.fls.doubleclick.net', +'4235225.fls.doubleclick.net', +'4236808.fls.doubleclick.net', +'4294919531.kt.mixmarket.biz', +'4299553.fls.doubleclick.net', +'43.6.87.194.dynamic.dol.ru', +'4331660.fls.doubleclick.net', +'4338244.fls.doubleclick.net', +'4345210.fls.doubleclick.net', +'4371920.fls.doubleclick.net', +'4375326.fls.doubleclick.net', +'4379742.fls.doubleclick.net', +'44.6.87.194.dynamic.dol.ru', +'44902.9339.302br.net', +'45.6.87.194.dynamic.dol.ru', +'45i73jv6.com', +'46.6.87.194.dynamic.dol.ru', +'47.6.87.194.dynamic.dol.ru', +'47.xg4ken.com', +'47550.9340.302br.net', +'47nbp.voluumtrk.com', +'48.6.87.194.dynamic.dol.ru', +'48ed4acf13b.se', +'48qyx.voluumtrk.com', +'49.6.87.194.dynamic.dol.ru', +'49479.9362.302br.net', +'49535.com', +'4a6xw.voluumtrk.com', +'4affiliate.net', +'4anners.ero-advertising.com', +'4bca-d658-a4da-12c8.reporo.net', +'4d5.net', +'4d80-dd41-9ed3-33b1.reporo.net', +'4dogmedia.go2cloud.org', +'4e93-6203-2401-d118.reporo.net', +'4feaw.voluumtrk.com', +'4gezz.win.adsservingtwig.xyz', +'4hdt7.voluumtrk.com', +'4hplo.voluumtrk.com', +'4info.com', +'4k6k0zj3.com', +'4kehf.voluumtrk.com', +'4ksir.voluumtrk.com', +'4mads.com', +'4n7i8.voluumtrk.com', +'4necp.voluumtrk.com', +'4online.go2affise.com', +'4q.iperceptions.com', +'4qinvite.4q.iperceptions.com', +'4qsurvey.com', +'4rxgu.voluumtrk.com', +'4rzfl.voluumtrk.com', +'4see.mobi', +'4seeresults.com', +'4spp2.voluumtrk.com', +'4ur.click', +'4uxl.go2cloud.org', +'4va3x.voluumtrk.com', +'4web.cz', +'4x4review.us.intellitxt.com', +'5.6.87.194.dynamic.dol.ru', +'5.ptp22.com', +'50.6.87.194.dynamic.dol.ru', +'507222872.go2cloud.org', +'50mango.go2affise.com', +'51.6.87.194.dynamic.dol.ru', +'51yes.com', +'52.6.87.194.dynamic.dol.ru', +'5234-259b-588d-41c6.reporo.net', +'526633146.redpop.pro', +'5280publishing.go2cloud.org', +'53.6.87.194.dynamic.dol.ru', +'535225459.keywordblocks.com', +'54.6.87.194.dynamic.dol.ru', +'5482fc58904b613aee952d23cac4db91.adsk2.co', +'55.6.87.194.dynamic.dol.ru', +'554924358.log.optimizely.com', +'5555c0e19278c10ce23e-e43b9b9293b141a8c68c3bbff03519a0.r36.cf2.rackcdn.com', +'555fe0fa.qqc.co', +'55624-3.popunder.loading-delivery1.com', +'55788.9391.302br.net', +'56.6.87.194.dynamic.dol.ru', +'560183740bc38303d0000248.maestroad.checkm8.com', +'5623.web-stats.org', +'56853.9349.302br.net', +'56mfv.voluumtrk.com', +'57.6.87.194.dynamic.dol.ru', +'57222.9406.302br.net', +'57243.9406.302br.net', +'5726.bapi.adsafeprotected.com', +'58.6.87.194.dynamic.dol.ru', +'59.6.87.194.dynamic.dol.ru', +'592.bitterstrawberry.com', +'594.bitterstrawberry.com', +'5ab3o.voluumtrk.com', +'5avxd.voluumtrk.com', +'5c2fk.voluumtrk.com', +'5cuav.voluumtrk.com', +'5czyx.voluumtrk.com', +'5e5ff159.linkbucks.com', +'5f8174fcf50c8f3fcaa2-1d2bf932855ebd52407efbb6cb4b64e5.r49.cf2.rackcdn.com', +'5iesg.voluumtrk.com', +'5jkjr.voluumtrk.com', +'5ktep.voluumtrk.com', +'5l11k.voluumtrk.com', +'5nv2z.voluumtrk.com', +'5pxno.voluumtrk.com', +'5r2vl.voluumtrk.com', +'5staraffiliateprograms.com', +'5starsupport.us.intellitxt.com', +'5t3is.voluumtrk.com', +'5toay.voluumtrk.com', +'5tujb.voluumtrk.com', +'5wtbg.voluumtrk.com', +'5ymz8.voluumtrk.com', +'5yrwz.voluumtrk.com', +'5ywhn.voluumtrk.com', +'5zegq.voluumtrk.com', +'6.6.87.194.dynamic.dol.ru', +'6.ptp22.com', +'60.6.87.194.dynamic.dol.ru', +'600z.com', +'6053-4c08-e99b-8d7a.reporo.net', +'6058.bapi.adsafeprotected.com', +'6067.bapi.adsafeprotected.com', +'60djx.voluumtrk.com', +'61.6.87.194.dynamic.dol.ru', +'6153-8fbc-408b-b36b.reporo.net', +'61qwg.voluumtrk.com', +'62.6.87.194.dynamic.dol.ru', +'623.bapi.adsafeprotected.com', +'62919.9458.302br.net', +'63.6.87.194.dynamic.dol.ru', +'63.9view.atdmth.ya.869.9002.302br.net', +'6322.web-stats.org', +'63ads.go2cloud.org', +'63rbl.voluumtrk.com', +'64.208view.atdmt.com.1818.9020.302br.net', +'64.6.87.194.dynamic.dol.ru', +'65.163view.atdmt.com.801.8000.302br.net', +'65.6.87.194.dynamic.dol.ru', +'6539.bapi.adsafeprotected.com', +'6553-fe9a-fd29-78e9.reporo.net', +'66.151.63view.atdmt.com.801.8000.302br.net', +'66.6.87.194.dynamic.dol.ru', +'66mhb.voluumtrk.com', +'67.132.view.atdmt.com.324.6000.302br.net', +'67.13view.atdmt.com.324.6000.302br.net', +'67.6.87.194.dynamic.dol.ru', +'68.6.87.194.dynamic.dol.ru', +'6857-d041-8100-fd21.reporo.net', +'688.bitterstrawberry.com', +'69.172.216.58.72603.9610.302br.net', +'69.172.216.58.73871.9622.302br.net', +'69.172.216.58.73872.9622.302br.net', +'69.172.216.58.77876.9489.302br.net', +'69.172.216.58.78742.9675.302br.net', +'69.172.216.58.xxxxx.xxxx.302br.net', +'69.6.87.194.dynamic.dol.ru', +'69ba-95af-a923-8c02.reporo.net', +'6a036421edec9693c962-4d1f758fa5668c904b9cd6e76bdc0d97.r71.cf2.rackcdn.com', +'6a802238f18629454f48-5fd47577f4847dded97d514126394433.r3.cf2.rackcdn.com', +'6ae6-f579-2f31-2cce.reporo.net', +'6aemj.voluumtrk.com', +'6aixd.voluumtrk.com', +'6bf28imiuaptt949z56frbrn0z.hop.clickbank.net', +'6c0jn.voluumtrk.com', +'6ceig.voluumtrk.com', +'6cl2q.voluumtrk.com', +'6ctvp.voluumtrk.com', +'6e2bd3848d2b73.se', +'6e2ey.voluumtrk.com', +'6e32870d409e7dd29e74-1f888a5500a4bf77de3933bbc73268d9.r21.cf2.rackcdn.com', +'6ecdz.voluumtrk.com', +'6f307e35.linkbucks.com', +'6f80-9f9d-e2a7-67cb.reporo.net', +'6fikt.voluumtrk.com', +'6nkks.voluumtrk.com', +'6p2bh.voluumtrk.com', +'6qtbr.voluumtrk.com', +'6r2uvllu.com', +'6voop.voluumtrk.com', +'7.6.87.194.dynamic.dol.ru', +'7.ptp22.com', +'70.6.87.194.dynamic.dol.ru', +'70543.9546.302br.net', +'70642.9528.302br.net', +'707.bapi.adsafeprotected.com', +'7093.bapi.adsafeprotected.com', +'709d-469e-a98a-0a51.reporo.net', +'71.6.87.194.dynamic.dol.ru', +'718unlimited.com', +'71aa8ed2ff1c8f.com', +'72.6.87.194.dynamic.dol.ru', +'72.view.atdmt.com.303.6000.302br.net', +'7202.bapi.adsafeprotected.com', +'7246.bapi.adsafeprotected.com', +'7250.bapi.adsafeprotected.com', +'7251.bapi.adsafeprotected.com', +'7263-7365-7072-7467.reporo.net', +'72669.9596.302br.net', +'728x90.exad.me', +'73.6.87.194.dynamic.dol.ru', +'7303a09a9435e14d2141-577d252383f9c1423860b10142058ad7.r27.cf2.rackcdn.com', +'7336.engine.mobileapptracking.com', +'736516903.keywordblocks.com', +'73ec0.voluumtrk.com', +'74.6.87.194.dynamic.dol.ru', +'74647825.log.optimizely.com', +'75.6.87.194.dynamic.dol.ru', +'75334.9458.302br.net', +'757.justclick.ru', +'76.6.87.194.dynamic.dol.ru', +'76er2.voluumtrk.com', +'76f42.voluumtrk.com', +'76wik.voluumtrk.com', +'76wy2.voluumtrk.com', +'77.6.87.194.dynamic.dol.ru', +'777seo.com', +'77nid.voluumtrk.com', +'77tzz.win.adsservingtwig.xyz', +'78.6.87.194.dynamic.dol.ru', +'7828rbrmedia.go2cloud.org', +'7882.bapi.adsafeprotected.com', +'7899-7fc3-3379-0ddd.reporo.net', +'79.6.87.194.dynamic.dol.ru', +'79423.analytics.edgekey.net', +'7adpower.com', +'7b493gkdlhlgwr0brceox8158d.hop.clickbank.net', +'7bndh.voluumtrk.com', +'7cxcrejm.com', +'7dz98ad91l.s.ad6media.fr', +'7ec4-d4b0-f6eb-5588.reporo.net', +'7faa-e93a-19c5-c96d.reporo.net', +'7fdf-f670-24dd-3bd8.reporo.net', +'7fed-2832-993b-cb28.reporo.net', +'7fgba.voluumtrk.com', +'7fpdm.voluumtrk.com', +'7gfqw.voluumtrk.com', +'7hfmu.voluumtrk.com', +'7hpb1.voluumtrk.com', +'7hrpx.voluumtrk.com', +'7iytk.voluumtrk.com', +'7jftl.voluumtrk.com', +'7jjrd.voluumtrk.com', +'7lfu6.voluumtrk.com', +'7ntrp.voluumtrk.com', +'7qkuf.voluumtrk.com', +'7search.com', +'7sultans.com', +'7vhyc.voluumtrk.com', +'7yt26.voluumtrk.com', +'8.6.87.194.dynamic.dol.ru', +'8.dramafeverw2.appspot.com', +'8.ptp22.com', +'80.6.87.194.dynamic.dol.ru', +'8097-c493-8fbf-0dc2.reporo.net', +'81.6.87.194.dynamic.dol.ru', +'810f3f9dde63ae3.com', +'811b-7d4e-7abb-a29e.reporo.net', +'81d9-e62d-0d23-6259.reporo.net', +'81ynv.voluumtrk.com', +'82.6.87.194.dynamic.dol.ru', +'8233fa03a40c92d.com', +'824le.voluumtrk.com', +'82d914.se', +'82sn9.voluumtrk.com', +'83.6.87.194.dynamic.dol.ru', +'8328.bapi.adsafeprotected.com', +'833b446bf809d05d8cbe-22d497cab0248fe8bf9979b2e6155da2.r90.cf2.rackcdn.com', +'84.6.87.194.dynamic.dol.ru', +'85.6.87.194.dynamic.dol.ru', +'859-events.olark.com', +'86.6.87.194.dynamic.dol.ru', +'863c4c0c521.se', +'865.bitterstrawberry.com', +'87.6.87.194.dynamic.dol.ru', +'8796.tctm.co', +'88.6.87.194.dynamic.dol.ru', +'881.engine.mobileapptracking.com', +'8889-38b3-9b87-03a8.reporo.net', +'89.6.87.194.dynamic.dol.ru', +'89jw3.voluumtrk.com', +'8bdnl.voluumtrk.com', +'8cynz.voluumtrk.com', +'8ehdc.voluumtrk.com', +'8jkad.voluumtrk.com', +'8kvks.voluumtrk.com', +'8l1dc.voluumtrk.com', +'8lacf.voluumtrk.com', +'8lt4u.voluumtrk.com', +'8ma9b.voluumtrk.com', +'8mrbg.voluumtrk.com', +'8mzyb.voluumtrk.com', +'8ngcx.voluumtrk.com', +'8pzcp.voluumtrk.com', +'8rhf0.voluumtrk.com', +'8rvlh.voluumtrk.com', +'8wtua.voluumtrk.com', +'8x8ef.voluumtrk.com', +'9.6.87.194.dynamic.dol.ru', +'9.ptp22.com', +'90.6.87.194.dynamic.dol.ru', +'900quickcash.com', +'9014.302br.net', +'9030.302br.net', +'90cc4.voluumtrk.com', +'91.10view.atdmt.com.706.9000.302br.net', +'91.6.87.194.dynamic.dol.ru', +'911promotion.com', +'913.bitterstrawberry.com', +'9169.302br.net', +'92.6.87.194.dynamic.dol.ru', +'9215.302br.net', +'9243.302br.net', +'9250.302br.net', +'92b6j.voluumtrk.com', +'92x.tumblr.com', +'93.6.87.194.dynamic.dol.ru', +'9322.302br.net', +'9332.302br.net', +'9333.302br.net', +'9340.302br.net', +'9349.302br.net', +'9362.302br.net', +'94.6.87.194.dynamic.dol.ru', +'9406.302br.net', +'9414.302br.net', +'941c-f58d-9ddb-b002.reporo.net', +'943.bitterstrawberry.com', +'943.engine.mobileapptracking.com', +'9450.302br.net', +'9458.302br.net', +'9489.302br.net', +'94982c5b634975e50103ce96082d2827.adsk2.co', +'95.6.87.194.dynamic.dol.ru', +'95126.hittail.com', +'9528.302br.net', +'9546.302br.net', +'9596.302br.net', +'96.6.87.194.dynamic.dol.ru', +'9615.302br.net', +'96175.hittail.com', +'9675.302br.net', +'968.bitterstrawberry.com', +'97.6.87.194.dynamic.dol.ru', +'9785216.log.optimizely.com', +'97a7e.voluumtrk.com', +'98.6.87.194.dynamic.dol.ru', +'980media.com', +'99.6.87.194.dynamic.dol.ru', +'991.com', +'99binary.go2cloud.org', +'99x.com', +'9ad06fe7lklknzbhi2pbzhoz9w.hop.clickbank.net', +'9ak04.voluumtrk.com', +'9am.2cnt.net', +'9ata.ero-advertising.com', +'9awdf.voluumtrk.com', +'9b80-7ce0-5a47-2323.reporo.net', +'9brpz.voluumtrk.com', +'9bwls.voluumtrk.com', +'9bx7v.voluumtrk.com', +'9c1f917.se', +'9c4e-159e-38f6-08ea.reporo.net', +'9cc85d.se', +'9cfa-356e-ec76-7adf.reporo.net', +'9ctyz.voluumtrk.com', +'9d1a9742.qqc.co', +'9down.us.intellitxt.com', +'9ezja.voluumtrk.com', +'9ezon.voluumtrk.com', +'9kfsz.voluumtrk.com', +'9kzzh.voluumtrk.com', +'9lbry.voluumtrk.com', +'9m1cn.voluumtrk.com', +'9m2hg.voluumtrk.com', +'9mwoq.voluumtrk.com', +'9mybb.voluumtrk.com', +'9nemj.voluumtrk.com', +'9pdq6.voluumtrk.com', +'9rzzg.voluumtrk.com', +'9thelm.go2cloud.org', +'9v798.voluumtrk.com', +'9wjg4.voluumtrk.com', +'9zaju.voluumtrk.com', +'9zfh1.voluumtrk.com', +'a-ads.com', +'a-counter.com.ua', +'a-counter.kiev.ua', +'a.1nimo.com', +'a.ad-sys.com', +'a.adnium.com', +'a.adorika.net', +'a.adroll.com', +'a.ads.t-online.de', +'a.ads1.msn.com', +'a.ads2.msads.net', +'a.ads2.msn.com', +'a.adtech.de', +'a.adtwirl.com', +'a.ajkelra.com', +'a.alimama.cn', +'a.applovin.com', +'a.avalhukof.com', +'a.bahaimlo.com', +'a.beglorena.com', +'a.bokilora.com', +'a.bondinra.com', +'a.bonjikoa.com', +'a.botiviga.com', +'a.c.appier.net', +'a.cam4free.com', +'a.chartboost.com', +'a.chukalapopi.com', +'a.ciridola.com', +'a.civitik.com', +'a.clicksor.cn', +'a.clickyab.com', +'a.collective-media.net.22995.9150.302br.net', +'a.collective-media.net.23421.9163.302br.net', +'a.collective-media.net.23423.9163.302br.net', +'a.collective-media.net.23425.9163.302br.net', +'a.collective-media.net.23427.9163.302br.net', +'a.collective-media.net.23429.9163.302br.net', +'a.collective-media.net.23431.9163.302br.net', +'a.collective-media.net.23433.9163.302br.net', +'a.collective-media.net.42366.9289.302br.net', +'a.collective-media.net.42367.9289.302br.net', +'a.collective-media.net.42368.9289.302br.net', +'a.collective-media.net.42369.9289.302br.net', +'a.collective-media.net.42370.9289.302br.net', +'a.collective-media.net.42371.9289.302br.net', +'a.collective-media.net.42372.9289.302br.net', +'a.collective-media.net.42373.9289.302br.net', +'a.collective-media.net.42374.9289.302br.net', +'a.collective-media.net.42375.9289.302br.net', +'a.collective-media.net.42376.9289.302br.net', +'a.collective-media.net.42377.9289.302br.net', +'a.collective-media.net.42378.9289.302br.net', +'a.collective-media.net.42379.9289.302br.net', +'a.collective-media.net.42380.9289.302br.net', +'a.collective-media.net.42381.9289.302br.net', +'a.collective-media.net.42382.9289.302br.net', +'a.collective-media.net.42384.9289.302br.net', +'a.collective-media.net.42385.9289.302br.net', +'a.collective-media.net.42386.9289.302br.net', +'a.collective-media.net.42387.9289.302br.net', +'a.collective-media.net.42388.9289.302br.net', +'a.collective-media.net.42389.9289.302br.net', +'a.collective-media.net.42390.9289.302br.net', +'a.collective-media.net.42392.9289.302br.net', +'a.collective-media.net.42394.9289.302br.net', +'a.collective-media.net.42395.9289.302br.net', +'a.collective-media.net.42396.9289.302br.net', +'a.collective-media.net.42397.9289.302br.net', +'a.collective-media.net.42398.9289.302br.net', +'a.collective-media.net.42399.9289.302br.net', +'a.collective-media.net.42400.9289.302br.net', +'a.collective-media.net.42401.9289.302br.net', +'a.collective-media.net.42402.9289.302br.net', +'a.collective-media.net.42403.9289.302br.net', +'a.collective-media.net.42404.9289.302br.net', +'a.collective-media.net.42405.9289.302br.net', +'a.collective-media.net.42406.9289.302br.net', +'a.collective-media.net.42407.9289.302br.net', +'a.collective-media.net.42408.9289.302br.net', +'a.collective-media.net.42410.9289.302br.net', +'a.collective-media.net.42412.9289.302br.net', +'a.collective-media.net.42414.9289.302br.net', +'a.collective-media.net.42416.9289.302br.net', +'a.collective-media.net.42418.9289.302br.net', +'a.collective-media.net.42420.9289.302br.net', +'a.collective-media.net.42421.9289.302br.net', +'a.collective-media.net.42422.9289.302br.net', +'a.collective-media.net.42423.9289.302br.net', +'a.collective-media.net.42424.9289.302br.net', +'a.collective-media.net.42425.9289.302br.net', +'a.collective-media.net.42426.9289.302br.net', +'a.collective-media.net.42428.9289.302br.net', +'a.collective-media.net.42430.9289.302br.net', +'a.collective-media.net.42431.9289.302br.net', +'a.collective-media.net.42432.9289.302br.net', +'a.collective-media.net.42433.9289.302br.net', +'a.collective-media.net.42434.9289.302br.net', +'a.collective-media.net.42435.9289.302br.net', +'a.collective-media.net.42436.9289.302br.net', +'a.collective-media.net.42437.9289.302br.net', +'a.collective-media.net.42438.9289.302br.net', +'a.collective-media.net.42439.9289.302br.net', +'a.collective-media.net.42440.9289.302br.net', +'a.collective-media.net.42441.9289.302br.net', +'a.collective-media.net.42442.9289.302br.net', +'a.collective-media.net.42443.9289.302br.net', +'a.collective-media.net.42444.9289.302br.net', +'a.collective-media.net.42445.9289.302br.net', +'a.collective-media.net.42446.9289.302br.net', +'a.collective-media.net.42447.9289.302br.net', +'a.collective-media.net.42448.9289.302br.net', +'a.collective-media.net.42473.9289.302br.net', +'a.collective-media.net.42474.9289.302br.net', +'a.collective-media.net.42476.9289.302br.net', +'a.collective-media.net.43489.9299.302br.net', +'a.collective-media.net.43490.9299.302br.net', +'a.collective-media.net.43491.9299.302br.net', +'a.collective-media.net.43493.9299.302br.net', +'a.collective-media.net.43494.9299.302br.net', +'a.collective-media.net.43495.9299.302br.net', +'a.collective-media.net.43497.9299.302br.net', +'a.collective-media.net.43498.9299.302br.net', +'a.collective-media.net.43499.9299.302br.net', +'a.collective-media.net.43501.9299.302br.net', +'a.collective-media.net.43503.9299.302br.net', +'a.collective-media.net.43505.9299.302br.net', +'a.collective-media.net.43506.9299.302br.net', +'a.collective-media.net.43507.9299.302br.net', +'a.collective-media.net.43508.9299.302br.net', +'a.collective-media.net.43509.9299.302br.net', +'a.collective-media.net.43510.9299.302br.net', +'a.collective-media.net.43511.9299.302br.net', +'a.collective-media.net.43512.9299.302br.net', +'a.collective-media.net.43513.9299.302br.net', +'a.collective-media.net.43514.9299.302br.net', +'a.collective-media.net.43515.9299.302br.net', +'a.collective-media.net.43516.9299.302br.net', +'a.collective-media.net.43517.9299.302br.net', +'a.collective-media.net.43518.9299.302br.net', +'a.collective-media.net.43519.9299.302br.net', +'a.collective-media.net.43520.9299.302br.net', +'a.collective-media.net.43521.9299.302br.net', +'a.collective-media.net.43523.9299.302br.net', +'a.collective-media.net.43525.9299.302br.net', +'a.collective-media.net.43527.9299.302br.net', +'a.collective-media.net.43529.9299.302br.net', +'a.collective-media.net.43531.9299.302br.net', +'a.collective-media.net.43533.9299.302br.net', +'a.collective-media.net.43534.9299.302br.net', +'a.collective-media.net.43535.9299.302br.net', +'a.collective-media.net.47545.9289.302br.net', +'a.collective-media.net.47546.9289.302br.net', +'a.collective-media.net.47547.9289.302br.net', +'a.collective-media.net.47548.9289.302br.net', +'a.collective-media.net.49419.9289.302br.net', +'a.collective-media.net.49420.9289.302br.net', +'a.collective-media.net.49421.9289.302br.net', +'a.collective-media.net.49474.9362.302br.net', +'a.collective-media.net.49475.9362.302br.net', +'a.collective-media.net.49476.9362.302br.net', +'a.collective-media.net.49477.9362.302br.net', +'a.collective-media.net.49478.9362.302br.net', +'a.collective-media.net.49479.9362.302br.net', +'a.collective-media.net.49480.9362.302br.net', +'a.collective-media.net.49481.9362.302br.net', +'a.collective-media.net.49485.9362.302br.net', +'a.collective-media.net.49487.9362.302br.net', +'a.collective-media.net.49489.9362.302br.net', +'a.collective-media.net.49490.9362.302br.net', +'a.collective-media.net.49491.9362.302br.net', +'a.collective-media.net.49492.9362.302br.net', +'a.collective-media.net.49493.9362.302br.net', +'a.collective-media.net.49494.9362.302br.net', +'a.collective-media.net.49495.9362.302br.net', +'a.collective-media.net.49496.9362.302br.net', +'a.collective-media.net.49497.9362.302br.net', +'a.collective-media.net.49501.9362.302br.net', +'a.collective-media.net.49506.9362.302br.net', +'a.collective-media.net.49507.9362.302br.net', +'a.collective-media.net.49508.9362.302br.net', +'a.collective-media.net.49509.9362.302br.net', +'a.collective-media.net.49510.9362.302br.net', +'a.collective-media.net.49511.9362.302br.net', +'a.collective-media.net.49512.9362.302br.net', +'a.collective-media.net.49513.9362.302br.net', +'a.collective-media.net.68174.9535.302br.net', +'a.collective-media.net.68175.9535.302br.net', +'a.collective-media.net.68177.9535.302br.net', +'a.collective-media.net.76215.9535.302br.net', +'a.collective-media.net.76216.9535.302br.net', +'a.collective-media.net.76217.9535.302br.net', +'a.collective-media.net.76218.9535.302br.net', +'a.collective-media.net.76224.9289.302br.net', +'a.collective-media.net.76225.9289.302br.net', +'a.collective-media.net.76226.9289.302br.net', +'a.collective-media.net.76227.9289.302br.net', +'a.collective-media.net.76228.9289.302br.net', +'a.collective-media.net.76229.9289.302br.net', +'a.collective-media.net.76230.9289.302br.net', +'a.collective-media.net.76231.9289.302br.net', +'a.collective-media.net.76232.9289.302br.net', +'a.collective-media.net.76233.9289.302br.net', +'a.collective-media.net.76234.9289.302br.net', +'a.consumer.net', +'a.ctasnet.com', +'a.d.mojigaga.com', +'a.dagasaka.com', +'a.daghashmal.com', +'a.dontibar.com', +'a.dorapodorasham.com', +'a.dpmsrv.com', +'a.drogomet.com', +'a.dulderbulder.com', +'a.egolina.com', +'a.ekolamis.com', +'a.eporner.com', +'a.erogaliv.com', +'a.fandango.com', +'a.farfarida.com', +'a.flashtalking.com', +'a.foditgoz.com', +'a.forkitz.com', +'a.fortumo.com', +'a.fulhudhoo.com', +'a.fw-a.co', +'a.glcdn.co', +'a.golizoli.com', +'a.haklopar.com', +'a.hariqavi.com', +'a.hirovivi.com', +'a.horheloopo.com', +'a.horsered.com', +'a.humuseliyahu.com', +'a.imonomy.com', +'a.intentmedia.net', +'a.intgr.net', +'a.iogous.com', +'a.jadizayo.com', +'a.jandolav.com', +'a.jingavot.com', +'a.jquerycdn.co.il', +'a.jquerymin.co.il', +'a.kalmloda.com', +'a.kat.ph', +'a.kickass.to', +'a.kilomansa.com', +'a.kilorama.com', +'a.ktxtr.com', +'a.kuchebraska.com', +'a.lazyswipe.com', +'a.ligatus.com', +'a.liktirov.com', +'a.livefreefunwith.me', +'a.lokipodi.com', +'a.measurementaz.com', +'a.mibbit.com', +'a.milparota.com', +'a.mologiq.net', +'a.mozefakt.com', +'a.msclickrdr.com', +'a.mujilora.com', +'a.muligov.com', +'a.myapp.com', +'a.namitol.com', +'a.networkworld.com', +'a.niholaev.com', +'a.niklesrov.com', +'a.nimdinb.com', +'a.o.nf', +'a.o333o.com', +'a.optinmonster.com', +'a.optnmnstr.com', +'a.pipilida.com', +'a.pitatagata.com', +'a.plapre.no', +'a.pompazilla.com', +'a.poratav.com', +'a.postrelease.com', +'a.prikolizdesa.com', +'a.qawiman.com', +'a.quavomi.com', +'a.raasnet.com', +'a.ratkalol.com', +'a.remarketstats.com', +'a.reqpostanza.com', +'a.rfihub.com', +'a.rmgserving.com', +'a.roritabo.com', +'a.rotibald.com', +'a.sc.freepornvs.com', +'a.scrappykoko.com', +'a.senolati.com', +'a.shmonekisot.com', +'a.shokala.com', +'a.shulhanafuh.com', +'a.solarmovie.is', +'a.stanzapub.com', +'a.t.webtracker.jp', +'a.tantella.com', +'a.teads.tv', +'a.tenlokif.com', +'a.thanksearch.com', +'a.thefreedictionary.com', +'a.thoughtleadr.com', +'a.tijorari.com', +'a.tikodala.com', +'a.tikrailijorj.com', +'a.tribalfusion.com', +'a.ttinline.com', +'a.turbodsp.com', +'a.twiago.com', +'a.udorik.com', +'a.ufraton.com', +'a.ukatoe.com', +'a.upnorma.com', +'a.uralap.com', +'a.utorido.com', +'a.uzekrs.com', +'a.uzotarak.com', +'a.vartoken.com', +'a.venonita.com', +'a.visadd.com', +'a.visualrevenue.com', +'a.volvelle.tech', +'a.vserv.mobi', +'a.wakapita.com', +'a.walla.co.il', +'a.websponsors.com', +'a.wikia-beacon.com', +'a.wodizapt.com', +'a.xanga.com', +'a.xeozir.com', +'a.xfreeservice.com', +'a.xtargeting.com', +'a.xvika.com', +'a.yaboshadi.com', +'a.yallboen.com', +'a.yesadsrv.com', +'a.yeshhaod.com', +'a.yorilada.com', +'a.yu0123456.com', +'a.yuituityula.com', +'a.zepozipo.com', +'a.zeroredirect.com', +'a.zeroredirect1.com', +'a.zinovila.com', +'a.zonolali.com', +'a.zorbikala.com', +'a.zortinah.com', +'a01.korrelate.net', +'a03.korrelate.net', +'a04.korrelate.net', +'a05.korrelate.net', +'a0irt.voluumtrk.com', +'a1-m1.doublepimp.com', +'a1.admaster.net', +'a1.dnbizcdn.com', +'a1.suntimes.com', +'a10shd.realshieldlinked.com', +'a11om.voluumtrk.com', +'a11shd.realshieldlinked.com', +'a12a30zg8rw248c8bl5o72qweh.hop.clickbank.net', +'a1599.g.akamai.net', +'a1767.g.akamai.net', +'a19.g.akamai.net', +'a1shd.realshieldlinked.com', +'a2.suntimes.com', +'a207.p.f.qz3.net', +'a2p.go2cloud.org', +'a2pub.com', +'a2shd.realshieldlinked.com', +'a3.suntimes.com', +'a3339.actonsoftware.com', +'a39.ac-images.myspacecdn.com', +'a3hb0.voluumtrk.com', +'a3shd.realshieldlinked.com', +'a4.suntimes.com', +'a40.suntimes.com', +'a433.com', +'a4dtracker.com', +'a4dtrk.com', +'a4mwn.voluumtrk.com', +'a4nwz.voluumtrk.com', +'a4ocm.voluumtrk.com', +'a4rlj.voluumtrk.com', +'a4shd.realshieldlinked.com', +'a5.suntimes.com', +'a50.suntimes.com', +'a51.suntimes.com', +'a52.suntimes.com', +'a53.suntimes.com', +'a54.suntimes.com', +'a55.suntimes.com', +'a5b75231.qqc.co', +'a5cee7.se', +'a615.ac-images.myspacecdn.com', +'a6522.s3-website-us-east-1.amazonaws.com', +'a6ba.com', +'a6shd.realshieldlinked.com', +'a7.suntimes.com', +'a71tb.voluumtrk.com', +'a722-a332-7273-9e88.reporo.net', +'a76.p.f.qz3.net', +'a7shd.realshieldlinked.com', +'a885.ac-images.myspacecdn.com', +'a8shd.realshieldlinked.com', +'a9.com', +'a98dc034c7781a941eba-bac02262202668bbe918ea9fb5289cd2.r58.cf2.rackcdn.com', +'a9shd.realshieldlinked.com', +'aa-gb.marketgid.com', +'aa.adfarm1.adition.com', +'aa.connextra.com', +'aa.voice2page.com', +'aaa.dv0.info', +'aad73c550c.se', +'aads.go2cloud.org', +'aads.us', +'aafq0.voluumtrk.com', +'aajtm.voluumtrk.com', +'aaotr.com', +'aarchives.ifriends.net', +'aarki.com', +'aata.ero-advertising.com', +'aatp.go2cloud.org', +'aax-eu-rtb.amazon-adsystem.com', +'aax-eu.amazon-adsystem.com', +'aax-fe-sin.amazon-adsystem.com', +'aax-fe.amazon-adsystem.com', +'aax-us-east.amazon-adsystem.com', +'aax-us-pdx.amazon-adsystem.com', +'aax-us-west.amazon-adsystem.com', +'ab.airpush.com', +'ab3a-f9be-43ed-76ca.reporo.net', +'abacidcqfrjju.download', +'abacus.go2cloud.org', +'abakus.freenet.de', +'abandonglare.8m.com', +'abbott.vo.llnwd.net', +'abbp1.pw', +'abc.bnex.com', +'abc.doublegear.com', +'abc.hearst.co.uk', +'abc.limaction.com', +'abccampaignaudit.co.uk', +'abcjmp.com', +'abe.com.au', +'abendbl.ivwbox.de', +'abhitest.2cnt.net', +'abidinglynsygto.download', +'abis.justclick.ru', +'abmr.org', +'abo.libertysurf.fr', +'about.elicitapp.com', +'about.netster.com', +'aboutads.info', +'aboutads.quantcast.com', +'above-gw.liveadvert.com', +'abovetrack.com', +'abp.smartadcheck.de', +'abr4m.voluumtrk.com', +'abradora.com', +'abscbn.spinbox.net', +'absolstats.co.za', +'abz.com', +'ac-nb.marketgid.com', +'ac.babsrv.com', +'ac.berlinonline.de', +'ac.express.de', +'ac.mz-web.de', +'ac.openx.com', +'ac.rnm.ca', +'ac6.i2idata.com', +'acac7.home4u.china.com', +'acai.go2cloud.org', +'acasatv.2cnt.net', +'acbacb9c.ipt.aol.com', +'acc.go2cloud.org', +'accelerator-media.com', +'access.amberathome.com', +'accountonline.bridgetrack.com', +'accurately-locate.com', +'ace.advertising.com', +'acecounter.com', +'acento.com', +'aceratezhoytlh.download', +'acestats.com', +'acheven2.go2cloud.org', +'achmedia.com', +'acim.com', +'acinusqiwjwzl.download', +'acknowing.com', +'aclick.adhoc1.net', +'aclickads.com', +'acme.bfast.com', +'acmeaffiliate.go2cloud.org', +'acmgold.go2cloud.org', +'acookie.alibaba.com', +'acookie.aliexpress.com', +'acookie.taobao.com', +'acotrk.com', +'acount.alley.ws', +'acq.go2cloud.org', +'acquinityinteractive.com', +'acquiromedia.go2cloud.org', +'acronymbxruv.download', +'acrossperformance.go2cloud.org', +'acs.xpanama.net', +'acspaces.ero-advertising.com', +'act.webmasterplan.com', +'actforvictory.112.2o7.net', +'action.media6degrees.com', +'action.metaffiliation.com', +'actionads.go2cloud.org', +'actionteaser.ru', +'activatesubhrle.download', +'activeagent.at', +'activeapps.go2cloud.org', +'activeboard.com', +'activetracker.activehotels.com', +'activewin.us.intellitxt.com', +'activities.alibaba.com', +'activities.niagara.comedycentral.com', +'activity.serving-sys.com', +'actonsoftware.com', +'actualdeals.com', +'actvtrack.com', +'actwebmedia.go2affise.com', +'acxiom.com', +'acxtrk.com', +'ad-ace.doubleclick.net', +'ad-agent.com', +'ad-apac.doubleclick.net', +'ad-balancer.net', +'ad-blaster.com', +'ad-board.com', +'ad-brix.com', +'ad-cdn.technoratimedia.com', +'ad-clicks.com', +'ad-creatives-public.commondatastorage.googleapis.com', +'ad-dev.adotsolution.com', +'ad-emea.doubleclick.net', +'ad-emea.doubleclick.net.1000.9007.302br.net', +'ad-emea.doubleclick.net.1002.9007.302br.net', +'ad-emea.doubleclick.net.1003.9007.302br.net', +'ad-emea.doubleclick.net.1004.9007.302br.net', +'ad-emea.doubleclick.net.1005.9007.302br.net', +'ad-emea.doubleclick.net.1006.9007.302br.net', +'ad-emea.doubleclick.net.1007.9007.302br.net', +'ad-emea.doubleclick.net.1008.9007.302br.net', +'ad-emea.doubleclick.net.1009.9007.302br.net', +'ad-emea.doubleclick.net.1013.9007.302br.net', +'ad-emea.doubleclick.net.1014.9007.302br.net', +'ad-emea.doubleclick.net.1015.9007.302br.net', +'ad-emea.doubleclick.net.1016.9007.302br.net', +'ad-emea.doubleclick.net.1017.9007.302br.net', +'ad-emea.doubleclick.net.1018.9007.302br.net', +'ad-emea.doubleclick.net.1019.9007.302br.net', +'ad-emea.doubleclick.net.1020.9007.302br.net', +'ad-emea.doubleclick.net.1021.9007.302br.net', +'ad-emea.doubleclick.net.1022.9007.302br.net', +'ad-emea.doubleclick.net.1023.9007.302br.net', +'ad-emea.doubleclick.net.1024.9007.302br.net', +'ad-emea.doubleclick.net.1026.9007.302br.net', +'ad-emea.doubleclick.net.1027.9007.302br.net', +'ad-emea.doubleclick.net.1029.9007.302br.net', +'ad-emea.doubleclick.net.1030.9007.302br.net', +'ad-emea.doubleclick.net.1032.9007.302br.net', +'ad-emea.doubleclick.net.1033.9007.302br.net', +'ad-emea.doubleclick.net.10536.9028.302br.net', +'ad-emea.doubleclick.net.10537.9028.302br.net', +'ad-emea.doubleclick.net.10539.9028.302br.net', +'ad-emea.doubleclick.net.10542.9028.302br.net', +'ad-emea.doubleclick.net.10548.9028.302br.net', +'ad-emea.doubleclick.net.10551.9028.302br.net', +'ad-emea.doubleclick.net.12421.9039.302br.net', +'ad-emea.doubleclick.net.12424.9039.302br.net', +'ad-emea.doubleclick.net.12425.9039.302br.net', +'ad-emea.doubleclick.net.12427.9039.302br.net', +'ad-emea.doubleclick.net.12428.9039.302br.net', +'ad-emea.doubleclick.net.12430.9039.302br.net', +'ad-emea.doubleclick.net.12433.9039.302br.net', +'ad-emea.doubleclick.net.12436.9039.302br.net', +'ad-emea.doubleclick.net.12944.9039.302br.net', +'ad-emea.doubleclick.net.12947.9039.302br.net', +'ad-emea.doubleclick.net.12948.9039.302br.net', +'ad-emea.doubleclick.net.12950.9039.302br.net', +'ad-emea.doubleclick.net.12951.9039.302br.net', +'ad-emea.doubleclick.net.12956.9039.302br.net', +'ad-emea.doubleclick.net.13019.9048.302br.net', +'ad-emea.doubleclick.net.13025.9048.302br.net', +'ad-emea.doubleclick.net.13026.9048.302br.net', +'ad-emea.doubleclick.net.13028.9048.302br.net', +'ad-emea.doubleclick.net.13030.9048.302br.net', +'ad-emea.doubleclick.net.13031.9048.302br.net', +'ad-emea.doubleclick.net.13034.9048.302br.net', +'ad-emea.doubleclick.net.13037.9048.302br.net', +'ad-emea.doubleclick.net.13040.9048.302br.net', +'ad-emea.doubleclick.net.13043.9048.302br.net', +'ad-emea.doubleclick.net.13049.9048.302br.net', +'ad-emea.doubleclick.net.13052.9048.302br.net', +'ad-emea.doubleclick.net.13053.9048.302br.net', +'ad-emea.doubleclick.net.13061.9048.302br.net', +'ad-emea.doubleclick.net.13062.9048.302br.net', +'ad-emea.doubleclick.net.13066.9048.302br.net', +'ad-emea.doubleclick.net.13067.9048.302br.net', +'ad-emea.doubleclick.net.13068.9048.302br.net', +'ad-emea.doubleclick.net.13070.9048.302br.net', +'ad-emea.doubleclick.net.13072.9048.302br.net', +'ad-emea.doubleclick.net.13073.9048.302br.net', +'ad-emea.doubleclick.net.13074.9048.302br.net', +'ad-emea.doubleclick.net.13075.9048.302br.net', +'ad-emea.doubleclick.net.13076.9048.302br.net', +'ad-emea.doubleclick.net.13077.9048.302br.net', +'ad-emea.doubleclick.net.13079.9048.302br.net', +'ad-emea.doubleclick.net.13080.9048.302br.net', +'ad-emea.doubleclick.net.13081.9048.302br.net', +'ad-emea.doubleclick.net.13082.9048.302br.net', +'ad-emea.doubleclick.net.13083.9048.302br.net', +'ad-emea.doubleclick.net.13085.9048.302br.net', +'ad-emea.doubleclick.net.13088.9048.302br.net', +'ad-emea.doubleclick.net.13091.9048.302br.net', +'ad-emea.doubleclick.net.13094.9048.302br.net', +'ad-emea.doubleclick.net.13095.9048.302br.net', +'ad-emea.doubleclick.net.13097.9048.302br.net', +'ad-emea.doubleclick.net.13098.9048.302br.net', +'ad-emea.doubleclick.net.13100.9048.302br.net', +'ad-emea.doubleclick.net.13101.9048.302br.net', +'ad-emea.doubleclick.net.13103.9048.302br.net', +'ad-emea.doubleclick.net.13106.9048.302br.net', +'ad-emea.doubleclick.net.13107.9048.302br.net', +'ad-emea.doubleclick.net.13109.9048.302br.net', +'ad-emea.doubleclick.net.13112.9048.302br.net', +'ad-emea.doubleclick.net.13115.9048.302br.net', +'ad-emea.doubleclick.net.13118.9048.302br.net', +'ad-emea.doubleclick.net.13121.9048.302br.net', +'ad-emea.doubleclick.net.13122.9048.302br.net', +'ad-emea.doubleclick.net.13124.9048.302br.net', +'ad-emea.doubleclick.net.13127.9048.302br.net', +'ad-emea.doubleclick.net.13130.9048.302br.net', +'ad-emea.doubleclick.net.13131.9048.302br.net', +'ad-emea.doubleclick.net.13136.9048.302br.net', +'ad-emea.doubleclick.net.13137.9048.302br.net', +'ad-emea.doubleclick.net.13139.9048.302br.net', +'ad-emea.doubleclick.net.13142.9048.302br.net', +'ad-emea.doubleclick.net.13143.9048.302br.net', +'ad-emea.doubleclick.net.13145.9048.302br.net', +'ad-emea.doubleclick.net.13146.9048.302br.net', +'ad-emea.doubleclick.net.13148.9048.302br.net', +'ad-emea.doubleclick.net.13149.9048.302br.net', +'ad-emea.doubleclick.net.13151.9048.302br.net', +'ad-emea.doubleclick.net.13152.9048.302br.net', +'ad-emea.doubleclick.net.14015.9048.302br.net', +'ad-emea.doubleclick.net.14018.9048.302br.net', +'ad-emea.doubleclick.net.14021.9048.302br.net', +'ad-emea.doubleclick.net.14024.9048.302br.net', +'ad-emea.doubleclick.net.14028.9048.302br.net', +'ad-emea.doubleclick.net.14030.9048.302br.net', +'ad-emea.doubleclick.net.16121.9090.302br.net', +'ad-emea.doubleclick.net.16169.9090.302br.net', +'ad-emea.doubleclick.net.22707.9139.302br.net', +'ad-emea.doubleclick.net.22708.9139.302br.net', +'ad-emea.doubleclick.net.22710.9139.302br.net', +'ad-emea.doubleclick.net.22711.9139.302br.net', +'ad-emea.doubleclick.net.22713.9139.302br.net', +'ad-emea.doubleclick.net.22714.9139.302br.net', +'ad-emea.doubleclick.net.22716.9139.302br.net', +'ad-emea.doubleclick.net.22717.9139.302br.net', +'ad-emea.doubleclick.net.22722.9139.302br.net', +'ad-emea.doubleclick.net.22723.9139.302br.net', +'ad-emea.doubleclick.net.22725.9139.302br.net', +'ad-emea.doubleclick.net.22726.9139.302br.net', +'ad-emea.doubleclick.net.23179.9162.302br.net', +'ad-emea.doubleclick.net.23180.9162.302br.net', +'ad-emea.doubleclick.net.23182.9162.302br.net', +'ad-emea.doubleclick.net.23183.9162.302br.net', +'ad-emea.doubleclick.net.23185.9162.302br.net', +'ad-emea.doubleclick.net.23186.9162.302br.net', +'ad-emea.doubleclick.net.23187.9162.302br.net', +'ad-emea.doubleclick.net.23188.9162.302br.net', +'ad-emea.doubleclick.net.23189.9162.302br.net', +'ad-emea.doubleclick.net.23191.9162.302br.net', +'ad-emea.doubleclick.net.23192.9162.302br.net', +'ad-emea.doubleclick.net.23194.9162.302br.net', +'ad-emea.doubleclick.net.23195.9162.302br.net', +'ad-emea.doubleclick.net.23197.9162.302br.net', +'ad-emea.doubleclick.net.23198.9162.302br.net', +'ad-emea.doubleclick.net.23200.9162.302br.net', +'ad-emea.doubleclick.net.23201.9162.302br.net', +'ad-emea.doubleclick.net.23203.9162.302br.net', +'ad-emea.doubleclick.net.23204.9162.302br.net', +'ad-emea.doubleclick.net.23206.9162.302br.net', +'ad-emea.doubleclick.net.23207.9162.302br.net', +'ad-emea.doubleclick.net.23209.9162.302br.net', +'ad-emea.doubleclick.net.23210.9162.302br.net', +'ad-emea.doubleclick.net.23212.9162.302br.net', +'ad-emea.doubleclick.net.23213.9162.302br.net', +'ad-emea.doubleclick.net.23215.9162.302br.net', +'ad-emea.doubleclick.net.23216.9162.302br.net', +'ad-emea.doubleclick.net.23218.9162.302br.net', +'ad-emea.doubleclick.net.23219.9162.302br.net', +'ad-emea.doubleclick.net.23221.9162.302br.net', +'ad-emea.doubleclick.net.23222.9162.302br.net', +'ad-emea.doubleclick.net.23224.9162.302br.net', +'ad-emea.doubleclick.net.23225.9162.302br.net', +'ad-emea.doubleclick.net.23227.9162.302br.net', +'ad-emea.doubleclick.net.23228.9162.302br.net', +'ad-emea.doubleclick.net.23230.9162.302br.net', +'ad-emea.doubleclick.net.23231.9162.302br.net', +'ad-emea.doubleclick.net.23233.9162.302br.net', +'ad-emea.doubleclick.net.23236.9162.302br.net', +'ad-emea.doubleclick.net.23237.9162.302br.net', +'ad-emea.doubleclick.net.23239.9162.302br.net', +'ad-emea.doubleclick.net.23240.9162.302br.net', +'ad-emea.doubleclick.net.23242.9162.302br.net', +'ad-emea.doubleclick.net.23243.9162.302br.net', +'ad-emea.doubleclick.net.23245.9162.302br.net', +'ad-emea.doubleclick.net.23246.9162.302br.net', +'ad-emea.doubleclick.net.23248.9162.302br.net', +'ad-emea.doubleclick.net.23249.9162.302br.net', +'ad-emea.doubleclick.net.23251.9162.302br.net', +'ad-emea.doubleclick.net.23252.9162.302br.net', +'ad-emea.doubleclick.net.23254.9162.302br.net', +'ad-emea.doubleclick.net.23255.9162.302br.net', +'ad-emea.doubleclick.net.23257.9162.302br.net', +'ad-emea.doubleclick.net.23258.9162.302br.net', +'ad-emea.doubleclick.net.23260.9162.302br.net', +'ad-emea.doubleclick.net.23261.9162.302br.net', +'ad-emea.doubleclick.net.23263.9162.302br.net', +'ad-emea.doubleclick.net.23264.9162.302br.net', +'ad-emea.doubleclick.net.23266.9162.302br.net', +'ad-emea.doubleclick.net.23267.9162.302br.net', +'ad-emea.doubleclick.net.23269.9162.302br.net', +'ad-emea.doubleclick.net.23270.9162.302br.net', +'ad-emea.doubleclick.net.23272.9162.302br.net', +'ad-emea.doubleclick.net.23273.9162.302br.net', +'ad-emea.doubleclick.net.23275.9162.302br.net', +'ad-emea.doubleclick.net.23276.9162.302br.net', +'ad-emea.doubleclick.net.23278.9162.302br.net', +'ad-emea.doubleclick.net.23279.9162.302br.net', +'ad-emea.doubleclick.net.23281.9162.302br.net', +'ad-emea.doubleclick.net.23282.9162.302br.net', +'ad-emea.doubleclick.net.23284.9162.302br.net', +'ad-emea.doubleclick.net.23285.9162.302br.net', +'ad-emea.doubleclick.net.35450.9269.302br.net', +'ad-emea.doubleclick.net.35451.9269.302br.net', +'ad-emea.doubleclick.net.35452.9269.302br.net', +'ad-emea.doubleclick.net.35453.9269.302br.net', +'ad-emea.doubleclick.net.35454.9269.302br.net', +'ad-emea.doubleclick.net.35455.9269.302br.net', +'ad-emea.doubleclick.net.35456.9269.302br.net', +'ad-emea.doubleclick.net.35457.9269.302br.net', +'ad-emea.doubleclick.net.35458.9269.302br.net', +'ad-emea.doubleclick.net.35459.9269.302br.net', +'ad-emea.doubleclick.net.35460.9269.302br.net', +'ad-emea.doubleclick.net.35461.9269.302br.net', +'ad-emea.doubleclick.net.35462.9269.302br.net', +'ad-emea.doubleclick.net.35463.9269.302br.net', +'ad-emea.doubleclick.net.35464.9269.302br.net', +'ad-emea.doubleclick.net.35465.9269.302br.net', +'ad-emea.doubleclick.net.35466.9269.302br.net', +'ad-emea.doubleclick.net.35467.9269.302br.net', +'ad-emea.doubleclick.net.36871.9286.302br.net', +'ad-emea.doubleclick.net.36872.9286.302br.net', +'ad-emea.doubleclick.net.36873.9286.302br.net', +'ad-emea.doubleclick.net.36887.9286.302br.net', +'ad-emea.doubleclick.net.36888.9286.302br.net', +'ad-emea.doubleclick.net.39901.9307.302br.net', +'ad-emea.doubleclick.net.39903.9307.302br.net', +'ad-emea.doubleclick.net.39907.9307.302br.net', +'ad-emea.doubleclick.net.39909.9307.302br.net', +'ad-emea.doubleclick.net.39973.9307.302br.net', +'ad-emea.doubleclick.net.39975.9307.302br.net', +'ad-emea.doubleclick.net.39982.9307.302br.net', +'ad-emea.doubleclick.net.39984.9307.302br.net', +'ad-emea.doubleclick.net.39985.9307.302br.net', +'ad-emea.doubleclick.net.39987.9307.302br.net', +'ad-emea.doubleclick.net.39994.9307.302br.net', +'ad-emea.doubleclick.net.39996.9307.302br.net', +'ad-emea.doubleclick.net.39997.9307.302br.net', +'ad-emea.doubleclick.net.39999.9307.302br.net', +'ad-emea.doubleclick.net.40003.9307.302br.net', +'ad-emea.doubleclick.net.40005.9307.302br.net', +'ad-emea.doubleclick.net.40009.9307.302br.net', +'ad-emea.doubleclick.net.40011.9307.302br.net', +'ad-emea.doubleclick.net.40018.9307.302br.net', +'ad-emea.doubleclick.net.40020.9307.302br.net', +'ad-emea.doubleclick.net.40027.9307.302br.net', +'ad-emea.doubleclick.net.40029.9307.302br.net', +'ad-emea.doubleclick.net.40030.9307.302br.net', +'ad-emea.doubleclick.net.40032.9307.302br.net', +'ad-emea.doubleclick.net.40033.9307.302br.net', +'ad-emea.doubleclick.net.40035.9307.302br.net', +'ad-emea.doubleclick.net.40090.9307.302br.net', +'ad-emea.doubleclick.net.40092.9307.302br.net', +'ad-emea.doubleclick.net.40099.9307.302br.net', +'ad-emea.doubleclick.net.40101.9307.302br.net', +'ad-emea.doubleclick.net.42685.9325.302br.net', +'ad-emea.doubleclick.net.42686.9325.302br.net', +'ad-emea.doubleclick.net.42688.9325.302br.net', +'ad-emea.doubleclick.net.42691.9325.302br.net', +'ad-emea.doubleclick.net.42692.9325.302br.net', +'ad-emea.doubleclick.net.42694.9325.302br.net', +'ad-emea.doubleclick.net.42695.9325.302br.net', +'ad-emea.doubleclick.net.42697.9325.302br.net', +'ad-emea.doubleclick.net.42698.9325.302br.net', +'ad-emea.doubleclick.net.42700.9325.302br.net', +'ad-emea.doubleclick.net.42701.9325.302br.net', +'ad-emea.doubleclick.net.42703.9325.302br.net', +'ad-emea.doubleclick.net.42704.9325.302br.net', +'ad-emea.doubleclick.net.42706.9325.302br.net', +'ad-emea.doubleclick.net.42712.9325.302br.net', +'ad-emea.doubleclick.net.42713.9325.302br.net', +'ad-emea.doubleclick.net.42715.9325.302br.net', +'ad-emea.doubleclick.net.42716.9325.302br.net', +'ad-emea.doubleclick.net.42718.9325.302br.net', +'ad-emea.doubleclick.net.42721.9325.302br.net', +'ad-emea.doubleclick.net.42804.9326.302br.net', +'ad-emea.doubleclick.net.42807.9326.302br.net', +'ad-emea.doubleclick.net.42808.9326.302br.net', +'ad-emea.doubleclick.net.42810.9326.302br.net', +'ad-emea.doubleclick.net.42813.9326.302br.net', +'ad-emea.doubleclick.net.42816.9326.302br.net', +'ad-emea.doubleclick.net.42817.9326.302br.net', +'ad-emea.doubleclick.net.42819.9326.302br.net', +'ad-emea.doubleclick.net.42822.9326.302br.net', +'ad-emea.doubleclick.net.42825.9326.302br.net', +'ad-emea.doubleclick.net.42828.9326.302br.net', +'ad-emea.doubleclick.net.42831.9326.302br.net', +'ad-emea.doubleclick.net.42834.9326.302br.net', +'ad-emea.doubleclick.net.42835.9326.302br.net', +'ad-emea.doubleclick.net.42837.9326.302br.net', +'ad-emea.doubleclick.net.42840.9326.302br.net', +'ad-emea.doubleclick.net.42843.9326.302br.net', +'ad-emea.doubleclick.net.42844.9326.302br.net', +'ad-emea.doubleclick.net.42846.9326.302br.net', +'ad-emea.doubleclick.net.43038.9325.302br.net', +'ad-emea.doubleclick.net.43040.9325.302br.net', +'ad-emea.doubleclick.net.43041.9325.302br.net', +'ad-emea.doubleclick.net.43043.9325.302br.net', +'ad-emea.doubleclick.net.43044.9325.302br.net', +'ad-emea.doubleclick.net.43046.9325.302br.net', +'ad-emea.doubleclick.net.44831.9339.302br.net', +'ad-emea.doubleclick.net.44834.9339.302br.net', +'ad-emea.doubleclick.net.44837.9339.302br.net', +'ad-emea.doubleclick.net.46927.9347.302br.net', +'ad-emea.doubleclick.net.46930.9347.302br.net', +'ad-emea.doubleclick.net.46933.9347.302br.net', +'ad-emea.doubleclick.net.51282.9307.302br.net', +'ad-emea.doubleclick.net.51284.9307.302br.net', +'ad-emea.doubleclick.net.51285.9307.302br.net', +'ad-emea.doubleclick.net.51287.9307.302br.net', +'ad-emea.doubleclick.net.51291.9307.302br.net', +'ad-emea.doubleclick.net.51293.9307.302br.net', +'ad-emea.doubleclick.net.58218.9307.302br.net', +'ad-emea.doubleclick.net.58220.9307.302br.net', +'ad-emea.doubleclick.net.58230.9307.302br.net', +'ad-emea.doubleclick.net.58232.9307.302br.net', +'ad-emea.doubleclick.net.58236.9307.302br.net', +'ad-emea.doubleclick.net.58238.9307.302br.net', +'ad-emea.doubleclick.net.61327.9462.302br.net', +'ad-emea.doubleclick.net.61330.9462.302br.net', +'ad-emea.doubleclick.net.61333.9462.302br.net', +'ad-emea.doubleclick.net.61336.9462.302br.net', +'ad-emea.doubleclick.net.61339.9462.302br.net', +'ad-emea.doubleclick.net.61340.9462.302br.net', +'ad-emea.doubleclick.net.61342.9462.302br.net', +'ad-emea.doubleclick.net.61345.9462.302br.net', +'ad-emea.doubleclick.net.61346.9462.302br.net', +'ad-emea.doubleclick.net.61348.9462.302br.net', +'ad-emea.doubleclick.net.61351.9462.302br.net', +'ad-emea.doubleclick.net.61352.9462.302br.net', +'ad-emea.doubleclick.net.61354.9462.302br.net', +'ad-emea.doubleclick.net.68799.9555.302br.net', +'ad-emea.doubleclick.net.68801.9555.302br.net', +'ad-emea.doubleclick.net.68819.9555.302br.net', +'ad-emea.doubleclick.net.68843.9555.302br.net', +'ad-emea.doubleclick.net.68864.9555.302br.net', +'ad-emea.doubleclick.net.68867.9555.302br.net', +'ad-emea.doubleclick.net.68873.9555.302br.net', +'ad-emea.doubleclick.net.68885.9555.302br.net', +'ad-emea.doubleclick.net.68897.9555.302br.net', +'ad-emea.doubleclick.net.68939.9555.302br.net', +'ad-emea.doubleclick.net.68945.9555.302br.net', +'ad-emea.doubleclick.net.68948.9555.302br.net', +'ad-emea.doubleclick.net.68954.9555.302br.net', +'ad-emea.doubleclick.net.68984.9555.302br.net', +'ad-emea.doubleclick.net.68999.9555.302br.net', +'ad-emea.doubleclick.net.69011.9555.302br.net', +'ad-emea.doubleclick.net.69026.9555.302br.net', +'ad-emea.doubleclick.net.69047.9555.302br.net', +'ad-emea.doubleclick.net.69050.9555.302br.net', +'ad-emea.doubleclick.net.69060.9555.302br.net', +'ad-emea.doubleclick.net.69062.9555.302br.net', +'ad-emea.doubleclick.net.69065.9555.302br.net', +'ad-emea.doubleclick.net.69077.9555.302br.net', +'ad-emea.doubleclick.net.69083.9555.302br.net', +'ad-emea.doubleclick.net.69087.9555.302br.net', +'ad-emea.doubleclick.net.69096.9555.302br.net', +'ad-emea.doubleclick.net.69098.9555.302br.net', +'ad-emea.doubleclick.net.69107.9555.302br.net', +'ad-emea.doubleclick.net.69110.9555.302br.net', +'ad-emea.doubleclick.net.69116.9555.302br.net', +'ad-emea.doubleclick.net.69128.9555.302br.net', +'ad-emea.doubleclick.net.69134.9555.302br.net', +'ad-emea.doubleclick.net.69155.9555.302br.net', +'ad-emea.doubleclick.net.69158.9555.302br.net', +'ad-emea.doubleclick.net.69161.9555.302br.net', +'ad-emea.doubleclick.net.69176.9555.302br.net', +'ad-emea.doubleclick.net.69182.9555.302br.net', +'ad-emea.doubleclick.net.69203.9555.302br.net', +'ad-emea.doubleclick.net.69206.9555.302br.net', +'ad-emea.doubleclick.net.69218.9555.302br.net', +'ad-emea.doubleclick.net.69227.9555.302br.net', +'ad-emea.doubleclick.net.69236.9555.302br.net', +'ad-emea.doubleclick.net.69239.9555.302br.net', +'ad-emea.doubleclick.net.69242.9555.302br.net', +'ad-emea.doubleclick.net.69260.9555.302br.net', +'ad-emea.doubleclick.net.69269.9555.302br.net', +'ad-emea.doubleclick.net.69272.9555.302br.net', +'ad-emea.doubleclick.net.69275.9555.302br.net', +'ad-emea.doubleclick.net.69278.9555.302br.net', +'ad-emea.doubleclick.net.69284.9555.302br.net', +'ad-emea.doubleclick.net.69296.9555.302br.net', +'ad-emea.doubleclick.net.69302.9555.302br.net', +'ad-emea.doubleclick.net.69314.9555.302br.net', +'ad-emea.doubleclick.net.69326.9555.302br.net', +'ad-emea.doubleclick.net.69329.9555.302br.net', +'ad-emea.doubleclick.net.69339.9555.302br.net', +'ad-emea.doubleclick.net.69341.9555.302br.net', +'ad-emea.doubleclick.net.69356.9555.302br.net', +'ad-emea.doubleclick.net.69380.9555.302br.net', +'ad-emea.doubleclick.net.69576.9574.302br.net', +'ad-emea.doubleclick.net.69577.9574.302br.net', +'ad-emea.doubleclick.net.69578.9574.302br.net', +'ad-emea.doubleclick.net.69579.9574.302br.net', +'ad-emea.doubleclick.net.69580.9574.302br.net', +'ad-emea.doubleclick.net.69581.9574.302br.net', +'ad-emea.doubleclick.net.69582.9574.302br.net', +'ad-emea.doubleclick.net.69583.9574.302br.net', +'ad-emea.doubleclick.net.69584.9574.302br.net', +'ad-emea.doubleclick.net.69586.9574.302br.net', +'ad-emea.doubleclick.net.69588.9574.302br.net', +'ad-emea.doubleclick.net.69589.9574.302br.net', +'ad-emea.doubleclick.net.69590.9574.302br.net', +'ad-emea.doubleclick.net.69592.9574.302br.net', +'ad-emea.doubleclick.net.69593.9574.302br.net', +'ad-emea.doubleclick.net.69594.9574.302br.net', +'ad-emea.doubleclick.net.69595.9574.302br.net', +'ad-emea.doubleclick.net.69596.9574.302br.net', +'ad-emea.doubleclick.net.69597.9574.302br.net', +'ad-emea.doubleclick.net.69598.9574.302br.net', +'ad-emea.doubleclick.net.69600.9574.302br.net', +'ad-emea.doubleclick.net.69601.9574.302br.net', +'ad-emea.doubleclick.net.69602.9574.302br.net', +'ad-emea.doubleclick.net.69603.9574.302br.net', +'ad-emea.doubleclick.net.69604.9574.302br.net', +'ad-emea.doubleclick.net.69605.9574.302br.net', +'ad-emea.doubleclick.net.69606.9574.302br.net', +'ad-emea.doubleclick.net.69607.9574.302br.net', +'ad-emea.doubleclick.net.69608.9574.302br.net', +'ad-emea.doubleclick.net.69609.9574.302br.net', +'ad-emea.doubleclick.net.69610.9574.302br.net', +'ad-emea.doubleclick.net.69611.9574.302br.net', +'ad-emea.doubleclick.net.69612.9574.302br.net', +'ad-emea.doubleclick.net.69613.9574.302br.net', +'ad-emea.doubleclick.net.69614.9574.302br.net', +'ad-emea.doubleclick.net.69615.9574.302br.net', +'ad-emea.doubleclick.net.69616.9574.302br.net', +'ad-emea.doubleclick.net.69617.9574.302br.net', +'ad-emea.doubleclick.net.69618.9574.302br.net', +'ad-emea.doubleclick.net.69619.9574.302br.net', +'ad-emea.doubleclick.net.69620.9574.302br.net', +'ad-emea.doubleclick.net.69622.9574.302br.net', +'ad-emea.doubleclick.net.69623.9574.302br.net', +'ad-emea.doubleclick.net.69624.9574.302br.net', +'ad-emea.doubleclick.net.69625.9574.302br.net', +'ad-emea.doubleclick.net.69626.9574.302br.net', +'ad-emea.doubleclick.net.69627.9574.302br.net', +'ad-emea.doubleclick.net.69628.9574.302br.net', +'ad-emea.doubleclick.net.69629.9574.302br.net', +'ad-emea.doubleclick.net.69630.9574.302br.net', +'ad-emea.doubleclick.net.69631.9574.302br.net', +'ad-emea.doubleclick.net.69632.9574.302br.net', +'ad-emea.doubleclick.net.69633.9574.302br.net', +'ad-emea.doubleclick.net.69634.9574.302br.net', +'ad-emea.doubleclick.net.69635.9574.302br.net', +'ad-emea.doubleclick.net.69636.9574.302br.net', +'ad-emea.doubleclick.net.69637.9574.302br.net', +'ad-emea.doubleclick.net.69638.9574.302br.net', +'ad-emea.doubleclick.net.69639.9574.302br.net', +'ad-emea.doubleclick.net.69640.9574.302br.net', +'ad-emea.doubleclick.net.69641.9574.302br.net', +'ad-emea.doubleclick.net.69643.9574.302br.net', +'ad-emea.doubleclick.net.69644.9574.302br.net', +'ad-emea.doubleclick.net.69646.9574.302br.net', +'ad-emea.doubleclick.net.69647.9574.302br.net', +'ad-emea.doubleclick.net.69648.9574.302br.net', +'ad-emea.doubleclick.net.69649.9574.302br.net', +'ad-emea.doubleclick.net.69650.9574.302br.net', +'ad-emea.doubleclick.net.69667.9578.302br.net', +'ad-emea.doubleclick.net.69669.9578.302br.net', +'ad-emea.doubleclick.net.69671.9578.302br.net', +'ad-emea.doubleclick.net.69673.9578.302br.net', +'ad-emea.doubleclick.net.69675.9578.302br.net', +'ad-emea.doubleclick.net.69677.9578.302br.net', +'ad-emea.doubleclick.net.69679.9578.302br.net', +'ad-emea.doubleclick.net.69681.9578.302br.net', +'ad-emea.doubleclick.net.69683.9578.302br.net', +'ad-emea.doubleclick.net.69685.9578.302br.net', +'ad-emea.doubleclick.net.69687.9578.302br.net', +'ad-emea.doubleclick.net.69689.9578.302br.net', +'ad-emea.doubleclick.net.69691.9578.302br.net', +'ad-emea.doubleclick.net.69693.9578.302br.net', +'ad-emea.doubleclick.net.69695.9578.302br.net', +'ad-emea.doubleclick.net.69697.9578.302br.net', +'ad-emea.doubleclick.net.69698.9578.302br.net', +'ad-emea.doubleclick.net.69700.9578.302br.net', +'ad-emea.doubleclick.net.69702.9578.302br.net', +'ad-emea.doubleclick.net.69704.9578.302br.net', +'ad-emea.doubleclick.net.69706.9578.302br.net', +'ad-emea.doubleclick.net.73042.9614.302br.net', +'ad-emea.doubleclick.net.73045.9614.302br.net', +'ad-emea.doubleclick.net.73048.9614.302br.net', +'ad-emea.doubleclick.net.76473.9640.302br.net', +'ad-emea.doubleclick.net.76474.9640.302br.net', +'ad-emea.doubleclick.net.76476.9640.302br.net', +'ad-emea.doubleclick.net.76479.9640.302br.net', +'ad-emea.doubleclick.net.76480.9640.302br.net', +'ad-emea.doubleclick.net.76482.9640.302br.net', +'ad-emea.doubleclick.net.76485.9640.302br.net', +'ad-emea.doubleclick.net.76795.9649.302br.net', +'ad-emea.doubleclick.net.76798.9649.302br.net', +'ad-emea.doubleclick.net.76801.9649.302br.net', +'ad-emea.doubleclick.net.76804.9649.302br.net', +'ad-emea.doubleclick.net.76807.9649.302br.net', +'ad-emea.doubleclick.net.76810.9649.302br.net', +'ad-emea.doubleclick.net.76813.9649.302br.net', +'ad-emea.doubleclick.net.76816.9649.302br.net', +'ad-emea.doubleclick.net.76819.9649.302br.net', +'ad-emea.doubleclick.net.76822.9649.302br.net', +'ad-emea.doubleclick.net.77250.9640.302br.net', +'ad-emea.doubleclick.net.77251.9640.302br.net', +'ad-emea.doubleclick.net.77252.9640.302br.net', +'ad-emea.doubleclick.net.77253.9640.302br.net', +'ad-emea.doubleclick.net.77254.9640.302br.net', +'ad-emea.doubleclick.net.77255.9640.302br.net', +'ad-emea.doubleclick.net.77256.9640.302br.net', +'ad-emea.doubleclick.net.77257.9640.302br.net', +'ad-emea.doubleclick.net.77258.9640.302br.net', +'ad-emea.doubleclick.net.77259.9640.302br.net', +'ad-emea.doubleclick.net.77260.9640.302br.net', +'ad-emea.doubleclick.net.77261.9640.302br.net', +'ad-emea.doubleclick.net.77262.9640.302br.net', +'ad-emea.doubleclick.net.77263.9640.302br.net', +'ad-emea.doubleclick.net.77264.9640.302br.net', +'ad-emea.doubleclick.net.77265.9640.302br.net', +'ad-emea.doubleclick.net.77266.9640.302br.net', +'ad-emea.doubleclick.net.77267.9640.302br.net', +'ad-emea.doubleclick.net.77268.9640.302br.net', +'ad-emea.doubleclick.net.77269.9640.302br.net', +'ad-emea.doubleclick.net.77330.9653.302br.net', +'ad-emea.doubleclick.net.77331.9653.302br.net', +'ad-emea.doubleclick.net.77332.9653.302br.net', +'ad-emea.doubleclick.net.77333.9653.302br.net', +'ad-emea.doubleclick.net.77334.9653.302br.net', +'ad-emea.doubleclick.net.77335.9653.302br.net', +'ad-emea.doubleclick.net.77336.9653.302br.net', +'ad-emea.doubleclick.net.77337.9653.302br.net', +'ad-emea.doubleclick.net.77338.9653.302br.net', +'ad-emea.doubleclick.net.77339.9653.302br.net', +'ad-emea.doubleclick.net.77340.9653.302br.net', +'ad-emea.doubleclick.net.77341.9653.302br.net', +'ad-emea.doubleclick.net.77342.9653.302br.net', +'ad-emea.doubleclick.net.77343.9653.302br.net', +'ad-emea.doubleclick.net.77344.9653.302br.net', +'ad-emea.doubleclick.net.77345.9653.302br.net', +'ad-emea.doubleclick.net.77346.9653.302br.net', +'ad-emea.doubleclick.net.77347.9653.302br.net', +'ad-emea.doubleclick.net.77348.9653.302br.net', +'ad-emea.doubleclick.net.77349.9653.302br.net', +'ad-emea.doubleclick.net.77350.9653.302br.net', +'ad-emea.doubleclick.net.77351.9653.302br.net', +'ad-emea.doubleclick.net.77352.9653.302br.net', +'ad-emea.doubleclick.net.77353.9653.302br.net', +'ad-emea.doubleclick.net.77355.9653.302br.net', +'ad-emea.doubleclick.net.77357.9653.302br.net', +'ad-emea.doubleclick.net.77358.9653.302br.net', +'ad-emea.doubleclick.net.77359.9653.302br.net', +'ad-emea.doubleclick.net.77877.9501.302br.net', +'ad-emea.doubleclick.net.77878.9501.302br.net', +'ad-emea.doubleclick.net.77879.9501.302br.net', +'ad-emea.doubleclick.net.77889.9501.302br.net', +'ad-emea.doubleclick.net.77890.9501.302br.net', +'ad-emea.doubleclick.net.77891.9501.302br.net', +'ad-emea.doubleclick.net.77893.9501.302br.net', +'ad-emea.doubleclick.net.77894.9501.302br.net', +'ad-emea.doubleclick.net.77896.9501.302br.net', +'ad-emea.doubleclick.net.77897.9501.302br.net', +'ad-emea.doubleclick.net.77899.9501.302br.net', +'ad-emea.doubleclick.net.77900.9501.302br.net', +'ad-emea.doubleclick.net.77902.9501.302br.net', +'ad-emea.doubleclick.net.77903.9501.302br.net', +'ad-emea.doubleclick.net.77905.9501.302br.net', +'ad-emea.doubleclick.net.77906.9501.302br.net', +'ad-emea.doubleclick.net.77907.9501.302br.net', +'ad-emea.doubleclick.net.77908.9501.302br.net', +'ad-emea.doubleclick.net.77909.9501.302br.net', +'ad-emea.doubleclick.net.77910.9501.302br.net', +'ad-emea.doubleclick.net.77911.9501.302br.net', +'ad-emea.doubleclick.net.77912.9501.302br.net', +'ad-emea.doubleclick.net.77913.9501.302br.net', +'ad-emea.doubleclick.net.77914.9501.302br.net', +'ad-emea.doubleclick.net.77915.9501.302br.net', +'ad-emea.doubleclick.net.77916.9501.302br.net', +'ad-emea.doubleclick.net.77917.9501.302br.net', +'ad-emea.doubleclick.net.77918.9501.302br.net', +'ad-emea.doubleclick.net.77920.9501.302br.net', +'ad-emea.doubleclick.net.77921.9501.302br.net', +'ad-emea.doubleclick.net.77922.9501.302br.net', +'ad-emea.doubleclick.net.77923.9501.302br.net', +'ad-emea.doubleclick.net.77924.9501.302br.net', +'ad-emea.doubleclick.net.77925.9501.302br.net', +'ad-emea.doubleclick.net.77926.9501.302br.net', +'ad-emea.doubleclick.net.77927.9501.302br.net', +'ad-emea.doubleclick.net.77928.9501.302br.net', +'ad-emea.doubleclick.net.77929.9501.302br.net', +'ad-emea.doubleclick.net.77930.9501.302br.net', +'ad-emea.doubleclick.net.77931.9501.302br.net', +'ad-emea.doubleclick.net.77932.9501.302br.net', +'ad-emea.doubleclick.net.77933.9501.302br.net', +'ad-emea.doubleclick.net.77950.9501.302br.net', +'ad-emea.doubleclick.net.77951.9501.302br.net', +'ad-emea.doubleclick.net.77955.9501.302br.net', +'ad-emea.doubleclick.net.77956.9501.302br.net', +'ad-emea.doubleclick.net.77957.9501.302br.net', +'ad-emea.doubleclick.net.77958.9501.302br.net', +'ad-emea.doubleclick.net.77959.9501.302br.net', +'ad-emea.doubleclick.net.77960.9501.302br.net', +'ad-emea.doubleclick.net.77961.9501.302br.net', +'ad-emea.doubleclick.net.77962.9501.302br.net', +'ad-emea.doubleclick.net.77963.9501.302br.net', +'ad-emea.doubleclick.net.77965.9501.302br.net', +'ad-emea.doubleclick.net.77966.9501.302br.net', +'ad-emea.doubleclick.net.77967.9501.302br.net', +'ad-emea.doubleclick.net.77968.9501.302br.net', +'ad-emea.doubleclick.net.77969.9501.302br.net', +'ad-emea.doubleclick.net.77971.9501.302br.net', +'ad-emea.doubleclick.net.77972.9501.302br.net', +'ad-emea.doubleclick.net.77974.9501.302br.net', +'ad-emea.doubleclick.net.77975.9501.302br.net', +'ad-emea.doubleclick.net.77985.9503.302br.net', +'ad-emea.doubleclick.net.77986.9503.302br.net', +'ad-emea.doubleclick.net.77993.9503.302br.net', +'ad-emea.doubleclick.net.77994.9503.302br.net', +'ad-emea.doubleclick.net.77996.9503.302br.net', +'ad-emea.doubleclick.net.77997.9503.302br.net', +'ad-emea.doubleclick.net.77998.9503.302br.net', +'ad-emea.doubleclick.net.77999.9503.302br.net', +'ad-emea.doubleclick.net.78001.9503.302br.net', +'ad-emea.doubleclick.net.78002.9503.302br.net', +'ad-emea.doubleclick.net.78003.9503.302br.net', +'ad-emea.doubleclick.net.78004.9503.302br.net', +'ad-emea.doubleclick.net.78005.9503.302br.net', +'ad-emea.doubleclick.net.78006.9503.302br.net', +'ad-emea.doubleclick.net.78007.9503.302br.net', +'ad-emea.doubleclick.net.78009.9503.302br.net', +'ad-emea.doubleclick.net.78010.9503.302br.net', +'ad-emea.doubleclick.net.78011.9503.302br.net', +'ad-emea.doubleclick.net.78012.9503.302br.net', +'ad-emea.doubleclick.net.78013.9503.302br.net', +'ad-emea.doubleclick.net.78014.9503.302br.net', +'ad-emea.doubleclick.net.78016.9503.302br.net', +'ad-emea.doubleclick.net.78017.9503.302br.net', +'ad-emea.doubleclick.net.78028.9503.302br.net', +'ad-emea.doubleclick.net.78029.9503.302br.net', +'ad-emea.doubleclick.net.78031.9503.302br.net', +'ad-emea.doubleclick.net.78032.9503.302br.net', +'ad-emea.doubleclick.net.78037.9503.302br.net', +'ad-emea.doubleclick.net.78038.9503.302br.net', +'ad-emea.doubleclick.net.78040.9503.302br.net', +'ad-emea.doubleclick.net.78041.9503.302br.net', +'ad-emea.doubleclick.net.78048.9503.302br.net', +'ad-emea.doubleclick.net.78049.9503.302br.net', +'ad-emea.doubleclick.net.78050.9503.302br.net', +'ad-emea.doubleclick.net.78051.9503.302br.net', +'ad-emea.doubleclick.net.78052.9503.302br.net', +'ad-emea.doubleclick.net.78053.9503.302br.net', +'ad-emea.doubleclick.net.78054.9503.302br.net', +'ad-emea.doubleclick.net.78055.9503.302br.net', +'ad-emea.doubleclick.net.78056.9503.302br.net', +'ad-emea.doubleclick.net.78057.9503.302br.net', +'ad-emea.doubleclick.net.78058.9503.302br.net', +'ad-emea.doubleclick.net.78059.9503.302br.net', +'ad-emea.doubleclick.net.78060.9503.302br.net', +'ad-emea.doubleclick.net.78061.9503.302br.net', +'ad-emea.doubleclick.net.78062.9503.302br.net', +'ad-emea.doubleclick.net.78063.9503.302br.net', +'ad-emea.doubleclick.net.78064.9503.302br.net', +'ad-emea.doubleclick.net.78065.9503.302br.net', +'ad-emea.doubleclick.net.78076.9503.302br.net', +'ad-emea.doubleclick.net.78079.9503.302br.net', +'ad-emea.doubleclick.net.78080.9503.302br.net', +'ad-emea.doubleclick.net.78082.9503.302br.net', +'ad-emea.doubleclick.net.78085.9503.302br.net', +'ad-emea.doubleclick.net.78086.9503.302br.net', +'ad-emea.doubleclick.net.78088.9503.302br.net', +'ad-emea.doubleclick.net.78091.9503.302br.net', +'ad-emea.doubleclick.net.78092.9503.302br.net', +'ad-emea.doubleclick.net.960.9007.302br.net', +'ad-emea.doubleclick.net.961.9007.302br.net', +'ad-emea.doubleclick.net.963.9007.302br.net', +'ad-emea.doubleclick.net.964.9007.302br.net', +'ad-emea.doubleclick.net.966.9007.302br.net', +'ad-emea.doubleclick.net.967.9007.302br.net', +'ad-emea.doubleclick.net.975.9007.302br.net', +'ad-emea.doubleclick.net.976.9007.302br.net', +'ad-emea.doubleclick.net.977.9007.302br.net', +'ad-emea.doubleclick.net.978.9007.302br.net', +'ad-emea.doubleclick.net.979.9007.302br.net', +'ad-emea.doubleclick.net.981.9007.302br.net', +'ad-emea.doubleclick.net.982.9007.302br.net', +'ad-emea.doubleclick.net.984.9007.302br.net', +'ad-emea.doubleclick.net.985.9007.302br.net', +'ad-emea.doubleclick.net.993.9007.302br.net', +'ad-emea.doubleclick.net.994.9007.302br.net', +'ad-emea.doubleclick.net.996.9007.302br.net', +'ad-emea.doubleclick.net.997.9007.302br.net', +'ad-emea.doubleclick.net.999.9007.302br.net', +'ad-feeds.com', +'ad-flow.com', +'ad-g.doubleclick.net', +'ad-gbn.com', +'ad-groups.com', +'ad-guru.com', +'ad-host.com', +'ad-indicator.com', +'ad-lister.co.uk', +'ad-listings.com', +'ad-lite.com', +'ad-maker.net', +'ad-rotator.com', +'ad-search.com', +'ad-server.co.za', +'ad-server.gulasidorna.se', +'ad-serverparc.nl', +'ad-solutions.com', +'ad-souk.com', +'ad-space.net', +'ad-sponsor.com', +'ad-srv.net', +'ad-staff.com', +'ad-stir.com', +'ad-style.com', +'ad-tag.inner-active.mobi', +'ad-u.com', +'ad-vice.biz', +'ad-visor.com', +'ad-x.co.uk', +'ad-x.com', +'ad.100.tbn.ru', +'ad.103092804.com', +'ad.114.com.cn', +'ad.120.tbn.ru', +'ad.123ads.nl', +'ad.163.com', +'ad.3322.net', +'ad.360yield.com', +'ad.51yes.com', +'ad.71i.de', +'ad.a-ads.com', +'ad.a8.net', +'ad.abcnews.com', +'ad.abctv.com', +'ad.ableclick.com', +'ad.about.co.kr', +'ad.aboutit.de', +'ad.aboutwebservices.com', +'ad.accelerator-media.com', +'ad.ad-srv.net', +'ad.ad-stir.com', +'ad.ad2-one.com', +'ad.adc-serv.net', +'ad.adconsole.com', +'ad.adflight.com', +'ad.adgile.com', +'ad.adintensity.com', +'ad.adip.ly', +'ad.adition.de', +'ad.adition.net', +'ad.adlantis.jp', +'ad.adlegend.com', +'ad.admitad.com', +'ad.adnet.biz', +'ad.adnet.de', +'ad.adnetinteractive.com', +'ad.adnetwork.net', +'ad.adohana.com', +'ad.adotsolution.com', +'ad.adriver.ru', +'ad.adrttt.com', +'ad.adschemist.com', +'ad.adserver01.de', +'ad.adserverplus.com', +'ad.adslim.com', +'ad.adsmart.net', +'ad.adsonpop.com', +'ad.adsrvr.org', +'ad.adtegrity.net', +'ad.adtoma.com', +'ad.adtracking.me', +'ad.adver.com.tw', +'ad.adverteerdirect.nl', +'ad.adverticum.net', +'ad.advertise.com', +'ad.advertstream.com', +'ad.adworx.at', +'ad.adxcore.com', +'ad.afy11.net', +'ad.agava.tbn.ru', +'ad.agilemedia.jp', +'ad.alldanzradio.com', +'ad.allstar.cz', +'ad.altervista.org', +'ad.amgdgt.com', +'ad.ams.mcdstorage.com', +'ad.amtk-media.com.37866.9302.302br.net', +'ad.amtk-media.com.37867.9302.302br.net', +'ad.amtk-media.com.37869.9302.302br.net', +'ad.amtk-media.com.37870.9302.302br.net', +'ad.amtk-media.com.37872.9302.302br.net', +'ad.amtk-media.com.37873.9302.302br.net', +'ad.amtk-media.com.37875.9302.302br.net', +'ad.amtk-media.com.37876.9302.302br.net', +'ad.amtk-media.com.37877.9302.302br.net', +'ad.amtk-media.com.37878.9302.302br.net', +'ad.amtk-media.com.37879.9302.302br.net', +'ad.amtk-media.com.37880.9302.302br.net', +'ad.amtk-media.com.37881.9302.302br.net', +'ad.amtk-media.com.37882.9302.302br.net', +'ad.amtk-media.com.37883.9302.302br.net', +'ad.amtk-media.com.37884.9302.302br.net', +'ad.amtk-media.com.37885.9302.302br.net', +'ad.amtk-media.com.37889.9302.302br.net', +'ad.amtk-media.com.37890.9302.302br.net', +'ad.amtk-media.com.37891.9302.302br.net', +'ad.amtk-media.com.52670.9302.302br.net', +'ad.amtk-media.com.52671.9302.302br.net', +'ad.amtk-media.com.52672.9302.302br.net', +'ad.amtk-media.com.52674.9302.302br.net', +'ad.amtk-media.com.52675.9302.302br.net', +'ad.amtk-media.com.52677.9302.302br.net', +'ad.amtk-media.com.52678.9302.302br.net', +'ad.antventure.com', +'ad.app-authority.com', +'ad.appier.net', +'ad.apps.fm', +'ad.aquamediadirect.com', +'ad.ar.doubleclick.net', +'ad.at.doubleclick.net', +'ad.atdmt.com', +'ad.au.doubleclick.net', +'ad.bannerbank.ru', +'ad.bannerconnect.net', +'ad.bannerexchange.com', +'ad.bannernetwork.it', +'ad.bannerpoint.ru', +'ad.bb.ru', +'ad.be.doubleclick.net', +'ad.bharatstudent.com', +'ad.bizo.com', +'ad.blamads.com', +'ad.blm.net', +'ad.blogdrive.com', +'ad.bnmla.com', +'ad.boardhost.com', +'ad.bol.bg', +'ad.bondage.com', +'ad.br.doubleclick.net', +'ad.brainbuzz.com', +'ad.burstdirectads.com', +'ad.bwise.ch', +'ad.ca.doubleclick.net', +'ad.cashdorado.de', +'ad.cauly.co.kr', +'ad.cgi.cz', +'ad.ch.doubleclick.net', +'ad.cl.doubleclick.net', +'ad.clickdistrict.com', +'ad.clickhere.ru', +'ad.clix.pt', +'ad.clovenetwork.com', +'ad.cn.doubleclick.net', +'ad.co.doubleclick.net', +'ad.contentspecific.com', +'ad.cornerpost.com', +'ad.crosswalk.com', +'ad.crwdcntrl.net', +'ad.cz.doubleclick.net', +'ad.damnpervert.com', +'ad.de.doubleclick.net', +'ad.dedicatedmedia.com', +'ad.deviantart.com', +'ad.digitallook.com', +'ad.digitimes.com.tw', +'ad.directaclick.com', +'ad.directrev.com', +'ad.distrigame.com', +'ad.dk.doubleclick.net', +'ad.dmm.com', +'ad.dmpi.net', +'ad.dogpile.com', +'ad.domainfactory.de', +'ad.doubleclick.de', +'ad.doubleclick.net', +'ad.doubleclick.net-60563.9436.302br.net', +'ad.doubleclick.net.1.6100.302br.net', +'ad.doubleclick.net.10100.9025.302br.net', +'ad.doubleclick.net.10102.9025.302br.net', +'ad.doubleclick.net.10104.9025.302br.net', +'ad.doubleclick.net.10106.9025.302br.net', +'ad.doubleclick.net.10108.9025.302br.net', +'ad.doubleclick.net.10110.9025.302br.net', +'ad.doubleclick.net.10113.9025.302br.net', +'ad.doubleclick.net.10116.9025.302br.net', +'ad.doubleclick.net.10119.9025.302br.net', +'ad.doubleclick.net.10122.9025.302br.net', +'ad.doubleclick.net.10125.9025.302br.net', +'ad.doubleclick.net.10128.9025.302br.net', +'ad.doubleclick.net.10168.9003.302br.net', +'ad.doubleclick.net.10171.9003.302br.net', +'ad.doubleclick.net.10174.9003.302br.net', +'ad.doubleclick.net.10177.9003.302br.net', +'ad.doubleclick.net.10180.9003.302br.net', +'ad.doubleclick.net.10183.9003.302br.net', +'ad.doubleclick.net.10186.9003.302br.net', +'ad.doubleclick.net.10189.9003.302br.net', +'ad.doubleclick.net.10192.9003.302br.net', +'ad.doubleclick.net.10195.9003.302br.net', +'ad.doubleclick.net.10198.9003.302br.net', +'ad.doubleclick.net.10201.9003.302br.net', +'ad.doubleclick.net.10246.9027.302br.net', +'ad.doubleclick.net.10250.9027.302br.net', +'ad.doubleclick.net.10258.9027.302br.net', +'ad.doubleclick.net.10261.9027.302br.net', +'ad.doubleclick.net.10273.9027.302br.net', +'ad.doubleclick.net.10279.9027.302br.net', +'ad.doubleclick.net.10282.9027.302br.net', +'ad.doubleclick.net.10294.9027.302br.net', +'ad.doubleclick.net.10304.9027.302br.net', +'ad.doubleclick.net.10307.9027.302br.net', +'ad.doubleclick.net.10310.9027.302br.net', +'ad.doubleclick.net.10313.9027.302br.net', +'ad.doubleclick.net.10316.9027.302br.net', +'ad.doubleclick.net.10319.9027.302br.net', +'ad.doubleclick.net.10322.9027.302br.net', +'ad.doubleclick.net.10325.9027.302br.net', +'ad.doubleclick.net.10328.9027.302br.net', +'ad.doubleclick.net.10331.9027.302br.net', +'ad.doubleclick.net.10334.9027.302br.net', +'ad.doubleclick.net.10337.9027.302br.net', +'ad.doubleclick.net.10341.9005.302br.net', +'ad.doubleclick.net.10342.9005.302br.net', +'ad.doubleclick.net.10344.9005.302br.net', +'ad.doubleclick.net.10346.9005.302br.net', +'ad.doubleclick.net.1040.9008.302br.net', +'ad.doubleclick.net.1041.9008.302br.net', +'ad.doubleclick.net.1043.9008.302br.net', +'ad.doubleclick.net.10515.9027.302br.net', +'ad.doubleclick.net.10518.9027.302br.net', +'ad.doubleclick.net.10524.9027.302br.net', +'ad.doubleclick.net.10526.9027.302br.net', +'ad.doubleclick.net.10530.9027.302br.net', +'ad.doubleclick.net.10533.9027.302br.net', +'ad.doubleclick.net.1054.9009.302br.net', +'ad.doubleclick.net.1057.9009.302br.net', +'ad.doubleclick.net.1060.9009.302br.net', +'ad.doubleclick.net.1066.9009.302br.net', +'ad.doubleclick.net.10660.9031.302br.net', +'ad.doubleclick.net.10661.9031.302br.net', +'ad.doubleclick.net.10665.9031.302br.net', +'ad.doubleclick.net.10666.9031.302br.net', +'ad.doubleclick.net.10667.9031.302br.net', +'ad.doubleclick.net.10668.9031.302br.net', +'ad.doubleclick.net.10669.9031.302br.net', +'ad.doubleclick.net.10670.9031.302br.net', +'ad.doubleclick.net.1069.9009.302br.net', +'ad.doubleclick.net.1072.9009.302br.net', +'ad.doubleclick.net.10750.9029.302br.net', +'ad.doubleclick.net.10762.9029.302br.net', +'ad.doubleclick.net.10777.9029.302br.net', +'ad.doubleclick.net.1078.9009.302br.net', +'ad.doubleclick.net.10786.9029.302br.net', +'ad.doubleclick.net.10792.9029.302br.net', +'ad.doubleclick.net.10798.9029.302br.net', +'ad.doubleclick.net.1081.9009.302br.net', +'ad.doubleclick.net.10816.9029.302br.net', +'ad.doubleclick.net.1084.9009.302br.net', +'ad.doubleclick.net.10846.9029.302br.net', +'ad.doubleclick.net.10855.9029.302br.net', +'ad.doubleclick.net.1087.9009.302br.net', +'ad.doubleclick.net.10882.9029.302br.net', +'ad.doubleclick.net.10888.9029.302br.net', +'ad.doubleclick.net.10903.9029.302br.net', +'ad.doubleclick.net.10921.9029.302br.net', +'ad.doubleclick.net.1093.9009.302br.net', +'ad.doubleclick.net.10939.9029.302br.net', +'ad.doubleclick.net.1096.9009.302br.net', +'ad.doubleclick.net.1102.9009.302br.net', +'ad.doubleclick.net.1105.9009.302br.net', +'ad.doubleclick.net.1108.9009.302br.net', +'ad.doubleclick.net.1111.9009.302br.net', +'ad.doubleclick.net.1114.9009.302br.net', +'ad.doubleclick.net.1115.9009.302br.net', +'ad.doubleclick.net.1118.9009.302br.net', +'ad.doubleclick.net.1131.9009.302br.net', +'ad.doubleclick.net.1134.9009.302br.net', +'ad.doubleclick.net.11375.9033.302br.net', +'ad.doubleclick.net.11381.9033.302br.net', +'ad.doubleclick.net.11384.9033.302br.net', +'ad.doubleclick.net.11393.9033.302br.net', +'ad.doubleclick.net.11396.9033.302br.net', +'ad.doubleclick.net.11545.9033.302br.net', +'ad.doubleclick.net.11551.9033.302br.net', +'ad.doubleclick.net.11557.9033.302br.net', +'ad.doubleclick.net.11567.9033.302br.net', +'ad.doubleclick.net.11568.9033.302br.net', +'ad.doubleclick.net.11569.9033.302br.net', +'ad.doubleclick.net.11572.9033.302br.net', +'ad.doubleclick.net.1164.9009.302br.net', +'ad.doubleclick.net.1165.9009.302br.net', +'ad.doubleclick.net.11704.9033.302br.net', +'ad.doubleclick.net.11719.9033.302br.net', +'ad.doubleclick.net.11770.9034.302br.net', +'ad.doubleclick.net.11773.9034.302br.net', +'ad.doubleclick.net.11774.9034.302br.net', +'ad.doubleclick.net.11776.9034.302br.net', +'ad.doubleclick.net.11779.9034.302br.net', +'ad.doubleclick.net.11780.9034.302br.net', +'ad.doubleclick.net.11785.9034.302br.net', +'ad.doubleclick.net.11786.9034.302br.net', +'ad.doubleclick.net.11788.9034.302br.net', +'ad.doubleclick.net.11789.9034.302br.net', +'ad.doubleclick.net.11791.9034.302br.net', +'ad.doubleclick.net.11792.9034.302br.net', +'ad.doubleclick.net.11797.9034.302br.net', +'ad.doubleclick.net.11798.9034.302br.net', +'ad.doubleclick.net.11800.9034.302br.net', +'ad.doubleclick.net.11801.9034.302br.net', +'ad.doubleclick.net.11803.9034.302br.net', +'ad.doubleclick.net.11804.9034.302br.net', +'ad.doubleclick.net.11806.9034.302br.net', +'ad.doubleclick.net.11807.9034.302br.net', +'ad.doubleclick.net.11812.9034.302br.net', +'ad.doubleclick.net.11813.9034.302br.net', +'ad.doubleclick.net.11821.9034.302br.net', +'ad.doubleclick.net.11822.9034.302br.net', +'ad.doubleclick.net.11823.9034.302br.net', +'ad.doubleclick.net.11824.9034.302br.net', +'ad.doubleclick.net.11825.9034.302br.net', +'ad.doubleclick.net.11827.9034.302br.net', +'ad.doubleclick.net.11828.9034.302br.net', +'ad.doubleclick.net.11830.9034.302br.net', +'ad.doubleclick.net.11831.9034.302br.net', +'ad.doubleclick.net.11833.9034.302br.net', +'ad.doubleclick.net.11834.9034.302br.net', +'ad.doubleclick.net.11836.9034.302br.net', +'ad.doubleclick.net.11837.9034.302br.net', +'ad.doubleclick.net.11839.9034.302br.net', +'ad.doubleclick.net.11840.9034.302br.net', +'ad.doubleclick.net.11842.9034.302br.net', +'ad.doubleclick.net.11843.9034.302br.net', +'ad.doubleclick.net.11848.9034.302br.net', +'ad.doubleclick.net.11851.9034.302br.net', +'ad.doubleclick.net.11852.9034.302br.net', +'ad.doubleclick.net.11854.9034.302br.net', +'ad.doubleclick.net.11855.9034.302br.net', +'ad.doubleclick.net.11857.9034.302br.net', +'ad.doubleclick.net.11858.9034.302br.net', +'ad.doubleclick.net.11872.9036.302br.net', +'ad.doubleclick.net.11873.9036.302br.net', +'ad.doubleclick.net.11875.9036.302br.net', +'ad.doubleclick.net.11876.9036.302br.net', +'ad.doubleclick.net.11878.9036.302br.net', +'ad.doubleclick.net.11879.9036.302br.net', +'ad.doubleclick.net.11880.9003.302br.net', +'ad.doubleclick.net.11883.9003.302br.net', +'ad.doubleclick.net.11886.9003.302br.net', +'ad.doubleclick.net.11889.9003.302br.net', +'ad.doubleclick.net.11892.9003.302br.net', +'ad.doubleclick.net.11895.9003.302br.net', +'ad.doubleclick.net.11899.9037.302br.net', +'ad.doubleclick.net.11900.9037.302br.net', +'ad.doubleclick.net.11902.9037.302br.net', +'ad.doubleclick.net.11905.9037.302br.net', +'ad.doubleclick.net.11908.9037.302br.net', +'ad.doubleclick.net.11911.9037.302br.net', +'ad.doubleclick.net.11913.9037.302br.net', +'ad.doubleclick.net.11914.9037.302br.net', +'ad.doubleclick.net.11915.9037.302br.net', +'ad.doubleclick.net.11917.9037.302br.net', +'ad.doubleclick.net.11920.9037.302br.net', +'ad.doubleclick.net.11922.9037.302br.net', +'ad.doubleclick.net.11923.9037.302br.net', +'ad.doubleclick.net.11926.9037.302br.net', +'ad.doubleclick.net.11929.9037.302br.net', +'ad.doubleclick.net.11932.9037.302br.net', +'ad.doubleclick.net.11938.9037.302br.net', +'ad.doubleclick.net.11941.9037.302br.net', +'ad.doubleclick.net.11944.9037.302br.net', +'ad.doubleclick.net.11950.9037.302br.net', +'ad.doubleclick.net.11953.9037.302br.net', +'ad.doubleclick.net.11956.9037.302br.net', +'ad.doubleclick.net.11959.9037.302br.net', +'ad.doubleclick.net.11962.9037.302br.net', +'ad.doubleclick.net.11963.9037.302br.net', +'ad.doubleclick.net.11965.9037.302br.net', +'ad.doubleclick.net.11968.9037.302br.net', +'ad.doubleclick.net.11973.9037.302br.net', +'ad.doubleclick.net.11974.9037.302br.net', +'ad.doubleclick.net.11975.9037.302br.net', +'ad.doubleclick.net.11980.9037.302br.net', +'ad.doubleclick.net.11983.9037.302br.net', +'ad.doubleclick.net.11986.9037.302br.net', +'ad.doubleclick.net.11989.9037.302br.net', +'ad.doubleclick.net.11995.9037.302br.net', +'ad.doubleclick.net.11998.9037.302br.net', +'ad.doubleclick.net.12003.9037.302br.net', +'ad.doubleclick.net.12004.9037.302br.net', +'ad.doubleclick.net.12007.9038.302br.net', +'ad.doubleclick.net.12008.9038.302br.net', +'ad.doubleclick.net.12010.9038.302br.net', +'ad.doubleclick.net.12011.9038.302br.net', +'ad.doubleclick.net.12013.9038.302br.net', +'ad.doubleclick.net.12014.9038.302br.net', +'ad.doubleclick.net.12016.9038.302br.net', +'ad.doubleclick.net.12017.9038.302br.net', +'ad.doubleclick.net.12019.9038.302br.net', +'ad.doubleclick.net.12020.9038.302br.net', +'ad.doubleclick.net.12022.9038.302br.net', +'ad.doubleclick.net.12023.9038.302br.net', +'ad.doubleclick.net.12026.9038.302br.net', +'ad.doubleclick.net.12032.9038.302br.net', +'ad.doubleclick.net.12035.9038.302br.net', +'ad.doubleclick.net.12038.9038.302br.net', +'ad.doubleclick.net.12041.9038.302br.net', +'ad.doubleclick.net.12050.9038.302br.net', +'ad.doubleclick.net.12083.9038.302br.net', +'ad.doubleclick.net.12086.9038.302br.net', +'ad.doubleclick.net.12089.9038.302br.net', +'ad.doubleclick.net.1209.9012.302br.net', +'ad.doubleclick.net.1210.9012.302br.net', +'ad.doubleclick.net.1212.9012.302br.net', +'ad.doubleclick.net.1218.9012.302br.net', +'ad.doubleclick.net.12196.9038.302br.net', +'ad.doubleclick.net.12197.9038.302br.net', +'ad.doubleclick.net.12199.9038.302br.net', +'ad.doubleclick.net.12200.9038.302br.net', +'ad.doubleclick.net.12202.9038.302br.net', +'ad.doubleclick.net.12203.9038.302br.net', +'ad.doubleclick.net.12205.9038.302br.net', +'ad.doubleclick.net.12206.9038.302br.net', +'ad.doubleclick.net.12208.9038.302br.net', +'ad.doubleclick.net.12209.9038.302br.net', +'ad.doubleclick.net.12211.9037.302br.net', +'ad.doubleclick.net.12212.9037.302br.net', +'ad.doubleclick.net.12214.9037.302br.net', +'ad.doubleclick.net.12217.9037.302br.net', +'ad.doubleclick.net.12220.9037.302br.net', +'ad.doubleclick.net.12222.9037.302br.net', +'ad.doubleclick.net.12223.9037.302br.net', +'ad.doubleclick.net.12224.9037.302br.net', +'ad.doubleclick.net.12226.9037.302br.net', +'ad.doubleclick.net.12227.9037.302br.net', +'ad.doubleclick.net.12229.9037.302br.net', +'ad.doubleclick.net.12238.9037.302br.net', +'ad.doubleclick.net.1224.9013.302br.net', +'ad.doubleclick.net.12241.9037.302br.net', +'ad.doubleclick.net.12243.9037.302br.net', +'ad.doubleclick.net.12244.9037.302br.net', +'ad.doubleclick.net.12245.9037.302br.net', +'ad.doubleclick.net.12246.9037.302br.net', +'ad.doubleclick.net.12247.9037.302br.net', +'ad.doubleclick.net.12248.9037.302br.net', +'ad.doubleclick.net.12249.9037.302br.net', +'ad.doubleclick.net.12250.9037.302br.net', +'ad.doubleclick.net.12251.9037.302br.net', +'ad.doubleclick.net.12253.9037.302br.net', +'ad.doubleclick.net.12256.9037.302br.net', +'ad.doubleclick.net.12259.9037.302br.net', +'ad.doubleclick.net.12262.9037.302br.net', +'ad.doubleclick.net.12265.9037.302br.net', +'ad.doubleclick.net.12266.9037.302br.net', +'ad.doubleclick.net.12268.9037.302br.net', +'ad.doubleclick.net.12269.9037.302br.net', +'ad.doubleclick.net.1227.9013.302br.net', +'ad.doubleclick.net.12271.9037.302br.net', +'ad.doubleclick.net.12272.9037.302br.net', +'ad.doubleclick.net.12274.9037.302br.net', +'ad.doubleclick.net.12275.9037.302br.net', +'ad.doubleclick.net.12277.9037.302br.net', +'ad.doubleclick.net.12278.9037.302br.net', +'ad.doubleclick.net.12280.9037.302br.net', +'ad.doubleclick.net.12281.9037.302br.net', +'ad.doubleclick.net.12283.9037.302br.net', +'ad.doubleclick.net.12284.9037.302br.net', +'ad.doubleclick.net.12286.9037.302br.net', +'ad.doubleclick.net.12287.9037.302br.net', +'ad.doubleclick.net.12288.9037.302br.net', +'ad.doubleclick.net.12289.9037.302br.net', +'ad.doubleclick.net.12290.9037.302br.net', +'ad.doubleclick.net.12292.9037.302br.net', +'ad.doubleclick.net.12293.9037.302br.net', +'ad.doubleclick.net.12295.9037.302br.net', +'ad.doubleclick.net.12296.9037.302br.net', +'ad.doubleclick.net.12298.9037.302br.net', +'ad.doubleclick.net.12299.9037.302br.net', +'ad.doubleclick.net.1230.9013.302br.net', +'ad.doubleclick.net.12301.9037.302br.net', +'ad.doubleclick.net.12302.9037.302br.net', +'ad.doubleclick.net.12304.9037.302br.net', +'ad.doubleclick.net.12307.9037.302br.net', +'ad.doubleclick.net.12308.9037.302br.net', +'ad.doubleclick.net.12310.9037.302br.net', +'ad.doubleclick.net.12313.9037.302br.net', +'ad.doubleclick.net.12316.9037.302br.net', +'ad.doubleclick.net.12317.9037.302br.net', +'ad.doubleclick.net.12327.9034.302br.net', +'ad.doubleclick.net.12328.9034.302br.net', +'ad.doubleclick.net.12329.9034.302br.net', +'ad.doubleclick.net.1233.9014.302br.net', +'ad.doubleclick.net.12331.9034.302br.net', +'ad.doubleclick.net.12332.9034.302br.net', +'ad.doubleclick.net.12334.9034.302br.net', +'ad.doubleclick.net.12339.9034.302br.net', +'ad.doubleclick.net.1234.9014.302br.net', +'ad.doubleclick.net.12340.9034.302br.net', +'ad.doubleclick.net.12341.9034.302br.net', +'ad.doubleclick.net.12343.9034.302br.net', +'ad.doubleclick.net.12344.9034.302br.net', +'ad.doubleclick.net.12345.9034.302br.net', +'ad.doubleclick.net.12346.9034.302br.net', +'ad.doubleclick.net.12347.9034.302br.net', +'ad.doubleclick.net.12349.9034.302br.net', +'ad.doubleclick.net.12350.9034.302br.net', +'ad.doubleclick.net.12355.9034.302br.net', +'ad.doubleclick.net.12356.9034.302br.net', +'ad.doubleclick.net.12358.9034.302br.net', +'ad.doubleclick.net.12359.9034.302br.net', +'ad.doubleclick.net.1236.9014.302br.net', +'ad.doubleclick.net.12361.9034.302br.net', +'ad.doubleclick.net.12362.9034.302br.net', +'ad.doubleclick.net.12364.9034.302br.net', +'ad.doubleclick.net.12365.9034.302br.net', +'ad.doubleclick.net.12367.9034.302br.net', +'ad.doubleclick.net.12368.9034.302br.net', +'ad.doubleclick.net.1237.9014.302br.net', +'ad.doubleclick.net.12370.9034.302br.net', +'ad.doubleclick.net.12371.9034.302br.net', +'ad.doubleclick.net.12373.9034.302br.net', +'ad.doubleclick.net.12374.9034.302br.net', +'ad.doubleclick.net.12376.9034.302br.net', +'ad.doubleclick.net.12377.9034.302br.net', +'ad.doubleclick.net.12379.9034.302br.net', +'ad.doubleclick.net.12380.9034.302br.net', +'ad.doubleclick.net.12382.9034.302br.net', +'ad.doubleclick.net.12383.9034.302br.net', +'ad.doubleclick.net.12385.9034.302br.net', +'ad.doubleclick.net.12386.9034.302br.net', +'ad.doubleclick.net.12388.9034.302br.net', +'ad.doubleclick.net.12389.9034.302br.net', +'ad.doubleclick.net.1239.9014.302br.net', +'ad.doubleclick.net.12391.9034.302br.net', +'ad.doubleclick.net.12392.9034.302br.net', +'ad.doubleclick.net.12397.9034.302br.net', +'ad.doubleclick.net.12398.9034.302br.net', +'ad.doubleclick.net.1240.9014.302br.net', +'ad.doubleclick.net.12400.9034.302br.net', +'ad.doubleclick.net.12401.9034.302br.net', +'ad.doubleclick.net.12403.9034.302br.net', +'ad.doubleclick.net.12404.9034.302br.net', +'ad.doubleclick.net.12405.9034.302br.net', +'ad.doubleclick.net.12406.9034.302br.net', +'ad.doubleclick.net.12407.9034.302br.net', +'ad.doubleclick.net.1243.9015.302br.net', +'ad.doubleclick.net.12461.9038.302br.net', +'ad.doubleclick.net.12464.9038.302br.net', +'ad.doubleclick.net.12467.9038.302br.net', +'ad.doubleclick.net.1249.9015.302br.net', +'ad.doubleclick.net.12710.9046.302br.net', +'ad.doubleclick.net.12713.9046.302br.net', +'ad.doubleclick.net.12714.9046.302br.net', +'ad.doubleclick.net.12716.9046.302br.net', +'ad.doubleclick.net.12719.9046.302br.net', +'ad.doubleclick.net.12722.9046.302br.net', +'ad.doubleclick.net.12725.9046.302br.net', +'ad.doubleclick.net.12726.9046.302br.net', +'ad.doubleclick.net.12728.9046.302br.net', +'ad.doubleclick.net.12729.9046.302br.net', +'ad.doubleclick.net.12731.9046.302br.net', +'ad.doubleclick.net.12732.9046.302br.net', +'ad.doubleclick.net.12734.9046.302br.net', +'ad.doubleclick.net.12735.9046.302br.net', +'ad.doubleclick.net.12737.9046.302br.net', +'ad.doubleclick.net.12738.9046.302br.net', +'ad.doubleclick.net.12740.9046.302br.net', +'ad.doubleclick.net.12741.9046.302br.net', +'ad.doubleclick.net.12743.9046.302br.net', +'ad.doubleclick.net.12744.9046.302br.net', +'ad.doubleclick.net.12746.9047.302br.net', +'ad.doubleclick.net.12749.9047.302br.net', +'ad.doubleclick.net.12759.9047.302br.net', +'ad.doubleclick.net.12762.9047.302br.net', +'ad.doubleclick.net.12771.9047.302br.net', +'ad.doubleclick.net.12926.9034.302br.net', +'ad.doubleclick.net.12938.9034.302br.net', +'ad.doubleclick.net.12939.9034.302br.net', +'ad.doubleclick.net.12941.9034.302br.net', +'ad.doubleclick.net.132.6100.302br.net', +'ad.doubleclick.net.1327.9015.302br.net', +'ad.doubleclick.net.1330.9015.302br.net', +'ad.doubleclick.net.1336.9015.302br.net', +'ad.doubleclick.net.13521.9009.302br.net', +'ad.doubleclick.net.13528.9009.302br.net', +'ad.doubleclick.net.13529.9009.302br.net', +'ad.doubleclick.net.13531.9009.302br.net', +'ad.doubleclick.net.13532.9009.302br.net', +'ad.doubleclick.net.13535.9009.302br.net', +'ad.doubleclick.net.13541.9009.302br.net', +'ad.doubleclick.net.13544.9009.302br.net', +'ad.doubleclick.net.13556.9009.302br.net', +'ad.doubleclick.net.13604.9005.302br.net', +'ad.doubleclick.net.13605.9005.302br.net', +'ad.doubleclick.net.13606.9005.302br.net', +'ad.doubleclick.net.13607.9005.302br.net', +'ad.doubleclick.net.13608.9005.302br.net', +'ad.doubleclick.net.13618.9005.302br.net', +'ad.doubleclick.net.13620.9005.302br.net', +'ad.doubleclick.net.13628.9005.302br.net', +'ad.doubleclick.net.1363.9015.302br.net', +'ad.doubleclick.net.13630.9005.302br.net', +'ad.doubleclick.net.13632.9005.302br.net', +'ad.doubleclick.net.13634.9053.302br.net', +'ad.doubleclick.net.13642.9053.302br.net', +'ad.doubleclick.net.13643.9053.302br.net', +'ad.doubleclick.net.13644.9053.302br.net', +'ad.doubleclick.net.13645.9053.302br.net', +'ad.doubleclick.net.13646.9053.302br.net', +'ad.doubleclick.net.13647.9053.302br.net', +'ad.doubleclick.net.13649.9053.302br.net', +'ad.doubleclick.net.13658.9053.302br.net', +'ad.doubleclick.net.13661.9053.302br.net', +'ad.doubleclick.net.13721.9055.302br.net', +'ad.doubleclick.net.13723.9055.302br.net', +'ad.doubleclick.net.13724.9055.302br.net', +'ad.doubleclick.net.13725.9055.302br.net', +'ad.doubleclick.net.13727.9055.302br.net', +'ad.doubleclick.net.13730.9055.302br.net', +'ad.doubleclick.net.13739.9055.302br.net', +'ad.doubleclick.net.13742.9055.302br.net', +'ad.doubleclick.net.13782.9054.302br.net', +'ad.doubleclick.net.13802.9054.302br.net', +'ad.doubleclick.net.13803.9054.302br.net', +'ad.doubleclick.net.13805.9054.302br.net', +'ad.doubleclick.net.13806.9054.302br.net', +'ad.doubleclick.net.13808.9054.302br.net', +'ad.doubleclick.net.13809.9054.302br.net', +'ad.doubleclick.net.13811.9054.302br.net', +'ad.doubleclick.net.13812.9054.302br.net', +'ad.doubleclick.net.13817.9054.302br.net', +'ad.doubleclick.net.14043.9057.302br.net', +'ad.doubleclick.net.14046.9057.302br.net', +'ad.doubleclick.net.14063.9059.302br.net', +'ad.doubleclick.net.14066.9059.302br.net', +'ad.doubleclick.net.14075.9059.302br.net', +'ad.doubleclick.net.14078.9059.302br.net', +'ad.doubleclick.net.14079.9059.302br.net', +'ad.doubleclick.net.14081.9059.302br.net', +'ad.doubleclick.net.14082.9059.302br.net', +'ad.doubleclick.net.14084.9059.302br.net', +'ad.doubleclick.net.14085.9059.302br.net', +'ad.doubleclick.net.14087.9059.302br.net', +'ad.doubleclick.net.14088.9059.302br.net', +'ad.doubleclick.net.14090.9059.302br.net', +'ad.doubleclick.net.14091.9059.302br.net', +'ad.doubleclick.net.14096.9059.302br.net', +'ad.doubleclick.net.14097.9059.302br.net', +'ad.doubleclick.net.14099.9059.302br.net', +'ad.doubleclick.net.14102.9059.302br.net', +'ad.doubleclick.net.14103.9059.302br.net', +'ad.doubleclick.net.14105.9059.302br.net', +'ad.doubleclick.net.14106.9059.302br.net', +'ad.doubleclick.net.14108.9059.302br.net', +'ad.doubleclick.net.14109.9059.302br.net', +'ad.doubleclick.net.14111.9059.302br.net', +'ad.doubleclick.net.14112.9059.302br.net', +'ad.doubleclick.net.14114.9059.302br.net', +'ad.doubleclick.net.14115.9059.302br.net', +'ad.doubleclick.net.14117.9059.302br.net', +'ad.doubleclick.net.14118.9059.302br.net', +'ad.doubleclick.net.14120.9059.302br.net', +'ad.doubleclick.net.14121.9059.302br.net', +'ad.doubleclick.net.14123.9059.302br.net', +'ad.doubleclick.net.14124.9059.302br.net', +'ad.doubleclick.net.14126.9059.302br.net', +'ad.doubleclick.net.14127.9059.302br.net', +'ad.doubleclick.net.14129.9059.302br.net', +'ad.doubleclick.net.14130.9059.302br.net', +'ad.doubleclick.net.14132.9059.302br.net', +'ad.doubleclick.net.14135.9059.302br.net', +'ad.doubleclick.net.14136.9059.302br.net', +'ad.doubleclick.net.14138.9059.302br.net', +'ad.doubleclick.net.14139.9059.302br.net', +'ad.doubleclick.net.14141.9059.302br.net', +'ad.doubleclick.net.14144.9059.302br.net', +'ad.doubleclick.net.14145.9059.302br.net', +'ad.doubleclick.net.14150.9059.302br.net', +'ad.doubleclick.net.14159.9059.302br.net', +'ad.doubleclick.net.14160.9059.302br.net', +'ad.doubleclick.net.1423.9015.302br.net', +'ad.doubleclick.net.14235.9062.302br.net', +'ad.doubleclick.net.14259.9064.302br.net', +'ad.doubleclick.net.14271.9064.302br.net', +'ad.doubleclick.net.14274.9064.302br.net', +'ad.doubleclick.net.14277.9064.302br.net', +'ad.doubleclick.net.14280.9064.302br.net', +'ad.doubleclick.net.14285.9065.302br.net', +'ad.doubleclick.net.14288.9065.302br.net', +'ad.doubleclick.net.14291.9065.302br.net', +'ad.doubleclick.net.14292.9065.302br.net', +'ad.doubleclick.net.14294.9065.302br.net', +'ad.doubleclick.net.14297.9065.302br.net', +'ad.doubleclick.net.14300.9065.302br.net', +'ad.doubleclick.net.14303.9065.302br.net', +'ad.doubleclick.net.14306.9065.302br.net', +'ad.doubleclick.net.14309.9065.302br.net', +'ad.doubleclick.net.14343.9037.302br.net', +'ad.doubleclick.net.14346.9037.302br.net', +'ad.doubleclick.net.14349.9037.302br.net', +'ad.doubleclick.net.1435.9015.302br.net', +'ad.doubleclick.net.14352.9037.302br.net', +'ad.doubleclick.net.14353.9037.302br.net', +'ad.doubleclick.net.14355.9037.302br.net', +'ad.doubleclick.net.14356.9037.302br.net', +'ad.doubleclick.net.14358.9037.302br.net', +'ad.doubleclick.net.14359.9037.302br.net', +'ad.doubleclick.net.1438.9015.302br.net', +'ad.doubleclick.net.14400.9053.302br.net', +'ad.doubleclick.net.14403.9053.302br.net', +'ad.doubleclick.net.14412.9053.302br.net', +'ad.doubleclick.net.14415.9053.302br.net', +'ad.doubleclick.net.14421.9053.302br.net', +'ad.doubleclick.net.14427.9053.302br.net', +'ad.doubleclick.net.14436.9053.302br.net', +'ad.doubleclick.net.14475.9070.302br.net', +'ad.doubleclick.net.14477.9070.302br.net', +'ad.doubleclick.net.14480.9070.302br.net', +'ad.doubleclick.net.14482.9070.302br.net', +'ad.doubleclick.net.14483.9070.302br.net', +'ad.doubleclick.net.14485.9070.302br.net', +'ad.doubleclick.net.14486.9070.302br.net', +'ad.doubleclick.net.14487.9070.302br.net', +'ad.doubleclick.net.14488.9070.302br.net', +'ad.doubleclick.net.14489.9070.302br.net', +'ad.doubleclick.net.14491.9071.302br.net', +'ad.doubleclick.net.14498.9072.302br.net', +'ad.doubleclick.net.14501.9072.302br.net', +'ad.doubleclick.net.14504.9072.302br.net', +'ad.doubleclick.net.14505.9072.302br.net', +'ad.doubleclick.net.14507.9073.302br.net', +'ad.doubleclick.net.14509.9073.302br.net', +'ad.doubleclick.net.14511.9073.302br.net', +'ad.doubleclick.net.14513.9073.302br.net', +'ad.doubleclick.net.14515.9073.302br.net', +'ad.doubleclick.net.14517.9073.302br.net', +'ad.doubleclick.net.1453.9015.302br.net', +'ad.doubleclick.net.1474.9015.302br.net', +'ad.doubleclick.net.1477.9015.302br.net', +'ad.doubleclick.net.148.6100.302br.net', +'ad.doubleclick.net.1504.9015.302br.net', +'ad.doubleclick.net.1507.9015.302br.net', +'ad.doubleclick.net.1525.9015.302br.net', +'ad.doubleclick.net.1528.9015.302br.net', +'ad.doubleclick.net.1534.9015.302br.net', +'ad.doubleclick.net.1540.9015.302br.net', +'ad.doubleclick.net.1543.9015.302br.net', +'ad.doubleclick.net.1573.9015.302br.net', +'ad.doubleclick.net.1576.9015.302br.net', +'ad.doubleclick.net.1585.9015.302br.net', +'ad.doubleclick.net.1591.9015.302br.net', +'ad.doubleclick.net.15919.9075.302br.net', +'ad.doubleclick.net.15921.9075.302br.net', +'ad.doubleclick.net.15933.9075.302br.net', +'ad.doubleclick.net.15957.9075.302br.net', +'ad.doubleclick.net.15966.9075.302br.net', +'ad.doubleclick.net.15969.9075.302br.net', +'ad.doubleclick.net.15975.9075.302br.net', +'ad.doubleclick.net.15983.9089.302br.net', +'ad.doubleclick.net.15984.9089.302br.net', +'ad.doubleclick.net.15985.9089.302br.net', +'ad.doubleclick.net.15986.9089.302br.net', +'ad.doubleclick.net.15989.9089.302br.net', +'ad.doubleclick.net.16001.9088.302br.net', +'ad.doubleclick.net.16002.9088.302br.net', +'ad.doubleclick.net.16004.9088.302br.net', +'ad.doubleclick.net.16005.9088.302br.net', +'ad.doubleclick.net.16006.9088.302br.net', +'ad.doubleclick.net.16007.9088.302br.net', +'ad.doubleclick.net.16008.9088.302br.net', +'ad.doubleclick.net.16010.9088.302br.net', +'ad.doubleclick.net.16011.9088.302br.net', +'ad.doubleclick.net.16012.9088.302br.net', +'ad.doubleclick.net.16013.9088.302br.net', +'ad.doubleclick.net.16014.9088.302br.net', +'ad.doubleclick.net.16016.9088.302br.net', +'ad.doubleclick.net.16017.9088.302br.net', +'ad.doubleclick.net.16019.9088.302br.net', +'ad.doubleclick.net.16020.9088.302br.net', +'ad.doubleclick.net.16022.9088.302br.net', +'ad.doubleclick.net.16023.9088.302br.net', +'ad.doubleclick.net.16025.9088.302br.net', +'ad.doubleclick.net.16026.9088.302br.net', +'ad.doubleclick.net.16027.9088.302br.net', +'ad.doubleclick.net.16028.9088.302br.net', +'ad.doubleclick.net.16029.9088.302br.net', +'ad.doubleclick.net.16031.9088.302br.net', +'ad.doubleclick.net.16032.9088.302br.net', +'ad.doubleclick.net.16034.9088.302br.net', +'ad.doubleclick.net.16035.9088.302br.net', +'ad.doubleclick.net.16040.9088.302br.net', +'ad.doubleclick.net.16041.9088.302br.net', +'ad.doubleclick.net.16043.9088.302br.net', +'ad.doubleclick.net.16044.9088.302br.net', +'ad.doubleclick.net.16049.9088.302br.net', +'ad.doubleclick.net.16050.9088.302br.net', +'ad.doubleclick.net.16071.9090.302br.net', +'ad.doubleclick.net.16077.9090.302br.net', +'ad.doubleclick.net.16086.9090.302br.net', +'ad.doubleclick.net.16095.9090.302br.net', +'ad.doubleclick.net.16104.9090.302br.net', +'ad.doubleclick.net.16110.9090.302br.net', +'ad.doubleclick.net.16125.9090.302br.net', +'ad.doubleclick.net.16134.9090.302br.net', +'ad.doubleclick.net.16146.9090.302br.net', +'ad.doubleclick.net.16155.9090.302br.net', +'ad.doubleclick.net.16173.9090.302br.net', +'ad.doubleclick.net.16179.9090.302br.net', +'ad.doubleclick.net.16185.9090.302br.net', +'ad.doubleclick.net.16188.9090.302br.net', +'ad.doubleclick.net.16215.9090.302br.net', +'ad.doubleclick.net.16221.9090.302br.net', +'ad.doubleclick.net.16224.9090.302br.net', +'ad.doubleclick.net.16239.9090.302br.net', +'ad.doubleclick.net.16242.9090.302br.net', +'ad.doubleclick.net.16260.9091.302br.net', +'ad.doubleclick.net.1633.9015.302br.net', +'ad.doubleclick.net.1648.9015.302br.net', +'ad.doubleclick.net.16500.9093.302br.net', +'ad.doubleclick.net.16503.9093.302br.net', +'ad.doubleclick.net.16506.9093.302br.net', +'ad.doubleclick.net.1651.9015.302br.net', +'ad.doubleclick.net.1654.9015.302br.net', +'ad.doubleclick.net.16577.9003.302br.net', +'ad.doubleclick.net.16580.9003.302br.net', +'ad.doubleclick.net.16583.9003.302br.net', +'ad.doubleclick.net.16652.9099.302br.net', +'ad.doubleclick.net.16655.9099.302br.net', +'ad.doubleclick.net.16658.9099.302br.net', +'ad.doubleclick.net.1669.9015.302br.net', +'ad.doubleclick.net.16760.9100.302br.net', +'ad.doubleclick.net.16763.9100.302br.net', +'ad.doubleclick.net.16766.9100.302br.net', +'ad.doubleclick.net.1693.9015.302br.net', +'ad.doubleclick.net.17125.9083.302br.net', +'ad.doubleclick.net.17128.9083.302br.net', +'ad.doubleclick.net.17129.9083.302br.net', +'ad.doubleclick.net.17131.9083.302br.net', +'ad.doubleclick.net.17134.9083.302br.net', +'ad.doubleclick.net.17137.9083.302br.net', +'ad.doubleclick.net.17138.9083.302br.net', +'ad.doubleclick.net.17140.9083.302br.net', +'ad.doubleclick.net.17141.9083.302br.net', +'ad.doubleclick.net.17143.9083.302br.net', +'ad.doubleclick.net.17144.9083.302br.net', +'ad.doubleclick.net.17146.9083.302br.net', +'ad.doubleclick.net.17147.9083.302br.net', +'ad.doubleclick.net.17149.9083.302br.net', +'ad.doubleclick.net.17152.9083.302br.net', +'ad.doubleclick.net.17153.9083.302br.net', +'ad.doubleclick.net.17155.9083.302br.net', +'ad.doubleclick.net.17216.9104.302br.net', +'ad.doubleclick.net.17219.9076.302br.net', +'ad.doubleclick.net.17220.9076.302br.net', +'ad.doubleclick.net.17222.9076.302br.net', +'ad.doubleclick.net.17223.9076.302br.net', +'ad.doubleclick.net.17225.9076.302br.net', +'ad.doubleclick.net.17228.9076.302br.net', +'ad.doubleclick.net.17229.9076.302br.net', +'ad.doubleclick.net.17231.9076.302br.net', +'ad.doubleclick.net.17234.9076.302br.net', +'ad.doubleclick.net.17235.9076.302br.net', +'ad.doubleclick.net.17237.9077.302br.net', +'ad.doubleclick.net.17240.9077.302br.net', +'ad.doubleclick.net.17241.9077.302br.net', +'ad.doubleclick.net.17243.9077.302br.net', +'ad.doubleclick.net.17244.9077.302br.net', +'ad.doubleclick.net.17246.9077.302br.net', +'ad.doubleclick.net.17247.9077.302br.net', +'ad.doubleclick.net.17249.9077.302br.net', +'ad.doubleclick.net.17250.9077.302br.net', +'ad.doubleclick.net.17252.9077.302br.net', +'ad.doubleclick.net.17253.9077.302br.net', +'ad.doubleclick.net.17255.9078.302br.net', +'ad.doubleclick.net.17261.9078.302br.net', +'ad.doubleclick.net.17264.9078.302br.net', +'ad.doubleclick.net.17273.9079.302br.net', +'ad.doubleclick.net.17276.9079.302br.net', +'ad.doubleclick.net.17279.9079.302br.net', +'ad.doubleclick.net.17282.9079.302br.net', +'ad.doubleclick.net.17283.9079.302br.net', +'ad.doubleclick.net.17285.9079.302br.net', +'ad.doubleclick.net.17291.9080.302br.net', +'ad.doubleclick.net.17303.9080.302br.net', +'ad.doubleclick.net.17306.9080.302br.net', +'ad.doubleclick.net.17309.9081.302br.net', +'ad.doubleclick.net.17315.9081.302br.net', +'ad.doubleclick.net.17316.9081.302br.net', +'ad.doubleclick.net.17318.9081.302br.net', +'ad.doubleclick.net.17321.9081.302br.net', +'ad.doubleclick.net.17322.9081.302br.net', +'ad.doubleclick.net.17324.9081.302br.net', +'ad.doubleclick.net.17325.9081.302br.net', +'ad.doubleclick.net.17333.9084.302br.net', +'ad.doubleclick.net.17339.9084.302br.net', +'ad.doubleclick.net.17342.9084.302br.net', +'ad.doubleclick.net.17381.9085.302br.net', +'ad.doubleclick.net.17382.9085.302br.net', +'ad.doubleclick.net.17384.9085.302br.net', +'ad.doubleclick.net.17385.9085.302br.net', +'ad.doubleclick.net.17387.9085.302br.net', +'ad.doubleclick.net.17388.9085.302br.net', +'ad.doubleclick.net.17390.9085.302br.net', +'ad.doubleclick.net.17391.9085.302br.net', +'ad.doubleclick.net.17393.9085.302br.net', +'ad.doubleclick.net.17394.9085.302br.net', +'ad.doubleclick.net.17396.9085.302br.net', +'ad.doubleclick.net.17397.9085.302br.net', +'ad.doubleclick.net.17407.9086.302br.net', +'ad.doubleclick.net.17408.9086.302br.net', +'ad.doubleclick.net.17409.9086.302br.net', +'ad.doubleclick.net.17410.9086.302br.net', +'ad.doubleclick.net.17411.9086.302br.net', +'ad.doubleclick.net.17412.9086.302br.net', +'ad.doubleclick.net.17414.9086.302br.net', +'ad.doubleclick.net.17415.9086.302br.net', +'ad.doubleclick.net.17417.9086.302br.net', +'ad.doubleclick.net.17418.9086.302br.net', +'ad.doubleclick.net.17420.9086.302br.net', +'ad.doubleclick.net.17421.9086.302br.net', +'ad.doubleclick.net.17423.9086.302br.net', +'ad.doubleclick.net.17424.9086.302br.net', +'ad.doubleclick.net.17426.9087.302br.net', +'ad.doubleclick.net.17427.9087.302br.net', +'ad.doubleclick.net.17429.9034.302br.net', +'ad.doubleclick.net.17429.9087.302br.net', +'ad.doubleclick.net.17430.9087.302br.net', +'ad.doubleclick.net.17432.9034.302br.net', +'ad.doubleclick.net.17432.9087.302br.net', +'ad.doubleclick.net.17433.9087.302br.net', +'ad.doubleclick.net.17444.9053.302br.net', +'ad.doubleclick.net.17445.9053.302br.net', +'ad.doubleclick.net.17447.9053.302br.net', +'ad.doubleclick.net.17448.9053.302br.net', +'ad.doubleclick.net.17450.9053.302br.net', +'ad.doubleclick.net.17486.9105.302br.net', +'ad.doubleclick.net.17495.9105.302br.net', +'ad.doubleclick.net.17498.9105.302br.net', +'ad.doubleclick.net.1750.9017.302br.net', +'ad.doubleclick.net.17501.9105.302br.net', +'ad.doubleclick.net.17507.9105.302br.net', +'ad.doubleclick.net.17510.9105.302br.net', +'ad.doubleclick.net.17513.9105.302br.net', +'ad.doubleclick.net.17519.9105.302br.net', +'ad.doubleclick.net.17522.9105.302br.net', +'ad.doubleclick.net.17583.9109.302br.net', +'ad.doubleclick.net.17584.9109.302br.net', +'ad.doubleclick.net.17585.9109.302br.net', +'ad.doubleclick.net.17590.9109.302br.net', +'ad.doubleclick.net.17593.9109.302br.net', +'ad.doubleclick.net.17600.9110.302br.net', +'ad.doubleclick.net.17606.9110.302br.net', +'ad.doubleclick.net.17612.9110.302br.net', +'ad.doubleclick.net.17615.9110.302br.net', +'ad.doubleclick.net.17618.9110.302br.net', +'ad.doubleclick.net.17621.9110.302br.net', +'ad.doubleclick.net.17624.9110.302br.net', +'ad.doubleclick.net.17627.9111.302br.net', +'ad.doubleclick.net.17630.9111.302br.net', +'ad.doubleclick.net.17633.9111.302br.net', +'ad.doubleclick.net.17636.9111.302br.net', +'ad.doubleclick.net.17647.9112.302br.net', +'ad.doubleclick.net.17648.9112.302br.net', +'ad.doubleclick.net.17649.9112.302br.net', +'ad.doubleclick.net.17650.9112.302br.net', +'ad.doubleclick.net.17651.9112.302br.net', +'ad.doubleclick.net.17652.9112.302br.net', +'ad.doubleclick.net.17653.9112.302br.net', +'ad.doubleclick.net.17654.9112.302br.net', +'ad.doubleclick.net.17655.9112.302br.net', +'ad.doubleclick.net.17660.9111.302br.net', +'ad.doubleclick.net.17663.9111.302br.net', +'ad.doubleclick.net.17666.9111.302br.net', +'ad.doubleclick.net.17675.9110.302br.net', +'ad.doubleclick.net.17678.9110.302br.net', +'ad.doubleclick.net.17681.9110.302br.net', +'ad.doubleclick.net.17684.9110.302br.net', +'ad.doubleclick.net.17687.9110.302br.net', +'ad.doubleclick.net.17690.9110.302br.net', +'ad.doubleclick.net.17693.9110.302br.net', +'ad.doubleclick.net.17696.9110.302br.net', +'ad.doubleclick.net.17699.9110.302br.net', +'ad.doubleclick.net.17702.9083.302br.net', +'ad.doubleclick.net.17705.9083.302br.net', +'ad.doubleclick.net.17707.9083.302br.net', +'ad.doubleclick.net.17708.9083.302br.net', +'ad.doubleclick.net.17710.9085.302br.net', +'ad.doubleclick.net.17711.9085.302br.net', +'ad.doubleclick.net.17712.9085.302br.net', +'ad.doubleclick.net.17714.9085.302br.net', +'ad.doubleclick.net.17715.9085.302br.net', +'ad.doubleclick.net.17717.9085.302br.net', +'ad.doubleclick.net.17718.9085.302br.net', +'ad.doubleclick.net.17720.9085.302br.net', +'ad.doubleclick.net.17723.9085.302br.net', +'ad.doubleclick.net.17724.9085.302br.net', +'ad.doubleclick.net.17726.9085.302br.net', +'ad.doubleclick.net.17727.9085.302br.net', +'ad.doubleclick.net.18013.9076.302br.net', +'ad.doubleclick.net.18022.9077.302br.net', +'ad.doubleclick.net.18029.9078.302br.net', +'ad.doubleclick.net.18061.9081.302br.net', +'ad.doubleclick.net.18073.9082.302br.net', +'ad.doubleclick.net.18089.9084.302br.net', +'ad.doubleclick.net.18097.9085.302br.net', +'ad.doubleclick.net.18104.9086.302br.net', +'ad.doubleclick.net.18117.9087.302br.net', +'ad.doubleclick.net.18133.9077.302br.net', +'ad.doubleclick.net.18134.9077.302br.net', +'ad.doubleclick.net.18135.9077.302br.net', +'ad.doubleclick.net.18137.9077.302br.net', +'ad.doubleclick.net.18138.9077.302br.net', +'ad.doubleclick.net.18140.9077.302br.net', +'ad.doubleclick.net.18161.9077.302br.net', +'ad.doubleclick.net.18162.9077.302br.net', +'ad.doubleclick.net.18164.9077.302br.net', +'ad.doubleclick.net.18165.9077.302br.net', +'ad.doubleclick.net.18167.9077.302br.net', +'ad.doubleclick.net.18168.9077.302br.net', +'ad.doubleclick.net.18169.9077.302br.net', +'ad.doubleclick.net.18170.9077.302br.net', +'ad.doubleclick.net.18171.9077.302br.net', +'ad.doubleclick.net.18172.9077.302br.net', +'ad.doubleclick.net.18173.9077.302br.net', +'ad.doubleclick.net.18174.9077.302br.net', +'ad.doubleclick.net.18203.9078.302br.net', +'ad.doubleclick.net.18204.9078.302br.net', +'ad.doubleclick.net.18209.9078.302br.net', +'ad.doubleclick.net.18210.9078.302br.net', +'ad.doubleclick.net.18212.9079.302br.net', +'ad.doubleclick.net.18213.9079.302br.net', +'ad.doubleclick.net.18215.9079.302br.net', +'ad.doubleclick.net.18216.9079.302br.net', +'ad.doubleclick.net.18218.9079.302br.net', +'ad.doubleclick.net.18221.9079.302br.net', +'ad.doubleclick.net.18230.9079.302br.net', +'ad.doubleclick.net.18231.9079.302br.net', +'ad.doubleclick.net.18248.9081.302br.net', +'ad.doubleclick.net.18249.9081.302br.net', +'ad.doubleclick.net.18254.9081.302br.net', +'ad.doubleclick.net.18255.9081.302br.net', +'ad.doubleclick.net.18257.9081.302br.net', +'ad.doubleclick.net.18258.9081.302br.net', +'ad.doubleclick.net.18263.9081.302br.net', +'ad.doubleclick.net.18264.9081.302br.net', +'ad.doubleclick.net.18272.9082.302br.net', +'ad.doubleclick.net.18274.9083.302br.net', +'ad.doubleclick.net.18275.9083.302br.net', +'ad.doubleclick.net.18276.9083.302br.net', +'ad.doubleclick.net.18278.9083.302br.net', +'ad.doubleclick.net.18279.9083.302br.net', +'ad.doubleclick.net.18281.9083.302br.net', +'ad.doubleclick.net.18282.9083.302br.net', +'ad.doubleclick.net.18284.9085.302br.net', +'ad.doubleclick.net.18285.9085.302br.net', +'ad.doubleclick.net.18287.9085.302br.net', +'ad.doubleclick.net.18288.9085.302br.net', +'ad.doubleclick.net.18290.9085.302br.net', +'ad.doubleclick.net.18291.9085.302br.net', +'ad.doubleclick.net.18293.9085.302br.net', +'ad.doubleclick.net.18294.9085.302br.net', +'ad.doubleclick.net.18295.9086.302br.net', +'ad.doubleclick.net.18296.9086.302br.net', +'ad.doubleclick.net.18297.9086.302br.net', +'ad.doubleclick.net.18298.9086.302br.net', +'ad.doubleclick.net.18299.9086.302br.net', +'ad.doubleclick.net.18300.9086.302br.net', +'ad.doubleclick.net.18301.9086.302br.net', +'ad.doubleclick.net.18302.9086.302br.net', +'ad.doubleclick.net.18303.9086.302br.net', +'ad.doubleclick.net.18308.9087.302br.net', +'ad.doubleclick.net.18309.9087.302br.net', +'ad.doubleclick.net.18311.9087.302br.net', +'ad.doubleclick.net.18314.9087.302br.net', +'ad.doubleclick.net.18317.9087.302br.net', +'ad.doubleclick.net.18318.9087.302br.net', +'ad.doubleclick.net.18320.9087.302br.net', +'ad.doubleclick.net.18321.9087.302br.net', +'ad.doubleclick.net.18323.9087.302br.net', +'ad.doubleclick.net.18324.9087.302br.net', +'ad.doubleclick.net.18326.9087.302br.net', +'ad.doubleclick.net.18329.9087.302br.net', +'ad.doubleclick.net.18332.9087.302br.net', +'ad.doubleclick.net.18335.9087.302br.net', +'ad.doubleclick.net.18338.9087.302br.net', +'ad.doubleclick.net.18341.9084.302br.net', +'ad.doubleclick.net.18342.9084.302br.net', +'ad.doubleclick.net.18344.9084.302br.net', +'ad.doubleclick.net.18345.9084.302br.net', +'ad.doubleclick.net.18359.9076.302br.net', +'ad.doubleclick.net.18362.9076.302br.net', +'ad.doubleclick.net.18365.9076.302br.net', +'ad.doubleclick.net.18369.9077.302br.net', +'ad.doubleclick.net.18370.9077.302br.net', +'ad.doubleclick.net.18372.9077.302br.net', +'ad.doubleclick.net.18373.9077.302br.net', +'ad.doubleclick.net.18376.9077.302br.net', +'ad.doubleclick.net.18377.9077.302br.net', +'ad.doubleclick.net.18422.9082.302br.net', +'ad.doubleclick.net.18423.9082.302br.net', +'ad.doubleclick.net.18425.9082.302br.net', +'ad.doubleclick.net.18426.9082.302br.net', +'ad.doubleclick.net.18428.9082.302br.net', +'ad.doubleclick.net.18429.9082.302br.net', +'ad.doubleclick.net.18449.9085.302br.net', +'ad.doubleclick.net.18450.9085.302br.net', +'ad.doubleclick.net.18453.9085.302br.net', +'ad.doubleclick.net.18456.9085.302br.net', +'ad.doubleclick.net.18459.9086.302br.net', +'ad.doubleclick.net.18460.9086.302br.net', +'ad.doubleclick.net.18462.9086.302br.net', +'ad.doubleclick.net.18463.9086.302br.net', +'ad.doubleclick.net.18465.9086.302br.net', +'ad.doubleclick.net.18466.9086.302br.net', +'ad.doubleclick.net.185.6100.302br.net', +'ad.doubleclick.net.186.6100.302br.net', +'ad.doubleclick.net.18697.9076.302br.net', +'ad.doubleclick.net.18700.9076.302br.net', +'ad.doubleclick.net.18703.9076.302br.net', +'ad.doubleclick.net.18704.9076.302br.net', +'ad.doubleclick.net.18706.9076.302br.net', +'ad.doubleclick.net.18707.9076.302br.net', +'ad.doubleclick.net.18709.9077.302br.net', +'ad.doubleclick.net.18710.9077.302br.net', +'ad.doubleclick.net.18711.9077.302br.net', +'ad.doubleclick.net.18712.9077.302br.net', +'ad.doubleclick.net.18713.9077.302br.net', +'ad.doubleclick.net.18714.9078.302br.net', +'ad.doubleclick.net.18715.9078.302br.net', +'ad.doubleclick.net.18716.9078.302br.net', +'ad.doubleclick.net.18721.9078.302br.net', +'ad.doubleclick.net.18724.9078.302br.net', +'ad.doubleclick.net.18725.9078.302br.net', +'ad.doubleclick.net.18727.9081.302br.net', +'ad.doubleclick.net.18728.9081.302br.net', +'ad.doubleclick.net.18730.9081.302br.net', +'ad.doubleclick.net.18731.9081.302br.net', +'ad.doubleclick.net.18732.9082.302br.net', +'ad.doubleclick.net.18734.9082.302br.net', +'ad.doubleclick.net.18735.9082.302br.net', +'ad.doubleclick.net.18737.9082.302br.net', +'ad.doubleclick.net.18754.9085.302br.net', +'ad.doubleclick.net.18757.9085.302br.net', +'ad.doubleclick.net.18758.9085.302br.net', +'ad.doubleclick.net.18760.9085.302br.net', +'ad.doubleclick.net.18761.9085.302br.net', +'ad.doubleclick.net.18763.9085.302br.net', +'ad.doubleclick.net.18764.9085.302br.net', +'ad.doubleclick.net.18769.9086.302br.net', +'ad.doubleclick.net.18770.9086.302br.net', +'ad.doubleclick.net.18772.9086.302br.net', +'ad.doubleclick.net.18773.9086.302br.net', +'ad.doubleclick.net.18775.9086.302br.net', +'ad.doubleclick.net.18776.9086.302br.net', +'ad.doubleclick.net.18777.9086.302br.net', +'ad.doubleclick.net.18778.9086.302br.net', +'ad.doubleclick.net.18779.9086.302br.net', +'ad.doubleclick.net.18781.9086.302br.net', +'ad.doubleclick.net.18782.9086.302br.net', +'ad.doubleclick.net.18783.9086.302br.net', +'ad.doubleclick.net.18784.9086.302br.net', +'ad.doubleclick.net.18785.9086.302br.net', +'ad.doubleclick.net.18790.9086.302br.net', +'ad.doubleclick.net.18791.9086.302br.net', +'ad.doubleclick.net.18796.9087.302br.net', +'ad.doubleclick.net.18797.9087.302br.net', +'ad.doubleclick.net.18799.9087.302br.net', +'ad.doubleclick.net.188.6100.302br.net', +'ad.doubleclick.net.18800.9087.302br.net', +'ad.doubleclick.net.18802.9087.302br.net', +'ad.doubleclick.net.18803.9087.302br.net', +'ad.doubleclick.net.19076.9076.302br.net', +'ad.doubleclick.net.19079.9076.302br.net', +'ad.doubleclick.net.19081.9076.302br.net', +'ad.doubleclick.net.19085.9076.302br.net', +'ad.doubleclick.net.19102.9081.302br.net', +'ad.doubleclick.net.19106.9081.302br.net', +'ad.doubleclick.net.19109.9081.302br.net', +'ad.doubleclick.net.19112.9082.302br.net', +'ad.doubleclick.net.19114.9082.302br.net', +'ad.doubleclick.net.19115.9082.302br.net', +'ad.doubleclick.net.19117.9082.302br.net', +'ad.doubleclick.net.19118.9082.302br.net', +'ad.doubleclick.net.19133.9083.302br.net', +'ad.doubleclick.net.19150.9083.302br.net', +'ad.doubleclick.net.19157.9085.302br.net', +'ad.doubleclick.net.19160.9085.302br.net', +'ad.doubleclick.net.19163.9085.302br.net', +'ad.doubleclick.net.19166.9085.302br.net', +'ad.doubleclick.net.19168.9086.302br.net', +'ad.doubleclick.net.19169.9086.302br.net', +'ad.doubleclick.net.19174.9086.302br.net', +'ad.doubleclick.net.19175.9086.302br.net', +'ad.doubleclick.net.19177.9086.302br.net', +'ad.doubleclick.net.19178.9086.302br.net', +'ad.doubleclick.net.19179.9115.302br.net', +'ad.doubleclick.net.19182.9115.302br.net', +'ad.doubleclick.net.19185.9115.302br.net', +'ad.doubleclick.net.19188.9115.302br.net', +'ad.doubleclick.net.19191.9115.302br.net', +'ad.doubleclick.net.19194.9115.302br.net', +'ad.doubleclick.net.19207.9116.302br.net', +'ad.doubleclick.net.19390.9118.302br.net', +'ad.doubleclick.net.19392.9118.302br.net', +'ad.doubleclick.net.19394.9118.302br.net', +'ad.doubleclick.net.19396.9118.302br.net', +'ad.doubleclick.net.19398.9118.302br.net', +'ad.doubleclick.net.19400.9118.302br.net', +'ad.doubleclick.net.19402.9118.302br.net', +'ad.doubleclick.net.19404.9118.302br.net', +'ad.doubleclick.net.19406.9118.302br.net', +'ad.doubleclick.net.19408.9118.302br.net', +'ad.doubleclick.net.19410.9118.302br.net', +'ad.doubleclick.net.19412.9118.302br.net', +'ad.doubleclick.net.19414.9118.302br.net', +'ad.doubleclick.net.19416.9118.302br.net', +'ad.doubleclick.net.19418.9118.302br.net', +'ad.doubleclick.net.19420.9118.302br.net', +'ad.doubleclick.net.19422.9118.302br.net', +'ad.doubleclick.net.19424.9118.302br.net', +'ad.doubleclick.net.19426.9118.302br.net', +'ad.doubleclick.net.19428.9118.302br.net', +'ad.doubleclick.net.19430.9118.302br.net', +'ad.doubleclick.net.21261.9124.302br.net', +'ad.doubleclick.net.21262.9124.302br.net', +'ad.doubleclick.net.21268.9112.302br.net', +'ad.doubleclick.net.21271.9112.302br.net', +'ad.doubleclick.net.21274.9112.302br.net', +'ad.doubleclick.net.21296.9117.302br.net', +'ad.doubleclick.net.21371.9075.302br.net', +'ad.doubleclick.net.21373.9075.302br.net', +'ad.doubleclick.net.21376.9075.302br.net', +'ad.doubleclick.net.21379.9075.302br.net', +'ad.doubleclick.net.21380.9075.302br.net', +'ad.doubleclick.net.21382.9075.302br.net', +'ad.doubleclick.net.21383.9075.302br.net', +'ad.doubleclick.net.21385.9075.302br.net', +'ad.doubleclick.net.21388.9075.302br.net', +'ad.doubleclick.net.21391.9075.302br.net', +'ad.doubleclick.net.21392.9075.302br.net', +'ad.doubleclick.net.21394.9075.302br.net', +'ad.doubleclick.net.21398.9075.302br.net', +'ad.doubleclick.net.21400.9075.302br.net', +'ad.doubleclick.net.21401.9075.302br.net', +'ad.doubleclick.net.21403.9075.302br.net', +'ad.doubleclick.net.21406.9075.302br.net', +'ad.doubleclick.net.21409.9075.302br.net', +'ad.doubleclick.net.21410.9075.302br.net', +'ad.doubleclick.net.21412.9075.302br.net', +'ad.doubleclick.net.21413.9075.302br.net', +'ad.doubleclick.net.21415.9075.302br.net', +'ad.doubleclick.net.21418.9075.302br.net', +'ad.doubleclick.net.21419.9075.302br.net', +'ad.doubleclick.net.21421.9075.302br.net', +'ad.doubleclick.net.21427.9075.302br.net', +'ad.doubleclick.net.21430.9075.302br.net', +'ad.doubleclick.net.21433.9075.302br.net', +'ad.doubleclick.net.21436.9075.302br.net', +'ad.doubleclick.net.21439.9075.302br.net', +'ad.doubleclick.net.21440.9075.302br.net', +'ad.doubleclick.net.21442.9075.302br.net', +'ad.doubleclick.net.21445.9075.302br.net', +'ad.doubleclick.net.21448.9075.302br.net', +'ad.doubleclick.net.21451.9075.302br.net', +'ad.doubleclick.net.21452.9075.302br.net', +'ad.doubleclick.net.21454.9075.302br.net', +'ad.doubleclick.net.21455.9075.302br.net', +'ad.doubleclick.net.21457.9075.302br.net', +'ad.doubleclick.net.21458.9075.302br.net', +'ad.doubleclick.net.21460.9075.302br.net', +'ad.doubleclick.net.21463.9075.302br.net', +'ad.doubleclick.net.21464.9075.302br.net', +'ad.doubleclick.net.21466.9075.302br.net', +'ad.doubleclick.net.21467.9075.302br.net', +'ad.doubleclick.net.21469.9075.302br.net', +'ad.doubleclick.net.21470.9075.302br.net', +'ad.doubleclick.net.21472.9075.302br.net', +'ad.doubleclick.net.21473.9075.302br.net', +'ad.doubleclick.net.21475.9075.302br.net', +'ad.doubleclick.net.21476.9075.302br.net', +'ad.doubleclick.net.21478.9075.302br.net', +'ad.doubleclick.net.21479.9075.302br.net', +'ad.doubleclick.net.21481.9075.302br.net', +'ad.doubleclick.net.21482.9075.302br.net', +'ad.doubleclick.net.21484.9075.302br.net', +'ad.doubleclick.net.21485.9075.302br.net', +'ad.doubleclick.net.21487.9075.302br.net', +'ad.doubleclick.net.21491.9075.302br.net', +'ad.doubleclick.net.21493.9075.302br.net', +'ad.doubleclick.net.21494.9075.302br.net', +'ad.doubleclick.net.21496.9075.302br.net', +'ad.doubleclick.net.21497.9075.302br.net', +'ad.doubleclick.net.21499.9075.302br.net', +'ad.doubleclick.net.21500.9075.302br.net', +'ad.doubleclick.net.21502.9075.302br.net', +'ad.doubleclick.net.21503.9075.302br.net', +'ad.doubleclick.net.21505.9075.302br.net', +'ad.doubleclick.net.21506.9075.302br.net', +'ad.doubleclick.net.21508.9075.302br.net', +'ad.doubleclick.net.21509.9075.302br.net', +'ad.doubleclick.net.21511.9075.302br.net', +'ad.doubleclick.net.21512.9075.302br.net', +'ad.doubleclick.net.21514.9075.302br.net', +'ad.doubleclick.net.21515.9075.302br.net', +'ad.doubleclick.net.21517.9075.302br.net', +'ad.doubleclick.net.21518.9075.302br.net', +'ad.doubleclick.net.21520.9075.302br.net', +'ad.doubleclick.net.21521.9075.302br.net', +'ad.doubleclick.net.21523.9075.302br.net', +'ad.doubleclick.net.21524.9075.302br.net', +'ad.doubleclick.net.21526.9075.302br.net', +'ad.doubleclick.net.21527.9075.302br.net', +'ad.doubleclick.net.21529.9075.302br.net', +'ad.doubleclick.net.21530.9075.302br.net', +'ad.doubleclick.net.21532.9075.302br.net', +'ad.doubleclick.net.21533.9075.302br.net', +'ad.doubleclick.net.21535.9075.302br.net', +'ad.doubleclick.net.21536.9075.302br.net', +'ad.doubleclick.net.21538.9075.302br.net', +'ad.doubleclick.net.21539.9075.302br.net', +'ad.doubleclick.net.21541.9075.302br.net', +'ad.doubleclick.net.21542.9075.302br.net', +'ad.doubleclick.net.21544.9075.302br.net', +'ad.doubleclick.net.21545.9075.302br.net', +'ad.doubleclick.net.21547.9075.302br.net', +'ad.doubleclick.net.21548.9075.302br.net', +'ad.doubleclick.net.21550.9075.302br.net', +'ad.doubleclick.net.21551.9075.302br.net', +'ad.doubleclick.net.21553.9075.302br.net', +'ad.doubleclick.net.21554.9075.302br.net', +'ad.doubleclick.net.21556.9075.302br.net', +'ad.doubleclick.net.21557.9075.302br.net', +'ad.doubleclick.net.21559.9075.302br.net', +'ad.doubleclick.net.21562.9075.302br.net', +'ad.doubleclick.net.21563.9075.302br.net', +'ad.doubleclick.net.21565.9075.302br.net', +'ad.doubleclick.net.21566.9075.302br.net', +'ad.doubleclick.net.21568.9075.302br.net', +'ad.doubleclick.net.21569.9075.302br.net', +'ad.doubleclick.net.21571.9075.302br.net', +'ad.doubleclick.net.21574.9075.302br.net', +'ad.doubleclick.net.21575.9075.302br.net', +'ad.doubleclick.net.21577.9075.302br.net', +'ad.doubleclick.net.21580.9075.302br.net', +'ad.doubleclick.net.21581.9075.302br.net', +'ad.doubleclick.net.21583.9075.302br.net', +'ad.doubleclick.net.21584.9075.302br.net', +'ad.doubleclick.net.21586.9075.302br.net', +'ad.doubleclick.net.21587.9075.302br.net', +'ad.doubleclick.net.21589.9075.302br.net', +'ad.doubleclick.net.21590.9075.302br.net', +'ad.doubleclick.net.21592.9075.302br.net', +'ad.doubleclick.net.21593.9075.302br.net', +'ad.doubleclick.net.21595.9075.302br.net', +'ad.doubleclick.net.21596.9075.302br.net', +'ad.doubleclick.net.21598.9075.302br.net', +'ad.doubleclick.net.21599.9075.302br.net', +'ad.doubleclick.net.21601.9075.302br.net', +'ad.doubleclick.net.21602.9075.302br.net', +'ad.doubleclick.net.21604.9075.302br.net', +'ad.doubleclick.net.21607.9075.302br.net', +'ad.doubleclick.net.21608.9075.302br.net', +'ad.doubleclick.net.21610.9075.302br.net', +'ad.doubleclick.net.21611.9075.302br.net', +'ad.doubleclick.net.21613.9075.302br.net', +'ad.doubleclick.net.21614.9075.302br.net', +'ad.doubleclick.net.21616.9075.302br.net', +'ad.doubleclick.net.21617.9075.302br.net', +'ad.doubleclick.net.21619.9075.302br.net', +'ad.doubleclick.net.21620.9075.302br.net', +'ad.doubleclick.net.21622.9075.302br.net', +'ad.doubleclick.net.21623.9075.302br.net', +'ad.doubleclick.net.21625.9075.302br.net', +'ad.doubleclick.net.21626.9075.302br.net', +'ad.doubleclick.net.21628.9075.302br.net', +'ad.doubleclick.net.21629.9075.302br.net', +'ad.doubleclick.net.21631.9075.302br.net', +'ad.doubleclick.net.21632.9075.302br.net', +'ad.doubleclick.net.21634.9075.302br.net', +'ad.doubleclick.net.21635.9075.302br.net', +'ad.doubleclick.net.21637.9075.302br.net', +'ad.doubleclick.net.21638.9075.302br.net', +'ad.doubleclick.net.21640.9075.302br.net', +'ad.doubleclick.net.21641.9075.302br.net', +'ad.doubleclick.net.21643.9075.302br.net', +'ad.doubleclick.net.21646.9075.302br.net', +'ad.doubleclick.net.21647.9075.302br.net', +'ad.doubleclick.net.21649.9075.302br.net', +'ad.doubleclick.net.21650.9075.302br.net', +'ad.doubleclick.net.21652.9075.302br.net', +'ad.doubleclick.net.21653.9075.302br.net', +'ad.doubleclick.net.21655.9075.302br.net', +'ad.doubleclick.net.21656.9075.302br.net', +'ad.doubleclick.net.21658.9075.302br.net', +'ad.doubleclick.net.21659.9075.302br.net', +'ad.doubleclick.net.21661.9075.302br.net', +'ad.doubleclick.net.21662.9075.302br.net', +'ad.doubleclick.net.21664.9075.302br.net', +'ad.doubleclick.net.21665.9075.302br.net', +'ad.doubleclick.net.21667.9075.302br.net', +'ad.doubleclick.net.21679.9075.302br.net', +'ad.doubleclick.net.21682.9075.302br.net', +'ad.doubleclick.net.21685.9075.302br.net', +'ad.doubleclick.net.21688.9075.302br.net', +'ad.doubleclick.net.21689.9075.302br.net', +'ad.doubleclick.net.21691.9075.302br.net', +'ad.doubleclick.net.21694.9075.302br.net', +'ad.doubleclick.net.21697.9075.302br.net', +'ad.doubleclick.net.21700.9075.302br.net', +'ad.doubleclick.net.21703.9075.302br.net', +'ad.doubleclick.net.21706.9075.302br.net', +'ad.doubleclick.net.21707.9075.302br.net', +'ad.doubleclick.net.21709.9075.302br.net', +'ad.doubleclick.net.21712.9075.302br.net', +'ad.doubleclick.net.21715.9075.302br.net', +'ad.doubleclick.net.21718.9075.302br.net', +'ad.doubleclick.net.21721.9075.302br.net', +'ad.doubleclick.net.21724.9075.302br.net', +'ad.doubleclick.net.21725.9075.302br.net', +'ad.doubleclick.net.21727.9075.302br.net', +'ad.doubleclick.net.21730.9075.302br.net', +'ad.doubleclick.net.21733.9075.302br.net', +'ad.doubleclick.net.21734.9075.302br.net', +'ad.doubleclick.net.21736.9075.302br.net', +'ad.doubleclick.net.21739.9075.302br.net', +'ad.doubleclick.net.21740.9075.302br.net', +'ad.doubleclick.net.21742.9075.302br.net', +'ad.doubleclick.net.21743.9075.302br.net', +'ad.doubleclick.net.21745.9075.302br.net', +'ad.doubleclick.net.21746.9075.302br.net', +'ad.doubleclick.net.21748.9075.302br.net', +'ad.doubleclick.net.21749.9075.302br.net', +'ad.doubleclick.net.21751.9075.302br.net', +'ad.doubleclick.net.21752.9075.302br.net', +'ad.doubleclick.net.21754.9075.302br.net', +'ad.doubleclick.net.21755.9075.302br.net', +'ad.doubleclick.net.21757.9075.302br.net', +'ad.doubleclick.net.21760.9075.302br.net', +'ad.doubleclick.net.21763.9075.302br.net', +'ad.doubleclick.net.21766.9075.302br.net', +'ad.doubleclick.net.21769.9075.302br.net', +'ad.doubleclick.net.21772.9075.302br.net', +'ad.doubleclick.net.21775.9075.302br.net', +'ad.doubleclick.net.21776.9075.302br.net', +'ad.doubleclick.net.21778.9075.302br.net', +'ad.doubleclick.net.21779.9075.302br.net', +'ad.doubleclick.net.21781.9075.302br.net', +'ad.doubleclick.net.21782.9075.302br.net', +'ad.doubleclick.net.21784.9075.302br.net', +'ad.doubleclick.net.21785.9075.302br.net', +'ad.doubleclick.net.21787.9075.302br.net', +'ad.doubleclick.net.21788.9075.302br.net', +'ad.doubleclick.net.21790.9075.302br.net', +'ad.doubleclick.net.21793.9075.302br.net', +'ad.doubleclick.net.21794.9075.302br.net', +'ad.doubleclick.net.21796.9075.302br.net', +'ad.doubleclick.net.21797.9075.302br.net', +'ad.doubleclick.net.21799.9075.302br.net', +'ad.doubleclick.net.21802.9075.302br.net', +'ad.doubleclick.net.21803.9075.302br.net', +'ad.doubleclick.net.21805.9075.302br.net', +'ad.doubleclick.net.21806.9075.302br.net', +'ad.doubleclick.net.21808.9075.302br.net', +'ad.doubleclick.net.21809.9075.302br.net', +'ad.doubleclick.net.21811.9075.302br.net', +'ad.doubleclick.net.21812.9075.302br.net', +'ad.doubleclick.net.21814.9075.302br.net', +'ad.doubleclick.net.21817.9075.302br.net', +'ad.doubleclick.net.21818.9075.302br.net', +'ad.doubleclick.net.21820.9075.302br.net', +'ad.doubleclick.net.21822.9126.302br.net', +'ad.doubleclick.net.21823.9126.302br.net', +'ad.doubleclick.net.21825.9126.302br.net', +'ad.doubleclick.net.21826.9126.302br.net', +'ad.doubleclick.net.21828.9126.302br.net', +'ad.doubleclick.net.21829.9126.302br.net', +'ad.doubleclick.net.21831.9126.302br.net', +'ad.doubleclick.net.21832.9126.302br.net', +'ad.doubleclick.net.21834.9126.302br.net', +'ad.doubleclick.net.21835.9126.302br.net', +'ad.doubleclick.net.21838.9126.302br.net', +'ad.doubleclick.net.21840.9126.302br.net', +'ad.doubleclick.net.21843.9126.302br.net', +'ad.doubleclick.net.21844.9126.302br.net', +'ad.doubleclick.net.21847.9117.302br.net', +'ad.doubleclick.net.21848.9117.302br.net', +'ad.doubleclick.net.21849.9117.302br.net', +'ad.doubleclick.net.21850.9117.302br.net', +'ad.doubleclick.net.21853.9117.302br.net', +'ad.doubleclick.net.21922.9075.302br.net', +'ad.doubleclick.net.21923.9127.302br.net', +'ad.doubleclick.net.21924.9127.302br.net', +'ad.doubleclick.net.21925.9127.302br.net', +'ad.doubleclick.net.21926.9127.302br.net', +'ad.doubleclick.net.21927.9127.302br.net', +'ad.doubleclick.net.21928.9127.302br.net', +'ad.doubleclick.net.2198.9022.302br.net', +'ad.doubleclick.net.2200.9022.302br.net', +'ad.doubleclick.net.22009.9068.302br.net', +'ad.doubleclick.net.2201.9022.302br.net', +'ad.doubleclick.net.2204.9022.302br.net', +'ad.doubleclick.net.22055.9047.302br.net', +'ad.doubleclick.net.22061.9047.302br.net', +'ad.doubleclick.net.22070.9047.302br.net', +'ad.doubleclick.net.22073.9047.302br.net', +'ad.doubleclick.net.224.6100.302br.net', +'ad.doubleclick.net.22572.9136.302br.net', +'ad.doubleclick.net.22573.9136.302br.net', +'ad.doubleclick.net.22575.9136.302br.net', +'ad.doubleclick.net.22576.9136.302br.net', +'ad.doubleclick.net.22578.9136.302br.net', +'ad.doubleclick.net.22581.9136.302br.net', +'ad.doubleclick.net.22584.9136.302br.net', +'ad.doubleclick.net.22585.9136.302br.net', +'ad.doubleclick.net.22587.9136.302br.net', +'ad.doubleclick.net.22588.9136.302br.net', +'ad.doubleclick.net.22590.9136.302br.net', +'ad.doubleclick.net.22591.9136.302br.net', +'ad.doubleclick.net.22593.9136.302br.net', +'ad.doubleclick.net.22596.9136.302br.net', +'ad.doubleclick.net.22597.9136.302br.net', +'ad.doubleclick.net.22599.9136.302br.net', +'ad.doubleclick.net.22600.9136.302br.net', +'ad.doubleclick.net.22641.9137.302br.net', +'ad.doubleclick.net.22642.9137.302br.net', +'ad.doubleclick.net.22643.9137.302br.net', +'ad.doubleclick.net.22644.9137.302br.net', +'ad.doubleclick.net.22645.9137.302br.net', +'ad.doubleclick.net.22646.9137.302br.net', +'ad.doubleclick.net.22647.9137.302br.net', +'ad.doubleclick.net.22648.9137.302br.net', +'ad.doubleclick.net.22657.9068.302br.net', +'ad.doubleclick.net.22660.9068.302br.net', +'ad.doubleclick.net.22672.9068.302br.net', +'ad.doubleclick.net.22678.9068.302br.net', +'ad.doubleclick.net.22686.9068.302br.net', +'ad.doubleclick.net.22687.9068.302br.net', +'ad.doubleclick.net.22701.9138.302br.net', +'ad.doubleclick.net.22702.9138.302br.net', +'ad.doubleclick.net.22704.9138.302br.net', +'ad.doubleclick.net.22705.9138.302br.net', +'ad.doubleclick.net.22776.9142.302br.net', +'ad.doubleclick.net.22777.9142.302br.net', +'ad.doubleclick.net.22779.9142.302br.net', +'ad.doubleclick.net.22780.9142.302br.net', +'ad.doubleclick.net.22782.9142.302br.net', +'ad.doubleclick.net.22785.9142.302br.net', +'ad.doubleclick.net.22946.9147.302br.net', +'ad.doubleclick.net.22948.9147.302br.net', +'ad.doubleclick.net.22950.9147.302br.net', +'ad.doubleclick.net.22952.9147.302br.net', +'ad.doubleclick.net.22955.9149.302br.net', +'ad.doubleclick.net.22958.9149.302br.net', +'ad.doubleclick.net.22961.9149.302br.net', +'ad.doubleclick.net.23027.9115.302br.net', +'ad.doubleclick.net.23030.9115.302br.net', +'ad.doubleclick.net.23033.9115.302br.net', +'ad.doubleclick.net.23036.9140.302br.net', +'ad.doubleclick.net.23038.9140.302br.net', +'ad.doubleclick.net.23040.9140.302br.net', +'ad.doubleclick.net.23043.9154.302br.net', +'ad.doubleclick.net.23046.9154.302br.net', +'ad.doubleclick.net.23049.9154.302br.net', +'ad.doubleclick.net.23055.9156.302br.net', +'ad.doubleclick.net.23058.9156.302br.net', +'ad.doubleclick.net.23061.9156.302br.net', +'ad.doubleclick.net.23064.9156.302br.net', +'ad.doubleclick.net.23067.9156.302br.net', +'ad.doubleclick.net.23070.9156.302br.net', +'ad.doubleclick.net.23116.9160.302br.net', +'ad.doubleclick.net.23119.9160.302br.net', +'ad.doubleclick.net.23122.9160.302br.net', +'ad.doubleclick.net.23290.9075.302br.net', +'ad.doubleclick.net.23291.9075.302br.net', +'ad.doubleclick.net.23293.9075.302br.net', +'ad.doubleclick.net.23294.9075.302br.net', +'ad.doubleclick.net.23298.9075.302br.net', +'ad.doubleclick.net.23299.9075.302br.net', +'ad.doubleclick.net.23300.9075.302br.net', +'ad.doubleclick.net.23302.9075.302br.net', +'ad.doubleclick.net.23303.9075.302br.net', +'ad.doubleclick.net.23305.9075.302br.net', +'ad.doubleclick.net.23308.9075.302br.net', +'ad.doubleclick.net.23309.9075.302br.net', +'ad.doubleclick.net.23310.9075.302br.net', +'ad.doubleclick.net.23311.9075.302br.net', +'ad.doubleclick.net.23312.9075.302br.net', +'ad.doubleclick.net.23314.9075.302br.net', +'ad.doubleclick.net.23315.9075.302br.net', +'ad.doubleclick.net.23320.9075.302br.net', +'ad.doubleclick.net.23322.9075.302br.net', +'ad.doubleclick.net.23323.9075.302br.net', +'ad.doubleclick.net.23324.9075.302br.net', +'ad.doubleclick.net.23325.9075.302br.net', +'ad.doubleclick.net.23326.9075.302br.net', +'ad.doubleclick.net.23327.9075.302br.net', +'ad.doubleclick.net.23329.9075.302br.net', +'ad.doubleclick.net.23332.9075.302br.net', +'ad.doubleclick.net.23333.9075.302br.net', +'ad.doubleclick.net.23335.9075.302br.net', +'ad.doubleclick.net.23336.9075.302br.net', +'ad.doubleclick.net.23338.9075.302br.net', +'ad.doubleclick.net.23341.9075.302br.net', +'ad.doubleclick.net.23342.9075.302br.net', +'ad.doubleclick.net.23343.9075.302br.net', +'ad.doubleclick.net.23344.9075.302br.net', +'ad.doubleclick.net.23345.9075.302br.net', +'ad.doubleclick.net.23347.9075.302br.net', +'ad.doubleclick.net.23350.9075.302br.net', +'ad.doubleclick.net.23353.9075.302br.net', +'ad.doubleclick.net.23354.9075.302br.net', +'ad.doubleclick.net.23435.9160.302br.net', +'ad.doubleclick.net.23438.9160.302br.net', +'ad.doubleclick.net.23441.9160.302br.net', +'ad.doubleclick.net.23444.9159.302br.net', +'ad.doubleclick.net.23447.9159.302br.net', +'ad.doubleclick.net.23452.9075.302br.net', +'ad.doubleclick.net.23454.9075.302br.net', +'ad.doubleclick.net.23457.9075.302br.net', +'ad.doubleclick.net.23478.9075.302br.net', +'ad.doubleclick.net.23481.9075.302br.net', +'ad.doubleclick.net.23487.9075.302br.net', +'ad.doubleclick.net.23491.9075.302br.net', +'ad.doubleclick.net.23493.9075.302br.net', +'ad.doubleclick.net.23494.9075.302br.net', +'ad.doubleclick.net.23496.9075.302br.net', +'ad.doubleclick.net.23502.9075.302br.net', +'ad.doubleclick.net.23505.9075.302br.net', +'ad.doubleclick.net.23506.9075.302br.net', +'ad.doubleclick.net.23508.9075.302br.net', +'ad.doubleclick.net.23509.9075.302br.net', +'ad.doubleclick.net.23511.9075.302br.net', +'ad.doubleclick.net.23517.9075.302br.net', +'ad.doubleclick.net.23518.9075.302br.net', +'ad.doubleclick.net.23520.9075.302br.net', +'ad.doubleclick.net.23523.9075.302br.net', +'ad.doubleclick.net.23526.9075.302br.net', +'ad.doubleclick.net.23527.9075.302br.net', +'ad.doubleclick.net.23529.9075.302br.net', +'ad.doubleclick.net.23530.9075.302br.net', +'ad.doubleclick.net.23532.9075.302br.net', +'ad.doubleclick.net.23535.9075.302br.net', +'ad.doubleclick.net.23545.9075.302br.net', +'ad.doubleclick.net.23547.9075.302br.net', +'ad.doubleclick.net.23550.9075.302br.net', +'ad.doubleclick.net.23557.9075.302br.net', +'ad.doubleclick.net.23559.9075.302br.net', +'ad.doubleclick.net.23563.9075.302br.net', +'ad.doubleclick.net.23565.9075.302br.net', +'ad.doubleclick.net.23569.9075.302br.net', +'ad.doubleclick.net.23569.9075.302br.net', +'ad.doubleclick.net.23571.9075.302br.net', +'ad.doubleclick.net.23572.9075.302br.net', +'ad.doubleclick.net.23574.9075.302br.net', +'ad.doubleclick.net.23575.9075.302br.net', +'ad.doubleclick.net.23577.9075.302br.net', +'ad.doubleclick.net.23584.9075.302br.net', +'ad.doubleclick.net.23586.9075.302br.net', +'ad.doubleclick.net.23587.9075.302br.net', +'ad.doubleclick.net.23589.9075.302br.net', +'ad.doubleclick.net.23592.9075.302br.net', +'ad.doubleclick.net.23621.9164.302br.net', +'ad.doubleclick.net.23624.9164.302br.net', +'ad.doubleclick.net.23627.9164.302br.net', +'ad.doubleclick.net.23630.9164.302br.net', +'ad.doubleclick.net.23639.9164.302br.net', +'ad.doubleclick.net.23642.9164.302br.net', +'ad.doubleclick.net.23645.9164.302br.net', +'ad.doubleclick.net.23648.9164.302br.net', +'ad.doubleclick.net.23651.9164.302br.net', +'ad.doubleclick.net.23654.9164.302br.net', +'ad.doubleclick.net.23657.9164.302br.net', +'ad.doubleclick.net.23660.9164.302br.net', +'ad.doubleclick.net.23669.9164.302br.net', +'ad.doubleclick.net.23670.9164.302br.net', +'ad.doubleclick.net.23672.9164.302br.net', +'ad.doubleclick.net.23673.9164.302br.net', +'ad.doubleclick.net.23675.9164.302br.net', +'ad.doubleclick.net.23678.9164.302br.net', +'ad.doubleclick.net.23681.9164.302br.net', +'ad.doubleclick.net.23687.9164.302br.net', +'ad.doubleclick.net.23690.9164.302br.net', +'ad.doubleclick.net.23693.9164.302br.net', +'ad.doubleclick.net.23694.9164.302br.net', +'ad.doubleclick.net.23695.9164.302br.net', +'ad.doubleclick.net.23696.9164.302br.net', +'ad.doubleclick.net.23697.9164.302br.net', +'ad.doubleclick.net.23699.9164.302br.net', +'ad.doubleclick.net.23700.9164.302br.net', +'ad.doubleclick.net.23702.9164.302br.net', +'ad.doubleclick.net.23703.9164.302br.net', +'ad.doubleclick.net.23705.9164.302br.net', +'ad.doubleclick.net.23711.9164.302br.net', +'ad.doubleclick.net.23714.9164.302br.net', +'ad.doubleclick.net.23715.9164.302br.net', +'ad.doubleclick.net.23728.9164.302br.net', +'ad.doubleclick.net.23729.9164.302br.net', +'ad.doubleclick.net.23730.9164.302br.net', +'ad.doubleclick.net.23738.9164.302br.net', +'ad.doubleclick.net.23739.9164.302br.net', +'ad.doubleclick.net.23741.9164.302br.net', +'ad.doubleclick.net.23742.9164.302br.net', +'ad.doubleclick.net.23744.9164.302br.net', +'ad.doubleclick.net.23745.9164.302br.net', +'ad.doubleclick.net.23747.9164.302br.net', +'ad.doubleclick.net.23748.9164.302br.net', +'ad.doubleclick.net.23749.9164.302br.net', +'ad.doubleclick.net.23750.9164.302br.net', +'ad.doubleclick.net.23751.9164.302br.net', +'ad.doubleclick.net.23922.9166.302br.net', +'ad.doubleclick.net.23925.9166.302br.net', +'ad.doubleclick.net.23928.9166.302br.net', +'ad.doubleclick.net.23931.9166.302br.net', +'ad.doubleclick.net.23934.9166.302br.net', +'ad.doubleclick.net.23937.9166.302br.net', +'ad.doubleclick.net.23940.9166.302br.net', +'ad.doubleclick.net.23943.9166.302br.net', +'ad.doubleclick.net.23946.9166.302br.net', +'ad.doubleclick.net.23949.9166.302br.net', +'ad.doubleclick.net.23952.9166.302br.net', +'ad.doubleclick.net.23955.9166.302br.net', +'ad.doubleclick.net.23958.9166.302br.net', +'ad.doubleclick.net.23961.9166.302br.net', +'ad.doubleclick.net.23964.9166.302br.net', +'ad.doubleclick.net.23969.9166.302br.net', +'ad.doubleclick.net.23972.9166.302br.net', +'ad.doubleclick.net.23975.9166.302br.net', +'ad.doubleclick.net.24012.9068.302br.net', +'ad.doubleclick.net.24013.9068.302br.net', +'ad.doubleclick.net.24015.9068.302br.net', +'ad.doubleclick.net.24016.9068.302br.net', +'ad.doubleclick.net.24021.9068.302br.net', +'ad.doubleclick.net.24022.9068.302br.net', +'ad.doubleclick.net.24039.9068.302br.net', +'ad.doubleclick.net.24046.9068.302br.net', +'ad.doubleclick.net.24051.9068.302br.net', +'ad.doubleclick.net.24052.9068.302br.net', +'ad.doubleclick.net.24069.9068.302br.net', +'ad.doubleclick.net.24070.9068.302br.net', +'ad.doubleclick.net.24071.9068.302br.net', +'ad.doubleclick.net.24072.9068.302br.net', +'ad.doubleclick.net.24073.9068.302br.net', +'ad.doubleclick.net.24077.9068.302br.net', +'ad.doubleclick.net.24080.9168.302br.net', +'ad.doubleclick.net.24081.9168.302br.net', +'ad.doubleclick.net.24083.9168.302br.net', +'ad.doubleclick.net.24086.9168.302br.net', +'ad.doubleclick.net.24092.9168.302br.net', +'ad.doubleclick.net.24093.9168.302br.net', +'ad.doubleclick.net.24095.9168.302br.net', +'ad.doubleclick.net.24098.9168.302br.net', +'ad.doubleclick.net.24099.9168.302br.net', +'ad.doubleclick.net.24101.9168.302br.net', +'ad.doubleclick.net.24102.9168.302br.net', +'ad.doubleclick.net.24110.9168.302br.net', +'ad.doubleclick.net.24111.9168.302br.net', +'ad.doubleclick.net.24330.9115.302br.net', +'ad.doubleclick.net.24331.9115.302br.net', +'ad.doubleclick.net.24332.9115.302br.net', +'ad.doubleclick.net.24333.9115.302br.net', +'ad.doubleclick.net.24334.9115.302br.net', +'ad.doubleclick.net.24335.9115.302br.net', +'ad.doubleclick.net.24336.9115.302br.net', +'ad.doubleclick.net.24337.9115.302br.net', +'ad.doubleclick.net.24338.9115.302br.net', +'ad.doubleclick.net.24339.9115.302br.net', +'ad.doubleclick.net.24340.9115.302br.net', +'ad.doubleclick.net.24341.9115.302br.net', +'ad.doubleclick.net.24342.9115.302br.net', +'ad.doubleclick.net.24343.9115.302br.net', +'ad.doubleclick.net.24344.9115.302br.net', +'ad.doubleclick.net.24345.9115.302br.net', +'ad.doubleclick.net.24346.9115.302br.net', +'ad.doubleclick.net.24347.9115.302br.net', +'ad.doubleclick.net.24355.9175.302br.net', +'ad.doubleclick.net.24358.9175.302br.net', +'ad.doubleclick.net.24361.9175.302br.net', +'ad.doubleclick.net.24364.9175.302br.net', +'ad.doubleclick.net.24367.9175.302br.net', +'ad.doubleclick.net.24370.9175.302br.net', +'ad.doubleclick.net.24483.9178.302br.net', +'ad.doubleclick.net.24484.9178.302br.net', +'ad.doubleclick.net.24485.9178.302br.net', +'ad.doubleclick.net.24486.9178.302br.net', +'ad.doubleclick.net.24487.9178.302br.net', +'ad.doubleclick.net.24489.9178.302br.net', +'ad.doubleclick.net.24490.9178.302br.net', +'ad.doubleclick.net.24762.9176.302br.net', +'ad.doubleclick.net.24763.9176.302br.net', +'ad.doubleclick.net.24765.9176.302br.net', +'ad.doubleclick.net.24766.9176.302br.net', +'ad.doubleclick.net.24768.9176.302br.net', +'ad.doubleclick.net.24771.9176.302br.net', +'ad.doubleclick.net.24772.9176.302br.net', +'ad.doubleclick.net.24774.9176.302br.net', +'ad.doubleclick.net.24775.9176.302br.net', +'ad.doubleclick.net.24777.9176.302br.net', +'ad.doubleclick.net.24778.9176.302br.net', +'ad.doubleclick.net.24780.9176.302br.net', +'ad.doubleclick.net.24781.9176.302br.net', +'ad.doubleclick.net.24783.9176.302br.net', +'ad.doubleclick.net.24786.9176.302br.net', +'ad.doubleclick.net.24787.9176.302br.net', +'ad.doubleclick.net.24789.9176.302br.net', +'ad.doubleclick.net.24792.9176.302br.net', +'ad.doubleclick.net.24795.9176.302br.net', +'ad.doubleclick.net.24796.9176.302br.net', +'ad.doubleclick.net.24798.9176.302br.net', +'ad.doubleclick.net.24801.9176.302br.net', +'ad.doubleclick.net.24804.9176.302br.net', +'ad.doubleclick.net.24805.9176.302br.net', +'ad.doubleclick.net.24807.9176.302br.net', +'ad.doubleclick.net.24808.9176.302br.net', +'ad.doubleclick.net.24810.9176.302br.net', +'ad.doubleclick.net.24811.9176.302br.net', +'ad.doubleclick.net.24813.9176.302br.net', +'ad.doubleclick.net.24814.9176.302br.net', +'ad.doubleclick.net.24816.9176.302br.net', +'ad.doubleclick.net.24817.9176.302br.net', +'ad.doubleclick.net.24819.9176.302br.net', +'ad.doubleclick.net.24820.9176.302br.net', +'ad.doubleclick.net.24919.9185.302br.net', +'ad.doubleclick.net.24931.9185.302br.net', +'ad.doubleclick.net.24934.9185.302br.net', +'ad.doubleclick.net.24937.9185.302br.net', +'ad.doubleclick.net.24940.9185.302br.net', +'ad.doubleclick.net.24943.9185.302br.net', +'ad.doubleclick.net.24946.9185.302br.net', +'ad.doubleclick.net.24949.9185.302br.net', +'ad.doubleclick.net.24952.9185.302br.net', +'ad.doubleclick.net.24955.9185.302br.net', +'ad.doubleclick.net.24958.9185.302br.net', +'ad.doubleclick.net.24961.9185.302br.net', +'ad.doubleclick.net.24964.9185.302br.net', +'ad.doubleclick.net.24965.9185.302br.net', +'ad.doubleclick.net.24966.9185.302br.net', +'ad.doubleclick.net.24967.9185.302br.net', +'ad.doubleclick.net.24968.9185.302br.net', +'ad.doubleclick.net.24969.9185.302br.net', +'ad.doubleclick.net.24970.9185.302br.net', +'ad.doubleclick.net.24971.9185.302br.net', +'ad.doubleclick.net.24973.9185.302br.net', +'ad.doubleclick.net.24975.9185.302br.net', +'ad.doubleclick.net.24976.9185.302br.net', +'ad.doubleclick.net.24979.9185.302br.net', +'ad.doubleclick.net.24985.9185.302br.net', +'ad.doubleclick.net.24988.9185.302br.net', +'ad.doubleclick.net.24991.9185.302br.net', +'ad.doubleclick.net.24994.9185.302br.net', +'ad.doubleclick.net.24997.9185.302br.net', +'ad.doubleclick.net.25000.9185.302br.net', +'ad.doubleclick.net.25003.9185.302br.net', +'ad.doubleclick.net.25006.9185.302br.net', +'ad.doubleclick.net.25009.9185.302br.net', +'ad.doubleclick.net.25012.9185.302br.net', +'ad.doubleclick.net.25015.9185.302br.net', +'ad.doubleclick.net.25021.9185.302br.net', +'ad.doubleclick.net.25024.9185.302br.net', +'ad.doubleclick.net.25027.9185.302br.net', +'ad.doubleclick.net.25030.9185.302br.net', +'ad.doubleclick.net.25033.9185.302br.net', +'ad.doubleclick.net.25036.9185.302br.net', +'ad.doubleclick.net.25039.9185.302br.net', +'ad.doubleclick.net.25042.9185.302br.net', +'ad.doubleclick.net.25045.9185.302br.net', +'ad.doubleclick.net.25048.9185.302br.net', +'ad.doubleclick.net.25051.9185.302br.net', +'ad.doubleclick.net.25054.9185.302br.net', +'ad.doubleclick.net.25057.9185.302br.net', +'ad.doubleclick.net.25060.9185.302br.net', +'ad.doubleclick.net.25063.9185.302br.net', +'ad.doubleclick.net.25066.9185.302br.net', +'ad.doubleclick.net.25069.9185.302br.net', +'ad.doubleclick.net.25072.9185.302br.net', +'ad.doubleclick.net.25075.9185.302br.net', +'ad.doubleclick.net.25395.9185.302br.net', +'ad.doubleclick.net.25398.9185.302br.net', +'ad.doubleclick.net.25401.9185.302br.net', +'ad.doubleclick.net.25404.9185.302br.net', +'ad.doubleclick.net.25407.9185.302br.net', +'ad.doubleclick.net.25408.9185.302br.net', +'ad.doubleclick.net.25409.9185.302br.net', +'ad.doubleclick.net.25410.9185.302br.net', +'ad.doubleclick.net.25411.9185.302br.net', +'ad.doubleclick.net.25412.9185.302br.net', +'ad.doubleclick.net.25413.9185.302br.net', +'ad.doubleclick.net.25414.9185.302br.net', +'ad.doubleclick.net.25415.9185.302br.net', +'ad.doubleclick.net.25419.9185.302br.net', +'ad.doubleclick.net.25420.9185.302br.net', +'ad.doubleclick.net.25421.9185.302br.net', +'ad.doubleclick.net.25425.9185.302br.net', +'ad.doubleclick.net.25426.9185.302br.net', +'ad.doubleclick.net.25427.9185.302br.net', +'ad.doubleclick.net.25428.9185.302br.net', +'ad.doubleclick.net.25429.9185.302br.net', +'ad.doubleclick.net.25430.9185.302br.net', +'ad.doubleclick.net.25431.9185.302br.net', +'ad.doubleclick.net.25432.9185.302br.net', +'ad.doubleclick.net.25433.9185.302br.net', +'ad.doubleclick.net.25434.9185.302br.net', +'ad.doubleclick.net.25435.9185.302br.net', +'ad.doubleclick.net.25436.9185.302br.net', +'ad.doubleclick.net.25437.9185.302br.net', +'ad.doubleclick.net.25438.9185.302br.net', +'ad.doubleclick.net.25440.9185.302br.net', +'ad.doubleclick.net.25443.9185.302br.net', +'ad.doubleclick.net.25446.9185.302br.net', +'ad.doubleclick.net.25448.9185.302br.net', +'ad.doubleclick.net.25449.9185.302br.net', +'ad.doubleclick.net.25469.9187.302br.net', +'ad.doubleclick.net.25472.9187.302br.net', +'ad.doubleclick.net.25475.9187.302br.net', +'ad.doubleclick.net.25478.9187.302br.net', +'ad.doubleclick.net.25481.9187.302br.net', +'ad.doubleclick.net.25484.9187.302br.net', +'ad.doubleclick.net.25497.9190.302br.net', +'ad.doubleclick.net.25498.9190.302br.net', +'ad.doubleclick.net.25503.9190.302br.net', +'ad.doubleclick.net.25504.9190.302br.net', +'ad.doubleclick.net.25506.9190.302br.net', +'ad.doubleclick.net.25507.9190.302br.net', +'ad.doubleclick.net.25509.9190.302br.net', +'ad.doubleclick.net.25510.9190.302br.net', +'ad.doubleclick.net.25512.9190.302br.net', +'ad.doubleclick.net.25513.9190.302br.net', +'ad.doubleclick.net.25515.9190.302br.net', +'ad.doubleclick.net.25516.9190.302br.net', +'ad.doubleclick.net.25523.9190.302br.net', +'ad.doubleclick.net.25524.9190.302br.net', +'ad.doubleclick.net.25525.9190.302br.net', +'ad.doubleclick.net.25526.9190.302br.net', +'ad.doubleclick.net.25527.9190.302br.net', +'ad.doubleclick.net.25528.9190.302br.net', +'ad.doubleclick.net.25530.9190.302br.net', +'ad.doubleclick.net.25531.9190.302br.net', +'ad.doubleclick.net.25532.9190.302br.net', +'ad.doubleclick.net.25533.9190.302br.net', +'ad.doubleclick.net.25534.9190.302br.net', +'ad.doubleclick.net.25536.9190.302br.net', +'ad.doubleclick.net.25537.9190.302br.net', +'ad.doubleclick.net.25542.9190.302br.net', +'ad.doubleclick.net.25543.9190.302br.net', +'ad.doubleclick.net.25545.9190.302br.net', +'ad.doubleclick.net.25546.9190.302br.net', +'ad.doubleclick.net.25550.9190.302br.net', +'ad.doubleclick.net.25551.9190.302br.net', +'ad.doubleclick.net.25552.9190.302br.net', +'ad.doubleclick.net.25556.9190.302br.net', +'ad.doubleclick.net.25557.9190.302br.net', +'ad.doubleclick.net.25558.9190.302br.net', +'ad.doubleclick.net.25559.9190.302br.net', +'ad.doubleclick.net.25560.9190.302br.net', +'ad.doubleclick.net.25561.9190.302br.net', +'ad.doubleclick.net.25563.9190.302br.net', +'ad.doubleclick.net.25564.9190.302br.net', +'ad.doubleclick.net.25566.9190.302br.net', +'ad.doubleclick.net.25567.9190.302br.net', +'ad.doubleclick.net.25569.9190.302br.net', +'ad.doubleclick.net.25570.9190.302br.net', +'ad.doubleclick.net.25573.9190.302br.net', +'ad.doubleclick.net.25574.9190.302br.net', +'ad.doubleclick.net.25581.9190.302br.net', +'ad.doubleclick.net.25582.9190.302br.net', +'ad.doubleclick.net.25584.9190.302br.net', +'ad.doubleclick.net.25585.9190.302br.net', +'ad.doubleclick.net.25643.9190.302br.net', +'ad.doubleclick.net.25644.9190.302br.net', +'ad.doubleclick.net.25645.9190.302br.net', +'ad.doubleclick.net.25647.9190.302br.net', +'ad.doubleclick.net.25648.9190.302br.net', +'ad.doubleclick.net.25649.9190.302br.net', +'ad.doubleclick.net.25650.9190.302br.net', +'ad.doubleclick.net.25651.9190.302br.net', +'ad.doubleclick.net.25652.9190.302br.net', +'ad.doubleclick.net.25653.9190.302br.net', +'ad.doubleclick.net.25654.9190.302br.net', +'ad.doubleclick.net.25656.9190.302br.net', +'ad.doubleclick.net.25657.9190.302br.net', +'ad.doubleclick.net.25659.9190.302br.net', +'ad.doubleclick.net.25660.9190.302br.net', +'ad.doubleclick.net.25662.9190.302br.net', +'ad.doubleclick.net.25663.9190.302br.net', +'ad.doubleclick.net.25665.9190.302br.net', +'ad.doubleclick.net.25666.9190.302br.net', +'ad.doubleclick.net.25668.9190.302br.net', +'ad.doubleclick.net.25669.9190.302br.net', +'ad.doubleclick.net.25671.9190.302br.net', +'ad.doubleclick.net.25672.9190.302br.net', +'ad.doubleclick.net.25674.9190.302br.net', +'ad.doubleclick.net.25675.9190.302br.net', +'ad.doubleclick.net.25679.9190.302br.net', +'ad.doubleclick.net.25680.9190.302br.net', +'ad.doubleclick.net.25681.9190.302br.net', +'ad.doubleclick.net.25686.9190.302br.net', +'ad.doubleclick.net.25687.9190.302br.net', +'ad.doubleclick.net.25689.9190.302br.net', +'ad.doubleclick.net.25690.9190.302br.net', +'ad.doubleclick.net.25692.9190.302br.net', +'ad.doubleclick.net.25693.9190.302br.net', +'ad.doubleclick.net.25695.9190.302br.net', +'ad.doubleclick.net.25696.9190.302br.net', +'ad.doubleclick.net.25698.9190.302br.net', +'ad.doubleclick.net.25699.9190.302br.net', +'ad.doubleclick.net.25701.9190.302br.net', +'ad.doubleclick.net.25702.9190.302br.net', +'ad.doubleclick.net.25704.9190.302br.net', +'ad.doubleclick.net.25705.9190.302br.net', +'ad.doubleclick.net.25707.9190.302br.net', +'ad.doubleclick.net.25708.9190.302br.net', +'ad.doubleclick.net.25731.9190.302br.net', +'ad.doubleclick.net.25732.9190.302br.net', +'ad.doubleclick.net.25734.9190.302br.net', +'ad.doubleclick.net.25735.9190.302br.net', +'ad.doubleclick.net.25737.9190.302br.net', +'ad.doubleclick.net.25738.9190.302br.net', +'ad.doubleclick.net.25740.9192.302br.net', +'ad.doubleclick.net.25743.9192.302br.net', +'ad.doubleclick.net.25746.9192.302br.net', +'ad.doubleclick.net.25749.9192.302br.net', +'ad.doubleclick.net.25752.9192.302br.net', +'ad.doubleclick.net.25774.9075.302br.net', +'ad.doubleclick.net.25780.9075.302br.net', +'ad.doubleclick.net.25789.9075.302br.net', +'ad.doubleclick.net.25819.9075.302br.net', +'ad.doubleclick.net.25837.9075.302br.net', +'ad.doubleclick.net.25844.9075.302br.net', +'ad.doubleclick.net.25846.9075.302br.net', +'ad.doubleclick.net.25849.9075.302br.net', +'ad.doubleclick.net.25858.9075.302br.net', +'ad.doubleclick.net.25861.9075.302br.net', +'ad.doubleclick.net.25876.9075.302br.net', +'ad.doubleclick.net.25951.9197.302br.net', +'ad.doubleclick.net.25954.9197.302br.net', +'ad.doubleclick.net.25957.9197.302br.net', +'ad.doubleclick.net.25958.9197.302br.net', +'ad.doubleclick.net.25960.9197.302br.net', +'ad.doubleclick.net.25963.9197.302br.net', +'ad.doubleclick.net.25964.9197.302br.net', +'ad.doubleclick.net.25966.9197.302br.net', +'ad.doubleclick.net.25969.9197.302br.net', +'ad.doubleclick.net.25972.9197.302br.net', +'ad.doubleclick.net.25975.9197.302br.net', +'ad.doubleclick.net.25976.9197.302br.net', +'ad.doubleclick.net.25978.9197.302br.net', +'ad.doubleclick.net.25981.9197.302br.net', +'ad.doubleclick.net.25984.9197.302br.net', +'ad.doubleclick.net.25987.9197.302br.net', +'ad.doubleclick.net.25988.9197.302br.net', +'ad.doubleclick.net.25990.9197.302br.net', +'ad.doubleclick.net.25993.9197.302br.net', +'ad.doubleclick.net.25994.9197.302br.net', +'ad.doubleclick.net.26041.9198.302br.net', +'ad.doubleclick.net.26044.9198.302br.net', +'ad.doubleclick.net.26045.9198.302br.net', +'ad.doubleclick.net.26047.9198.302br.net', +'ad.doubleclick.net.26048.9198.302br.net', +'ad.doubleclick.net.26312.9199.302br.net', +'ad.doubleclick.net.26313.9199.302br.net', +'ad.doubleclick.net.26315.9199.302br.net', +'ad.doubleclick.net.26316.9199.302br.net', +'ad.doubleclick.net.26318.9199.302br.net', +'ad.doubleclick.net.26321.9199.302br.net', +'ad.doubleclick.net.26322.9199.302br.net', +'ad.doubleclick.net.26324.9199.302br.net', +'ad.doubleclick.net.26325.9199.302br.net', +'ad.doubleclick.net.27461.9159.302br.net', +'ad.doubleclick.net.27464.9159.302br.net', +'ad.doubleclick.net.27467.9159.302br.net', +'ad.doubleclick.net.27502.9210.302br.net', +'ad.doubleclick.net.27521.9212.302br.net', +'ad.doubleclick.net.27524.9212.302br.net', +'ad.doubleclick.net.27527.9212.302br.net', +'ad.doubleclick.net.27528.9212.302br.net', +'ad.doubleclick.net.27531.9212.302br.net', +'ad.doubleclick.net.27534.9212.302br.net', +'ad.doubleclick.net.27537.9212.302br.net', +'ad.doubleclick.net.27540.9212.302br.net', +'ad.doubleclick.net.27543.9212.302br.net', +'ad.doubleclick.net.27546.9212.302br.net', +'ad.doubleclick.net.27549.9212.302br.net', +'ad.doubleclick.net.27552.9212.302br.net', +'ad.doubleclick.net.27555.9212.302br.net', +'ad.doubleclick.net.27556.9212.302br.net', +'ad.doubleclick.net.27557.9212.302br.net', +'ad.doubleclick.net.27559.9212.302br.net', +'ad.doubleclick.net.27560.9212.302br.net', +'ad.doubleclick.net.27562.9212.302br.net', +'ad.doubleclick.net.27563.9212.302br.net', +'ad.doubleclick.net.27565.9212.302br.net', +'ad.doubleclick.net.27566.9212.302br.net', +'ad.doubleclick.net.27568.9212.302br.net', +'ad.doubleclick.net.27569.9212.302br.net', +'ad.doubleclick.net.27570.9212.302br.net', +'ad.doubleclick.net.27571.9212.302br.net', +'ad.doubleclick.net.27572.9212.302br.net', +'ad.doubleclick.net.27573.9214.302br.net', +'ad.doubleclick.net.27574.9214.302br.net', +'ad.doubleclick.net.27577.9214.302br.net', +'ad.doubleclick.net.27579.9190.302br.net', +'ad.doubleclick.net.27581.9190.302br.net', +'ad.doubleclick.net.27583.9190.302br.net', +'ad.doubleclick.net.27585.9190.302br.net', +'ad.doubleclick.net.27587.9190.302br.net', +'ad.doubleclick.net.27589.9190.302br.net', +'ad.doubleclick.net.27591.9176.302br.net', +'ad.doubleclick.net.27592.9176.302br.net', +'ad.doubleclick.net.27597.9176.302br.net', +'ad.doubleclick.net.27598.9176.302br.net', +'ad.doubleclick.net.27600.9176.302br.net', +'ad.doubleclick.net.27601.9176.302br.net', +'ad.doubleclick.net.27603.9176.302br.net', +'ad.doubleclick.net.27606.9176.302br.net', +'ad.doubleclick.net.27609.9176.302br.net', +'ad.doubleclick.net.27610.9176.302br.net', +'ad.doubleclick.net.27612.9176.302br.net', +'ad.doubleclick.net.27613.9176.302br.net', +'ad.doubleclick.net.27615.9176.302br.net', +'ad.doubleclick.net.27616.9176.302br.net', +'ad.doubleclick.net.27618.9176.302br.net', +'ad.doubleclick.net.27622.9176.302br.net', +'ad.doubleclick.net.27625.9176.302br.net', +'ad.doubleclick.net.27628.9176.302br.net', +'ad.doubleclick.net.27631.9176.302br.net', +'ad.doubleclick.net.27637.9176.302br.net', +'ad.doubleclick.net.27640.9176.302br.net', +'ad.doubleclick.net.27646.9176.302br.net', +'ad.doubleclick.net.27649.9176.302br.net', +'ad.doubleclick.net.28092.9203.302br.net', +'ad.doubleclick.net.28093.9203.302br.net', +'ad.doubleclick.net.28094.9203.302br.net', +'ad.doubleclick.net.28095.9203.302br.net', +'ad.doubleclick.net.28096.9203.302br.net', +'ad.doubleclick.net.28097.9203.302br.net', +'ad.doubleclick.net.28098.9203.302br.net', +'ad.doubleclick.net.28099.9203.302br.net', +'ad.doubleclick.net.281.6100.302br.net', +'ad.doubleclick.net.28100.9203.302br.net', +'ad.doubleclick.net.282.6100.302br.net', +'ad.doubleclick.net.28458.9203.302br.net', +'ad.doubleclick.net.28459.9203.302br.net', +'ad.doubleclick.net.28460.9203.302br.net', +'ad.doubleclick.net.28461.9203.302br.net', +'ad.doubleclick.net.28462.9203.302br.net', +'ad.doubleclick.net.28463.9203.302br.net', +'ad.doubleclick.net.28464.9203.302br.net', +'ad.doubleclick.net.28465.9203.302br.net', +'ad.doubleclick.net.28466.9203.302br.net', +'ad.doubleclick.net.28508.9225.302br.net', +'ad.doubleclick.net.28517.9225.302br.net', +'ad.doubleclick.net.28520.9225.302br.net', +'ad.doubleclick.net.28523.9225.302br.net', +'ad.doubleclick.net.28526.9225.302br.net', +'ad.doubleclick.net.28535.9225.302br.net', +'ad.doubleclick.net.28538.9225.302br.net', +'ad.doubleclick.net.28544.9225.302br.net', +'ad.doubleclick.net.28547.9225.302br.net', +'ad.doubleclick.net.28550.9225.302br.net', +'ad.doubleclick.net.28556.9225.302br.net', +'ad.doubleclick.net.28562.9225.302br.net', +'ad.doubleclick.net.28574.9225.302br.net', +'ad.doubleclick.net.28577.9225.302br.net', +'ad.doubleclick.net.28583.9225.302br.net', +'ad.doubleclick.net.28586.9225.302br.net', +'ad.doubleclick.net.28589.9225.302br.net', +'ad.doubleclick.net.28592.9225.302br.net', +'ad.doubleclick.net.28598.9225.302br.net', +'ad.doubleclick.net.286.6100.302br.net', +'ad.doubleclick.net.28601.9225.302br.net', +'ad.doubleclick.net.28604.9225.302br.net', +'ad.doubleclick.net.28625.9225.302br.net', +'ad.doubleclick.net.28628.9225.302br.net', +'ad.doubleclick.net.28631.9225.302br.net', +'ad.doubleclick.net.28634.9225.302br.net', +'ad.doubleclick.net.28637.9225.302br.net', +'ad.doubleclick.net.28646.9225.302br.net', +'ad.doubleclick.net.28652.9225.302br.net', +'ad.doubleclick.net.28655.9225.302br.net', +'ad.doubleclick.net.28658.9225.302br.net', +'ad.doubleclick.net.28661.9225.302br.net', +'ad.doubleclick.net.28664.9225.302br.net', +'ad.doubleclick.net.28667.9225.302br.net', +'ad.doubleclick.net.28673.9225.302br.net', +'ad.doubleclick.net.28676.9225.302br.net', +'ad.doubleclick.net.28679.9225.302br.net', +'ad.doubleclick.net.28691.9225.302br.net', +'ad.doubleclick.net.28694.9225.302br.net', +'ad.doubleclick.net.28697.9225.302br.net', +'ad.doubleclick.net.28700.9225.302br.net', +'ad.doubleclick.net.28703.9225.302br.net', +'ad.doubleclick.net.28706.9225.302br.net', +'ad.doubleclick.net.28712.9225.302br.net', +'ad.doubleclick.net.28715.9225.302br.net', +'ad.doubleclick.net.28718.9225.302br.net', +'ad.doubleclick.net.28721.9225.302br.net', +'ad.doubleclick.net.28724.9225.302br.net', +'ad.doubleclick.net.28727.9225.302br.net', +'ad.doubleclick.net.28728.9225.302br.net', +'ad.doubleclick.net.28730.9225.302br.net', +'ad.doubleclick.net.28742.9225.302br.net', +'ad.doubleclick.net.28745.9225.302br.net', +'ad.doubleclick.net.28748.9225.302br.net', +'ad.doubleclick.net.28749.9225.302br.net', +'ad.doubleclick.net.28751.9225.302br.net', +'ad.doubleclick.net.28752.9225.302br.net', +'ad.doubleclick.net.28754.9225.302br.net', +'ad.doubleclick.net.28755.9225.302br.net', +'ad.doubleclick.net.28757.9225.302br.net', +'ad.doubleclick.net.28758.9225.302br.net', +'ad.doubleclick.net.28760.9225.302br.net', +'ad.doubleclick.net.28763.9225.302br.net', +'ad.doubleclick.net.28766.9225.302br.net', +'ad.doubleclick.net.28769.9225.302br.net', +'ad.doubleclick.net.28772.9225.302br.net', +'ad.doubleclick.net.28778.9225.302br.net', +'ad.doubleclick.net.28781.9225.302br.net', +'ad.doubleclick.net.28784.9225.302br.net', +'ad.doubleclick.net.28787.9225.302br.net', +'ad.doubleclick.net.28788.9225.302br.net', +'ad.doubleclick.net.28790.9225.302br.net', +'ad.doubleclick.net.28791.9225.302br.net', +'ad.doubleclick.net.28793.9225.302br.net', +'ad.doubleclick.net.28796.9225.302br.net', +'ad.doubleclick.net.28799.9225.302br.net', +'ad.doubleclick.net.28802.9225.302br.net', +'ad.doubleclick.net.28808.9225.302br.net', +'ad.doubleclick.net.28811.9225.302br.net', +'ad.doubleclick.net.28814.9225.302br.net', +'ad.doubleclick.net.28817.9225.302br.net', +'ad.doubleclick.net.28820.9225.302br.net', +'ad.doubleclick.net.28823.9225.302br.net', +'ad.doubleclick.net.28824.9214.302br.net', +'ad.doubleclick.net.28825.9214.302br.net', +'ad.doubleclick.net.28828.9214.302br.net', +'ad.doubleclick.net.28832.9226.302br.net', +'ad.doubleclick.net.28836.9226.302br.net', +'ad.doubleclick.net.28838.9226.302br.net', +'ad.doubleclick.net.28966.9225.302br.net', +'ad.doubleclick.net.28972.9225.302br.net', +'ad.doubleclick.net.28974.9225.302br.net', +'ad.doubleclick.net.28976.9225.302br.net', +'ad.doubleclick.net.28980.9225.302br.net', +'ad.doubleclick.net.28982.9225.302br.net', +'ad.doubleclick.net.28984.9225.302br.net', +'ad.doubleclick.net.28986.9225.302br.net', +'ad.doubleclick.net.28988.9225.302br.net', +'ad.doubleclick.net.29042.9225.302br.net', +'ad.doubleclick.net.29044.9225.302br.net', +'ad.doubleclick.net.29046.9225.302br.net', +'ad.doubleclick.net.29048.9225.302br.net', +'ad.doubleclick.net.29050.9225.302br.net', +'ad.doubleclick.net.29053.9225.302br.net', +'ad.doubleclick.net.29054.9225.302br.net', +'ad.doubleclick.net.29058.9225.302br.net', +'ad.doubleclick.net.29060.9225.302br.net', +'ad.doubleclick.net.29062.9225.302br.net', +'ad.doubleclick.net.29064.9225.302br.net', +'ad.doubleclick.net.29066.9225.302br.net', +'ad.doubleclick.net.29068.9225.302br.net', +'ad.doubleclick.net.29070.9225.302br.net', +'ad.doubleclick.net.29072.9225.302br.net', +'ad.doubleclick.net.29073.9225.302br.net', +'ad.doubleclick.net.29074.9225.302br.net', +'ad.doubleclick.net.29075.9225.302br.net', +'ad.doubleclick.net.29076.9225.302br.net', +'ad.doubleclick.net.29078.9225.302br.net', +'ad.doubleclick.net.29080.9225.302br.net', +'ad.doubleclick.net.29082.9225.302br.net', +'ad.doubleclick.net.29086.9225.302br.net', +'ad.doubleclick.net.29092.9225.302br.net', +'ad.doubleclick.net.29094.9225.302br.net', +'ad.doubleclick.net.29096.9225.302br.net', +'ad.doubleclick.net.29100.9225.302br.net', +'ad.doubleclick.net.29102.9225.302br.net', +'ad.doubleclick.net.29110.9225.302br.net', +'ad.doubleclick.net.29112.9225.302br.net', +'ad.doubleclick.net.29114.9225.302br.net', +'ad.doubleclick.net.29116.9225.302br.net', +'ad.doubleclick.net.29118.9225.302br.net', +'ad.doubleclick.net.29120.9225.302br.net', +'ad.doubleclick.net.29122.9225.302br.net', +'ad.doubleclick.net.29124.9225.302br.net', +'ad.doubleclick.net.29125.9225.302br.net', +'ad.doubleclick.net.29126.9225.302br.net', +'ad.doubleclick.net.29128.9225.302br.net', +'ad.doubleclick.net.29130.9225.302br.net', +'ad.doubleclick.net.29132.9225.302br.net', +'ad.doubleclick.net.29134.9225.302br.net', +'ad.doubleclick.net.29136.9225.302br.net', +'ad.doubleclick.net.29138.9225.302br.net', +'ad.doubleclick.net.29171.9215.302br.net', +'ad.doubleclick.net.29172.9215.302br.net', +'ad.doubleclick.net.29173.9215.302br.net', +'ad.doubleclick.net.29174.9215.302br.net', +'ad.doubleclick.net.29175.9215.302br.net', +'ad.doubleclick.net.29176.9215.302br.net', +'ad.doubleclick.net.29178.9215.302br.net', +'ad.doubleclick.net.29179.9215.302br.net', +'ad.doubleclick.net.29181.9215.302br.net', +'ad.doubleclick.net.29182.9215.302br.net', +'ad.doubleclick.net.29183.9215.302br.net', +'ad.doubleclick.net.29184.9215.302br.net', +'ad.doubleclick.net.29185.9215.302br.net', +'ad.doubleclick.net.29186.9215.302br.net', +'ad.doubleclick.net.29187.9215.302br.net', +'ad.doubleclick.net.29188.9215.302br.net', +'ad.doubleclick.net.29189.9215.302br.net', +'ad.doubleclick.net.29190.9215.302br.net', +'ad.doubleclick.net.29191.9215.302br.net', +'ad.doubleclick.net.29192.9215.302br.net', +'ad.doubleclick.net.29193.9215.302br.net', +'ad.doubleclick.net.29194.9215.302br.net', +'ad.doubleclick.net.29195.9215.302br.net', +'ad.doubleclick.net.29196.9215.302br.net', +'ad.doubleclick.net.29197.9215.302br.net', +'ad.doubleclick.net.29198.9215.302br.net', +'ad.doubleclick.net.29199.9215.302br.net', +'ad.doubleclick.net.29200.9215.302br.net', +'ad.doubleclick.net.29201.9215.302br.net', +'ad.doubleclick.net.29202.9215.302br.net', +'ad.doubleclick.net.29203.9215.302br.net', +'ad.doubleclick.net.29204.9215.302br.net', +'ad.doubleclick.net.29205.9215.302br.net', +'ad.doubleclick.net.29206.9215.302br.net', +'ad.doubleclick.net.29207.9231.302br.net', +'ad.doubleclick.net.29210.9231.302br.net', +'ad.doubleclick.net.29213.9231.302br.net', +'ad.doubleclick.net.29219.9231.302br.net', +'ad.doubleclick.net.29222.9231.302br.net', +'ad.doubleclick.net.29225.9231.302br.net', +'ad.doubleclick.net.29228.9231.302br.net', +'ad.doubleclick.net.29231.9231.302br.net', +'ad.doubleclick.net.29237.9231.302br.net', +'ad.doubleclick.net.29331.9192.302br.net', +'ad.doubleclick.net.29332.9192.302br.net', +'ad.doubleclick.net.29334.9192.302br.net', +'ad.doubleclick.net.29335.9192.302br.net', +'ad.doubleclick.net.29337.9192.302br.net', +'ad.doubleclick.net.29340.9192.302br.net', +'ad.doubleclick.net.29341.9192.302br.net', +'ad.doubleclick.net.29343.9192.302br.net', +'ad.doubleclick.net.29347.9192.302br.net', +'ad.doubleclick.net.29350.9192.302br.net', +'ad.doubleclick.net.29356.9192.302br.net', +'ad.doubleclick.net.29361.9233.302br.net', +'ad.doubleclick.net.29362.9233.302br.net', +'ad.doubleclick.net.29364.9233.302br.net', +'ad.doubleclick.net.29367.9233.302br.net', +'ad.doubleclick.net.29368.9233.302br.net', +'ad.doubleclick.net.29370.9233.302br.net', +'ad.doubleclick.net.29371.9233.302br.net', +'ad.doubleclick.net.29373.9233.302br.net', +'ad.doubleclick.net.29374.9233.302br.net', +'ad.doubleclick.net.29403.9237.302br.net', +'ad.doubleclick.net.29404.9237.302br.net', +'ad.doubleclick.net.29412.9237.302br.net', +'ad.doubleclick.net.29413.9237.302br.net', +'ad.doubleclick.net.29441.9237.302br.net', +'ad.doubleclick.net.29443.9237.302br.net', +'ad.doubleclick.net.29444.9237.302br.net', +'ad.doubleclick.net.29446.9237.302br.net', +'ad.doubleclick.net.29447.9237.302br.net', +'ad.doubleclick.net.29449.9237.302br.net', +'ad.doubleclick.net.29452.9237.302br.net', +'ad.doubleclick.net.29455.9237.302br.net', +'ad.doubleclick.net.29456.9237.302br.net', +'ad.doubleclick.net.29458.9237.302br.net', +'ad.doubleclick.net.29459.9237.302br.net', +'ad.doubleclick.net.29461.9237.302br.net', +'ad.doubleclick.net.29462.9237.302br.net', +'ad.doubleclick.net.29464.9237.302br.net', +'ad.doubleclick.net.29467.9237.302br.net', +'ad.doubleclick.net.29468.9237.302br.net', +'ad.doubleclick.net.29470.9237.302br.net', +'ad.doubleclick.net.29485.9236.302br.net', +'ad.doubleclick.net.29500.9236.302br.net', +'ad.doubleclick.net.29503.9236.302br.net', +'ad.doubleclick.net.29506.9236.302br.net', +'ad.doubleclick.net.29528.9235.302br.net', +'ad.doubleclick.net.29530.9235.302br.net', +'ad.doubleclick.net.29531.9235.302br.net', +'ad.doubleclick.net.29533.9235.302br.net', +'ad.doubleclick.net.29537.9235.302br.net', +'ad.doubleclick.net.29539.9235.302br.net', +'ad.doubleclick.net.29552.9235.302br.net', +'ad.doubleclick.net.29554.9235.302br.net', +'ad.doubleclick.net.29564.9235.302br.net', +'ad.doubleclick.net.29566.9235.302br.net', +'ad.doubleclick.net.29573.9235.302br.net', +'ad.doubleclick.net.29575.9235.302br.net', +'ad.doubleclick.net.29622.9239.302br.net', +'ad.doubleclick.net.29625.9239.302br.net', +'ad.doubleclick.net.29626.9240.302br.net', +'ad.doubleclick.net.29628.9239.302br.net', +'ad.doubleclick.net.29631.9240.302br.net', +'ad.doubleclick.net.29632.9239.302br.net', +'ad.doubleclick.net.29634.9239.302br.net', +'ad.doubleclick.net.29637.9240.302br.net', +'ad.doubleclick.net.29638.9239.302br.net', +'ad.doubleclick.net.29643.9240.302br.net', +'ad.doubleclick.net.29644.9239.302br.net', +'ad.doubleclick.net.29649.9240.302br.net', +'ad.doubleclick.net.29650.9239.302br.net', +'ad.doubleclick.net.29655.9240.302br.net', +'ad.doubleclick.net.29656.9239.302br.net', +'ad.doubleclick.net.29658.9239.302br.net', +'ad.doubleclick.net.29661.9240.302br.net', +'ad.doubleclick.net.29662.9239.302br.net', +'ad.doubleclick.net.29665.9239.302br.net', +'ad.doubleclick.net.29667.9240.302br.net', +'ad.doubleclick.net.29668.9239.302br.net', +'ad.doubleclick.net.29670.9239.302br.net', +'ad.doubleclick.net.29673.9240.302br.net', +'ad.doubleclick.net.29674.9239.302br.net', +'ad.doubleclick.net.29676.9239.302br.net', +'ad.doubleclick.net.29679.9240.302br.net', +'ad.doubleclick.net.29680.9239.302br.net', +'ad.doubleclick.net.29682.9239.302br.net', +'ad.doubleclick.net.29685.9240.302br.net', +'ad.doubleclick.net.29686.9239.302br.net', +'ad.doubleclick.net.29691.9240.302br.net', +'ad.doubleclick.net.29692.9239.302br.net', +'ad.doubleclick.net.29693.9240.302br.net', +'ad.doubleclick.net.29695.9239.302br.net', +'ad.doubleclick.net.29696.9240.302br.net', +'ad.doubleclick.net.29698.9239.302br.net', +'ad.doubleclick.net.29699.9240.302br.net', +'ad.doubleclick.net.29703.9240.302br.net', +'ad.doubleclick.net.29704.9239.302br.net', +'ad.doubleclick.net.29706.9239.302br.net', +'ad.doubleclick.net.29710.9239.302br.net', +'ad.doubleclick.net.29716.9239.302br.net', +'ad.doubleclick.net.29722.9239.302br.net', +'ad.doubleclick.net.29727.9240.302br.net', +'ad.doubleclick.net.29728.9239.302br.net', +'ad.doubleclick.net.29730.9240.302br.net', +'ad.doubleclick.net.29733.9239.302br.net', +'ad.doubleclick.net.29734.9240.302br.net', +'ad.doubleclick.net.29736.9240.302br.net', +'ad.doubleclick.net.29739.9239.302br.net', +'ad.doubleclick.net.29740.9240.302br.net', +'ad.doubleclick.net.29744.9239.302br.net', +'ad.doubleclick.net.29747.9240.302br.net', +'ad.doubleclick.net.29750.9239.302br.net', +'ad.doubleclick.net.29754.9240.302br.net', +'ad.doubleclick.net.29755.9239.302br.net', +'ad.doubleclick.net.29756.9240.302br.net', +'ad.doubleclick.net.29759.9240.302br.net', +'ad.doubleclick.net.29761.9240.302br.net', +'ad.doubleclick.net.29762.9239.302br.net', +'ad.doubleclick.net.29765.9240.302br.net', +'ad.doubleclick.net.29767.9240.302br.net', +'ad.doubleclick.net.29768.9239.302br.net', +'ad.doubleclick.net.29771.9240.302br.net', +'ad.doubleclick.net.29773.9240.302br.net', +'ad.doubleclick.net.29774.9239.302br.net', +'ad.doubleclick.net.29777.9240.302br.net', +'ad.doubleclick.net.29779.9240.302br.net', +'ad.doubleclick.net.29780.9239.302br.net', +'ad.doubleclick.net.29783.9240.302br.net', +'ad.doubleclick.net.29785.9240.302br.net', +'ad.doubleclick.net.29786.9239.302br.net', +'ad.doubleclick.net.29789.9240.302br.net', +'ad.doubleclick.net.29793.9239.302br.net', +'ad.doubleclick.net.29794.9240.302br.net', +'ad.doubleclick.net.29796.9240.302br.net', +'ad.doubleclick.net.29800.9240.302br.net', +'ad.doubleclick.net.29803.9240.302br.net', +'ad.doubleclick.net.29806.9240.302br.net', +'ad.doubleclick.net.29809.9240.302br.net', +'ad.doubleclick.net.29812.9240.302br.net', +'ad.doubleclick.net.29815.9240.302br.net', +'ad.doubleclick.net.29818.9240.302br.net', +'ad.doubleclick.net.29821.9240.302br.net', +'ad.doubleclick.net.29824.9240.302br.net', +'ad.doubleclick.net.29825.9240.302br.net', +'ad.doubleclick.net.29827.9240.302br.net', +'ad.doubleclick.net.29828.9240.302br.net', +'ad.doubleclick.net.29830.9240.302br.net', +'ad.doubleclick.net.29831.9240.302br.net', +'ad.doubleclick.net.29833.9240.302br.net', +'ad.doubleclick.net.29836.9240.302br.net', +'ad.doubleclick.net.29839.9240.302br.net', +'ad.doubleclick.net.29840.9240.302br.net', +'ad.doubleclick.net.29842.9240.302br.net', +'ad.doubleclick.net.29843.9240.302br.net', +'ad.doubleclick.net.29845.9240.302br.net', +'ad.doubleclick.net.29846.9240.302br.net', +'ad.doubleclick.net.29848.9240.302br.net', +'ad.doubleclick.net.29849.9240.302br.net', +'ad.doubleclick.net.29851.9240.302br.net', +'ad.doubleclick.net.29854.9240.302br.net', +'ad.doubleclick.net.29855.9240.302br.net', +'ad.doubleclick.net.29857.9240.302br.net', +'ad.doubleclick.net.29860.9240.302br.net', +'ad.doubleclick.net.29861.9240.302br.net', +'ad.doubleclick.net.29863.9240.302br.net', +'ad.doubleclick.net.29864.9240.302br.net', +'ad.doubleclick.net.29866.9240.302br.net', +'ad.doubleclick.net.29869.9240.302br.net', +'ad.doubleclick.net.29872.9240.302br.net', +'ad.doubleclick.net.29875.9240.302br.net', +'ad.doubleclick.net.29878.9240.302br.net', +'ad.doubleclick.net.29879.9240.302br.net', +'ad.doubleclick.net.29881.9240.302br.net', +'ad.doubleclick.net.29882.9240.302br.net', +'ad.doubleclick.net.29884.9240.302br.net', +'ad.doubleclick.net.29885.9240.302br.net', +'ad.doubleclick.net.29887.9240.302br.net', +'ad.doubleclick.net.29888.9240.302br.net', +'ad.doubleclick.net.29890.9240.302br.net', +'ad.doubleclick.net.29893.9240.302br.net', +'ad.doubleclick.net.29896.9240.302br.net', +'ad.doubleclick.net.29897.9240.302br.net', +'ad.doubleclick.net.29899.9240.302br.net', +'ad.doubleclick.net.29913.9124.302br.net', +'ad.doubleclick.net.29940.9124.302br.net', +'ad.doubleclick.net.29946.9124.302br.net', +'ad.doubleclick.net.29947.9124.302br.net', +'ad.doubleclick.net.29958.9124.302br.net', +'ad.doubleclick.net.29961.9124.302br.net', +'ad.doubleclick.net.29962.9124.302br.net', +'ad.doubleclick.net.29973.9124.302br.net', +'ad.doubleclick.net.29982.9124.302br.net', +'ad.doubleclick.net.29985.9124.302br.net', +'ad.doubleclick.net.29988.9124.302br.net', +'ad.doubleclick.net.29991.9124.302br.net', +'ad.doubleclick.net.30003.9124.302br.net', +'ad.doubleclick.net.30006.9124.302br.net', +'ad.doubleclick.net.30027.9124.302br.net', +'ad.doubleclick.net.30039.9124.302br.net', +'ad.doubleclick.net.30042.9124.302br.net', +'ad.doubleclick.net.30072.9124.302br.net', +'ad.doubleclick.net.30075.9124.302br.net', +'ad.doubleclick.net.30351.9240.302br.net', +'ad.doubleclick.net.30353.9240.302br.net', +'ad.doubleclick.net.30362.9240.302br.net', +'ad.doubleclick.net.30364.9240.302br.net', +'ad.doubleclick.net.30373.9240.302br.net', +'ad.doubleclick.net.30375.9240.302br.net', +'ad.doubleclick.net.30376.9240.302br.net', +'ad.doubleclick.net.30378.9240.302br.net', +'ad.doubleclick.net.30380.9240.302br.net', +'ad.doubleclick.net.30382.9240.302br.net', +'ad.doubleclick.net.30386.9240.302br.net', +'ad.doubleclick.net.30388.9240.302br.net', +'ad.doubleclick.net.30391.9240.302br.net', +'ad.doubleclick.net.30392.9240.302br.net', +'ad.doubleclick.net.30396.9240.302br.net', +'ad.doubleclick.net.30398.9240.302br.net', +'ad.doubleclick.net.30481.9240.302br.net', +'ad.doubleclick.net.30483.9240.302br.net', +'ad.doubleclick.net.30486.9240.302br.net', +'ad.doubleclick.net.30488.9240.302br.net', +'ad.doubleclick.net.30718.9240.302br.net', +'ad.doubleclick.net.30720.9240.302br.net', +'ad.doubleclick.net.30730.9240.302br.net', +'ad.doubleclick.net.30732.9240.302br.net', +'ad.doubleclick.net.30744.9240.302br.net', +'ad.doubleclick.net.30745.9240.302br.net', +'ad.doubleclick.net.30749.9240.302br.net', +'ad.doubleclick.net.30751.9240.302br.net', +'ad.doubleclick.net.30761.9240.302br.net', +'ad.doubleclick.net.30763.9240.302br.net', +'ad.doubleclick.net.30766.9240.302br.net', +'ad.doubleclick.net.30773.9240.302br.net', +'ad.doubleclick.net.30774.9240.302br.net', +'ad.doubleclick.net.30776.9240.302br.net', +'ad.doubleclick.net.30794.9240.302br.net', +'ad.doubleclick.net.30825.9240.302br.net', +'ad.doubleclick.net.30827.9240.302br.net', +'ad.doubleclick.net.30838.9240.302br.net', +'ad.doubleclick.net.30840.9240.302br.net', +'ad.doubleclick.net.30844.9240.302br.net', +'ad.doubleclick.net.30846.9240.302br.net', +'ad.doubleclick.net.30850.9240.302br.net', +'ad.doubleclick.net.30853.9240.302br.net', +'ad.doubleclick.net.30863.9240.302br.net', +'ad.doubleclick.net.30865.9240.302br.net', +'ad.doubleclick.net.30869.9240.302br.net', +'ad.doubleclick.net.30871.9240.302br.net', +'ad.doubleclick.net.30875.9240.302br.net', +'ad.doubleclick.net.30877.9240.302br.net', +'ad.doubleclick.net.30893.9240.302br.net', +'ad.doubleclick.net.30895.9240.302br.net', +'ad.doubleclick.net.30899.9240.302br.net', +'ad.doubleclick.net.30901.9240.302br.net', +'ad.doubleclick.net.30918.9240.302br.net', +'ad.doubleclick.net.30930.9240.302br.net', +'ad.doubleclick.net.30932.9240.302br.net', +'ad.doubleclick.net.30936.9240.302br.net', +'ad.doubleclick.net.30938.9240.302br.net', +'ad.doubleclick.net.30949.9240.302br.net', +'ad.doubleclick.net.30951.9240.302br.net', +'ad.doubleclick.net.30961.9240.302br.net', +'ad.doubleclick.net.30963.9240.302br.net', +'ad.doubleclick.net.30973.9240.302br.net', +'ad.doubleclick.net.30975.9240.302br.net', +'ad.doubleclick.net.30978.9240.302br.net', +'ad.doubleclick.net.30980.9240.302br.net', +'ad.doubleclick.net.30984.9240.302br.net', +'ad.doubleclick.net.30985.9240.302br.net', +'ad.doubleclick.net.30995.9240.302br.net', +'ad.doubleclick.net.30997.9240.302br.net', +'ad.doubleclick.net.31002.9240.302br.net', +'ad.doubleclick.net.31005.9240.302br.net', +'ad.doubleclick.net.31009.9240.302br.net', +'ad.doubleclick.net.31011.9240.302br.net', +'ad.doubleclick.net.31020.9240.302br.net', +'ad.doubleclick.net.31021.9240.302br.net', +'ad.doubleclick.net.31023.9240.302br.net', +'ad.doubleclick.net.31027.9240.302br.net', +'ad.doubleclick.net.31029.9240.302br.net', +'ad.doubleclick.net.31033.9240.302br.net', +'ad.doubleclick.net.31035.9240.302br.net', +'ad.doubleclick.net.31039.9240.302br.net', +'ad.doubleclick.net.31041.9240.302br.net', +'ad.doubleclick.net.31045.9240.302br.net', +'ad.doubleclick.net.31064.9240.302br.net', +'ad.doubleclick.net.31065.9240.302br.net', +'ad.doubleclick.net.31094.9240.302br.net', +'ad.doubleclick.net.31096.9240.302br.net', +'ad.doubleclick.net.31124.9240.302br.net', +'ad.doubleclick.net.31126.9240.302br.net', +'ad.doubleclick.net.31134.9240.302br.net', +'ad.doubleclick.net.31136.9240.302br.net', +'ad.doubleclick.net.31138.9240.302br.net', +'ad.doubleclick.net.31142.9240.302br.net', +'ad.doubleclick.net.31144.9240.302br.net', +'ad.doubleclick.net.31325.9240.302br.net', +'ad.doubleclick.net.31327.9240.302br.net', +'ad.doubleclick.net.31331.9240.302br.net', +'ad.doubleclick.net.31333.9240.302br.net', +'ad.doubleclick.net.31337.9240.302br.net', +'ad.doubleclick.net.31339.9240.302br.net', +'ad.doubleclick.net.31344.9240.302br.net', +'ad.doubleclick.net.31345.9240.302br.net', +'ad.doubleclick.net.31348.9240.302br.net', +'ad.doubleclick.net.31350.9240.302br.net', +'ad.doubleclick.net.31352.9240.302br.net', +'ad.doubleclick.net.31358.9240.302br.net', +'ad.doubleclick.net.31364.9240.302br.net', +'ad.doubleclick.net.31371.9240.302br.net', +'ad.doubleclick.net.31377.9240.302br.net', +'ad.doubleclick.net.31383.9240.302br.net', +'ad.doubleclick.net.31389.9240.302br.net', +'ad.doubleclick.net.31394.9240.302br.net', +'ad.doubleclick.net.31401.9240.302br.net', +'ad.doubleclick.net.31408.9240.302br.net', +'ad.doubleclick.net.31411.9240.302br.net', +'ad.doubleclick.net.31415.9240.302br.net', +'ad.doubleclick.net.31417.9240.302br.net', +'ad.doubleclick.net.31419.9240.302br.net', +'ad.doubleclick.net.31421.9240.302br.net', +'ad.doubleclick.net.31445.9240.302br.net', +'ad.doubleclick.net.31447.9240.302br.net', +'ad.doubleclick.net.31450.9240.302br.net', +'ad.doubleclick.net.31456.9240.302br.net', +'ad.doubleclick.net.31458.9240.302br.net', +'ad.doubleclick.net.31462.9240.302br.net', +'ad.doubleclick.net.31464.9240.302br.net', +'ad.doubleclick.net.31468.9240.302br.net', +'ad.doubleclick.net.31470.9240.302br.net', +'ad.doubleclick.net.31474.9240.302br.net', +'ad.doubleclick.net.31476.9240.302br.net', +'ad.doubleclick.net.31480.9240.302br.net', +'ad.doubleclick.net.31482.9240.302br.net', +'ad.doubleclick.net.31485.9240.302br.net', +'ad.doubleclick.net.31487.9240.302br.net', +'ad.doubleclick.net.31490.9240.302br.net', +'ad.doubleclick.net.31495.9240.302br.net', +'ad.doubleclick.net.31501.9240.302br.net', +'ad.doubleclick.net.31507.9240.302br.net', +'ad.doubleclick.net.31509.9240.302br.net', +'ad.doubleclick.net.31513.9240.302br.net', +'ad.doubleclick.net.31519.9240.302br.net', +'ad.doubleclick.net.31521.9240.302br.net', +'ad.doubleclick.net.31524.9240.302br.net', +'ad.doubleclick.net.31526.9240.302br.net', +'ad.doubleclick.net.31530.9240.302br.net', +'ad.doubleclick.net.31532.9240.302br.net', +'ad.doubleclick.net.31536.9240.302br.net', +'ad.doubleclick.net.31538.9240.302br.net', +'ad.doubleclick.net.31542.9240.302br.net', +'ad.doubleclick.net.31548.9240.302br.net', +'ad.doubleclick.net.31550.9240.302br.net', +'ad.doubleclick.net.31554.9240.302br.net', +'ad.doubleclick.net.31941.9226.302br.net', +'ad.doubleclick.net.31944.9226.302br.net', +'ad.doubleclick.net.31945.9226.302br.net', +'ad.doubleclick.net.31947.9226.302br.net', +'ad.doubleclick.net.31950.9226.302br.net', +'ad.doubleclick.net.31951.9226.302br.net', +'ad.doubleclick.net.31953.9226.302br.net', +'ad.doubleclick.net.31954.9226.302br.net', +'ad.doubleclick.net.31972.9242.302br.net', +'ad.doubleclick.net.31973.9242.302br.net', +'ad.doubleclick.net.31974.9242.302br.net', +'ad.doubleclick.net.31975.9242.302br.net', +'ad.doubleclick.net.31978.9242.302br.net', +'ad.doubleclick.net.31981.9242.302br.net', +'ad.doubleclick.net.31987.9242.302br.net', +'ad.doubleclick.net.31990.9242.302br.net', +'ad.doubleclick.net.32002.9242.302br.net', +'ad.doubleclick.net.32005.9242.302br.net', +'ad.doubleclick.net.32008.9242.302br.net', +'ad.doubleclick.net.32011.9242.302br.net', +'ad.doubleclick.net.32014.9242.302br.net', +'ad.doubleclick.net.32017.9242.302br.net', +'ad.doubleclick.net.32020.9242.302br.net', +'ad.doubleclick.net.32023.9242.302br.net', +'ad.doubleclick.net.32026.9242.302br.net', +'ad.doubleclick.net.32029.9242.302br.net', +'ad.doubleclick.net.32032.9242.302br.net', +'ad.doubleclick.net.32041.9242.302br.net', +'ad.doubleclick.net.32045.9242.302br.net', +'ad.doubleclick.net.32047.9242.302br.net', +'ad.doubleclick.net.32048.9242.302br.net', +'ad.doubleclick.net.32050.9242.302br.net', +'ad.doubleclick.net.32053.9242.302br.net', +'ad.doubleclick.net.32054.9242.302br.net', +'ad.doubleclick.net.32056.9242.302br.net', +'ad.doubleclick.net.32057.9242.302br.net', +'ad.doubleclick.net.32059.9242.302br.net', +'ad.doubleclick.net.32062.9242.302br.net', +'ad.doubleclick.net.32065.9242.302br.net', +'ad.doubleclick.net.32071.9242.302br.net', +'ad.doubleclick.net.32074.9242.302br.net', +'ad.doubleclick.net.32075.9242.302br.net', +'ad.doubleclick.net.32077.9242.302br.net', +'ad.doubleclick.net.32080.9242.302br.net', +'ad.doubleclick.net.32110.9242.302br.net', +'ad.doubleclick.net.32113.9242.302br.net', +'ad.doubleclick.net.32119.9242.302br.net', +'ad.doubleclick.net.32122.9242.302br.net', +'ad.doubleclick.net.32125.9242.302br.net', +'ad.doubleclick.net.32126.9242.302br.net', +'ad.doubleclick.net.32128.9242.302br.net', +'ad.doubleclick.net.32131.9242.302br.net', +'ad.doubleclick.net.32137.9242.302br.net', +'ad.doubleclick.net.32140.9242.302br.net', +'ad.doubleclick.net.32141.9242.302br.net', +'ad.doubleclick.net.32143.9242.302br.net', +'ad.doubleclick.net.32146.9242.302br.net', +'ad.doubleclick.net.32149.9242.302br.net', +'ad.doubleclick.net.32152.9242.302br.net', +'ad.doubleclick.net.32155.9242.302br.net', +'ad.doubleclick.net.32158.9242.302br.net', +'ad.doubleclick.net.32161.9242.302br.net', +'ad.doubleclick.net.32164.9242.302br.net', +'ad.doubleclick.net.32176.9242.302br.net', +'ad.doubleclick.net.32177.9242.302br.net', +'ad.doubleclick.net.32179.9242.302br.net', +'ad.doubleclick.net.32180.9242.302br.net', +'ad.doubleclick.net.32182.9242.302br.net', +'ad.doubleclick.net.32206.9242.302br.net', +'ad.doubleclick.net.32212.9242.302br.net', +'ad.doubleclick.net.32221.9242.302br.net', +'ad.doubleclick.net.32224.9242.302br.net', +'ad.doubleclick.net.32227.9242.302br.net', +'ad.doubleclick.net.32230.9242.302br.net', +'ad.doubleclick.net.32242.9242.302br.net', +'ad.doubleclick.net.32245.9242.302br.net', +'ad.doubleclick.net.32263.9199.302br.net', +'ad.doubleclick.net.32264.9199.302br.net', +'ad.doubleclick.net.32266.9199.302br.net', +'ad.doubleclick.net.32269.9199.302br.net', +'ad.doubleclick.net.32270.9199.302br.net', +'ad.doubleclick.net.32272.9199.302br.net', +'ad.doubleclick.net.32273.9199.302br.net', +'ad.doubleclick.net.32299.9210.302br.net', +'ad.doubleclick.net.32300.9210.302br.net', +'ad.doubleclick.net.32302.9210.302br.net', +'ad.doubleclick.net.32303.9210.302br.net', +'ad.doubleclick.net.32305.9210.302br.net', +'ad.doubleclick.net.32306.9210.302br.net', +'ad.doubleclick.net.32308.9210.302br.net', +'ad.doubleclick.net.32309.9210.302br.net', +'ad.doubleclick.net.32317.9239.302br.net', +'ad.doubleclick.net.32318.9239.302br.net', +'ad.doubleclick.net.32320.9239.302br.net', +'ad.doubleclick.net.32321.9239.302br.net', +'ad.doubleclick.net.32395.9239.302br.net', +'ad.doubleclick.net.32396.9239.302br.net', +'ad.doubleclick.net.32412.9239.302br.net', +'ad.doubleclick.net.32414.9239.302br.net', +'ad.doubleclick.net.32417.9239.302br.net', +'ad.doubleclick.net.32418.9239.302br.net', +'ad.doubleclick.net.32420.9239.302br.net', +'ad.doubleclick.net.32428.9239.302br.net', +'ad.doubleclick.net.32431.9239.302br.net', +'ad.doubleclick.net.32443.9239.302br.net', +'ad.doubleclick.net.32446.9239.302br.net', +'ad.doubleclick.net.32452.9239.302br.net', +'ad.doubleclick.net.32458.9239.302br.net', +'ad.doubleclick.net.32485.9239.302br.net', +'ad.doubleclick.net.32605.9239.302br.net', +'ad.doubleclick.net.32716.9240.302br.net', +'ad.doubleclick.net.32719.9240.302br.net', +'ad.doubleclick.net.32722.9240.302br.net', +'ad.doubleclick.net.32821.9240.302br.net', +'ad.doubleclick.net.32822.9240.302br.net', +'ad.doubleclick.net.32827.9240.302br.net', +'ad.doubleclick.net.32828.9240.302br.net', +'ad.doubleclick.net.32840.9240.302br.net', +'ad.doubleclick.net.32843.9240.302br.net', +'ad.doubleclick.net.32846.9240.302br.net', +'ad.doubleclick.net.32887.9240.302br.net', +'ad.doubleclick.net.32896.9240.302br.net', +'ad.doubleclick.net.32899.9240.302br.net', +'ad.doubleclick.net.32911.9240.302br.net', +'ad.doubleclick.net.32944.9240.302br.net', +'ad.doubleclick.net.32945.9240.302br.net', +'ad.doubleclick.net.32947.9240.302br.net', +'ad.doubleclick.net.32948.9240.302br.net', +'ad.doubleclick.net.32949.9240.302br.net', +'ad.doubleclick.net.32950.9240.302br.net', +'ad.doubleclick.net.32951.9240.302br.net', +'ad.doubleclick.net.32953.9240.302br.net', +'ad.doubleclick.net.32954.9240.302br.net', +'ad.doubleclick.net.32956.9240.302br.net', +'ad.doubleclick.net.32957.9240.302br.net', +'ad.doubleclick.net.32959.9240.302br.net', +'ad.doubleclick.net.32960.9240.302br.net', +'ad.doubleclick.net.32962.9240.302br.net', +'ad.doubleclick.net.32963.9240.302br.net', +'ad.doubleclick.net.32965.9240.302br.net', +'ad.doubleclick.net.32966.9240.302br.net', +'ad.doubleclick.net.32968.9240.302br.net', +'ad.doubleclick.net.32969.9240.302br.net', +'ad.doubleclick.net.32971.9240.302br.net', +'ad.doubleclick.net.32972.9240.302br.net', +'ad.doubleclick.net.32974.9240.302br.net', +'ad.doubleclick.net.32975.9240.302br.net', +'ad.doubleclick.net.32977.9240.302br.net', +'ad.doubleclick.net.32978.9240.302br.net', +'ad.doubleclick.net.32985.9240.302br.net', +'ad.doubleclick.net.32986.9240.302br.net', +'ad.doubleclick.net.32987.9240.302br.net', +'ad.doubleclick.net.32994.9240.302br.net', +'ad.doubleclick.net.32995.9240.302br.net', +'ad.doubleclick.net.32996.9240.302br.net', +'ad.doubleclick.net.33019.9240.302br.net', +'ad.doubleclick.net.33020.9240.302br.net', +'ad.doubleclick.net.33021.9240.302br.net', +'ad.doubleclick.net.33022.9240.302br.net', +'ad.doubleclick.net.33023.9240.302br.net', +'ad.doubleclick.net.33025.9240.302br.net', +'ad.doubleclick.net.33026.9240.302br.net', +'ad.doubleclick.net.33028.9240.302br.net', +'ad.doubleclick.net.33029.9240.302br.net', +'ad.doubleclick.net.33031.9240.302br.net', +'ad.doubleclick.net.33032.9240.302br.net', +'ad.doubleclick.net.33040.9240.302br.net', +'ad.doubleclick.net.33041.9240.302br.net', +'ad.doubleclick.net.33046.9240.302br.net', +'ad.doubleclick.net.33047.9240.302br.net', +'ad.doubleclick.net.33048.9240.302br.net', +'ad.doubleclick.net.33049.9240.302br.net', +'ad.doubleclick.net.33050.9240.302br.net', +'ad.doubleclick.net.33052.9240.302br.net', +'ad.doubleclick.net.33053.9240.302br.net', +'ad.doubleclick.net.33054.9240.302br.net', +'ad.doubleclick.net.33055.9240.302br.net', +'ad.doubleclick.net.33056.9240.302br.net', +'ad.doubleclick.net.33067.9239.302br.net', +'ad.doubleclick.net.33068.9239.302br.net', +'ad.doubleclick.net.33073.9239.302br.net', +'ad.doubleclick.net.33075.9239.302br.net', +'ad.doubleclick.net.33079.9239.302br.net', +'ad.doubleclick.net.33081.9239.302br.net', +'ad.doubleclick.net.33091.9240.302br.net', +'ad.doubleclick.net.33093.9240.302br.net', +'ad.doubleclick.net.33095.9240.302br.net', +'ad.doubleclick.net.33099.9240.302br.net', +'ad.doubleclick.net.33101.9240.302br.net', +'ad.doubleclick.net.33110.9240.302br.net', +'ad.doubleclick.net.33111.9240.302br.net', +'ad.doubleclick.net.33113.9240.302br.net', +'ad.doubleclick.net.33115.9239.302br.net', +'ad.doubleclick.net.33118.9240.302br.net', +'ad.doubleclick.net.33119.9240.302br.net', +'ad.doubleclick.net.33124.9240.302br.net', +'ad.doubleclick.net.33125.9240.302br.net', +'ad.doubleclick.net.33127.9240.302br.net', +'ad.doubleclick.net.33128.9239.302br.net', +'ad.doubleclick.net.33129.9240.302br.net', +'ad.doubleclick.net.33131.9240.302br.net', +'ad.doubleclick.net.33134.9239.302br.net', +'ad.doubleclick.net.33135.9240.302br.net', +'ad.doubleclick.net.33136.9239.302br.net', +'ad.doubleclick.net.33137.9240.302br.net', +'ad.doubleclick.net.33138.9239.302br.net', +'ad.doubleclick.net.33141.9239.302br.net', +'ad.doubleclick.net.33142.9240.302br.net', +'ad.doubleclick.net.33143.9240.302br.net', +'ad.doubleclick.net.33144.9239.302br.net', +'ad.doubleclick.net.33147.9239.302br.net', +'ad.doubleclick.net.33148.9240.302br.net', +'ad.doubleclick.net.33149.9240.302br.net', +'ad.doubleclick.net.33151.9240.302br.net', +'ad.doubleclick.net.33152.9240.302br.net', +'ad.doubleclick.net.33154.9240.302br.net', +'ad.doubleclick.net.33155.9240.302br.net', +'ad.doubleclick.net.33157.9240.302br.net', +'ad.doubleclick.net.33158.9240.302br.net', +'ad.doubleclick.net.33160.9240.302br.net', +'ad.doubleclick.net.33161.9240.302br.net', +'ad.doubleclick.net.33166.9240.302br.net', +'ad.doubleclick.net.33167.9240.302br.net', +'ad.doubleclick.net.33181.9172.302br.net', +'ad.doubleclick.net.33184.9172.302br.net', +'ad.doubleclick.net.33187.9172.302br.net', +'ad.doubleclick.net.33190.9172.302br.net', +'ad.doubleclick.net.33193.9172.302br.net', +'ad.doubleclick.net.33194.9172.302br.net', +'ad.doubleclick.net.33196.9172.302br.net', +'ad.doubleclick.net.33197.9172.302br.net', +'ad.doubleclick.net.33202.9172.302br.net', +'ad.doubleclick.net.33205.9172.302br.net', +'ad.doubleclick.net.33208.9172.302br.net', +'ad.doubleclick.net.33211.9172.302br.net', +'ad.doubleclick.net.33217.9172.302br.net', +'ad.doubleclick.net.33220.9172.302br.net', +'ad.doubleclick.net.33223.9172.302br.net', +'ad.doubleclick.net.33226.9172.302br.net', +'ad.doubleclick.net.33229.9172.302br.net', +'ad.doubleclick.net.33230.9172.302br.net', +'ad.doubleclick.net.33232.9172.302br.net', +'ad.doubleclick.net.33235.9172.302br.net', +'ad.doubleclick.net.33236.9172.302br.net', +'ad.doubleclick.net.33238.9172.302br.net', +'ad.doubleclick.net.33239.9172.302br.net', +'ad.doubleclick.net.33241.9172.302br.net', +'ad.doubleclick.net.33242.9172.302br.net', +'ad.doubleclick.net.33244.9172.302br.net', +'ad.doubleclick.net.33247.9172.302br.net', +'ad.doubleclick.net.33250.9172.302br.net', +'ad.doubleclick.net.33253.9172.302br.net', +'ad.doubleclick.net.33527.9212.302br.net', +'ad.doubleclick.net.33530.9212.302br.net', +'ad.doubleclick.net.33533.9212.302br.net', +'ad.doubleclick.net.33536.9212.302br.net', +'ad.doubleclick.net.33539.9212.302br.net', +'ad.doubleclick.net.33542.9212.302br.net', +'ad.doubleclick.net.33545.9212.302br.net', +'ad.doubleclick.net.33548.9212.302br.net', +'ad.doubleclick.net.33551.9212.302br.net', +'ad.doubleclick.net.33556.9212.302br.net', +'ad.doubleclick.net.33559.9212.302br.net', +'ad.doubleclick.net.33562.9212.302br.net', +'ad.doubleclick.net.33564.9212.302br.net', +'ad.doubleclick.net.33565.9212.302br.net', +'ad.doubleclick.net.33567.9212.302br.net', +'ad.doubleclick.net.33568.9212.302br.net', +'ad.doubleclick.net.33570.9212.302br.net', +'ad.doubleclick.net.33571.9212.302br.net', +'ad.doubleclick.net.33572.9212.302br.net', +'ad.doubleclick.net.33573.9212.302br.net', +'ad.doubleclick.net.33574.9212.302br.net', +'ad.doubleclick.net.33576.9212.302br.net', +'ad.doubleclick.net.33577.9212.302br.net', +'ad.doubleclick.net.33578.9212.302br.net', +'ad.doubleclick.net.33579.9212.302br.net', +'ad.doubleclick.net.33580.9212.302br.net', +'ad.doubleclick.net.33605.9249.302br.net', +'ad.doubleclick.net.33606.9249.302br.net', +'ad.doubleclick.net.33607.9249.302br.net', +'ad.doubleclick.net.33608.9249.302br.net', +'ad.doubleclick.net.33609.9249.302br.net', +'ad.doubleclick.net.33610.9249.302br.net', +'ad.doubleclick.net.33731.9250.302br.net', +'ad.doubleclick.net.33734.9250.302br.net', +'ad.doubleclick.net.33737.9250.302br.net', +'ad.doubleclick.net.33740.9250.302br.net', +'ad.doubleclick.net.33743.9250.302br.net', +'ad.doubleclick.net.33746.9250.302br.net', +'ad.doubleclick.net.33749.9250.302br.net', +'ad.doubleclick.net.33752.9250.302br.net', +'ad.doubleclick.net.33755.9250.302br.net', +'ad.doubleclick.net.33758.9250.302br.net', +'ad.doubleclick.net.33761.9250.302br.net', +'ad.doubleclick.net.33764.9250.302br.net', +'ad.doubleclick.net.33767.9250.302br.net', +'ad.doubleclick.net.33770.9250.302br.net', +'ad.doubleclick.net.33773.9250.302br.net', +'ad.doubleclick.net.33776.9250.302br.net', +'ad.doubleclick.net.33779.9250.302br.net', +'ad.doubleclick.net.33782.9250.302br.net', +'ad.doubleclick.net.33785.9250.302br.net', +'ad.doubleclick.net.33788.9250.302br.net', +'ad.doubleclick.net.33791.9250.302br.net', +'ad.doubleclick.net.33794.9250.302br.net', +'ad.doubleclick.net.33797.9250.302br.net', +'ad.doubleclick.net.33800.9250.302br.net', +'ad.doubleclick.net.33803.9250.302br.net', +'ad.doubleclick.net.33806.9250.302br.net', +'ad.doubleclick.net.33809.9250.302br.net', +'ad.doubleclick.net.33812.9250.302br.net', +'ad.doubleclick.net.33815.9250.302br.net', +'ad.doubleclick.net.33818.9250.302br.net', +'ad.doubleclick.net.33821.9250.302br.net', +'ad.doubleclick.net.33824.9250.302br.net', +'ad.doubleclick.net.33825.9250.302br.net', +'ad.doubleclick.net.33826.9250.302br.net', +'ad.doubleclick.net.33827.9250.302br.net', +'ad.doubleclick.net.33828.9250.302br.net', +'ad.doubleclick.net.33829.9250.302br.net', +'ad.doubleclick.net.33830.9250.302br.net', +'ad.doubleclick.net.33831.9250.302br.net', +'ad.doubleclick.net.33832.9250.302br.net', +'ad.doubleclick.net.33833.9250.302br.net', +'ad.doubleclick.net.33834.9250.302br.net', +'ad.doubleclick.net.33835.9250.302br.net', +'ad.doubleclick.net.33836.9250.302br.net', +'ad.doubleclick.net.33837.9250.302br.net', +'ad.doubleclick.net.33838.9250.302br.net', +'ad.doubleclick.net.33839.9250.302br.net', +'ad.doubleclick.net.33840.9250.302br.net', +'ad.doubleclick.net.33841.9250.302br.net', +'ad.doubleclick.net.33842.9250.302br.net', +'ad.doubleclick.net.33843.9250.302br.net', +'ad.doubleclick.net.33844.9250.302br.net', +'ad.doubleclick.net.33845.9250.302br.net', +'ad.doubleclick.net.33846.9250.302br.net', +'ad.doubleclick.net.33847.9250.302br.net', +'ad.doubleclick.net.33848.9250.302br.net', +'ad.doubleclick.net.33849.9250.302br.net', +'ad.doubleclick.net.33850.9250.302br.net', +'ad.doubleclick.net.33851.9250.302br.net', +'ad.doubleclick.net.33852.9250.302br.net', +'ad.doubleclick.net.33853.9250.302br.net', +'ad.doubleclick.net.33854.9250.302br.net', +'ad.doubleclick.net.33855.9250.302br.net', +'ad.doubleclick.net.33856.9250.302br.net', +'ad.doubleclick.net.33857.9250.302br.net', +'ad.doubleclick.net.33858.9250.302br.net', +'ad.doubleclick.net.33859.9250.302br.net', +'ad.doubleclick.net.33860.9250.302br.net', +'ad.doubleclick.net.34320.9225.302br.net', +'ad.doubleclick.net.34322.9225.302br.net', +'ad.doubleclick.net.34324.9225.302br.net', +'ad.doubleclick.net.34325.9225.302br.net', +'ad.doubleclick.net.34326.9225.302br.net', +'ad.doubleclick.net.34327.9225.302br.net', +'ad.doubleclick.net.34328.9225.302br.net', +'ad.doubleclick.net.34330.9225.302br.net', +'ad.doubleclick.net.34331.9225.302br.net', +'ad.doubleclick.net.34332.9225.302br.net', +'ad.doubleclick.net.34333.9225.302br.net', +'ad.doubleclick.net.34334.9225.302br.net', +'ad.doubleclick.net.34335.9225.302br.net', +'ad.doubleclick.net.34336.9225.302br.net', +'ad.doubleclick.net.34337.9225.302br.net', +'ad.doubleclick.net.34338.9225.302br.net', +'ad.doubleclick.net.34339.9225.302br.net', +'ad.doubleclick.net.34340.9225.302br.net', +'ad.doubleclick.net.34341.9225.302br.net', +'ad.doubleclick.net.34342.9225.302br.net', +'ad.doubleclick.net.34344.9225.302br.net', +'ad.doubleclick.net.34346.9225.302br.net', +'ad.doubleclick.net.34348.9225.302br.net', +'ad.doubleclick.net.34350.9225.302br.net', +'ad.doubleclick.net.34354.9225.302br.net', +'ad.doubleclick.net.34356.9225.302br.net', +'ad.doubleclick.net.34358.9225.302br.net', +'ad.doubleclick.net.34360.9225.302br.net', +'ad.doubleclick.net.34361.9225.302br.net', +'ad.doubleclick.net.34362.9225.302br.net', +'ad.doubleclick.net.34363.9225.302br.net', +'ad.doubleclick.net.34364.9225.302br.net', +'ad.doubleclick.net.34365.9225.302br.net', +'ad.doubleclick.net.34366.9225.302br.net', +'ad.doubleclick.net.34378.9225.302br.net', +'ad.doubleclick.net.34380.9225.302br.net', +'ad.doubleclick.net.34382.9225.302br.net', +'ad.doubleclick.net.34384.9225.302br.net', +'ad.doubleclick.net.34386.9225.302br.net', +'ad.doubleclick.net.34388.9225.302br.net', +'ad.doubleclick.net.34390.9225.302br.net', +'ad.doubleclick.net.34394.9225.302br.net', +'ad.doubleclick.net.34396.9225.302br.net', +'ad.doubleclick.net.34398.9225.302br.net', +'ad.doubleclick.net.34399.9225.302br.net', +'ad.doubleclick.net.34400.9225.302br.net', +'ad.doubleclick.net.34402.9225.302br.net', +'ad.doubleclick.net.34404.9225.302br.net', +'ad.doubleclick.net.34405.9225.302br.net', +'ad.doubleclick.net.34406.9225.302br.net', +'ad.doubleclick.net.34414.9225.302br.net', +'ad.doubleclick.net.34416.9225.302br.net', +'ad.doubleclick.net.34420.9225.302br.net', +'ad.doubleclick.net.34422.9225.302br.net', +'ad.doubleclick.net.34424.9225.302br.net', +'ad.doubleclick.net.34426.9225.302br.net', +'ad.doubleclick.net.34428.9225.302br.net', +'ad.doubleclick.net.34430.9225.302br.net', +'ad.doubleclick.net.34432.9225.302br.net', +'ad.doubleclick.net.34434.9225.302br.net', +'ad.doubleclick.net.34436.9225.302br.net', +'ad.doubleclick.net.34437.9225.302br.net', +'ad.doubleclick.net.34438.9225.302br.net', +'ad.doubleclick.net.34439.9225.302br.net', +'ad.doubleclick.net.34440.9225.302br.net', +'ad.doubleclick.net.34441.9225.302br.net', +'ad.doubleclick.net.34442.9225.302br.net', +'ad.doubleclick.net.34444.9225.302br.net', +'ad.doubleclick.net.34446.9225.302br.net', +'ad.doubleclick.net.34448.9225.302br.net', +'ad.doubleclick.net.34449.9250.302br.net', +'ad.doubleclick.net.34452.9250.302br.net', +'ad.doubleclick.net.34455.9250.302br.net', +'ad.doubleclick.net.34458.9250.302br.net', +'ad.doubleclick.net.34461.9250.302br.net', +'ad.doubleclick.net.34464.9250.302br.net', +'ad.doubleclick.net.34467.9250.302br.net', +'ad.doubleclick.net.34470.9250.302br.net', +'ad.doubleclick.net.34473.9250.302br.net', +'ad.doubleclick.net.34476.9250.302br.net', +'ad.doubleclick.net.34477.9250.302br.net', +'ad.doubleclick.net.34478.9250.302br.net', +'ad.doubleclick.net.34479.9250.302br.net', +'ad.doubleclick.net.34480.9250.302br.net', +'ad.doubleclick.net.34481.9250.302br.net', +'ad.doubleclick.net.34482.9250.302br.net', +'ad.doubleclick.net.34536.9252.302br.net', +'ad.doubleclick.net.34538.9252.302br.net', +'ad.doubleclick.net.34539.9252.302br.net', +'ad.doubleclick.net.34541.9252.302br.net', +'ad.doubleclick.net.34542.9252.302br.net', +'ad.doubleclick.net.34544.9252.302br.net', +'ad.doubleclick.net.34545.9252.302br.net', +'ad.doubleclick.net.34547.9252.302br.net', +'ad.doubleclick.net.34548.9252.302br.net', +'ad.doubleclick.net.34550.9252.302br.net', +'ad.doubleclick.net.34551.9252.302br.net', +'ad.doubleclick.net.34552.9252.302br.net', +'ad.doubleclick.net.34553.9252.302br.net', +'ad.doubleclick.net.34554.9252.302br.net', +'ad.doubleclick.net.34555.9252.302br.net', +'ad.doubleclick.net.34556.9252.302br.net', +'ad.doubleclick.net.34557.9252.302br.net', +'ad.doubleclick.net.34558.9252.302br.net', +'ad.doubleclick.net.34559.9252.302br.net', +'ad.doubleclick.net.34560.9252.302br.net', +'ad.doubleclick.net.34561.9252.302br.net', +'ad.doubleclick.net.34562.9252.302br.net', +'ad.doubleclick.net.34563.9252.302br.net', +'ad.doubleclick.net.34564.9252.302br.net', +'ad.doubleclick.net.34565.9252.302br.net', +'ad.doubleclick.net.34566.9252.302br.net', +'ad.doubleclick.net.34567.9252.302br.net', +'ad.doubleclick.net.34568.9252.302br.net', +'ad.doubleclick.net.34569.9252.302br.net', +'ad.doubleclick.net.34571.9252.302br.net', +'ad.doubleclick.net.34572.9252.302br.net', +'ad.doubleclick.net.34574.9252.302br.net', +'ad.doubleclick.net.34575.9252.302br.net', +'ad.doubleclick.net.34577.9252.302br.net', +'ad.doubleclick.net.34578.9252.302br.net', +'ad.doubleclick.net.34580.9252.302br.net', +'ad.doubleclick.net.34581.9252.302br.net', +'ad.doubleclick.net.34583.9252.302br.net', +'ad.doubleclick.net.34584.9252.302br.net', +'ad.doubleclick.net.34586.9252.302br.net', +'ad.doubleclick.net.34587.9252.302br.net', +'ad.doubleclick.net.34589.9252.302br.net', +'ad.doubleclick.net.34590.9252.302br.net', +'ad.doubleclick.net.34591.9252.302br.net', +'ad.doubleclick.net.34592.9252.302br.net', +'ad.doubleclick.net.34593.9252.302br.net', +'ad.doubleclick.net.34595.9252.302br.net', +'ad.doubleclick.net.34600.9252.302br.net', +'ad.doubleclick.net.34601.9252.302br.net', +'ad.doubleclick.net.34603.9252.302br.net', +'ad.doubleclick.net.34604.9252.302br.net', +'ad.doubleclick.net.34606.9252.302br.net', +'ad.doubleclick.net.34607.9252.302br.net', +'ad.doubleclick.net.34609.9252.302br.net', +'ad.doubleclick.net.34610.9252.302br.net', +'ad.doubleclick.net.34612.9252.302br.net', +'ad.doubleclick.net.34613.9252.302br.net', +'ad.doubleclick.net.34615.9252.302br.net', +'ad.doubleclick.net.34616.9252.302br.net', +'ad.doubleclick.net.34618.9252.302br.net', +'ad.doubleclick.net.34619.9252.302br.net', +'ad.doubleclick.net.34621.9252.302br.net', +'ad.doubleclick.net.34622.9252.302br.net', +'ad.doubleclick.net.34624.9252.302br.net', +'ad.doubleclick.net.34625.9252.302br.net', +'ad.doubleclick.net.34632.9252.302br.net', +'ad.doubleclick.net.34634.9252.302br.net', +'ad.doubleclick.net.34638.9252.302br.net', +'ad.doubleclick.net.34640.9252.302br.net', +'ad.doubleclick.net.34641.9252.302br.net', +'ad.doubleclick.net.34642.9252.302br.net', +'ad.doubleclick.net.34643.9252.302br.net', +'ad.doubleclick.net.34645.9252.302br.net', +'ad.doubleclick.net.34646.9252.302br.net', +'ad.doubleclick.net.34647.9252.302br.net', +'ad.doubleclick.net.34649.9252.302br.net', +'ad.doubleclick.net.34650.9252.302br.net', +'ad.doubleclick.net.34651.9252.302br.net', +'ad.doubleclick.net.34652.9252.302br.net', +'ad.doubleclick.net.34657.9252.302br.net', +'ad.doubleclick.net.34660.9252.302br.net', +'ad.doubleclick.net.34663.9252.302br.net', +'ad.doubleclick.net.34664.9252.302br.net', +'ad.doubleclick.net.34665.9252.302br.net', +'ad.doubleclick.net.34666.9252.302br.net', +'ad.doubleclick.net.34667.9252.302br.net', +'ad.doubleclick.net.34668.9252.302br.net', +'ad.doubleclick.net.34670.9252.302br.net', +'ad.doubleclick.net.34671.9252.302br.net', +'ad.doubleclick.net.34673.9252.302br.net', +'ad.doubleclick.net.34675.9252.302br.net', +'ad.doubleclick.net.34676.9252.302br.net', +'ad.doubleclick.net.34677.9252.302br.net', +'ad.doubleclick.net.34679.9252.302br.net', +'ad.doubleclick.net.34695.9252.302br.net', +'ad.doubleclick.net.34697.9252.302br.net', +'ad.doubleclick.net.34708.9252.302br.net', +'ad.doubleclick.net.34709.9252.302br.net', +'ad.doubleclick.net.34711.9252.302br.net', +'ad.doubleclick.net.34716.9252.302br.net', +'ad.doubleclick.net.34718.9252.302br.net', +'ad.doubleclick.net.34719.9252.302br.net', +'ad.doubleclick.net.34721.9252.302br.net', +'ad.doubleclick.net.34722.9252.302br.net', +'ad.doubleclick.net.34724.9252.302br.net', +'ad.doubleclick.net.34728.9252.302br.net', +'ad.doubleclick.net.34730.9252.302br.net', +'ad.doubleclick.net.34731.9252.302br.net', +'ad.doubleclick.net.34733.9252.302br.net', +'ad.doubleclick.net.34884.9239.302br.net', +'ad.doubleclick.net.34886.9239.302br.net', +'ad.doubleclick.net.34890.9239.302br.net', +'ad.doubleclick.net.34892.9239.302br.net', +'ad.doubleclick.net.34896.9239.302br.net', +'ad.doubleclick.net.34898.9239.302br.net', +'ad.doubleclick.net.34899.9239.302br.net', +'ad.doubleclick.net.34901.9239.302br.net', +'ad.doubleclick.net.34902.9239.302br.net', +'ad.doubleclick.net.34904.9239.302br.net', +'ad.doubleclick.net.34908.9239.302br.net', +'ad.doubleclick.net.34910.9239.302br.net', +'ad.doubleclick.net.34911.9239.302br.net', +'ad.doubleclick.net.34913.9239.302br.net', +'ad.doubleclick.net.34919.9239.302br.net', +'ad.doubleclick.net.34920.9239.302br.net', +'ad.doubleclick.net.34922.9239.302br.net', +'ad.doubleclick.net.34923.9239.302br.net', +'ad.doubleclick.net.34925.9239.302br.net', +'ad.doubleclick.net.34932.9239.302br.net', +'ad.doubleclick.net.34934.9239.302br.net', +'ad.doubleclick.net.34938.9239.302br.net', +'ad.doubleclick.net.34940.9239.302br.net', +'ad.doubleclick.net.34943.9239.302br.net', +'ad.doubleclick.net.34947.9239.302br.net', +'ad.doubleclick.net.34949.9239.302br.net', +'ad.doubleclick.net.34955.9239.302br.net', +'ad.doubleclick.net.34964.9239.302br.net', +'ad.doubleclick.net.34967.9239.302br.net', +'ad.doubleclick.net.34970.9239.302br.net', +'ad.doubleclick.net.34973.9239.302br.net', +'ad.doubleclick.net.34976.9239.302br.net', +'ad.doubleclick.net.35032.9076.302br.net', +'ad.doubleclick.net.35035.9076.302br.net', +'ad.doubleclick.net.35036.9076.302br.net', +'ad.doubleclick.net.35038.9076.302br.net', +'ad.doubleclick.net.35039.9076.302br.net', +'ad.doubleclick.net.35041.9076.302br.net', +'ad.doubleclick.net.35042.9076.302br.net', +'ad.doubleclick.net.35044.9076.302br.net', +'ad.doubleclick.net.35047.9076.302br.net', +'ad.doubleclick.net.35050.9076.302br.net', +'ad.doubleclick.net.35053.9076.302br.net', +'ad.doubleclick.net.35056.9076.302br.net', +'ad.doubleclick.net.35059.9076.302br.net', +'ad.doubleclick.net.35060.9076.302br.net', +'ad.doubleclick.net.35062.9076.302br.net', +'ad.doubleclick.net.35065.9076.302br.net', +'ad.doubleclick.net.35101.9250.302br.net', +'ad.doubleclick.net.35104.9250.302br.net', +'ad.doubleclick.net.35107.9250.302br.net', +'ad.doubleclick.net.35110.9250.302br.net', +'ad.doubleclick.net.35145.9256.302br.net', +'ad.doubleclick.net.35146.9256.302br.net', +'ad.doubleclick.net.35148.9256.302br.net', +'ad.doubleclick.net.35149.9256.302br.net', +'ad.doubleclick.net.35150.9256.302br.net', +'ad.doubleclick.net.35151.9256.302br.net', +'ad.doubleclick.net.35152.9256.302br.net', +'ad.doubleclick.net.35153.9256.302br.net', +'ad.doubleclick.net.35154.9256.302br.net', +'ad.doubleclick.net.35155.9256.302br.net', +'ad.doubleclick.net.35157.9256.302br.net', +'ad.doubleclick.net.35163.9256.302br.net', +'ad.doubleclick.net.35166.9256.302br.net', +'ad.doubleclick.net.35244.9264.302br.net', +'ad.doubleclick.net.35245.9264.302br.net', +'ad.doubleclick.net.35246.9264.302br.net', +'ad.doubleclick.net.35250.9264.302br.net', +'ad.doubleclick.net.35251.9264.302br.net', +'ad.doubleclick.net.35252.9264.302br.net', +'ad.doubleclick.net.35265.9264.302br.net', +'ad.doubleclick.net.35266.9264.302br.net', +'ad.doubleclick.net.35267.9264.302br.net', +'ad.doubleclick.net.35268.9264.302br.net', +'ad.doubleclick.net.35269.9264.302br.net', +'ad.doubleclick.net.35270.9264.302br.net', +'ad.doubleclick.net.35278.9264.302br.net', +'ad.doubleclick.net.35279.9264.302br.net', +'ad.doubleclick.net.35284.9264.302br.net', +'ad.doubleclick.net.35285.9264.302br.net', +'ad.doubleclick.net.35287.9264.302br.net', +'ad.doubleclick.net.35288.9264.302br.net', +'ad.doubleclick.net.35290.9264.302br.net', +'ad.doubleclick.net.35291.9264.302br.net', +'ad.doubleclick.net.35293.9264.302br.net', +'ad.doubleclick.net.35294.9264.302br.net', +'ad.doubleclick.net.35296.9264.302br.net', +'ad.doubleclick.net.35297.9264.302br.net', +'ad.doubleclick.net.35299.9264.302br.net', +'ad.doubleclick.net.35300.9264.302br.net', +'ad.doubleclick.net.35305.9264.302br.net', +'ad.doubleclick.net.35306.9264.302br.net', +'ad.doubleclick.net.35308.9264.302br.net', +'ad.doubleclick.net.35309.9264.302br.net', +'ad.doubleclick.net.35314.9264.302br.net', +'ad.doubleclick.net.35315.9264.302br.net', +'ad.doubleclick.net.35317.9264.302br.net', +'ad.doubleclick.net.35318.9264.302br.net', +'ad.doubleclick.net.35320.9264.302br.net', +'ad.doubleclick.net.35321.9264.302br.net', +'ad.doubleclick.net.35323.9264.302br.net', +'ad.doubleclick.net.35324.9264.302br.net', +'ad.doubleclick.net.35332.9264.302br.net', +'ad.doubleclick.net.35333.9264.302br.net', +'ad.doubleclick.net.35360.9265.302br.net', +'ad.doubleclick.net.35361.9265.302br.net', +'ad.doubleclick.net.35362.9265.302br.net', +'ad.doubleclick.net.35363.9265.302br.net', +'ad.doubleclick.net.35364.9265.302br.net', +'ad.doubleclick.net.35365.9265.302br.net', +'ad.doubleclick.net.35366.9265.302br.net', +'ad.doubleclick.net.35367.9265.302br.net', +'ad.doubleclick.net.35368.9265.302br.net', +'ad.doubleclick.net.35369.9265.302br.net', +'ad.doubleclick.net.35370.9265.302br.net', +'ad.doubleclick.net.35468.9269.302br.net', +'ad.doubleclick.net.35471.9269.302br.net', +'ad.doubleclick.net.35474.9269.302br.net', +'ad.doubleclick.net.35477.9269.302br.net', +'ad.doubleclick.net.35480.9269.302br.net', +'ad.doubleclick.net.35483.9269.302br.net', +'ad.doubleclick.net.35486.9269.302br.net', +'ad.doubleclick.net.35489.9269.302br.net', +'ad.doubleclick.net.35492.9269.302br.net', +'ad.doubleclick.net.35496.9269.302br.net', +'ad.doubleclick.net.35497.9269.302br.net', +'ad.doubleclick.net.35499.9269.302br.net', +'ad.doubleclick.net.35500.9269.302br.net', +'ad.doubleclick.net.35501.9269.302br.net', +'ad.doubleclick.net.35502.9269.302br.net', +'ad.doubleclick.net.35503.9269.302br.net', +'ad.doubleclick.net.35505.9269.302br.net', +'ad.doubleclick.net.35506.9269.302br.net', +'ad.doubleclick.net.35507.9269.302br.net', +'ad.doubleclick.net.35508.9269.302br.net', +'ad.doubleclick.net.35509.9269.302br.net', +'ad.doubleclick.net.35510.9269.302br.net', +'ad.doubleclick.net.35511.9269.302br.net', +'ad.doubleclick.net.35512.9269.302br.net', +'ad.doubleclick.net.35514.9269.302br.net', +'ad.doubleclick.net.35515.9269.302br.net', +'ad.doubleclick.net.35517.9269.302br.net', +'ad.doubleclick.net.35518.9269.302br.net', +'ad.doubleclick.net.35520.9269.302br.net', +'ad.doubleclick.net.35521.9269.302br.net', +'ad.doubleclick.net.35523.9269.302br.net', +'ad.doubleclick.net.35524.9269.302br.net', +'ad.doubleclick.net.35526.9269.302br.net', +'ad.doubleclick.net.35527.9269.302br.net', +'ad.doubleclick.net.35529.9269.302br.net', +'ad.doubleclick.net.35530.9269.302br.net', +'ad.doubleclick.net.35531.9269.302br.net', +'ad.doubleclick.net.35532.9269.302br.net', +'ad.doubleclick.net.35533.9269.302br.net', +'ad.doubleclick.net.35534.9269.302br.net', +'ad.doubleclick.net.35535.9269.302br.net', +'ad.doubleclick.net.35536.9269.302br.net', +'ad.doubleclick.net.35541.9269.302br.net', +'ad.doubleclick.net.35542.9269.302br.net', +'ad.doubleclick.net.35550.9269.302br.net', +'ad.doubleclick.net.35551.9269.302br.net', +'ad.doubleclick.net.35552.9269.302br.net', +'ad.doubleclick.net.35553.9269.302br.net', +'ad.doubleclick.net.35554.9269.302br.net', +'ad.doubleclick.net.35555.9269.302br.net', +'ad.doubleclick.net.35556.9269.302br.net', +'ad.doubleclick.net.35557.9269.302br.net', +'ad.doubleclick.net.35559.9269.302br.net', +'ad.doubleclick.net.35560.9269.302br.net', +'ad.doubleclick.net.35561.9269.302br.net', +'ad.doubleclick.net.35562.9269.302br.net', +'ad.doubleclick.net.35563.9269.302br.net', +'ad.doubleclick.net.35564.9269.302br.net', +'ad.doubleclick.net.35565.9269.302br.net', +'ad.doubleclick.net.35566.9269.302br.net', +'ad.doubleclick.net.35568.9264.302br.net', +'ad.doubleclick.net.35569.9264.302br.net', +'ad.doubleclick.net.35574.9264.302br.net', +'ad.doubleclick.net.35575.9264.302br.net', +'ad.doubleclick.net.35589.9270.302br.net', +'ad.doubleclick.net.35592.9270.302br.net', +'ad.doubleclick.net.35634.9239.302br.net', +'ad.doubleclick.net.35635.9240.302br.net', +'ad.doubleclick.net.35638.9053.302br.net', +'ad.doubleclick.net.35641.9053.302br.net', +'ad.doubleclick.net.35644.9053.302br.net', +'ad.doubleclick.net.35647.9053.302br.net', +'ad.doubleclick.net.35650.9053.302br.net', +'ad.doubleclick.net.35653.9053.302br.net', +'ad.doubleclick.net.35656.9053.302br.net', +'ad.doubleclick.net.35659.9053.302br.net', +'ad.doubleclick.net.35660.9053.302br.net', +'ad.doubleclick.net.35662.9053.302br.net', +'ad.doubleclick.net.35665.9053.302br.net', +'ad.doubleclick.net.35668.9053.302br.net', +'ad.doubleclick.net.35671.9053.302br.net', +'ad.doubleclick.net.35682.9239.302br.net', +'ad.doubleclick.net.35683.9239.302br.net', +'ad.doubleclick.net.35685.9239.302br.net', +'ad.doubleclick.net.35686.9239.302br.net', +'ad.doubleclick.net.35687.9239.302br.net', +'ad.doubleclick.net.35689.9239.302br.net', +'ad.doubleclick.net.35692.9239.302br.net', +'ad.doubleclick.net.35693.9239.302br.net', +'ad.doubleclick.net.35695.9239.302br.net', +'ad.doubleclick.net.35696.9239.302br.net', +'ad.doubleclick.net.35698.9239.302br.net', +'ad.doubleclick.net.35701.9239.302br.net', +'ad.doubleclick.net.35702.9256.302br.net', +'ad.doubleclick.net.35703.9256.302br.net', +'ad.doubleclick.net.35704.9256.302br.net', +'ad.doubleclick.net.35706.9256.302br.net', +'ad.doubleclick.net.35707.9256.302br.net', +'ad.doubleclick.net.35709.9256.302br.net', +'ad.doubleclick.net.35710.9256.302br.net', +'ad.doubleclick.net.35712.9256.302br.net', +'ad.doubleclick.net.35713.9256.302br.net', +'ad.doubleclick.net.35714.9256.302br.net', +'ad.doubleclick.net.35715.9256.302br.net', +'ad.doubleclick.net.35716.9256.302br.net', +'ad.doubleclick.net.35717.9256.302br.net', +'ad.doubleclick.net.35718.9256.302br.net', +'ad.doubleclick.net.35719.9256.302br.net', +'ad.doubleclick.net.35720.9256.302br.net', +'ad.doubleclick.net.35721.9256.302br.net', +'ad.doubleclick.net.35722.9256.302br.net', +'ad.doubleclick.net.35723.9256.302br.net', +'ad.doubleclick.net.35724.9256.302br.net', +'ad.doubleclick.net.35725.9256.302br.net', +'ad.doubleclick.net.35901.9274.302br.net', +'ad.doubleclick.net.35902.9274.302br.net', +'ad.doubleclick.net.35904.9274.302br.net', +'ad.doubleclick.net.35905.9274.302br.net', +'ad.doubleclick.net.35907.9274.302br.net', +'ad.doubleclick.net.35908.9274.302br.net', +'ad.doubleclick.net.35975.9239.302br.net', +'ad.doubleclick.net.35976.9239.302br.net', +'ad.doubleclick.net.35978.9239.302br.net', +'ad.doubleclick.net.35979.9239.302br.net', +'ad.doubleclick.net.35991.9276.302br.net', +'ad.doubleclick.net.35992.9276.302br.net', +'ad.doubleclick.net.35994.9276.302br.net', +'ad.doubleclick.net.35995.9276.302br.net', +'ad.doubleclick.net.35996.9276.302br.net', +'ad.doubleclick.net.35997.9276.302br.net', +'ad.doubleclick.net.35998.9276.302br.net', +'ad.doubleclick.net.35999.9276.302br.net', +'ad.doubleclick.net.36000.9276.302br.net', +'ad.doubleclick.net.36001.9276.302br.net', +'ad.doubleclick.net.36002.9276.302br.net', +'ad.doubleclick.net.36003.9276.302br.net', +'ad.doubleclick.net.36004.9276.302br.net', +'ad.doubleclick.net.36006.9276.302br.net', +'ad.doubleclick.net.36007.9276.302br.net', +'ad.doubleclick.net.36008.9276.302br.net', +'ad.doubleclick.net.36009.9276.302br.net', +'ad.doubleclick.net.36010.9276.302br.net', +'ad.doubleclick.net.36012.9276.302br.net', +'ad.doubleclick.net.36013.9276.302br.net', +'ad.doubleclick.net.36014.9276.302br.net', +'ad.doubleclick.net.36015.9276.302br.net', +'ad.doubleclick.net.36016.9276.302br.net', +'ad.doubleclick.net.36048.9275.302br.net', +'ad.doubleclick.net.36049.9275.302br.net', +'ad.doubleclick.net.36065.9275.302br.net', +'ad.doubleclick.net.36066.9275.302br.net', +'ad.doubleclick.net.36067.9275.302br.net', +'ad.doubleclick.net.36068.9275.302br.net', +'ad.doubleclick.net.36069.9275.302br.net', +'ad.doubleclick.net.36070.9275.302br.net', +'ad.doubleclick.net.36072.9275.302br.net', +'ad.doubleclick.net.36073.9275.302br.net', +'ad.doubleclick.net.36075.9275.302br.net', +'ad.doubleclick.net.36076.9275.302br.net', +'ad.doubleclick.net.36078.9275.302br.net', +'ad.doubleclick.net.36079.9275.302br.net', +'ad.doubleclick.net.36080.9275.302br.net', +'ad.doubleclick.net.36081.9275.302br.net', +'ad.doubleclick.net.36082.9275.302br.net', +'ad.doubleclick.net.36083.9275.302br.net', +'ad.doubleclick.net.36084.9275.302br.net', +'ad.doubleclick.net.36085.9275.302br.net', +'ad.doubleclick.net.36369.9279.302br.net', +'ad.doubleclick.net.36370.9279.302br.net', +'ad.doubleclick.net.36371.9279.302br.net', +'ad.doubleclick.net.36373.9279.302br.net', +'ad.doubleclick.net.36374.9279.302br.net', +'ad.doubleclick.net.36376.9279.302br.net', +'ad.doubleclick.net.36377.9279.302br.net', +'ad.doubleclick.net.36378.9279.302br.net', +'ad.doubleclick.net.36379.9279.302br.net', +'ad.doubleclick.net.36380.9279.302br.net', +'ad.doubleclick.net.36381.9279.302br.net', +'ad.doubleclick.net.36382.9279.302br.net', +'ad.doubleclick.net.36383.9279.302br.net', +'ad.doubleclick.net.36384.9279.302br.net', +'ad.doubleclick.net.36385.9279.302br.net', +'ad.doubleclick.net.36386.9279.302br.net', +'ad.doubleclick.net.36389.9080.302br.net', +'ad.doubleclick.net.36394.9076.302br.net', +'ad.doubleclick.net.36397.9076.302br.net', +'ad.doubleclick.net.36400.9077.302br.net', +'ad.doubleclick.net.36401.9077.302br.net', +'ad.doubleclick.net.36403.9077.302br.net', +'ad.doubleclick.net.36404.9077.302br.net', +'ad.doubleclick.net.36410.9078.302br.net', +'ad.doubleclick.net.36415.9079.302br.net', +'ad.doubleclick.net.36418.9081.302br.net', +'ad.doubleclick.net.36421.9081.302br.net', +'ad.doubleclick.net.36427.9084.302br.net', +'ad.doubleclick.net.36433.9083.302br.net', +'ad.doubleclick.net.36436.9083.302br.net', +'ad.doubleclick.net.36437.9083.302br.net', +'ad.doubleclick.net.36439.9083.302br.net', +'ad.doubleclick.net.36442.9085.302br.net', +'ad.doubleclick.net.36443.9085.302br.net', +'ad.doubleclick.net.36445.9085.302br.net', +'ad.doubleclick.net.36446.9085.302br.net', +'ad.doubleclick.net.36448.9086.302br.net', +'ad.doubleclick.net.36449.9086.302br.net', +'ad.doubleclick.net.36451.9086.302br.net', +'ad.doubleclick.net.36452.9086.302br.net', +'ad.doubleclick.net.36457.9087.302br.net', +'ad.doubleclick.net.36460.9280.302br.net', +'ad.doubleclick.net.36462.9280.302br.net', +'ad.doubleclick.net.36464.9280.302br.net', +'ad.doubleclick.net.36466.9280.302br.net', +'ad.doubleclick.net.36467.9250.302br.net', +'ad.doubleclick.net.36470.9250.302br.net', +'ad.doubleclick.net.36473.9250.302br.net', +'ad.doubleclick.net.36476.9250.302br.net', +'ad.doubleclick.net.36478.9250.302br.net', +'ad.doubleclick.net.36481.9250.302br.net', +'ad.doubleclick.net.36482.9250.302br.net', +'ad.doubleclick.net.36484.9250.302br.net', +'ad.doubleclick.net.36485.9250.302br.net', +'ad.doubleclick.net.36487.9250.302br.net', +'ad.doubleclick.net.36488.9250.302br.net', +'ad.doubleclick.net.36490.9250.302br.net', +'ad.doubleclick.net.36491.9250.302br.net', +'ad.doubleclick.net.36493.9250.302br.net', +'ad.doubleclick.net.36825.9285.302br.net', +'ad.doubleclick.net.36864.9286.302br.net', +'ad.doubleclick.net.36867.9286.302br.net', +'ad.doubleclick.net.36870.9286.302br.net', +'ad.doubleclick.net.36898.9252.302br.net', +'ad.doubleclick.net.36899.9252.302br.net', +'ad.doubleclick.net.36900.9252.302br.net', +'ad.doubleclick.net.36901.9252.302br.net', +'ad.doubleclick.net.36902.9252.302br.net', +'ad.doubleclick.net.36904.9252.302br.net', +'ad.doubleclick.net.36905.9252.302br.net', +'ad.doubleclick.net.36906.9252.302br.net', +'ad.doubleclick.net.36908.9252.302br.net', +'ad.doubleclick.net.36909.9252.302br.net', +'ad.doubleclick.net.36911.9252.302br.net', +'ad.doubleclick.net.36912.9252.302br.net', +'ad.doubleclick.net.36914.9252.302br.net', +'ad.doubleclick.net.36915.9252.302br.net', +'ad.doubleclick.net.36917.9252.302br.net', +'ad.doubleclick.net.36918.9252.302br.net', +'ad.doubleclick.net.36920.9252.302br.net', +'ad.doubleclick.net.36933.9252.302br.net', +'ad.doubleclick.net.36935.9252.302br.net', +'ad.doubleclick.net.36936.9252.302br.net', +'ad.doubleclick.net.36938.9252.302br.net', +'ad.doubleclick.net.36939.9252.302br.net', +'ad.doubleclick.net.36941.9252.302br.net', +'ad.doubleclick.net.36942.9252.302br.net', +'ad.doubleclick.net.36944.9252.302br.net', +'ad.doubleclick.net.36945.9240.302br.net', +'ad.doubleclick.net.36946.9240.302br.net', +'ad.doubleclick.net.36947.9240.302br.net', +'ad.doubleclick.net.36948.9240.302br.net', +'ad.doubleclick.net.36949.9240.302br.net', +'ad.doubleclick.net.36950.9240.302br.net', +'ad.doubleclick.net.36952.9235.302br.net', +'ad.doubleclick.net.36953.9235.302br.net', +'ad.doubleclick.net.36955.9235.302br.net', +'ad.doubleclick.net.36956.9235.302br.net', +'ad.doubleclick.net.36957.9235.302br.net', +'ad.doubleclick.net.36958.9235.302br.net', +'ad.doubleclick.net.36959.9235.302br.net', +'ad.doubleclick.net.36984.9240.302br.net', +'ad.doubleclick.net.36987.9240.302br.net', +'ad.doubleclick.net.36990.9240.302br.net', +'ad.doubleclick.net.37004.9288.302br.net', +'ad.doubleclick.net.37005.9288.302br.net', +'ad.doubleclick.net.37007.9288.302br.net', +'ad.doubleclick.net.37008.9288.302br.net', +'ad.doubleclick.net.37010.9288.302br.net', +'ad.doubleclick.net.37011.9288.302br.net', +'ad.doubleclick.net.37013.9288.302br.net', +'ad.doubleclick.net.37014.9288.302br.net', +'ad.doubleclick.net.37025.9288.302br.net', +'ad.doubleclick.net.37028.9290.302br.net', +'ad.doubleclick.net.37031.9290.302br.net', +'ad.doubleclick.net.37033.9291.302br.net', +'ad.doubleclick.net.37034.9291.302br.net', +'ad.doubleclick.net.37035.9291.302br.net', +'ad.doubleclick.net.37036.9291.302br.net', +'ad.doubleclick.net.37037.9291.302br.net', +'ad.doubleclick.net.37038.9291.302br.net', +'ad.doubleclick.net.37039.9291.302br.net', +'ad.doubleclick.net.37040.9291.302br.net', +'ad.doubleclick.net.37041.9291.302br.net', +'ad.doubleclick.net.37043.9291.302br.net', +'ad.doubleclick.net.37045.9291.302br.net', +'ad.doubleclick.net.37046.9291.302br.net', +'ad.doubleclick.net.37047.9291.302br.net', +'ad.doubleclick.net.37048.9291.302br.net', +'ad.doubleclick.net.37049.9291.302br.net', +'ad.doubleclick.net.37363.9292.302br.net', +'ad.doubleclick.net.37364.9292.302br.net', +'ad.doubleclick.net.37365.9292.302br.net', +'ad.doubleclick.net.37366.9292.302br.net', +'ad.doubleclick.net.37367.9292.302br.net', +'ad.doubleclick.net.37368.9292.302br.net', +'ad.doubleclick.net.37369.9292.302br.net', +'ad.doubleclick.net.37370.9292.302br.net', +'ad.doubleclick.net.37371.9292.302br.net', +'ad.doubleclick.net.37379.9294.302br.net', +'ad.doubleclick.net.37380.9294.302br.net', +'ad.doubleclick.net.37381.9294.302br.net', +'ad.doubleclick.net.37382.9294.302br.net', +'ad.doubleclick.net.37383.9294.302br.net', +'ad.doubleclick.net.37387.9294.302br.net', +'ad.doubleclick.net.37388.9294.302br.net', +'ad.doubleclick.net.37389.9294.302br.net', +'ad.doubleclick.net.37396.9294.302br.net', +'ad.doubleclick.net.37397.9294.302br.net', +'ad.doubleclick.net.37398.9294.302br.net', +'ad.doubleclick.net.37399.9294.302br.net', +'ad.doubleclick.net.37400.9294.302br.net', +'ad.doubleclick.net.37401.9294.302br.net', +'ad.doubleclick.net.37405.9294.302br.net', +'ad.doubleclick.net.37406.9294.302br.net', +'ad.doubleclick.net.37407.9294.302br.net', +'ad.doubleclick.net.37432.9293.302br.net', +'ad.doubleclick.net.37433.9293.302br.net', +'ad.doubleclick.net.37434.9293.302br.net', +'ad.doubleclick.net.37438.9293.302br.net', +'ad.doubleclick.net.37439.9293.302br.net', +'ad.doubleclick.net.37440.9293.302br.net', +'ad.doubleclick.net.37441.9293.302br.net', +'ad.doubleclick.net.37442.9293.302br.net', +'ad.doubleclick.net.37443.9293.302br.net', +'ad.doubleclick.net.37655.9298.302br.net', +'ad.doubleclick.net.37656.9298.302br.net', +'ad.doubleclick.net.37657.9298.302br.net', +'ad.doubleclick.net.37658.9298.302br.net', +'ad.doubleclick.net.37659.9298.302br.net', +'ad.doubleclick.net.37660.9298.302br.net', +'ad.doubleclick.net.37661.9298.302br.net', +'ad.doubleclick.net.37662.9298.302br.net', +'ad.doubleclick.net.37663.9298.302br.net', +'ad.doubleclick.net.37664.9298.302br.net', +'ad.doubleclick.net.37665.9298.302br.net', +'ad.doubleclick.net.37666.9298.302br.net', +'ad.doubleclick.net.37668.9298.302br.net', +'ad.doubleclick.net.37669.9298.302br.net', +'ad.doubleclick.net.37671.9298.302br.net', +'ad.doubleclick.net.37672.9298.302br.net', +'ad.doubleclick.net.37673.9298.302br.net', +'ad.doubleclick.net.37674.9298.302br.net', +'ad.doubleclick.net.37675.9298.302br.net', +'ad.doubleclick.net.37676.9298.302br.net', +'ad.doubleclick.net.37677.9298.302br.net', +'ad.doubleclick.net.37678.9298.302br.net', +'ad.doubleclick.net.37680.9298.302br.net', +'ad.doubleclick.net.37681.9298.302br.net', +'ad.doubleclick.net.37683.9298.302br.net', +'ad.doubleclick.net.37684.9298.302br.net', +'ad.doubleclick.net.37686.9298.302br.net', +'ad.doubleclick.net.37687.9298.302br.net', +'ad.doubleclick.net.37688.9298.302br.net', +'ad.doubleclick.net.37689.9298.302br.net', +'ad.doubleclick.net.37690.9298.302br.net', +'ad.doubleclick.net.37692.9298.302br.net', +'ad.doubleclick.net.37693.9298.302br.net', +'ad.doubleclick.net.37695.9298.302br.net', +'ad.doubleclick.net.37696.9298.302br.net', +'ad.doubleclick.net.37697.9298.302br.net', +'ad.doubleclick.net.37698.9298.302br.net', +'ad.doubleclick.net.37699.9298.302br.net', +'ad.doubleclick.net.37700.9298.302br.net', +'ad.doubleclick.net.37701.9298.302br.net', +'ad.doubleclick.net.37702.9298.302br.net', +'ad.doubleclick.net.37704.9298.302br.net', +'ad.doubleclick.net.37705.9298.302br.net', +'ad.doubleclick.net.37706.9298.302br.net', +'ad.doubleclick.net.37707.9298.302br.net', +'ad.doubleclick.net.37708.9298.302br.net', +'ad.doubleclick.net.37710.9298.302br.net', +'ad.doubleclick.net.37711.9298.302br.net', +'ad.doubleclick.net.37712.9298.302br.net', +'ad.doubleclick.net.37713.9298.302br.net', +'ad.doubleclick.net.37714.9298.302br.net', +'ad.doubleclick.net.37716.9287.302br.net', +'ad.doubleclick.net.37717.9287.302br.net', +'ad.doubleclick.net.37719.9287.302br.net', +'ad.doubleclick.net.37720.9287.302br.net', +'ad.doubleclick.net.37728.9287.302br.net', +'ad.doubleclick.net.37729.9287.302br.net', +'ad.doubleclick.net.37731.9287.302br.net', +'ad.doubleclick.net.37776.9300.302br.net', +'ad.doubleclick.net.37779.9300.302br.net', +'ad.doubleclick.net.37780.9300.302br.net', +'ad.doubleclick.net.37782.9300.302br.net', +'ad.doubleclick.net.37783.9300.302br.net', +'ad.doubleclick.net.37785.9300.302br.net', +'ad.doubleclick.net.37786.9300.302br.net', +'ad.doubleclick.net.37800.9301.302br.net', +'ad.doubleclick.net.37803.9301.302br.net', +'ad.doubleclick.net.37804.9301.302br.net', +'ad.doubleclick.net.37806.9301.302br.net', +'ad.doubleclick.net.37807.9301.302br.net', +'ad.doubleclick.net.37809.9301.302br.net', +'ad.doubleclick.net.37810.9301.302br.net', +'ad.doubleclick.net.39359.9305.302br.net', +'ad.doubleclick.net.39360.9305.302br.net', +'ad.doubleclick.net.39361.9305.302br.net', +'ad.doubleclick.net.39362.9305.302br.net', +'ad.doubleclick.net.39363.9305.302br.net', +'ad.doubleclick.net.39364.9305.302br.net', +'ad.doubleclick.net.39365.9305.302br.net', +'ad.doubleclick.net.39366.9305.302br.net', +'ad.doubleclick.net.39367.9305.302br.net', +'ad.doubleclick.net.39370.9252.302br.net', +'ad.doubleclick.net.39446.9124.302br.net', +'ad.doubleclick.net.39479.9124.302br.net', +'ad.doubleclick.net.39491.9124.302br.net', +'ad.doubleclick.net.39497.9124.302br.net', +'ad.doubleclick.net.39498.9124.302br.net', +'ad.doubleclick.net.39506.9124.302br.net', +'ad.doubleclick.net.39518.9124.302br.net', +'ad.doubleclick.net.39524.9124.302br.net', +'ad.doubleclick.net.39525.9124.302br.net', +'ad.doubleclick.net.39542.9124.302br.net', +'ad.doubleclick.net.39543.9124.302br.net', +'ad.doubleclick.net.39569.9124.302br.net', +'ad.doubleclick.net.39570.9124.302br.net', +'ad.doubleclick.net.39572.9124.302br.net', +'ad.doubleclick.net.39575.9124.302br.net', +'ad.doubleclick.net.39578.9124.302br.net', +'ad.doubleclick.net.39581.9124.302br.net', +'ad.doubleclick.net.39587.9124.302br.net', +'ad.doubleclick.net.39590.9124.302br.net', +'ad.doubleclick.net.39591.9124.302br.net', +'ad.doubleclick.net.39596.9124.302br.net', +'ad.doubleclick.net.39597.9124.302br.net', +'ad.doubleclick.net.39608.9124.302br.net', +'ad.doubleclick.net.39611.9124.302br.net', +'ad.doubleclick.net.39620.9124.302br.net', +'ad.doubleclick.net.39623.9124.302br.net', +'ad.doubleclick.net.39624.9124.302br.net', +'ad.doubleclick.net.39629.9124.302br.net', +'ad.doubleclick.net.39630.9124.302br.net', +'ad.doubleclick.net.39638.9124.302br.net', +'ad.doubleclick.net.39644.9124.302br.net', +'ad.doubleclick.net.39645.9124.302br.net', +'ad.doubleclick.net.39647.9124.302br.net', +'ad.doubleclick.net.39653.9124.302br.net', +'ad.doubleclick.net.39656.9124.302br.net', +'ad.doubleclick.net.39659.9124.302br.net', +'ad.doubleclick.net.39662.9124.302br.net', +'ad.doubleclick.net.39663.9124.302br.net', +'ad.doubleclick.net.39926.9307.302br.net', +'ad.doubleclick.net.39927.9307.302br.net', +'ad.doubleclick.net.39929.9307.302br.net', +'ad.doubleclick.net.39930.9307.302br.net', +'ad.doubleclick.net.39932.9307.302br.net', +'ad.doubleclick.net.39933.9307.302br.net', +'ad.doubleclick.net.39935.9307.302br.net', +'ad.doubleclick.net.39936.9307.302br.net', +'ad.doubleclick.net.39941.9307.302br.net', +'ad.doubleclick.net.39942.9307.302br.net', +'ad.doubleclick.net.39944.9307.302br.net', +'ad.doubleclick.net.39945.9307.302br.net', +'ad.doubleclick.net.39950.9307.302br.net', +'ad.doubleclick.net.39951.9307.302br.net', +'ad.doubleclick.net.39962.9307.302br.net', +'ad.doubleclick.net.39963.9307.302br.net', +'ad.doubleclick.net.39968.9307.302br.net', +'ad.doubleclick.net.39969.9307.302br.net', +'ad.doubleclick.net.40082.9307.302br.net', +'ad.doubleclick.net.40083.9307.302br.net', +'ad.doubleclick.net.40085.9307.302br.net', +'ad.doubleclick.net.40086.9307.302br.net', +'ad.doubleclick.net.40088.9307.302br.net', +'ad.doubleclick.net.40089.9307.302br.net', +'ad.doubleclick.net.40094.9307.302br.net', +'ad.doubleclick.net.40095.9307.302br.net', +'ad.doubleclick.net.40097.9307.302br.net', +'ad.doubleclick.net.40098.9307.302br.net', +'ad.doubleclick.net.40103.9307.302br.net', +'ad.doubleclick.net.40104.9307.302br.net', +'ad.doubleclick.net.40106.9307.302br.net', +'ad.doubleclick.net.40107.9307.302br.net', +'ad.doubleclick.net.40109.9307.302br.net', +'ad.doubleclick.net.40110.9307.302br.net', +'ad.doubleclick.net.40112.9307.302br.net', +'ad.doubleclick.net.40113.9307.302br.net', +'ad.doubleclick.net.40115.9307.302br.net', +'ad.doubleclick.net.40116.9307.302br.net', +'ad.doubleclick.net.40118.9307.302br.net', +'ad.doubleclick.net.40119.9307.302br.net', +'ad.doubleclick.net.40121.9307.302br.net', +'ad.doubleclick.net.40122.9307.302br.net', +'ad.doubleclick.net.40124.9308.302br.net', +'ad.doubleclick.net.40125.9308.302br.net', +'ad.doubleclick.net.40136.9308.302br.net', +'ad.doubleclick.net.40137.9308.302br.net', +'ad.doubleclick.net.40151.9308.302br.net', +'ad.doubleclick.net.40152.9308.302br.net', +'ad.doubleclick.net.40154.9308.302br.net', +'ad.doubleclick.net.40155.9308.302br.net', +'ad.doubleclick.net.40157.9308.302br.net', +'ad.doubleclick.net.40158.9308.302br.net', +'ad.doubleclick.net.40160.9308.302br.net', +'ad.doubleclick.net.40161.9308.302br.net', +'ad.doubleclick.net.40163.9308.302br.net', +'ad.doubleclick.net.40164.9308.302br.net', +'ad.doubleclick.net.40166.9308.302br.net', +'ad.doubleclick.net.40167.9308.302br.net', +'ad.doubleclick.net.40172.9308.302br.net', +'ad.doubleclick.net.40173.9308.302br.net', +'ad.doubleclick.net.40178.9308.302br.net', +'ad.doubleclick.net.40179.9308.302br.net', +'ad.doubleclick.net.40184.9308.302br.net', +'ad.doubleclick.net.40185.9308.302br.net', +'ad.doubleclick.net.40187.9308.302br.net', +'ad.doubleclick.net.40188.9308.302br.net', +'ad.doubleclick.net.40190.9308.302br.net', +'ad.doubleclick.net.40191.9308.302br.net', +'ad.doubleclick.net.40196.9308.302br.net', +'ad.doubleclick.net.40197.9308.302br.net', +'ad.doubleclick.net.40199.9308.302br.net', +'ad.doubleclick.net.40200.9308.302br.net', +'ad.doubleclick.net.40205.9309.302br.net', +'ad.doubleclick.net.40206.9309.302br.net', +'ad.doubleclick.net.40208.9309.302br.net', +'ad.doubleclick.net.40209.9309.302br.net', +'ad.doubleclick.net.40211.9309.302br.net', +'ad.doubleclick.net.40212.9309.302br.net', +'ad.doubleclick.net.40271.9309.302br.net', +'ad.doubleclick.net.40272.9309.302br.net', +'ad.doubleclick.net.40274.9309.302br.net', +'ad.doubleclick.net.40275.9309.302br.net', +'ad.doubleclick.net.40280.9309.302br.net', +'ad.doubleclick.net.40281.9309.302br.net', +'ad.doubleclick.net.40283.9309.302br.net', +'ad.doubleclick.net.40284.9309.302br.net', +'ad.doubleclick.net.40316.9309.302br.net', +'ad.doubleclick.net.40317.9309.302br.net', +'ad.doubleclick.net.40319.9309.302br.net', +'ad.doubleclick.net.40320.9309.302br.net', +'ad.doubleclick.net.40322.9309.302br.net', +'ad.doubleclick.net.40323.9309.302br.net', +'ad.doubleclick.net.40346.9309.302br.net', +'ad.doubleclick.net.40347.9309.302br.net', +'ad.doubleclick.net.40348.9250.302br.net', +'ad.doubleclick.net.40349.9250.302br.net', +'ad.doubleclick.net.40350.9250.302br.net', +'ad.doubleclick.net.40351.9250.302br.net', +'ad.doubleclick.net.40352.9250.302br.net', +'ad.doubleclick.net.40353.9250.302br.net', +'ad.doubleclick.net.40354.9250.302br.net', +'ad.doubleclick.net.40355.9250.302br.net', +'ad.doubleclick.net.40356.9250.302br.net', +'ad.doubleclick.net.40357.9250.302br.net', +'ad.doubleclick.net.40358.9250.302br.net', +'ad.doubleclick.net.40359.9250.302br.net', +'ad.doubleclick.net.40360.9250.302br.net', +'ad.doubleclick.net.40361.9250.302br.net', +'ad.doubleclick.net.40362.9250.302br.net', +'ad.doubleclick.net.40363.9250.302br.net', +'ad.doubleclick.net.40364.9250.302br.net', +'ad.doubleclick.net.40365.9250.302br.net', +'ad.doubleclick.net.40366.9250.302br.net', +'ad.doubleclick.net.40367.9250.302br.net', +'ad.doubleclick.net.40368.9250.302br.net', +'ad.doubleclick.net.40369.9250.302br.net', +'ad.doubleclick.net.40370.9250.302br.net', +'ad.doubleclick.net.40371.9250.302br.net', +'ad.doubleclick.net.40372.9250.302br.net', +'ad.doubleclick.net.40373.9250.302br.net', +'ad.doubleclick.net.40374.9250.302br.net', +'ad.doubleclick.net.40513.9311.302br.net', +'ad.doubleclick.net.40518.9311.302br.net', +'ad.doubleclick.net.40524.9311.302br.net', +'ad.doubleclick.net.40530.9311.302br.net', +'ad.doubleclick.net.40536.9311.302br.net', +'ad.doubleclick.net.40541.9311.302br.net', +'ad.doubleclick.net.40543.9311.302br.net', +'ad.doubleclick.net.40547.9311.302br.net', +'ad.doubleclick.net.40553.9311.302br.net', +'ad.doubleclick.net.40559.9311.302br.net', +'ad.doubleclick.net.40561.9311.302br.net', +'ad.doubleclick.net.40566.9311.302br.net', +'ad.doubleclick.net.40572.9311.302br.net', +'ad.doubleclick.net.40579.9311.302br.net', +'ad.doubleclick.net.40581.9311.302br.net', +'ad.doubleclick.net.40585.9311.302br.net', +'ad.doubleclick.net.40587.9311.302br.net', +'ad.doubleclick.net.40591.9311.302br.net', +'ad.doubleclick.net.40597.9311.302br.net', +'ad.doubleclick.net.40603.9311.302br.net', +'ad.doubleclick.net.40605.9311.302br.net', +'ad.doubleclick.net.40609.9311.302br.net', +'ad.doubleclick.net.40611.9311.302br.net', +'ad.doubleclick.net.40615.9311.302br.net', +'ad.doubleclick.net.40621.9311.302br.net', +'ad.doubleclick.net.40622.9311.302br.net', +'ad.doubleclick.net.40627.9311.302br.net', +'ad.doubleclick.net.40629.9311.302br.net', +'ad.doubleclick.net.40633.9311.302br.net', +'ad.doubleclick.net.40635.9311.302br.net', +'ad.doubleclick.net.40639.9311.302br.net', +'ad.doubleclick.net.40642.9311.302br.net', +'ad.doubleclick.net.40645.9311.302br.net', +'ad.doubleclick.net.40648.9311.302br.net', +'ad.doubleclick.net.40651.9311.302br.net', +'ad.doubleclick.net.40654.9311.302br.net', +'ad.doubleclick.net.40657.9311.302br.net', +'ad.doubleclick.net.40660.9311.302br.net', +'ad.doubleclick.net.40663.9311.302br.net', +'ad.doubleclick.net.40666.9311.302br.net', +'ad.doubleclick.net.40669.9311.302br.net', +'ad.doubleclick.net.40672.9311.302br.net', +'ad.doubleclick.net.40673.9311.302br.net', +'ad.doubleclick.net.40675.9311.302br.net', +'ad.doubleclick.net.40676.9311.302br.net', +'ad.doubleclick.net.40678.9311.302br.net', +'ad.doubleclick.net.40679.9311.302br.net', +'ad.doubleclick.net.40681.9311.302br.net', +'ad.doubleclick.net.40682.9311.302br.net', +'ad.doubleclick.net.40684.9311.302br.net', +'ad.doubleclick.net.40685.9311.302br.net', +'ad.doubleclick.net.40687.9311.302br.net', +'ad.doubleclick.net.40688.9311.302br.net', +'ad.doubleclick.net.40690.9311.302br.net', +'ad.doubleclick.net.40691.9311.302br.net', +'ad.doubleclick.net.40693.9311.302br.net', +'ad.doubleclick.net.40696.9311.302br.net', +'ad.doubleclick.net.40699.9311.302br.net', +'ad.doubleclick.net.40702.9311.302br.net', +'ad.doubleclick.net.40705.9311.302br.net', +'ad.doubleclick.net.40706.9311.302br.net', +'ad.doubleclick.net.40708.9311.302br.net', +'ad.doubleclick.net.40711.9311.302br.net', +'ad.doubleclick.net.40714.9311.302br.net', +'ad.doubleclick.net.40717.9311.302br.net', +'ad.doubleclick.net.40720.9311.302br.net', +'ad.doubleclick.net.40723.9311.302br.net', +'ad.doubleclick.net.40726.9311.302br.net', +'ad.doubleclick.net.40727.9311.302br.net', +'ad.doubleclick.net.40729.9311.302br.net', +'ad.doubleclick.net.40732.9311.302br.net', +'ad.doubleclick.net.40735.9311.302br.net', +'ad.doubleclick.net.40738.9311.302br.net', +'ad.doubleclick.net.40739.9311.302br.net', +'ad.doubleclick.net.40741.9311.302br.net', +'ad.doubleclick.net.40744.9311.302br.net', +'ad.doubleclick.net.40747.9311.302br.net', +'ad.doubleclick.net.40750.9311.302br.net', +'ad.doubleclick.net.40753.9311.302br.net', +'ad.doubleclick.net.40793.9314.302br.net', +'ad.doubleclick.net.40796.9314.302br.net', +'ad.doubleclick.net.40799.9314.302br.net', +'ad.doubleclick.net.40802.9314.302br.net', +'ad.doubleclick.net.40803.9314.302br.net', +'ad.doubleclick.net.40805.9314.302br.net', +'ad.doubleclick.net.40806.9314.302br.net', +'ad.doubleclick.net.40808.9314.302br.net', +'ad.doubleclick.net.40812.9314.302br.net', +'ad.doubleclick.net.40814.9314.302br.net', +'ad.doubleclick.net.40818.9314.302br.net', +'ad.doubleclick.net.40820.9314.302br.net', +'ad.doubleclick.net.40821.9314.302br.net', +'ad.doubleclick.net.40823.9314.302br.net', +'ad.doubleclick.net.40824.9314.302br.net', +'ad.doubleclick.net.40826.9314.302br.net', +'ad.doubleclick.net.40901.9313.302br.net', +'ad.doubleclick.net.40904.9313.302br.net', +'ad.doubleclick.net.40907.9313.302br.net', +'ad.doubleclick.net.40910.9313.302br.net', +'ad.doubleclick.net.40911.9313.302br.net', +'ad.doubleclick.net.40913.9313.302br.net', +'ad.doubleclick.net.40914.9313.302br.net', +'ad.doubleclick.net.40916.9313.302br.net', +'ad.doubleclick.net.40917.9313.302br.net', +'ad.doubleclick.net.40919.9313.302br.net', +'ad.doubleclick.net.40920.9313.302br.net', +'ad.doubleclick.net.40922.9313.302br.net', +'ad.doubleclick.net.40923.9313.302br.net', +'ad.doubleclick.net.40925.9313.302br.net', +'ad.doubleclick.net.40926.9313.302br.net', +'ad.doubleclick.net.40928.9313.302br.net', +'ad.doubleclick.net.40935.9313.302br.net', +'ad.doubleclick.net.40937.9313.302br.net', +'ad.doubleclick.net.40938.9313.302br.net', +'ad.doubleclick.net.40940.9313.302br.net', +'ad.doubleclick.net.40941.9313.302br.net', +'ad.doubleclick.net.40943.9313.302br.net', +'ad.doubleclick.net.40946.9313.302br.net', +'ad.doubleclick.net.40988.9316.302br.net', +'ad.doubleclick.net.40991.9316.302br.net', +'ad.doubleclick.net.40994.9316.302br.net', +'ad.doubleclick.net.41000.9316.302br.net', +'ad.doubleclick.net.41003.9315.302br.net', +'ad.doubleclick.net.41006.9315.302br.net', +'ad.doubleclick.net.41009.9315.302br.net', +'ad.doubleclick.net.41012.9315.302br.net', +'ad.doubleclick.net.41018.9315.302br.net', +'ad.doubleclick.net.41021.9315.302br.net', +'ad.doubleclick.net.41024.9315.302br.net', +'ad.doubleclick.net.41027.9315.302br.net', +'ad.doubleclick.net.41033.9315.302br.net', +'ad.doubleclick.net.41065.9315.302br.net', +'ad.doubleclick.net.41123.9315.302br.net', +'ad.doubleclick.net.41139.9315.302br.net', +'ad.doubleclick.net.41141.9315.302br.net', +'ad.doubleclick.net.41147.9315.302br.net', +'ad.doubleclick.net.41162.9315.302br.net', +'ad.doubleclick.net.41172.9315.302br.net', +'ad.doubleclick.net.41174.9315.302br.net', +'ad.doubleclick.net.41178.9315.302br.net', +'ad.doubleclick.net.41180.9315.302br.net', +'ad.doubleclick.net.41182.9315.302br.net', +'ad.doubleclick.net.41183.9315.302br.net', +'ad.doubleclick.net.41188.9315.302br.net', +'ad.doubleclick.net.41191.9315.302br.net', +'ad.doubleclick.net.41194.9315.302br.net', +'ad.doubleclick.net.41197.9315.302br.net', +'ad.doubleclick.net.41198.9315.302br.net', +'ad.doubleclick.net.41200.9315.302br.net', +'ad.doubleclick.net.41203.9315.302br.net', +'ad.doubleclick.net.41204.9315.302br.net', +'ad.doubleclick.net.41206.9315.302br.net', +'ad.doubleclick.net.41207.9315.302br.net', +'ad.doubleclick.net.41209.9315.302br.net', +'ad.doubleclick.net.41210.9315.302br.net', +'ad.doubleclick.net.41212.9315.302br.net', +'ad.doubleclick.net.41213.9315.302br.net', +'ad.doubleclick.net.41215.9315.302br.net', +'ad.doubleclick.net.41216.9315.302br.net', +'ad.doubleclick.net.41218.9315.302br.net', +'ad.doubleclick.net.41219.9315.302br.net', +'ad.doubleclick.net.41227.9315.302br.net', +'ad.doubleclick.net.41230.9315.302br.net', +'ad.doubleclick.net.41231.9315.302br.net', +'ad.doubleclick.net.41233.9315.302br.net', +'ad.doubleclick.net.41234.9315.302br.net', +'ad.doubleclick.net.41236.9315.302br.net', +'ad.doubleclick.net.41237.9315.302br.net', +'ad.doubleclick.net.41239.9315.302br.net', +'ad.doubleclick.net.41240.9315.302br.net', +'ad.doubleclick.net.41242.9315.302br.net', +'ad.doubleclick.net.41243.9315.302br.net', +'ad.doubleclick.net.41244.9315.302br.net', +'ad.doubleclick.net.41245.9315.302br.net', +'ad.doubleclick.net.41246.9315.302br.net', +'ad.doubleclick.net.41280.9317.302br.net', +'ad.doubleclick.net.41283.9317.302br.net', +'ad.doubleclick.net.41286.9317.302br.net', +'ad.doubleclick.net.41289.9317.302br.net', +'ad.doubleclick.net.41295.9317.302br.net', +'ad.doubleclick.net.41296.9317.302br.net', +'ad.doubleclick.net.41298.9317.302br.net', +'ad.doubleclick.net.41301.9317.302br.net', +'ad.doubleclick.net.41304.9317.302br.net', +'ad.doubleclick.net.41307.9317.302br.net', +'ad.doubleclick.net.41310.9317.302br.net', +'ad.doubleclick.net.41313.9317.302br.net', +'ad.doubleclick.net.41314.9317.302br.net', +'ad.doubleclick.net.41319.9317.302br.net', +'ad.doubleclick.net.41322.9317.302br.net', +'ad.doubleclick.net.41325.9317.302br.net', +'ad.doubleclick.net.41326.9317.302br.net', +'ad.doubleclick.net.41328.9317.302br.net', +'ad.doubleclick.net.41329.9317.302br.net', +'ad.doubleclick.net.41331.9317.302br.net', +'ad.doubleclick.net.41334.9317.302br.net', +'ad.doubleclick.net.41335.9317.302br.net', +'ad.doubleclick.net.41337.9317.302br.net', +'ad.doubleclick.net.41340.9317.302br.net', +'ad.doubleclick.net.41343.9317.302br.net', +'ad.doubleclick.net.41344.9317.302br.net', +'ad.doubleclick.net.41349.9317.302br.net', +'ad.doubleclick.net.41350.9317.302br.net', +'ad.doubleclick.net.41355.9317.302br.net', +'ad.doubleclick.net.41361.9317.302br.net', +'ad.doubleclick.net.41364.9317.302br.net', +'ad.doubleclick.net.41370.9317.302br.net', +'ad.doubleclick.net.41371.9317.302br.net', +'ad.doubleclick.net.41373.9317.302br.net', +'ad.doubleclick.net.41376.9317.302br.net', +'ad.doubleclick.net.41379.9317.302br.net', +'ad.doubleclick.net.41382.9317.302br.net', +'ad.doubleclick.net.41385.9317.302br.net', +'ad.doubleclick.net.41388.9317.302br.net', +'ad.doubleclick.net.41391.9317.302br.net', +'ad.doubleclick.net.41392.9317.302br.net', +'ad.doubleclick.net.41394.9317.302br.net', +'ad.doubleclick.net.41395.9317.302br.net', +'ad.doubleclick.net.41397.9317.302br.net', +'ad.doubleclick.net.41398.9317.302br.net', +'ad.doubleclick.net.414.7000.302br.net', +'ad.doubleclick.net.41400.9317.302br.net', +'ad.doubleclick.net.41401.9317.302br.net', +'ad.doubleclick.net.41403.9317.302br.net', +'ad.doubleclick.net.41404.9317.302br.net', +'ad.doubleclick.net.41406.9317.302br.net', +'ad.doubleclick.net.41407.9317.302br.net', +'ad.doubleclick.net.41409.9317.302br.net', +'ad.doubleclick.net.41412.9317.302br.net', +'ad.doubleclick.net.41418.9317.302br.net', +'ad.doubleclick.net.41424.9317.302br.net', +'ad.doubleclick.net.41427.9317.302br.net', +'ad.doubleclick.net.41428.9317.302br.net', +'ad.doubleclick.net.41430.9317.302br.net', +'ad.doubleclick.net.41433.9317.302br.net', +'ad.doubleclick.net.41434.9317.302br.net', +'ad.doubleclick.net.41436.9317.302br.net', +'ad.doubleclick.net.41439.9317.302br.net', +'ad.doubleclick.net.41442.9317.302br.net', +'ad.doubleclick.net.41445.9317.302br.net', +'ad.doubleclick.net.41448.9317.302br.net', +'ad.doubleclick.net.41454.9317.302br.net', +'ad.doubleclick.net.41457.9317.302br.net', +'ad.doubleclick.net.41458.9317.302br.net', +'ad.doubleclick.net.41460.9317.302br.net', +'ad.doubleclick.net.41463.9317.302br.net', +'ad.doubleclick.net.41464.9317.302br.net', +'ad.doubleclick.net.41484.9317.302br.net', +'ad.doubleclick.net.41487.9317.302br.net', +'ad.doubleclick.net.41488.9317.302br.net', +'ad.doubleclick.net.41490.9317.302br.net', +'ad.doubleclick.net.41493.9317.302br.net', +'ad.doubleclick.net.41496.9317.302br.net', +'ad.doubleclick.net.41497.9317.302br.net', +'ad.doubleclick.net.41499.9317.302br.net', +'ad.doubleclick.net.415.7000.302br.net', +'ad.doubleclick.net.41500.9317.302br.net', +'ad.doubleclick.net.41502.9317.302br.net', +'ad.doubleclick.net.41503.9317.302br.net', +'ad.doubleclick.net.41505.9317.302br.net', +'ad.doubleclick.net.41506.9317.302br.net', +'ad.doubleclick.net.41508.9317.302br.net', +'ad.doubleclick.net.41511.9317.302br.net', +'ad.doubleclick.net.41512.9317.302br.net', +'ad.doubleclick.net.41514.9317.302br.net', +'ad.doubleclick.net.41515.9317.302br.net', +'ad.doubleclick.net.41520.9317.302br.net', +'ad.doubleclick.net.41521.9317.302br.net', +'ad.doubleclick.net.41523.9317.302br.net', +'ad.doubleclick.net.41526.9317.302br.net', +'ad.doubleclick.net.41527.9317.302br.net', +'ad.doubleclick.net.41529.9317.302br.net', +'ad.doubleclick.net.41532.9317.302br.net', +'ad.doubleclick.net.41533.9317.302br.net', +'ad.doubleclick.net.41535.9317.302br.net', +'ad.doubleclick.net.41538.9317.302br.net', +'ad.doubleclick.net.41539.9317.302br.net', +'ad.doubleclick.net.41541.9317.302br.net', +'ad.doubleclick.net.41542.9317.302br.net', +'ad.doubleclick.net.41544.9317.302br.net', +'ad.doubleclick.net.41545.9317.302br.net', +'ad.doubleclick.net.41547.9317.302br.net', +'ad.doubleclick.net.41550.9317.302br.net', +'ad.doubleclick.net.41553.9317.302br.net', +'ad.doubleclick.net.41556.9317.302br.net', +'ad.doubleclick.net.41559.9317.302br.net', +'ad.doubleclick.net.41562.9317.302br.net', +'ad.doubleclick.net.41565.9317.302br.net', +'ad.doubleclick.net.41568.9317.302br.net', +'ad.doubleclick.net.41569.9317.302br.net', +'ad.doubleclick.net.41571.9317.302br.net', +'ad.doubleclick.net.41572.9317.302br.net', +'ad.doubleclick.net.41574.9317.302br.net', +'ad.doubleclick.net.41575.9317.302br.net', +'ad.doubleclick.net.41577.9317.302br.net', +'ad.doubleclick.net.41578.9317.302br.net', +'ad.doubleclick.net.41583.9317.302br.net', +'ad.doubleclick.net.41586.9317.302br.net', +'ad.doubleclick.net.41589.9317.302br.net', +'ad.doubleclick.net.41592.9317.302br.net', +'ad.doubleclick.net.41595.9317.302br.net', +'ad.doubleclick.net.41596.9317.302br.net', +'ad.doubleclick.net.41598.9317.302br.net', +'ad.doubleclick.net.41599.9317.302br.net', +'ad.doubleclick.net.41601.9317.302br.net', +'ad.doubleclick.net.41602.9317.302br.net', +'ad.doubleclick.net.41604.9317.302br.net', +'ad.doubleclick.net.41607.9317.302br.net', +'ad.doubleclick.net.41610.9317.302br.net', +'ad.doubleclick.net.41613.9317.302br.net', +'ad.doubleclick.net.41616.9317.302br.net', +'ad.doubleclick.net.41622.9317.302br.net', +'ad.doubleclick.net.41623.9317.302br.net', +'ad.doubleclick.net.41625.9317.302br.net', +'ad.doubleclick.net.41626.9317.302br.net', +'ad.doubleclick.net.41628.9317.302br.net', +'ad.doubleclick.net.41629.9317.302br.net', +'ad.doubleclick.net.41634.9317.302br.net', +'ad.doubleclick.net.41637.9317.302br.net', +'ad.doubleclick.net.41640.9317.302br.net', +'ad.doubleclick.net.41643.9317.302br.net', +'ad.doubleclick.net.41644.9317.302br.net', +'ad.doubleclick.net.41646.9317.302br.net', +'ad.doubleclick.net.41647.9317.302br.net', +'ad.doubleclick.net.41649.9317.302br.net', +'ad.doubleclick.net.41652.9317.302br.net', +'ad.doubleclick.net.41655.9317.302br.net', +'ad.doubleclick.net.41658.9317.302br.net', +'ad.doubleclick.net.41659.9317.302br.net', +'ad.doubleclick.net.41661.9317.302br.net', +'ad.doubleclick.net.41662.9317.302br.net', +'ad.doubleclick.net.41664.9317.302br.net', +'ad.doubleclick.net.41667.9317.302br.net', +'ad.doubleclick.net.41670.9317.302br.net', +'ad.doubleclick.net.41673.9317.302br.net', +'ad.doubleclick.net.41676.9317.302br.net', +'ad.doubleclick.net.41677.9317.302br.net', +'ad.doubleclick.net.41679.9317.302br.net', +'ad.doubleclick.net.41682.9317.302br.net', +'ad.doubleclick.net.41683.9317.302br.net', +'ad.doubleclick.net.41694.9317.302br.net', +'ad.doubleclick.net.41697.9317.302br.net', +'ad.doubleclick.net.41700.9317.302br.net', +'ad.doubleclick.net.41703.9317.302br.net', +'ad.doubleclick.net.41704.9317.302br.net', +'ad.doubleclick.net.41709.9317.302br.net', +'ad.doubleclick.net.41710.9317.302br.net', +'ad.doubleclick.net.41712.9317.302br.net', +'ad.doubleclick.net.41715.9317.302br.net', +'ad.doubleclick.net.41718.9317.302br.net', +'ad.doubleclick.net.41721.9317.302br.net', +'ad.doubleclick.net.41722.9317.302br.net', +'ad.doubleclick.net.41724.9317.302br.net', +'ad.doubleclick.net.41727.9317.302br.net', +'ad.doubleclick.net.41728.9317.302br.net', +'ad.doubleclick.net.41730.9317.302br.net', +'ad.doubleclick.net.41733.9317.302br.net', +'ad.doubleclick.net.41736.9317.302br.net', +'ad.doubleclick.net.41737.9317.302br.net', +'ad.doubleclick.net.41739.9317.302br.net', +'ad.doubleclick.net.41740.9317.302br.net', +'ad.doubleclick.net.41742.9317.302br.net', +'ad.doubleclick.net.41745.9317.302br.net', +'ad.doubleclick.net.41746.9317.302br.net', +'ad.doubleclick.net.41748.9317.302br.net', +'ad.doubleclick.net.41749.9317.302br.net', +'ad.doubleclick.net.41751.9317.302br.net', +'ad.doubleclick.net.41757.9317.302br.net', +'ad.doubleclick.net.41758.9317.302br.net', +'ad.doubleclick.net.41760.9317.302br.net', +'ad.doubleclick.net.41761.9317.302br.net', +'ad.doubleclick.net.41763.9317.302br.net', +'ad.doubleclick.net.41766.9317.302br.net', +'ad.doubleclick.net.41769.9317.302br.net', +'ad.doubleclick.net.41775.9317.302br.net', +'ad.doubleclick.net.41784.9317.302br.net', +'ad.doubleclick.net.41785.9317.302br.net', +'ad.doubleclick.net.41787.9317.302br.net', +'ad.doubleclick.net.41788.9317.302br.net', +'ad.doubleclick.net.41790.9317.302br.net', +'ad.doubleclick.net.41791.9317.302br.net', +'ad.doubleclick.net.41793.9317.302br.net', +'ad.doubleclick.net.41794.9317.302br.net', +'ad.doubleclick.net.41796.9317.302br.net', +'ad.doubleclick.net.41797.9317.302br.net', +'ad.doubleclick.net.41799.9317.302br.net', +'ad.doubleclick.net.41800.9317.302br.net', +'ad.doubleclick.net.41802.9317.302br.net', +'ad.doubleclick.net.41803.9317.302br.net', +'ad.doubleclick.net.41805.9317.302br.net', +'ad.doubleclick.net.41806.9317.302br.net', +'ad.doubleclick.net.41811.9317.302br.net', +'ad.doubleclick.net.41814.9317.302br.net', +'ad.doubleclick.net.41815.9317.302br.net', +'ad.doubleclick.net.41817.9317.302br.net', +'ad.doubleclick.net.41820.9317.302br.net', +'ad.doubleclick.net.41821.9317.302br.net', +'ad.doubleclick.net.41823.9317.302br.net', +'ad.doubleclick.net.41824.9317.302br.net', +'ad.doubleclick.net.41829.9317.302br.net', +'ad.doubleclick.net.41832.9317.302br.net', +'ad.doubleclick.net.41835.9317.302br.net', +'ad.doubleclick.net.41838.9317.302br.net', +'ad.doubleclick.net.41841.9317.302br.net', +'ad.doubleclick.net.41844.9317.302br.net', +'ad.doubleclick.net.41845.9317.302br.net', +'ad.doubleclick.net.41847.9317.302br.net', +'ad.doubleclick.net.41848.9317.302br.net', +'ad.doubleclick.net.41850.9317.302br.net', +'ad.doubleclick.net.41851.9317.302br.net', +'ad.doubleclick.net.41853.9317.302br.net', +'ad.doubleclick.net.41856.9317.302br.net', +'ad.doubleclick.net.41859.9317.302br.net', +'ad.doubleclick.net.41862.9317.302br.net', +'ad.doubleclick.net.41865.9317.302br.net', +'ad.doubleclick.net.41868.9317.302br.net', +'ad.doubleclick.net.41871.9317.302br.net', +'ad.doubleclick.net.41874.9317.302br.net', +'ad.doubleclick.net.41875.9317.302br.net', +'ad.doubleclick.net.41877.9317.302br.net', +'ad.doubleclick.net.41878.9317.302br.net', +'ad.doubleclick.net.41880.9317.302br.net', +'ad.doubleclick.net.41883.9317.302br.net', +'ad.doubleclick.net.41884.9317.302br.net', +'ad.doubleclick.net.41889.9317.302br.net', +'ad.doubleclick.net.41892.9317.302br.net', +'ad.doubleclick.net.41895.9317.302br.net', +'ad.doubleclick.net.41896.9317.302br.net', +'ad.doubleclick.net.41898.9317.302br.net', +'ad.doubleclick.net.41901.9317.302br.net', +'ad.doubleclick.net.41904.9317.302br.net', +'ad.doubleclick.net.41907.9317.302br.net', +'ad.doubleclick.net.41910.9317.302br.net', +'ad.doubleclick.net.41919.9317.302br.net', +'ad.doubleclick.net.41922.9317.302br.net', +'ad.doubleclick.net.41925.9317.302br.net', +'ad.doubleclick.net.41928.9317.302br.net', +'ad.doubleclick.net.41931.9317.302br.net', +'ad.doubleclick.net.41943.9317.302br.net', +'ad.doubleclick.net.41944.9317.302br.net', +'ad.doubleclick.net.41958.9317.302br.net', +'ad.doubleclick.net.41961.9317.302br.net', +'ad.doubleclick.net.41964.9317.302br.net', +'ad.doubleclick.net.41967.9317.302br.net', +'ad.doubleclick.net.41968.9317.302br.net', +'ad.doubleclick.net.41970.9317.302br.net', +'ad.doubleclick.net.41971.9317.302br.net', +'ad.doubleclick.net.41973.9317.302br.net', +'ad.doubleclick.net.41974.9317.302br.net', +'ad.doubleclick.net.41976.9317.302br.net', +'ad.doubleclick.net.41982.9317.302br.net', +'ad.doubleclick.net.41985.9317.302br.net', +'ad.doubleclick.net.41988.9317.302br.net', +'ad.doubleclick.net.41991.9317.302br.net', +'ad.doubleclick.net.41994.9317.302br.net', +'ad.doubleclick.net.41995.9317.302br.net', +'ad.doubleclick.net.42000.9317.302br.net', +'ad.doubleclick.net.42001.9317.302br.net', +'ad.doubleclick.net.42003.9317.302br.net', +'ad.doubleclick.net.42006.9317.302br.net', +'ad.doubleclick.net.42009.9317.302br.net', +'ad.doubleclick.net.42012.9317.302br.net', +'ad.doubleclick.net.42015.9317.302br.net', +'ad.doubleclick.net.42018.9317.302br.net', +'ad.doubleclick.net.42021.9317.302br.net', +'ad.doubleclick.net.42024.9317.302br.net', +'ad.doubleclick.net.42027.9317.302br.net', +'ad.doubleclick.net.42028.9317.302br.net', +'ad.doubleclick.net.42030.9317.302br.net', +'ad.doubleclick.net.42033.9317.302br.net', +'ad.doubleclick.net.42036.9317.302br.net', +'ad.doubleclick.net.42039.9317.302br.net', +'ad.doubleclick.net.42042.9317.302br.net', +'ad.doubleclick.net.42045.9317.302br.net', +'ad.doubleclick.net.42048.9317.302br.net', +'ad.doubleclick.net.42049.9317.302br.net', +'ad.doubleclick.net.42051.9317.302br.net', +'ad.doubleclick.net.42052.9317.302br.net', +'ad.doubleclick.net.42054.9317.302br.net', +'ad.doubleclick.net.42055.9317.302br.net', +'ad.doubleclick.net.42057.9317.302br.net', +'ad.doubleclick.net.42060.9317.302br.net', +'ad.doubleclick.net.42063.9317.302br.net', +'ad.doubleclick.net.42066.9317.302br.net', +'ad.doubleclick.net.42067.9317.302br.net', +'ad.doubleclick.net.42069.9317.302br.net', +'ad.doubleclick.net.42072.9317.302br.net', +'ad.doubleclick.net.42075.9317.302br.net', +'ad.doubleclick.net.42078.9317.302br.net', +'ad.doubleclick.net.42079.9317.302br.net', +'ad.doubleclick.net.42081.9317.302br.net', +'ad.doubleclick.net.42084.9317.302br.net', +'ad.doubleclick.net.42085.9317.302br.net', +'ad.doubleclick.net.42087.9317.302br.net', +'ad.doubleclick.net.42096.9317.302br.net', +'ad.doubleclick.net.42114.9318.302br.net', +'ad.doubleclick.net.42115.9318.302br.net', +'ad.doubleclick.net.42117.9318.302br.net', +'ad.doubleclick.net.42118.9318.302br.net', +'ad.doubleclick.net.42120.9318.302br.net', +'ad.doubleclick.net.42123.9318.302br.net', +'ad.doubleclick.net.42126.9318.302br.net', +'ad.doubleclick.net.42129.9318.302br.net', +'ad.doubleclick.net.42132.9318.302br.net', +'ad.doubleclick.net.42141.9318.302br.net', +'ad.doubleclick.net.42142.9318.302br.net', +'ad.doubleclick.net.42144.9318.302br.net', +'ad.doubleclick.net.42145.9318.302br.net', +'ad.doubleclick.net.42147.9318.302br.net', +'ad.doubleclick.net.42148.9318.302br.net', +'ad.doubleclick.net.42149.9318.302br.net', +'ad.doubleclick.net.42150.9318.302br.net', +'ad.doubleclick.net.42151.9318.302br.net', +'ad.doubleclick.net.42152.9318.302br.net', +'ad.doubleclick.net.42153.9318.302br.net', +'ad.doubleclick.net.42154.9318.302br.net', +'ad.doubleclick.net.42156.9318.302br.net', +'ad.doubleclick.net.42157.9318.302br.net', +'ad.doubleclick.net.42159.9318.302br.net', +'ad.doubleclick.net.42160.9318.302br.net', +'ad.doubleclick.net.42165.9318.302br.net', +'ad.doubleclick.net.42168.9318.302br.net', +'ad.doubleclick.net.42171.9318.302br.net', +'ad.doubleclick.net.42172.9318.302br.net', +'ad.doubleclick.net.42174.9318.302br.net', +'ad.doubleclick.net.42183.9318.302br.net', +'ad.doubleclick.net.42186.9318.302br.net', +'ad.doubleclick.net.42187.9318.302br.net', +'ad.doubleclick.net.42189.9318.302br.net', +'ad.doubleclick.net.42192.9318.302br.net', +'ad.doubleclick.net.42193.9318.302br.net', +'ad.doubleclick.net.42198.9318.302br.net', +'ad.doubleclick.net.42199.9318.302br.net', +'ad.doubleclick.net.42201.9318.302br.net', +'ad.doubleclick.net.42202.9318.302br.net', +'ad.doubleclick.net.42207.9318.302br.net', +'ad.doubleclick.net.42208.9318.302br.net', +'ad.doubleclick.net.42210.9318.302br.net', +'ad.doubleclick.net.42213.9318.302br.net', +'ad.doubleclick.net.42216.9318.302br.net', +'ad.doubleclick.net.42479.9322.302br.net', +'ad.doubleclick.net.42482.9322.302br.net', +'ad.doubleclick.net.42485.9322.302br.net', +'ad.doubleclick.net.42488.9322.302br.net', +'ad.doubleclick.net.42494.9322.302br.net', +'ad.doubleclick.net.42533.9324.302br.net', +'ad.doubleclick.net.42534.9324.302br.net', +'ad.doubleclick.net.42535.9324.302br.net', +'ad.doubleclick.net.42536.9324.302br.net', +'ad.doubleclick.net.42537.9324.302br.net', +'ad.doubleclick.net.42538.9324.302br.net', +'ad.doubleclick.net.42539.9324.302br.net', +'ad.doubleclick.net.42540.9324.302br.net', +'ad.doubleclick.net.42541.9324.302br.net', +'ad.doubleclick.net.42551.9323.302br.net', +'ad.doubleclick.net.42552.9323.302br.net', +'ad.doubleclick.net.42553.9323.302br.net', +'ad.doubleclick.net.42554.9323.302br.net', +'ad.doubleclick.net.42555.9323.302br.net', +'ad.doubleclick.net.42556.9323.302br.net', +'ad.doubleclick.net.42557.9323.302br.net', +'ad.doubleclick.net.42558.9323.302br.net', +'ad.doubleclick.net.42559.9323.302br.net', +'ad.doubleclick.net.42560.9289.302br.net', +'ad.doubleclick.net.42561.9289.302br.net', +'ad.doubleclick.net.42562.9289.302br.net', +'ad.doubleclick.net.42588.9325.302br.net', +'ad.doubleclick.net.42589.9325.302br.net', +'ad.doubleclick.net.42590.9325.302br.net', +'ad.doubleclick.net.42591.9325.302br.net', +'ad.doubleclick.net.42592.9325.302br.net', +'ad.doubleclick.net.42594.9325.302br.net', +'ad.doubleclick.net.42595.9325.302br.net', +'ad.doubleclick.net.42596.9325.302br.net', +'ad.doubleclick.net.426.7000.302br.net', +'ad.doubleclick.net.42600.9325.302br.net', +'ad.doubleclick.net.42601.9325.302br.net', +'ad.doubleclick.net.42603.9325.302br.net', +'ad.doubleclick.net.42604.9325.302br.net', +'ad.doubleclick.net.42605.9325.302br.net', +'ad.doubleclick.net.42606.9325.302br.net', +'ad.doubleclick.net.42607.9325.302br.net', +'ad.doubleclick.net.42609.9325.302br.net', +'ad.doubleclick.net.42610.9325.302br.net', +'ad.doubleclick.net.42613.9325.302br.net', +'ad.doubleclick.net.42616.9325.302br.net', +'ad.doubleclick.net.42619.9325.302br.net', +'ad.doubleclick.net.42620.9325.302br.net', +'ad.doubleclick.net.42621.9325.302br.net', +'ad.doubleclick.net.42622.9325.302br.net', +'ad.doubleclick.net.42627.9325.302br.net', +'ad.doubleclick.net.42628.9325.302br.net', +'ad.doubleclick.net.42630.9325.302br.net', +'ad.doubleclick.net.42631.9325.302br.net', +'ad.doubleclick.net.42641.9325.302br.net', +'ad.doubleclick.net.42654.9325.302br.net', +'ad.doubleclick.net.42655.9325.302br.net', +'ad.doubleclick.net.42668.9325.302br.net', +'ad.doubleclick.net.42724.9240.302br.net', +'ad.doubleclick.net.42730.9240.302br.net', +'ad.doubleclick.net.42739.9239.302br.net', +'ad.doubleclick.net.42750.9164.302br.net', +'ad.doubleclick.net.42751.9164.302br.net', +'ad.doubleclick.net.42753.9164.302br.net', +'ad.doubleclick.net.42754.9164.302br.net', +'ad.doubleclick.net.42756.9164.302br.net', +'ad.doubleclick.net.42757.9164.302br.net', +'ad.doubleclick.net.42971.9166.302br.net', +'ad.doubleclick.net.42973.9166.302br.net', +'ad.doubleclick.net.42974.9166.302br.net', +'ad.doubleclick.net.42976.9166.302br.net', +'ad.doubleclick.net.42977.9166.302br.net', +'ad.doubleclick.net.42979.9166.302br.net', +'ad.doubleclick.net.42980.9166.302br.net', +'ad.doubleclick.net.42982.9166.302br.net', +'ad.doubleclick.net.42983.9166.302br.net', +'ad.doubleclick.net.42985.9166.302br.net', +'ad.doubleclick.net.42986.9166.302br.net', +'ad.doubleclick.net.42988.9166.302br.net', +'ad.doubleclick.net.42989.9166.302br.net', +'ad.doubleclick.net.42991.9166.302br.net', +'ad.doubleclick.net.42997.9081.302br.net', +'ad.doubleclick.net.42999.9082.302br.net', +'ad.doubleclick.net.43000.9082.302br.net', +'ad.doubleclick.net.43001.9082.302br.net', +'ad.doubleclick.net.43003.9082.302br.net', +'ad.doubleclick.net.43004.9082.302br.net', +'ad.doubleclick.net.43006.9325.302br.net', +'ad.doubleclick.net.43007.9325.302br.net', +'ad.doubleclick.net.43009.9325.302br.net', +'ad.doubleclick.net.43010.9325.302br.net', +'ad.doubleclick.net.43015.9325.302br.net', +'ad.doubleclick.net.43016.9325.302br.net', +'ad.doubleclick.net.43020.9325.302br.net', +'ad.doubleclick.net.43024.9325.302br.net', +'ad.doubleclick.net.43025.9325.302br.net', +'ad.doubleclick.net.43027.9325.302br.net', +'ad.doubleclick.net.43028.9325.302br.net', +'ad.doubleclick.net.43030.9325.302br.net', +'ad.doubleclick.net.43031.9325.302br.net', +'ad.doubleclick.net.43033.9325.302br.net', +'ad.doubleclick.net.43034.9325.302br.net', +'ad.doubleclick.net.43036.9325.302br.net', +'ad.doubleclick.net.43037.9325.302br.net', +'ad.doubleclick.net.43047.9296.302br.net', +'ad.doubleclick.net.43048.9296.302br.net', +'ad.doubleclick.net.43049.9296.302br.net', +'ad.doubleclick.net.43050.9296.302br.net', +'ad.doubleclick.net.43051.9296.302br.net', +'ad.doubleclick.net.43052.9296.302br.net', +'ad.doubleclick.net.43063.9296.302br.net', +'ad.doubleclick.net.43064.9296.302br.net', +'ad.doubleclick.net.43065.9296.302br.net', +'ad.doubleclick.net.43066.9296.302br.net', +'ad.doubleclick.net.43067.9296.302br.net', +'ad.doubleclick.net.43068.9296.302br.net', +'ad.doubleclick.net.43071.9285.302br.net', +'ad.doubleclick.net.43072.9285.302br.net', +'ad.doubleclick.net.43073.9285.302br.net', +'ad.doubleclick.net.43074.9285.302br.net', +'ad.doubleclick.net.43075.9285.302br.net', +'ad.doubleclick.net.43076.9285.302br.net', +'ad.doubleclick.net.43077.9285.302br.net', +'ad.doubleclick.net.43078.9285.302br.net', +'ad.doubleclick.net.43079.9285.302br.net', +'ad.doubleclick.net.43080.9285.302br.net', +'ad.doubleclick.net.43081.9285.302br.net', +'ad.doubleclick.net.43082.9285.302br.net', +'ad.doubleclick.net.43083.9285.302br.net', +'ad.doubleclick.net.43084.9285.302br.net', +'ad.doubleclick.net.43085.9285.302br.net', +'ad.doubleclick.net.43086.9285.302br.net', +'ad.doubleclick.net.43087.9285.302br.net', +'ad.doubleclick.net.43088.9285.302br.net', +'ad.doubleclick.net.43089.9285.302br.net', +'ad.doubleclick.net.43090.9285.302br.net', +'ad.doubleclick.net.43091.9285.302br.net', +'ad.doubleclick.net.43092.9285.302br.net', +'ad.doubleclick.net.43093.9285.302br.net', +'ad.doubleclick.net.43094.9285.302br.net', +'ad.doubleclick.net.43119.9296.302br.net', +'ad.doubleclick.net.43120.9296.302br.net', +'ad.doubleclick.net.43121.9296.302br.net', +'ad.doubleclick.net.43122.9296.302br.net', +'ad.doubleclick.net.43125.9296.302br.net', +'ad.doubleclick.net.43126.9296.302br.net', +'ad.doubleclick.net.43127.9296.302br.net', +'ad.doubleclick.net.43128.9296.302br.net', +'ad.doubleclick.net.43129.9296.302br.net', +'ad.doubleclick.net.43130.9296.302br.net', +'ad.doubleclick.net.43131.9296.302br.net', +'ad.doubleclick.net.43132.9296.302br.net', +'ad.doubleclick.net.43133.9295.302br.net', +'ad.doubleclick.net.43134.9295.302br.net', +'ad.doubleclick.net.43135.9295.302br.net', +'ad.doubleclick.net.43137.9295.302br.net', +'ad.doubleclick.net.43138.9295.302br.net', +'ad.doubleclick.net.43150.9329.302br.net', +'ad.doubleclick.net.43153.9329.302br.net', +'ad.doubleclick.net.43156.9329.302br.net', +'ad.doubleclick.net.43159.9329.302br.net', +'ad.doubleclick.net.43162.9329.302br.net', +'ad.doubleclick.net.43165.9329.302br.net', +'ad.doubleclick.net.43168.9329.302br.net', +'ad.doubleclick.net.43171.9329.302br.net', +'ad.doubleclick.net.43174.9329.302br.net', +'ad.doubleclick.net.43177.9329.302br.net', +'ad.doubleclick.net.43180.9329.302br.net', +'ad.doubleclick.net.43183.9329.302br.net', +'ad.doubleclick.net.43186.9329.302br.net', +'ad.doubleclick.net.43189.9329.302br.net', +'ad.doubleclick.net.43192.9329.302br.net', +'ad.doubleclick.net.43195.9329.302br.net', +'ad.doubleclick.net.43198.9329.302br.net', +'ad.doubleclick.net.43201.9329.302br.net', +'ad.doubleclick.net.43204.9329.302br.net', +'ad.doubleclick.net.43207.9329.302br.net', +'ad.doubleclick.net.43210.9329.302br.net', +'ad.doubleclick.net.43213.9329.302br.net', +'ad.doubleclick.net.43216.9329.302br.net', +'ad.doubleclick.net.43219.9329.302br.net', +'ad.doubleclick.net.43288.9331.302br.net', +'ad.doubleclick.net.43291.9331.302br.net', +'ad.doubleclick.net.43294.9331.302br.net', +'ad.doubleclick.net.43297.9331.302br.net', +'ad.doubleclick.net.43300.9331.302br.net', +'ad.doubleclick.net.43303.9331.302br.net', +'ad.doubleclick.net.43319.9330.302br.net', +'ad.doubleclick.net.43320.9330.302br.net', +'ad.doubleclick.net.43323.9330.302br.net', +'ad.doubleclick.net.43328.9330.302br.net', +'ad.doubleclick.net.43329.9330.302br.net', +'ad.doubleclick.net.43331.9330.302br.net', +'ad.doubleclick.net.43332.9330.302br.net', +'ad.doubleclick.net.43334.9330.302br.net', +'ad.doubleclick.net.43338.9330.302br.net', +'ad.doubleclick.net.43454.9315.302br.net', +'ad.doubleclick.net.43456.9315.302br.net', +'ad.doubleclick.net.43458.9315.302br.net', +'ad.doubleclick.net.43459.9315.302br.net', +'ad.doubleclick.net.43460.9315.302br.net', +'ad.doubleclick.net.43465.9315.302br.net', +'ad.doubleclick.net.43468.9315.302br.net', +'ad.doubleclick.net.43469.9315.302br.net', +'ad.doubleclick.net.43474.9315.302br.net', +'ad.doubleclick.net.43480.9315.302br.net', +'ad.doubleclick.net.43483.9315.302br.net', +'ad.doubleclick.net.43487.9315.302br.net', +'ad.doubleclick.net.435.7000.302br.net', +'ad.doubleclick.net.43537.9078.302br.net', +'ad.doubleclick.net.43543.9083.302br.net', +'ad.doubleclick.net.43546.9083.302br.net', +'ad.doubleclick.net.43549.9076.302br.net', +'ad.doubleclick.net.43555.9077.302br.net', +'ad.doubleclick.net.43556.9077.302br.net', +'ad.doubleclick.net.43557.9303.302br.net', +'ad.doubleclick.net.43558.9303.302br.net', +'ad.doubleclick.net.43559.9303.302br.net', +'ad.doubleclick.net.43561.9303.302br.net', +'ad.doubleclick.net.43562.9303.302br.net', +'ad.doubleclick.net.43563.9303.302br.net', +'ad.doubleclick.net.43564.9303.302br.net', +'ad.doubleclick.net.43565.9303.302br.net', +'ad.doubleclick.net.43567.9303.302br.net', +'ad.doubleclick.net.43568.9303.302br.net', +'ad.doubleclick.net.43569.9303.302br.net', +'ad.doubleclick.net.43570.9303.302br.net', +'ad.doubleclick.net.43571.9303.302br.net', +'ad.doubleclick.net.43572.9303.302br.net', +'ad.doubleclick.net.43573.9303.302br.net', +'ad.doubleclick.net.43574.9303.302br.net', +'ad.doubleclick.net.43576.9086.302br.net', +'ad.doubleclick.net.43577.9086.302br.net', +'ad.doubleclick.net.43579.9087.302br.net', +'ad.doubleclick.net.43582.9085.302br.net', +'ad.doubleclick.net.43583.9085.302br.net', +'ad.doubleclick.net.43584.9333.302br.net', +'ad.doubleclick.net.43587.9333.302br.net', +'ad.doubleclick.net.43590.9333.302br.net', +'ad.doubleclick.net.43593.9333.302br.net', +'ad.doubleclick.net.43596.9333.302br.net', +'ad.doubleclick.net.43599.9333.302br.net', +'ad.doubleclick.net.43602.9333.302br.net', +'ad.doubleclick.net.43605.9333.302br.net', +'ad.doubleclick.net.43608.9333.302br.net', +'ad.doubleclick.net.43611.9333.302br.net', +'ad.doubleclick.net.43614.9333.302br.net', +'ad.doubleclick.net.43617.9333.302br.net', +'ad.doubleclick.net.43622.9333.302br.net', +'ad.doubleclick.net.43625.9333.302br.net', +'ad.doubleclick.net.43628.9333.302br.net', +'ad.doubleclick.net.43630.9333.302br.net', +'ad.doubleclick.net.43631.9333.302br.net', +'ad.doubleclick.net.43633.9333.302br.net', +'ad.doubleclick.net.43634.9333.302br.net', +'ad.doubleclick.net.43636.9333.302br.net', +'ad.doubleclick.net.43637.9333.302br.net', +'ad.doubleclick.net.43639.9333.302br.net', +'ad.doubleclick.net.43640.9333.302br.net', +'ad.doubleclick.net.43642.9333.302br.net', +'ad.doubleclick.net.43643.9333.302br.net', +'ad.doubleclick.net.43645.9333.302br.net', +'ad.doubleclick.net.43646.9333.302br.net', +'ad.doubleclick.net.43652.9334.302br.net', +'ad.doubleclick.net.43655.9334.302br.net', +'ad.doubleclick.net.43658.9334.302br.net', +'ad.doubleclick.net.43659.9334.302br.net', +'ad.doubleclick.net.43667.9334.302br.net', +'ad.doubleclick.net.43670.9334.302br.net', +'ad.doubleclick.net.43673.9334.302br.net', +'ad.doubleclick.net.43676.9335.302br.net', +'ad.doubleclick.net.43679.9335.302br.net', +'ad.doubleclick.net.43680.9335.302br.net', +'ad.doubleclick.net.43682.9335.302br.net', +'ad.doubleclick.net.43685.9335.302br.net', +'ad.doubleclick.net.43686.9335.302br.net', +'ad.doubleclick.net.43688.9335.302br.net', +'ad.doubleclick.net.43689.9335.302br.net', +'ad.doubleclick.net.43691.9335.302br.net', +'ad.doubleclick.net.43694.9335.302br.net', +'ad.doubleclick.net.43695.9335.302br.net', +'ad.doubleclick.net.43697.9335.302br.net', +'ad.doubleclick.net.43700.9335.302br.net', +'ad.doubleclick.net.43703.9335.302br.net', +'ad.doubleclick.net.43719.9335.302br.net', +'ad.doubleclick.net.43721.9335.302br.net', +'ad.doubleclick.net.43725.9335.302br.net', +'ad.doubleclick.net.43727.9335.302br.net', +'ad.doubleclick.net.43728.9335.302br.net', +'ad.doubleclick.net.43730.9335.302br.net', +'ad.doubleclick.net.43734.9335.302br.net', +'ad.doubleclick.net.43736.9335.302br.net', +'ad.doubleclick.net.43737.9335.302br.net', +'ad.doubleclick.net.43739.9335.302br.net', +'ad.doubleclick.net.43740.9335.302br.net', +'ad.doubleclick.net.43742.9335.302br.net', +'ad.doubleclick.net.43752.9335.302br.net', +'ad.doubleclick.net.43754.9335.302br.net', +'ad.doubleclick.net.43755.9335.302br.net', +'ad.doubleclick.net.43757.9335.302br.net', +'ad.doubleclick.net.43758.9335.302br.net', +'ad.doubleclick.net.43788.9335.302br.net', +'ad.doubleclick.net.43790.9335.302br.net', +'ad.doubleclick.net.43791.9335.302br.net', +'ad.doubleclick.net.43793.9335.302br.net', +'ad.doubleclick.net.43794.9335.302br.net', +'ad.doubleclick.net.43796.9335.302br.net', +'ad.doubleclick.net.43799.9335.302br.net', +'ad.doubleclick.net.438.7000.302br.net', +'ad.doubleclick.net.43800.9335.302br.net', +'ad.doubleclick.net.43802.9335.302br.net', +'ad.doubleclick.net.43803.9335.302br.net', +'ad.doubleclick.net.43805.9335.302br.net', +'ad.doubleclick.net.43812.9335.302br.net', +'ad.doubleclick.net.43813.9335.302br.net', +'ad.doubleclick.net.43814.9335.302br.net', +'ad.doubleclick.net.43816.9335.302br.net', +'ad.doubleclick.net.43817.9335.302br.net', +'ad.doubleclick.net.43822.9335.302br.net', +'ad.doubleclick.net.43823.9335.302br.net', +'ad.doubleclick.net.43846.9315.302br.net', +'ad.doubleclick.net.43849.9315.302br.net', +'ad.doubleclick.net.43864.9315.302br.net', +'ad.doubleclick.net.43865.9315.302br.net', +'ad.doubleclick.net.43866.9315.302br.net', +'ad.doubleclick.net.43867.9315.302br.net', +'ad.doubleclick.net.43868.9315.302br.net', +'ad.doubleclick.net.43870.9315.302br.net', +'ad.doubleclick.net.43871.9315.302br.net', +'ad.doubleclick.net.439.7000.302br.net', +'ad.doubleclick.net.44218.9336.302br.net', +'ad.doubleclick.net.44219.9336.302br.net', +'ad.doubleclick.net.44221.9336.302br.net', +'ad.doubleclick.net.44222.9336.302br.net', +'ad.doubleclick.net.44224.9336.302br.net', +'ad.doubleclick.net.44227.9336.302br.net', +'ad.doubleclick.net.44230.9336.302br.net', +'ad.doubleclick.net.44233.9336.302br.net', +'ad.doubleclick.net.44236.9336.302br.net', +'ad.doubleclick.net.44239.9336.302br.net', +'ad.doubleclick.net.44240.9336.302br.net', +'ad.doubleclick.net.44242.9336.302br.net', +'ad.doubleclick.net.44243.9336.302br.net', +'ad.doubleclick.net.44245.9336.302br.net', +'ad.doubleclick.net.44246.9336.302br.net', +'ad.doubleclick.net.44248.9336.302br.net', +'ad.doubleclick.net.44249.9336.302br.net', +'ad.doubleclick.net.44260.9336.302br.net', +'ad.doubleclick.net.44269.9336.302br.net', +'ad.doubleclick.net.44272.9336.302br.net', +'ad.doubleclick.net.44273.9336.302br.net', +'ad.doubleclick.net.44275.9336.302br.net', +'ad.doubleclick.net.44276.9336.302br.net', +'ad.doubleclick.net.44278.9336.302br.net', +'ad.doubleclick.net.44279.9336.302br.net', +'ad.doubleclick.net.44281.9336.302br.net', +'ad.doubleclick.net.44284.9336.302br.net', +'ad.doubleclick.net.44285.9336.302br.net', +'ad.doubleclick.net.44287.9336.302br.net', +'ad.doubleclick.net.44290.9336.302br.net', +'ad.doubleclick.net.44293.9336.302br.net', +'ad.doubleclick.net.44296.9336.302br.net', +'ad.doubleclick.net.44299.9336.302br.net', +'ad.doubleclick.net.44302.9336.302br.net', +'ad.doubleclick.net.44303.9336.302br.net', +'ad.doubleclick.net.44305.9336.302br.net', +'ad.doubleclick.net.44306.9336.302br.net', +'ad.doubleclick.net.44308.9336.302br.net', +'ad.doubleclick.net.44311.9336.302br.net', +'ad.doubleclick.net.44312.9336.302br.net', +'ad.doubleclick.net.44314.9336.302br.net', +'ad.doubleclick.net.44315.9336.302br.net', +'ad.doubleclick.net.44317.9336.302br.net', +'ad.doubleclick.net.44320.9336.302br.net', +'ad.doubleclick.net.44323.9336.302br.net', +'ad.doubleclick.net.44324.9336.302br.net', +'ad.doubleclick.net.44326.9336.302br.net', +'ad.doubleclick.net.44338.9336.302br.net', +'ad.doubleclick.net.44341.9336.302br.net', +'ad.doubleclick.net.44344.9336.302br.net', +'ad.doubleclick.net.44347.9336.302br.net', +'ad.doubleclick.net.44348.9336.302br.net', +'ad.doubleclick.net.44350.9336.302br.net', +'ad.doubleclick.net.44351.9336.302br.net', +'ad.doubleclick.net.44353.9336.302br.net', +'ad.doubleclick.net.44354.9336.302br.net', +'ad.doubleclick.net.44356.9336.302br.net', +'ad.doubleclick.net.44357.9336.302br.net', +'ad.doubleclick.net.44359.9336.302br.net', +'ad.doubleclick.net.44360.9336.302br.net', +'ad.doubleclick.net.44362.9336.302br.net', +'ad.doubleclick.net.44363.9336.302br.net', +'ad.doubleclick.net.44365.9336.302br.net', +'ad.doubleclick.net.44366.9336.302br.net', +'ad.doubleclick.net.44368.9336.302br.net', +'ad.doubleclick.net.44369.9336.302br.net', +'ad.doubleclick.net.44371.9336.302br.net', +'ad.doubleclick.net.44374.9336.302br.net', +'ad.doubleclick.net.44375.9336.302br.net', +'ad.doubleclick.net.44377.9336.302br.net', +'ad.doubleclick.net.44380.9336.302br.net', +'ad.doubleclick.net.44381.9336.302br.net', +'ad.doubleclick.net.44383.9336.302br.net', +'ad.doubleclick.net.44384.9336.302br.net', +'ad.doubleclick.net.44386.9336.302br.net', +'ad.doubleclick.net.44387.9336.302br.net', +'ad.doubleclick.net.44389.9336.302br.net', +'ad.doubleclick.net.44390.9336.302br.net', +'ad.doubleclick.net.44392.9336.302br.net', +'ad.doubleclick.net.44393.9336.302br.net', +'ad.doubleclick.net.44395.9336.302br.net', +'ad.doubleclick.net.44398.9336.302br.net', +'ad.doubleclick.net.44401.9336.302br.net', +'ad.doubleclick.net.44402.9336.302br.net', +'ad.doubleclick.net.44404.9336.302br.net', +'ad.doubleclick.net.44407.9336.302br.net', +'ad.doubleclick.net.44409.9336.302br.net', +'ad.doubleclick.net.44410.9336.302br.net', +'ad.doubleclick.net.44411.9336.302br.net', +'ad.doubleclick.net.44412.9336.302br.net', +'ad.doubleclick.net.44413.9336.302br.net', +'ad.doubleclick.net.44414.9336.302br.net', +'ad.doubleclick.net.44415.9336.302br.net', +'ad.doubleclick.net.44416.9336.302br.net', +'ad.doubleclick.net.44417.9336.302br.net', +'ad.doubleclick.net.44418.9336.302br.net', +'ad.doubleclick.net.44419.9336.302br.net', +'ad.doubleclick.net.44420.9336.302br.net', +'ad.doubleclick.net.44425.9336.302br.net', +'ad.doubleclick.net.44428.9336.302br.net', +'ad.doubleclick.net.44434.9336.302br.net', +'ad.doubleclick.net.44440.9336.302br.net', +'ad.doubleclick.net.44441.9336.302br.net', +'ad.doubleclick.net.44443.9336.302br.net', +'ad.doubleclick.net.44444.9336.302br.net', +'ad.doubleclick.net.44446.9336.302br.net', +'ad.doubleclick.net.44447.9336.302br.net', +'ad.doubleclick.net.44449.9336.302br.net', +'ad.doubleclick.net.44452.9336.302br.net', +'ad.doubleclick.net.44455.9336.302br.net', +'ad.doubleclick.net.44456.9336.302br.net', +'ad.doubleclick.net.44461.9336.302br.net', +'ad.doubleclick.net.44464.9336.302br.net', +'ad.doubleclick.net.44467.9336.302br.net', +'ad.doubleclick.net.44470.9336.302br.net', +'ad.doubleclick.net.44473.9336.302br.net', +'ad.doubleclick.net.44474.9336.302br.net', +'ad.doubleclick.net.44476.9336.302br.net', +'ad.doubleclick.net.44479.9336.302br.net', +'ad.doubleclick.net.44482.9336.302br.net', +'ad.doubleclick.net.44483.9336.302br.net', +'ad.doubleclick.net.44485.9336.302br.net', +'ad.doubleclick.net.44486.9336.302br.net', +'ad.doubleclick.net.44488.9336.302br.net', +'ad.doubleclick.net.44489.9336.302br.net', +'ad.doubleclick.net.44491.9336.302br.net', +'ad.doubleclick.net.44494.9336.302br.net', +'ad.doubleclick.net.44495.9336.302br.net', +'ad.doubleclick.net.445.7000.302br.net', +'ad.doubleclick.net.44500.9336.302br.net', +'ad.doubleclick.net.44503.9336.302br.net', +'ad.doubleclick.net.44504.9336.302br.net', +'ad.doubleclick.net.44506.9336.302br.net', +'ad.doubleclick.net.44507.9336.302br.net', +'ad.doubleclick.net.44509.9336.302br.net', +'ad.doubleclick.net.44512.9336.302br.net', +'ad.doubleclick.net.44513.9336.302br.net', +'ad.doubleclick.net.44515.9336.302br.net', +'ad.doubleclick.net.44517.9336.302br.net', +'ad.doubleclick.net.44518.9336.302br.net', +'ad.doubleclick.net.44519.9336.302br.net', +'ad.doubleclick.net.44521.9336.302br.net', +'ad.doubleclick.net.44522.9336.302br.net', +'ad.doubleclick.net.44523.9336.302br.net', +'ad.doubleclick.net.44524.9336.302br.net', +'ad.doubleclick.net.44525.9336.302br.net', +'ad.doubleclick.net.44526.9336.302br.net', +'ad.doubleclick.net.44527.9336.302br.net', +'ad.doubleclick.net.44528.9336.302br.net', +'ad.doubleclick.net.44529.9336.302br.net', +'ad.doubleclick.net.44530.9336.302br.net', +'ad.doubleclick.net.44531.9336.302br.net', +'ad.doubleclick.net.44532.9336.302br.net', +'ad.doubleclick.net.44533.9336.302br.net', +'ad.doubleclick.net.44534.9336.302br.net', +'ad.doubleclick.net.44535.9336.302br.net', +'ad.doubleclick.net.44536.9336.302br.net', +'ad.doubleclick.net.44537.9336.302br.net', +'ad.doubleclick.net.44538.9336.302br.net', +'ad.doubleclick.net.44539.9336.302br.net', +'ad.doubleclick.net.44540.9336.302br.net', +'ad.doubleclick.net.44542.9336.302br.net', +'ad.doubleclick.net.44545.9336.302br.net', +'ad.doubleclick.net.44548.9336.302br.net', +'ad.doubleclick.net.44551.9336.302br.net', +'ad.doubleclick.net.44552.9336.302br.net', +'ad.doubleclick.net.44554.9336.302br.net', +'ad.doubleclick.net.44555.9336.302br.net', +'ad.doubleclick.net.44557.9336.302br.net', +'ad.doubleclick.net.44558.9336.302br.net', +'ad.doubleclick.net.44571.9335.302br.net', +'ad.doubleclick.net.44573.9335.302br.net', +'ad.doubleclick.net.44574.9335.302br.net', +'ad.doubleclick.net.44576.9335.302br.net', +'ad.doubleclick.net.44580.9335.302br.net', +'ad.doubleclick.net.44582.9335.302br.net', +'ad.doubleclick.net.44583.9335.302br.net', +'ad.doubleclick.net.44585.9335.302br.net', +'ad.doubleclick.net.44592.9335.302br.net', +'ad.doubleclick.net.44597.9335.302br.net', +'ad.doubleclick.net.446.7000.302br.net', +'ad.doubleclick.net.44607.9335.302br.net', +'ad.doubleclick.net.44608.9335.302br.net', +'ad.doubleclick.net.44609.9335.302br.net', +'ad.doubleclick.net.44610.9335.302br.net', +'ad.doubleclick.net.44611.9335.302br.net', +'ad.doubleclick.net.44612.9335.302br.net', +'ad.doubleclick.net.44614.9335.302br.net', +'ad.doubleclick.net.44615.9335.302br.net', +'ad.doubleclick.net.447.7000.302br.net', +'ad.doubleclick.net.44803.9079.302br.net', +'ad.doubleclick.net.44818.9338.302br.net', +'ad.doubleclick.net.44821.9338.302br.net', +'ad.doubleclick.net.44823.9338.302br.net', +'ad.doubleclick.net.44824.9338.302br.net', +'ad.doubleclick.net.44825.9338.302br.net', +'ad.doubleclick.net.44826.9338.302br.net', +'ad.doubleclick.net.44827.9338.302br.net', +'ad.doubleclick.net.44828.9338.302br.net', +'ad.doubleclick.net.44889.9339.302br.net', +'ad.doubleclick.net.44890.9339.302br.net', +'ad.doubleclick.net.44891.9339.302br.net', +'ad.doubleclick.net.44892.9339.302br.net', +'ad.doubleclick.net.44893.9339.302br.net', +'ad.doubleclick.net.44894.9339.302br.net', +'ad.doubleclick.net.44895.9339.302br.net', +'ad.doubleclick.net.44896.9339.302br.net', +'ad.doubleclick.net.44897.9339.302br.net', +'ad.doubleclick.net.44898.9339.302br.net', +'ad.doubleclick.net.44899.9339.302br.net', +'ad.doubleclick.net.44900.9339.302br.net', +'ad.doubleclick.net.44901.9339.302br.net', +'ad.doubleclick.net.44902.9339.302br.net', +'ad.doubleclick.net.44903.9339.302br.net', +'ad.doubleclick.net.44905.9339.302br.net', +'ad.doubleclick.net.44906.9339.302br.net', +'ad.doubleclick.net.44908.9339.302br.net', +'ad.doubleclick.net.44909.9339.302br.net', +'ad.doubleclick.net.44910.9339.302br.net', +'ad.doubleclick.net.44911.9339.302br.net', +'ad.doubleclick.net.44912.9339.302br.net', +'ad.doubleclick.net.44913.9339.302br.net', +'ad.doubleclick.net.44914.9339.302br.net', +'ad.doubleclick.net.44915.9339.302br.net', +'ad.doubleclick.net.44916.9339.302br.net', +'ad.doubleclick.net.44917.9339.302br.net', +'ad.doubleclick.net.44918.9339.302br.net', +'ad.doubleclick.net.44919.9339.302br.net', +'ad.doubleclick.net.44920.9339.302br.net', +'ad.doubleclick.net.44921.9339.302br.net', +'ad.doubleclick.net.44922.9339.302br.net', +'ad.doubleclick.net.44923.9339.302br.net', +'ad.doubleclick.net.44924.9339.302br.net', +'ad.doubleclick.net.44926.9339.302br.net', +'ad.doubleclick.net.44927.9339.302br.net', +'ad.doubleclick.net.44929.9339.302br.net', +'ad.doubleclick.net.44930.9339.302br.net', +'ad.doubleclick.net.44931.9339.302br.net', +'ad.doubleclick.net.44932.9339.302br.net', +'ad.doubleclick.net.44933.9339.302br.net', +'ad.doubleclick.net.44934.9339.302br.net', +'ad.doubleclick.net.44937.9339.302br.net', +'ad.doubleclick.net.44955.9250.302br.net', +'ad.doubleclick.net.44958.9250.302br.net', +'ad.doubleclick.net.45034.9341.302br.net', +'ad.doubleclick.net.45035.9341.302br.net', +'ad.doubleclick.net.45037.9341.302br.net', +'ad.doubleclick.net.45038.9341.302br.net', +'ad.doubleclick.net.45040.9341.302br.net', +'ad.doubleclick.net.45041.9341.302br.net', +'ad.doubleclick.net.45396.9285.302br.net', +'ad.doubleclick.net.45397.9285.302br.net', +'ad.doubleclick.net.45398.9285.302br.net', +'ad.doubleclick.net.45399.9285.302br.net', +'ad.doubleclick.net.45400.9285.302br.net', +'ad.doubleclick.net.45401.9285.302br.net', +'ad.doubleclick.net.45402.9285.302br.net', +'ad.doubleclick.net.45403.9285.302br.net', +'ad.doubleclick.net.45404.9285.302br.net', +'ad.doubleclick.net.45405.9285.302br.net', +'ad.doubleclick.net.45406.9285.302br.net', +'ad.doubleclick.net.45407.9285.302br.net', +'ad.doubleclick.net.45408.9285.302br.net', +'ad.doubleclick.net.45409.9285.302br.net', +'ad.doubleclick.net.45410.9285.302br.net', +'ad.doubleclick.net.45411.9285.302br.net', +'ad.doubleclick.net.45412.9285.302br.net', +'ad.doubleclick.net.45413.9285.302br.net', +'ad.doubleclick.net.45441.9344.302br.net', +'ad.doubleclick.net.45443.9344.302br.net', +'ad.doubleclick.net.45444.9344.302br.net', +'ad.doubleclick.net.45446.9344.302br.net', +'ad.doubleclick.net.45450.9344.302br.net', +'ad.doubleclick.net.45452.9344.302br.net', +'ad.doubleclick.net.45462.9344.302br.net', +'ad.doubleclick.net.45464.9344.302br.net', +'ad.doubleclick.net.45465.9344.302br.net', +'ad.doubleclick.net.45467.9344.302br.net', +'ad.doubleclick.net.45468.9344.302br.net', +'ad.doubleclick.net.45470.9344.302br.net', +'ad.doubleclick.net.45471.9344.302br.net', +'ad.doubleclick.net.45473.9344.302br.net', +'ad.doubleclick.net.45474.9344.302br.net', +'ad.doubleclick.net.45476.9344.302br.net', +'ad.doubleclick.net.45477.9344.302br.net', +'ad.doubleclick.net.45479.9344.302br.net', +'ad.doubleclick.net.45480.9344.302br.net', +'ad.doubleclick.net.45482.9344.302br.net', +'ad.doubleclick.net.45485.9344.302br.net', +'ad.doubleclick.net.45492.9268.302br.net', +'ad.doubleclick.net.45493.9268.302br.net', +'ad.doubleclick.net.45494.9268.302br.net', +'ad.doubleclick.net.45495.9268.302br.net', +'ad.doubleclick.net.45496.9268.302br.net', +'ad.doubleclick.net.45497.9268.302br.net', +'ad.doubleclick.net.45499.9268.302br.net', +'ad.doubleclick.net.45500.9268.302br.net', +'ad.doubleclick.net.45501.9279.302br.net', +'ad.doubleclick.net.45502.9279.302br.net', +'ad.doubleclick.net.45503.9279.302br.net', +'ad.doubleclick.net.45505.9279.302br.net', +'ad.doubleclick.net.45506.9279.302br.net', +'ad.doubleclick.net.45507.9279.302br.net', +'ad.doubleclick.net.45508.9279.302br.net', +'ad.doubleclick.net.45509.9279.302br.net', +'ad.doubleclick.net.45510.9279.302br.net', +'ad.doubleclick.net.45511.9279.302br.net', +'ad.doubleclick.net.45512.9279.302br.net', +'ad.doubleclick.net.45514.9279.302br.net', +'ad.doubleclick.net.45515.9279.302br.net', +'ad.doubleclick.net.45516.9279.302br.net', +'ad.doubleclick.net.45517.9279.302br.net', +'ad.doubleclick.net.45518.9279.302br.net', +'ad.doubleclick.net.45519.9279.302br.net', +'ad.doubleclick.net.45520.9279.302br.net', +'ad.doubleclick.net.45521.9279.302br.net', +'ad.doubleclick.net.45523.9279.302br.net', +'ad.doubleclick.net.45524.9279.302br.net', +'ad.doubleclick.net.45525.9279.302br.net', +'ad.doubleclick.net.45526.9279.302br.net', +'ad.doubleclick.net.45527.9279.302br.net', +'ad.doubleclick.net.45529.9279.302br.net', +'ad.doubleclick.net.45530.9279.302br.net', +'ad.doubleclick.net.45532.9279.302br.net', +'ad.doubleclick.net.45533.9279.302br.net', +'ad.doubleclick.net.45538.9279.302br.net', +'ad.doubleclick.net.45539.9279.302br.net', +'ad.doubleclick.net.45541.9279.302br.net', +'ad.doubleclick.net.45542.9279.302br.net', +'ad.doubleclick.net.45543.9279.302br.net', +'ad.doubleclick.net.45544.9279.302br.net', +'ad.doubleclick.net.45545.9279.302br.net', +'ad.doubleclick.net.45546.9279.302br.net', +'ad.doubleclick.net.45547.9279.302br.net', +'ad.doubleclick.net.45548.9279.302br.net', +'ad.doubleclick.net.45550.9279.302br.net', +'ad.doubleclick.net.45551.9279.302br.net', +'ad.doubleclick.net.45553.9279.302br.net', +'ad.doubleclick.net.45554.9279.302br.net', +'ad.doubleclick.net.45556.9279.302br.net', +'ad.doubleclick.net.45557.9279.302br.net', +'ad.doubleclick.net.45558.9279.302br.net', +'ad.doubleclick.net.45559.9279.302br.net', +'ad.doubleclick.net.45560.9279.302br.net', +'ad.doubleclick.net.45562.9279.302br.net', +'ad.doubleclick.net.45563.9279.302br.net', +'ad.doubleclick.net.45565.9279.302br.net', +'ad.doubleclick.net.45566.9279.302br.net', +'ad.doubleclick.net.45568.9279.302br.net', +'ad.doubleclick.net.45569.9279.302br.net', +'ad.doubleclick.net.45570.9279.302br.net', +'ad.doubleclick.net.45571.9279.302br.net', +'ad.doubleclick.net.45572.9279.302br.net', +'ad.doubleclick.net.45573.9279.302br.net', +'ad.doubleclick.net.45574.9279.302br.net', +'ad.doubleclick.net.45575.9279.302br.net', +'ad.doubleclick.net.45576.9279.302br.net', +'ad.doubleclick.net.45577.9279.302br.net', +'ad.doubleclick.net.45578.9279.302br.net', +'ad.doubleclick.net.45580.9279.302br.net', +'ad.doubleclick.net.45581.9279.302br.net', +'ad.doubleclick.net.45583.9279.302br.net', +'ad.doubleclick.net.45584.9279.302br.net', +'ad.doubleclick.net.45586.9279.302br.net', +'ad.doubleclick.net.45587.9279.302br.net', +'ad.doubleclick.net.45589.9279.302br.net', +'ad.doubleclick.net.45590.9279.302br.net', +'ad.doubleclick.net.45591.9279.302br.net', +'ad.doubleclick.net.45592.9279.302br.net', +'ad.doubleclick.net.45593.9279.302br.net', +'ad.doubleclick.net.45595.9279.302br.net', +'ad.doubleclick.net.45596.9279.302br.net', +'ad.doubleclick.net.45598.9279.302br.net', +'ad.doubleclick.net.45599.9279.302br.net', +'ad.doubleclick.net.45600.9346.302br.net', +'ad.doubleclick.net.45601.9346.302br.net', +'ad.doubleclick.net.45602.9346.302br.net', +'ad.doubleclick.net.45603.9346.302br.net', +'ad.doubleclick.net.45604.9346.302br.net', +'ad.doubleclick.net.45605.9346.302br.net', +'ad.doubleclick.net.45606.9346.302br.net', +'ad.doubleclick.net.45607.9346.302br.net', +'ad.doubleclick.net.45608.9346.302br.net', +'ad.doubleclick.net.45610.9346.302br.net', +'ad.doubleclick.net.45611.9346.302br.net', +'ad.doubleclick.net.45612.9346.302br.net', +'ad.doubleclick.net.45613.9346.302br.net', +'ad.doubleclick.net.45614.9346.302br.net', +'ad.doubleclick.net.45616.9346.302br.net', +'ad.doubleclick.net.45617.9346.302br.net', +'ad.doubleclick.net.45620.9346.302br.net', +'ad.doubleclick.net.45623.9346.302br.net', +'ad.doubleclick.net.45630.9346.302br.net', +'ad.doubleclick.net.45632.9346.302br.net', +'ad.doubleclick.net.45633.9346.302br.net', +'ad.doubleclick.net.45636.9346.302br.net', +'ad.doubleclick.net.45638.9346.302br.net', +'ad.doubleclick.net.45639.9346.302br.net', +'ad.doubleclick.net.45642.9346.302br.net', +'ad.doubleclick.net.45644.9346.302br.net', +'ad.doubleclick.net.45645.9346.302br.net', +'ad.doubleclick.net.45656.9346.302br.net', +'ad.doubleclick.net.47217.9350.302br.net', +'ad.doubleclick.net.47220.9350.302br.net', +'ad.doubleclick.net.47223.9350.302br.net', +'ad.doubleclick.net.47226.9350.302br.net', +'ad.doubleclick.net.47229.9350.302br.net', +'ad.doubleclick.net.47232.9350.302br.net', +'ad.doubleclick.net.47234.9350.302br.net', +'ad.doubleclick.net.47236.9350.302br.net', +'ad.doubleclick.net.47237.9350.302br.net', +'ad.doubleclick.net.47239.9350.302br.net', +'ad.doubleclick.net.47240.9350.302br.net', +'ad.doubleclick.net.47242.9350.302br.net', +'ad.doubleclick.net.47243.9350.302br.net', +'ad.doubleclick.net.47245.9350.302br.net', +'ad.doubleclick.net.47246.9350.302br.net', +'ad.doubleclick.net.47248.9350.302br.net', +'ad.doubleclick.net.47249.9350.302br.net', +'ad.doubleclick.net.47251.9350.302br.net', +'ad.doubleclick.net.47252.9350.302br.net', +'ad.doubleclick.net.47254.9350.302br.net', +'ad.doubleclick.net.47255.9350.302br.net', +'ad.doubleclick.net.47257.9350.302br.net', +'ad.doubleclick.net.47260.9350.302br.net', +'ad.doubleclick.net.47274.9350.302br.net', +'ad.doubleclick.net.47275.9350.302br.net', +'ad.doubleclick.net.47277.9350.302br.net', +'ad.doubleclick.net.47278.9350.302br.net', +'ad.doubleclick.net.47293.9311.302br.net', +'ad.doubleclick.net.47296.9311.302br.net', +'ad.doubleclick.net.47299.9311.302br.net', +'ad.doubleclick.net.47302.9311.302br.net', +'ad.doubleclick.net.47305.9311.302br.net', +'ad.doubleclick.net.47308.9311.302br.net', +'ad.doubleclick.net.47309.9311.302br.net', +'ad.doubleclick.net.47317.9311.302br.net', +'ad.doubleclick.net.47318.9311.302br.net', +'ad.doubleclick.net.47326.9311.302br.net', +'ad.doubleclick.net.47332.9311.302br.net', +'ad.doubleclick.net.47333.9311.302br.net', +'ad.doubleclick.net.47335.9311.302br.net', +'ad.doubleclick.net.47338.9311.302br.net', +'ad.doubleclick.net.47339.9311.302br.net', +'ad.doubleclick.net.47341.9311.302br.net', +'ad.doubleclick.net.47347.9311.302br.net', +'ad.doubleclick.net.47348.9311.302br.net', +'ad.doubleclick.net.47356.9311.302br.net', +'ad.doubleclick.net.47357.9311.302br.net', +'ad.doubleclick.net.47374.9311.302br.net', +'ad.doubleclick.net.47375.9311.302br.net', +'ad.doubleclick.net.47380.9311.302br.net', +'ad.doubleclick.net.47386.9311.302br.net', +'ad.doubleclick.net.47389.9311.302br.net', +'ad.doubleclick.net.47395.9311.302br.net', +'ad.doubleclick.net.47396.9311.302br.net', +'ad.doubleclick.net.47401.9311.302br.net', +'ad.doubleclick.net.47402.9311.302br.net', +'ad.doubleclick.net.47404.9311.302br.net', +'ad.doubleclick.net.47416.9311.302br.net', +'ad.doubleclick.net.47417.9311.302br.net', +'ad.doubleclick.net.47420.9311.302br.net', +'ad.doubleclick.net.47423.9311.302br.net', +'ad.doubleclick.net.47426.9311.302br.net', +'ad.doubleclick.net.47429.9311.302br.net', +'ad.doubleclick.net.47432.9311.302br.net', +'ad.doubleclick.net.47435.9311.302br.net', +'ad.doubleclick.net.47441.9311.302br.net', +'ad.doubleclick.net.47462.9311.302br.net', +'ad.doubleclick.net.47474.9311.302br.net', +'ad.doubleclick.net.47507.9311.302br.net', +'ad.doubleclick.net.47917.9357.302br.net', +'ad.doubleclick.net.47919.9357.302br.net', +'ad.doubleclick.net.47936.9357.302br.net', +'ad.doubleclick.net.47938.9357.302br.net', +'ad.doubleclick.net.47940.9357.302br.net', +'ad.doubleclick.net.47941.9357.302br.net', +'ad.doubleclick.net.47943.9357.302br.net', +'ad.doubleclick.net.47944.9357.302br.net', +'ad.doubleclick.net.47946.9357.302br.net', +'ad.doubleclick.net.47947.9357.302br.net', +'ad.doubleclick.net.47949.9357.302br.net', +'ad.doubleclick.net.47950.9357.302br.net', +'ad.doubleclick.net.47951.9357.302br.net', +'ad.doubleclick.net.47954.9357.302br.net', +'ad.doubleclick.net.47957.9357.302br.net', +'ad.doubleclick.net.47961.9357.302br.net', +'ad.doubleclick.net.47964.9357.302br.net', +'ad.doubleclick.net.47967.9357.302br.net', +'ad.doubleclick.net.47978.9357.302br.net', +'ad.doubleclick.net.47979.9357.302br.net', +'ad.doubleclick.net.47980.9357.302br.net', +'ad.doubleclick.net.47982.9357.302br.net', +'ad.doubleclick.net.47983.9357.302br.net', +'ad.doubleclick.net.47984.9357.302br.net', +'ad.doubleclick.net.47985.9357.302br.net', +'ad.doubleclick.net.47986.9357.302br.net', +'ad.doubleclick.net.47988.9357.302br.net', +'ad.doubleclick.net.47989.9357.302br.net', +'ad.doubleclick.net.47990.9357.302br.net', +'ad.doubleclick.net.47991.9357.302br.net', +'ad.doubleclick.net.47992.9357.302br.net', +'ad.doubleclick.net.47993.9357.302br.net', +'ad.doubleclick.net.47994.9357.302br.net', +'ad.doubleclick.net.47995.9357.302br.net', +'ad.doubleclick.net.48408.9318.302br.net', +'ad.doubleclick.net.48410.9318.302br.net', +'ad.doubleclick.net.48415.9318.302br.net', +'ad.doubleclick.net.48417.9318.302br.net', +'ad.doubleclick.net.48422.9318.302br.net', +'ad.doubleclick.net.48424.9318.302br.net', +'ad.doubleclick.net.48441.9318.302br.net', +'ad.doubleclick.net.48444.9318.302br.net', +'ad.doubleclick.net.48452.9318.302br.net', +'ad.doubleclick.net.48458.9318.302br.net', +'ad.doubleclick.net.48460.9318.302br.net', +'ad.doubleclick.net.48465.9318.302br.net', +'ad.doubleclick.net.48467.9318.302br.net', +'ad.doubleclick.net.48471.9318.302br.net', +'ad.doubleclick.net.48478.9318.302br.net', +'ad.doubleclick.net.48480.9318.302br.net', +'ad.doubleclick.net.48485.9318.302br.net', +'ad.doubleclick.net.48487.9318.302br.net', +'ad.doubleclick.net.48492.9318.302br.net', +'ad.doubleclick.net.48494.9318.302br.net', +'ad.doubleclick.net.48504.9318.302br.net', +'ad.doubleclick.net.48506.9318.302br.net', +'ad.doubleclick.net.48512.9318.302br.net', +'ad.doubleclick.net.48514.9318.302br.net', +'ad.doubleclick.net.48517.9318.302br.net', +'ad.doubleclick.net.48519.9318.302br.net', +'ad.doubleclick.net.48521.9318.302br.net', +'ad.doubleclick.net.48523.9318.302br.net', +'ad.doubleclick.net.48524.9318.302br.net', +'ad.doubleclick.net.48526.9318.302br.net', +'ad.doubleclick.net.48529.9318.302br.net', +'ad.doubleclick.net.48531.9318.302br.net', +'ad.doubleclick.net.48532.9318.302br.net', +'ad.doubleclick.net.48533.9318.302br.net', +'ad.doubleclick.net.48534.9318.302br.net', +'ad.doubleclick.net.48535.9318.302br.net', +'ad.doubleclick.net.48536.9318.302br.net', +'ad.doubleclick.net.48538.9318.302br.net', +'ad.doubleclick.net.48541.9318.302br.net', +'ad.doubleclick.net.48542.9318.302br.net', +'ad.doubleclick.net.48544.9318.302br.net', +'ad.doubleclick.net.48545.9318.302br.net', +'ad.doubleclick.net.48547.9318.302br.net', +'ad.doubleclick.net.48548.9318.302br.net', +'ad.doubleclick.net.48550.9318.302br.net', +'ad.doubleclick.net.48551.9318.302br.net', +'ad.doubleclick.net.48553.9318.302br.net', +'ad.doubleclick.net.48554.9318.302br.net', +'ad.doubleclick.net.48556.9318.302br.net', +'ad.doubleclick.net.48557.9318.302br.net', +'ad.doubleclick.net.48558.9318.302br.net', +'ad.doubleclick.net.48559.9318.302br.net', +'ad.doubleclick.net.48560.9318.302br.net', +'ad.doubleclick.net.48562.9318.302br.net', +'ad.doubleclick.net.48563.9318.302br.net', +'ad.doubleclick.net.48565.9318.302br.net', +'ad.doubleclick.net.48566.9318.302br.net', +'ad.doubleclick.net.48568.9318.302br.net', +'ad.doubleclick.net.48569.9318.302br.net', +'ad.doubleclick.net.48571.9318.302br.net', +'ad.doubleclick.net.48574.9318.302br.net', +'ad.doubleclick.net.48577.9318.302br.net', +'ad.doubleclick.net.48578.9318.302br.net', +'ad.doubleclick.net.48580.9318.302br.net', +'ad.doubleclick.net.48581.9318.302br.net', +'ad.doubleclick.net.48583.9318.302br.net', +'ad.doubleclick.net.48584.9318.302br.net', +'ad.doubleclick.net.48586.9318.302br.net', +'ad.doubleclick.net.48587.9318.302br.net', +'ad.doubleclick.net.48589.9318.302br.net', +'ad.doubleclick.net.48590.9318.302br.net', +'ad.doubleclick.net.48592.9318.302br.net', +'ad.doubleclick.net.48593.9318.302br.net', +'ad.doubleclick.net.48595.9318.302br.net', +'ad.doubleclick.net.48596.9318.302br.net', +'ad.doubleclick.net.48598.9318.302br.net', +'ad.doubleclick.net.48599.9318.302br.net', +'ad.doubleclick.net.48601.9318.302br.net', +'ad.doubleclick.net.48602.9318.302br.net', +'ad.doubleclick.net.48607.9318.302br.net', +'ad.doubleclick.net.48608.9318.302br.net', +'ad.doubleclick.net.48610.9318.302br.net', +'ad.doubleclick.net.48611.9318.302br.net', +'ad.doubleclick.net.48613.9318.302br.net', +'ad.doubleclick.net.48614.9318.302br.net', +'ad.doubleclick.net.48616.9318.302br.net', +'ad.doubleclick.net.48617.9318.302br.net', +'ad.doubleclick.net.48619.9318.302br.net', +'ad.doubleclick.net.48622.9318.302br.net', +'ad.doubleclick.net.48625.9318.302br.net', +'ad.doubleclick.net.48626.9318.302br.net', +'ad.doubleclick.net.48628.9318.302br.net', +'ad.doubleclick.net.48629.9318.302br.net', +'ad.doubleclick.net.48631.9318.302br.net', +'ad.doubleclick.net.48634.9318.302br.net', +'ad.doubleclick.net.48635.9318.302br.net', +'ad.doubleclick.net.48637.9318.302br.net', +'ad.doubleclick.net.48640.9318.302br.net', +'ad.doubleclick.net.48643.9318.302br.net', +'ad.doubleclick.net.48644.9318.302br.net', +'ad.doubleclick.net.48649.9318.302br.net', +'ad.doubleclick.net.48650.9318.302br.net', +'ad.doubleclick.net.48655.9318.302br.net', +'ad.doubleclick.net.48658.9318.302br.net', +'ad.doubleclick.net.48659.9318.302br.net', +'ad.doubleclick.net.48661.9318.302br.net', +'ad.doubleclick.net.48662.9318.302br.net', +'ad.doubleclick.net.48664.9318.302br.net', +'ad.doubleclick.net.48665.9318.302br.net', +'ad.doubleclick.net.48666.9318.302br.net', +'ad.doubleclick.net.48667.9318.302br.net', +'ad.doubleclick.net.48668.9318.302br.net', +'ad.doubleclick.net.48670.9318.302br.net', +'ad.doubleclick.net.48671.9318.302br.net', +'ad.doubleclick.net.48673.9318.302br.net', +'ad.doubleclick.net.48675.9318.302br.net', +'ad.doubleclick.net.48676.9318.302br.net', +'ad.doubleclick.net.48677.9318.302br.net', +'ad.doubleclick.net.48679.9318.302br.net', +'ad.doubleclick.net.48682.9318.302br.net', +'ad.doubleclick.net.48683.9318.302br.net', +'ad.doubleclick.net.48685.9318.302br.net', +'ad.doubleclick.net.48691.9318.302br.net', +'ad.doubleclick.net.48694.9318.302br.net', +'ad.doubleclick.net.48695.9318.302br.net', +'ad.doubleclick.net.48697.9318.302br.net', +'ad.doubleclick.net.48700.9318.302br.net', +'ad.doubleclick.net.48703.9318.302br.net', +'ad.doubleclick.net.48704.9318.302br.net', +'ad.doubleclick.net.48706.9318.302br.net', +'ad.doubleclick.net.48707.9318.302br.net', +'ad.doubleclick.net.48708.9318.302br.net', +'ad.doubleclick.net.48709.9318.302br.net', +'ad.doubleclick.net.48710.9318.302br.net', +'ad.doubleclick.net.48712.9318.302br.net', +'ad.doubleclick.net.48713.9318.302br.net', +'ad.doubleclick.net.48715.9318.302br.net', +'ad.doubleclick.net.48718.9318.302br.net', +'ad.doubleclick.net.48721.9318.302br.net', +'ad.doubleclick.net.48724.9318.302br.net', +'ad.doubleclick.net.48727.9318.302br.net', +'ad.doubleclick.net.48728.9318.302br.net', +'ad.doubleclick.net.48729.9318.302br.net', +'ad.doubleclick.net.48730.9318.302br.net', +'ad.doubleclick.net.48731.9318.302br.net', +'ad.doubleclick.net.48733.9318.302br.net', +'ad.doubleclick.net.48736.9318.302br.net', +'ad.doubleclick.net.48737.9318.302br.net', +'ad.doubleclick.net.48739.9318.302br.net', +'ad.doubleclick.net.48740.9318.302br.net', +'ad.doubleclick.net.48742.9318.302br.net', +'ad.doubleclick.net.48743.9318.302br.net', +'ad.doubleclick.net.48745.9318.302br.net', +'ad.doubleclick.net.48746.9318.302br.net', +'ad.doubleclick.net.48748.9318.302br.net', +'ad.doubleclick.net.48749.9318.302br.net', +'ad.doubleclick.net.48751.9318.302br.net', +'ad.doubleclick.net.48754.9318.302br.net', +'ad.doubleclick.net.48755.9318.302br.net', +'ad.doubleclick.net.48757.9318.302br.net', +'ad.doubleclick.net.48758.9318.302br.net', +'ad.doubleclick.net.48760.9318.302br.net', +'ad.doubleclick.net.48763.9318.302br.net', +'ad.doubleclick.net.48766.9318.302br.net', +'ad.doubleclick.net.48769.9318.302br.net', +'ad.doubleclick.net.48770.9318.302br.net', +'ad.doubleclick.net.48772.9318.302br.net', +'ad.doubleclick.net.48773.9318.302br.net', +'ad.doubleclick.net.48775.9318.302br.net', +'ad.doubleclick.net.48776.9318.302br.net', +'ad.doubleclick.net.48778.9318.302br.net', +'ad.doubleclick.net.48781.9318.302br.net', +'ad.doubleclick.net.48784.9318.302br.net', +'ad.doubleclick.net.48793.9318.302br.net', +'ad.doubleclick.net.48794.9318.302br.net', +'ad.doubleclick.net.48796.9318.302br.net', +'ad.doubleclick.net.48797.9318.302br.net', +'ad.doubleclick.net.48798.9318.302br.net', +'ad.doubleclick.net.48799.9318.302br.net', +'ad.doubleclick.net.48800.9318.302br.net', +'ad.doubleclick.net.48802.9318.302br.net', +'ad.doubleclick.net.48803.9318.302br.net', +'ad.doubleclick.net.48805.9318.302br.net', +'ad.doubleclick.net.48806.9318.302br.net', +'ad.doubleclick.net.48808.9318.302br.net', +'ad.doubleclick.net.48809.9318.302br.net', +'ad.doubleclick.net.48814.9318.302br.net', +'ad.doubleclick.net.48815.9318.302br.net', +'ad.doubleclick.net.48817.9318.302br.net', +'ad.doubleclick.net.48818.9318.302br.net', +'ad.doubleclick.net.48820.9318.302br.net', +'ad.doubleclick.net.48821.9318.302br.net', +'ad.doubleclick.net.48823.9318.302br.net', +'ad.doubleclick.net.48826.9318.302br.net', +'ad.doubleclick.net.48827.9318.302br.net', +'ad.doubleclick.net.48829.9318.302br.net', +'ad.doubleclick.net.48830.9318.302br.net', +'ad.doubleclick.net.48832.9318.302br.net', +'ad.doubleclick.net.48833.9318.302br.net', +'ad.doubleclick.net.48835.9318.302br.net', +'ad.doubleclick.net.48836.9318.302br.net', +'ad.doubleclick.net.48838.9318.302br.net', +'ad.doubleclick.net.48839.9318.302br.net', +'ad.doubleclick.net.48841.9318.302br.net', +'ad.doubleclick.net.48842.9318.302br.net', +'ad.doubleclick.net.48844.9318.302br.net', +'ad.doubleclick.net.48847.9318.302br.net', +'ad.doubleclick.net.48850.9318.302br.net', +'ad.doubleclick.net.48853.9318.302br.net', +'ad.doubleclick.net.48856.9318.302br.net', +'ad.doubleclick.net.48857.9318.302br.net', +'ad.doubleclick.net.48859.9318.302br.net', +'ad.doubleclick.net.48860.9318.302br.net', +'ad.doubleclick.net.48862.9318.302br.net', +'ad.doubleclick.net.48863.9318.302br.net', +'ad.doubleclick.net.48865.9318.302br.net', +'ad.doubleclick.net.48868.9318.302br.net', +'ad.doubleclick.net.48869.9318.302br.net', +'ad.doubleclick.net.48871.9318.302br.net', +'ad.doubleclick.net.48872.9318.302br.net', +'ad.doubleclick.net.48873.9318.302br.net', +'ad.doubleclick.net.48874.9318.302br.net', +'ad.doubleclick.net.48875.9318.302br.net', +'ad.doubleclick.net.48877.9318.302br.net', +'ad.doubleclick.net.48878.9318.302br.net', +'ad.doubleclick.net.48880.9318.302br.net', +'ad.doubleclick.net.48883.9318.302br.net', +'ad.doubleclick.net.48884.9318.302br.net', +'ad.doubleclick.net.48886.9318.302br.net', +'ad.doubleclick.net.48887.9318.302br.net', +'ad.doubleclick.net.48892.9318.302br.net', +'ad.doubleclick.net.48895.9318.302br.net', +'ad.doubleclick.net.48896.9318.302br.net', +'ad.doubleclick.net.48898.9318.302br.net', +'ad.doubleclick.net.48899.9318.302br.net', +'ad.doubleclick.net.48900.9318.302br.net', +'ad.doubleclick.net.48901.9318.302br.net', +'ad.doubleclick.net.48902.9318.302br.net', +'ad.doubleclick.net.48904.9318.302br.net', +'ad.doubleclick.net.48905.9318.302br.net', +'ad.doubleclick.net.48906.9318.302br.net', +'ad.doubleclick.net.48907.9318.302br.net', +'ad.doubleclick.net.48908.9318.302br.net', +'ad.doubleclick.net.48910.9318.302br.net', +'ad.doubleclick.net.48911.9318.302br.net', +'ad.doubleclick.net.48913.9318.302br.net', +'ad.doubleclick.net.48915.9318.302br.net', +'ad.doubleclick.net.48916.9318.302br.net', +'ad.doubleclick.net.48917.9318.302br.net', +'ad.doubleclick.net.48919.9318.302br.net', +'ad.doubleclick.net.48920.9318.302br.net', +'ad.doubleclick.net.48922.9318.302br.net', +'ad.doubleclick.net.48923.9318.302br.net', +'ad.doubleclick.net.48924.9318.302br.net', +'ad.doubleclick.net.48925.9318.302br.net', +'ad.doubleclick.net.48926.9318.302br.net', +'ad.doubleclick.net.48928.9318.302br.net', +'ad.doubleclick.net.48929.9318.302br.net', +'ad.doubleclick.net.48931.9318.302br.net', +'ad.doubleclick.net.48934.9318.302br.net', +'ad.doubleclick.net.48935.9318.302br.net', +'ad.doubleclick.net.48937.9318.302br.net', +'ad.doubleclick.net.48938.9318.302br.net', +'ad.doubleclick.net.48940.9318.302br.net', +'ad.doubleclick.net.48946.9318.302br.net', +'ad.doubleclick.net.48949.9318.302br.net', +'ad.doubleclick.net.48950.9318.302br.net', +'ad.doubleclick.net.48954.9240.302br.net', +'ad.doubleclick.net.48957.9240.302br.net', +'ad.doubleclick.net.48960.9240.302br.net', +'ad.doubleclick.net.48968.9240.302br.net', +'ad.doubleclick.net.48977.9240.302br.net', +'ad.doubleclick.net.48986.9240.302br.net', +'ad.doubleclick.net.48989.9240.302br.net', +'ad.doubleclick.net.48992.9240.302br.net', +'ad.doubleclick.net.48995.9240.302br.net', +'ad.doubleclick.net.49001.9240.302br.net', +'ad.doubleclick.net.49004.9240.302br.net', +'ad.doubleclick.net.49007.9240.302br.net', +'ad.doubleclick.net.49010.9240.302br.net', +'ad.doubleclick.net.49016.9240.302br.net', +'ad.doubleclick.net.49019.9240.302br.net', +'ad.doubleclick.net.49028.9240.302br.net', +'ad.doubleclick.net.49031.9240.302br.net', +'ad.doubleclick.net.49036.9359.302br.net', +'ad.doubleclick.net.49039.9359.302br.net', +'ad.doubleclick.net.49042.9359.302br.net', +'ad.doubleclick.net.49071.9361.302br.net', +'ad.doubleclick.net.49072.9361.302br.net', +'ad.doubleclick.net.49073.9361.302br.net', +'ad.doubleclick.net.49077.9361.302br.net', +'ad.doubleclick.net.49078.9361.302br.net', +'ad.doubleclick.net.49079.9361.302br.net', +'ad.doubleclick.net.49137.9363.302br.net', +'ad.doubleclick.net.49140.9363.302br.net', +'ad.doubleclick.net.49143.9363.302br.net', +'ad.doubleclick.net.49146.9363.302br.net', +'ad.doubleclick.net.49149.9363.302br.net', +'ad.doubleclick.net.49152.9363.302br.net', +'ad.doubleclick.net.49155.9363.302br.net', +'ad.doubleclick.net.49158.9363.302br.net', +'ad.doubleclick.net.49161.9363.302br.net', +'ad.doubleclick.net.49164.9363.302br.net', +'ad.doubleclick.net.49167.9363.302br.net', +'ad.doubleclick.net.49170.9363.302br.net', +'ad.doubleclick.net.49173.9363.302br.net', +'ad.doubleclick.net.49176.9363.302br.net', +'ad.doubleclick.net.49179.9363.302br.net', +'ad.doubleclick.net.49182.9363.302br.net', +'ad.doubleclick.net.49185.9363.302br.net', +'ad.doubleclick.net.49188.9363.302br.net', +'ad.doubleclick.net.49191.9363.302br.net', +'ad.doubleclick.net.49194.9363.302br.net', +'ad.doubleclick.net.49197.9363.302br.net', +'ad.doubleclick.net.49200.9363.302br.net', +'ad.doubleclick.net.49203.9363.302br.net', +'ad.doubleclick.net.49206.9363.302br.net', +'ad.doubleclick.net.49209.9363.302br.net', +'ad.doubleclick.net.49212.9363.302br.net', +'ad.doubleclick.net.49215.9363.302br.net', +'ad.doubleclick.net.49218.9363.302br.net', +'ad.doubleclick.net.49221.9363.302br.net', +'ad.doubleclick.net.49224.9363.302br.net', +'ad.doubleclick.net.49423.9325.302br.net', +'ad.doubleclick.net.49424.9325.302br.net', +'ad.doubleclick.net.49426.9325.302br.net', +'ad.doubleclick.net.49427.9325.302br.net', +'ad.doubleclick.net.49429.9325.302br.net', +'ad.doubleclick.net.49430.9325.302br.net', +'ad.doubleclick.net.49432.9325.302br.net', +'ad.doubleclick.net.49433.9325.302br.net', +'ad.doubleclick.net.49444.9240.302br.net', +'ad.doubleclick.net.49605.9240.302br.net', +'ad.doubleclick.net.49606.9240.302br.net', +'ad.doubleclick.net.49613.9240.302br.net', +'ad.doubleclick.net.49615.9240.302br.net', +'ad.doubleclick.net.49618.9240.302br.net', +'ad.doubleclick.net.49620.9239.302br.net', +'ad.doubleclick.net.49621.9239.302br.net', +'ad.doubleclick.net.49628.9239.302br.net', +'ad.doubleclick.net.49630.9239.302br.net', +'ad.doubleclick.net.49631.9239.302br.net', +'ad.doubleclick.net.49633.9239.302br.net', +'ad.doubleclick.net.49635.9359.302br.net', +'ad.doubleclick.net.49641.9359.302br.net', +'ad.doubleclick.net.49654.9240.302br.net', +'ad.doubleclick.net.49657.9240.302br.net', +'ad.doubleclick.net.49660.9240.302br.net', +'ad.doubleclick.net.49664.9240.302br.net', +'ad.doubleclick.net.49666.9240.302br.net', +'ad.doubleclick.net.49675.9240.302br.net', +'ad.doubleclick.net.49678.9240.302br.net', +'ad.doubleclick.net.49687.9240.302br.net', +'ad.doubleclick.net.49690.9240.302br.net', +'ad.doubleclick.net.49693.9240.302br.net', +'ad.doubleclick.net.49696.9240.302br.net', +'ad.doubleclick.net.49699.9240.302br.net', +'ad.doubleclick.net.49702.9240.302br.net', +'ad.doubleclick.net.49714.9240.302br.net', +'ad.doubleclick.net.49717.9240.302br.net', +'ad.doubleclick.net.49720.9240.302br.net', +'ad.doubleclick.net.49721.9240.302br.net', +'ad.doubleclick.net.49723.9240.302br.net', +'ad.doubleclick.net.49726.9240.302br.net', +'ad.doubleclick.net.49729.9240.302br.net', +'ad.doubleclick.net.49730.9364.302br.net', +'ad.doubleclick.net.49885.9365.302br.net', +'ad.doubleclick.net.49888.9365.302br.net', +'ad.doubleclick.net.49900.9365.302br.net', +'ad.doubleclick.net.49939.9365.302br.net', +'ad.doubleclick.net.50236.9279.302br.net', +'ad.doubleclick.net.50238.9279.302br.net', +'ad.doubleclick.net.50240.9279.302br.net', +'ad.doubleclick.net.50241.9279.302br.net', +'ad.doubleclick.net.50242.9279.302br.net', +'ad.doubleclick.net.50243.9279.302br.net', +'ad.doubleclick.net.50247.9279.302br.net', +'ad.doubleclick.net.50248.9279.302br.net', +'ad.doubleclick.net.50251.9279.302br.net', +'ad.doubleclick.net.50252.9279.302br.net', +'ad.doubleclick.net.50256.9279.302br.net', +'ad.doubleclick.net.50257.9279.302br.net', +'ad.doubleclick.net.50259.9279.302br.net', +'ad.doubleclick.net.50261.9279.302br.net', +'ad.doubleclick.net.50265.9279.302br.net', +'ad.doubleclick.net.50267.9279.302br.net', +'ad.doubleclick.net.50269.9279.302br.net', +'ad.doubleclick.net.50271.9279.302br.net', +'ad.doubleclick.net.50273.9279.302br.net', +'ad.doubleclick.net.50275.9279.302br.net', +'ad.doubleclick.net.50279.9279.302br.net', +'ad.doubleclick.net.50281.9279.302br.net', +'ad.doubleclick.net.50285.9279.302br.net', +'ad.doubleclick.net.50291.9279.302br.net', +'ad.doubleclick.net.50293.9279.302br.net', +'ad.doubleclick.net.50302.9279.302br.net', +'ad.doubleclick.net.50314.9279.302br.net', +'ad.doubleclick.net.50315.9279.302br.net', +'ad.doubleclick.net.50344.9279.302br.net', +'ad.doubleclick.net.50356.9279.302br.net', +'ad.doubleclick.net.50367.9279.302br.net', +'ad.doubleclick.net.50371.9279.302br.net', +'ad.doubleclick.net.50373.9279.302br.net', +'ad.doubleclick.net.50375.9279.302br.net', +'ad.doubleclick.net.50379.9279.302br.net', +'ad.doubleclick.net.50381.9279.302br.net', +'ad.doubleclick.net.50385.9279.302br.net', +'ad.doubleclick.net.50389.9279.302br.net', +'ad.doubleclick.net.50391.9279.302br.net', +'ad.doubleclick.net.50393.9279.302br.net', +'ad.doubleclick.net.50396.9279.302br.net', +'ad.doubleclick.net.50398.9279.302br.net', +'ad.doubleclick.net.50399.9279.302br.net', +'ad.doubleclick.net.50404.9279.302br.net', +'ad.doubleclick.net.50410.9279.302br.net', +'ad.doubleclick.net.50416.9279.302br.net', +'ad.doubleclick.net.50428.9279.302br.net', +'ad.doubleclick.net.50434.9279.302br.net', +'ad.doubleclick.net.50436.9279.302br.net', +'ad.doubleclick.net.50440.9279.302br.net', +'ad.doubleclick.net.50441.9279.302br.net', +'ad.doubleclick.net.50443.9279.302br.net', +'ad.doubleclick.net.50444.9279.302br.net', +'ad.doubleclick.net.50445.9279.302br.net', +'ad.doubleclick.net.50446.9279.302br.net', +'ad.doubleclick.net.50447.9279.302br.net', +'ad.doubleclick.net.50449.9279.302br.net', +'ad.doubleclick.net.50451.9279.302br.net', +'ad.doubleclick.net.50452.9279.302br.net', +'ad.doubleclick.net.50453.9279.302br.net', +'ad.doubleclick.net.50454.9279.302br.net', +'ad.doubleclick.net.50455.9279.302br.net', +'ad.doubleclick.net.50456.9279.302br.net', +'ad.doubleclick.net.50458.9279.302br.net', +'ad.doubleclick.net.50461.9279.302br.net', +'ad.doubleclick.net.50479.9279.302br.net', +'ad.doubleclick.net.50482.9279.302br.net', +'ad.doubleclick.net.50485.9279.302br.net', +'ad.doubleclick.net.50486.9279.302br.net', +'ad.doubleclick.net.50488.9279.302br.net', +'ad.doubleclick.net.50491.9279.302br.net', +'ad.doubleclick.net.50494.9279.302br.net', +'ad.doubleclick.net.50495.9279.302br.net', +'ad.doubleclick.net.50497.9279.302br.net', +'ad.doubleclick.net.50500.9279.302br.net', +'ad.doubleclick.net.50501.9279.302br.net', +'ad.doubleclick.net.50503.9279.302br.net', +'ad.doubleclick.net.50504.9279.302br.net', +'ad.doubleclick.net.50506.9279.302br.net', +'ad.doubleclick.net.50507.9279.302br.net', +'ad.doubleclick.net.50509.9279.302br.net', +'ad.doubleclick.net.50512.9279.302br.net', +'ad.doubleclick.net.50518.9279.302br.net', +'ad.doubleclick.net.50519.9279.302br.net', +'ad.doubleclick.net.50524.9279.302br.net', +'ad.doubleclick.net.50527.9279.302br.net', +'ad.doubleclick.net.50528.9279.302br.net', +'ad.doubleclick.net.50530.9279.302br.net', +'ad.doubleclick.net.50531.9279.302br.net', +'ad.doubleclick.net.50533.9279.302br.net', +'ad.doubleclick.net.50534.9279.302br.net', +'ad.doubleclick.net.50536.9279.302br.net', +'ad.doubleclick.net.50557.9279.302br.net', +'ad.doubleclick.net.50558.9279.302br.net', +'ad.doubleclick.net.50560.9279.302br.net', +'ad.doubleclick.net.50563.9279.302br.net', +'ad.doubleclick.net.50564.9279.302br.net', +'ad.doubleclick.net.50566.9279.302br.net', +'ad.doubleclick.net.50567.9279.302br.net', +'ad.doubleclick.net.50575.9279.302br.net', +'ad.doubleclick.net.50576.9279.302br.net', +'ad.doubleclick.net.50578.9279.302br.net', +'ad.doubleclick.net.50581.9279.302br.net', +'ad.doubleclick.net.50584.9279.302br.net', +'ad.doubleclick.net.50587.9279.302br.net', +'ad.doubleclick.net.50590.9279.302br.net', +'ad.doubleclick.net.50599.9279.302br.net', +'ad.doubleclick.net.50600.9279.302br.net', +'ad.doubleclick.net.50602.9279.302br.net', +'ad.doubleclick.net.50603.9279.302br.net', +'ad.doubleclick.net.50605.9279.302br.net', +'ad.doubleclick.net.50606.9279.302br.net', +'ad.doubleclick.net.50617.9279.302br.net', +'ad.doubleclick.net.50620.9279.302br.net', +'ad.doubleclick.net.50629.9279.302br.net', +'ad.doubleclick.net.50631.9279.302br.net', +'ad.doubleclick.net.50632.9279.302br.net', +'ad.doubleclick.net.50633.9279.302br.net', +'ad.doubleclick.net.50634.9279.302br.net', +'ad.doubleclick.net.50635.9279.302br.net', +'ad.doubleclick.net.50636.9279.302br.net', +'ad.doubleclick.net.50638.9279.302br.net', +'ad.doubleclick.net.50639.9279.302br.net', +'ad.doubleclick.net.50641.9279.302br.net', +'ad.doubleclick.net.50642.9279.302br.net', +'ad.doubleclick.net.50643.9279.302br.net', +'ad.doubleclick.net.50644.9279.302br.net', +'ad.doubleclick.net.50645.9279.302br.net', +'ad.doubleclick.net.50647.9279.302br.net', +'ad.doubleclick.net.50653.9279.302br.net', +'ad.doubleclick.net.50655.9279.302br.net', +'ad.doubleclick.net.50656.9279.302br.net', +'ad.doubleclick.net.50657.9279.302br.net', +'ad.doubleclick.net.50659.9279.302br.net', +'ad.doubleclick.net.50662.9279.302br.net', +'ad.doubleclick.net.50665.9279.302br.net', +'ad.doubleclick.net.50668.9279.302br.net', +'ad.doubleclick.net.50671.9279.302br.net', +'ad.doubleclick.net.50673.9279.302br.net', +'ad.doubleclick.net.50674.9279.302br.net', +'ad.doubleclick.net.50675.9279.302br.net', +'ad.doubleclick.net.50679.9279.302br.net', +'ad.doubleclick.net.50680.9279.302br.net', +'ad.doubleclick.net.50681.9279.302br.net', +'ad.doubleclick.net.50692.9279.302br.net', +'ad.doubleclick.net.50693.9279.302br.net', +'ad.doubleclick.net.50701.9279.302br.net', +'ad.doubleclick.net.50704.9279.302br.net', +'ad.doubleclick.net.50881.9336.302br.net', +'ad.doubleclick.net.50882.9336.302br.net', +'ad.doubleclick.net.50884.9336.302br.net', +'ad.doubleclick.net.50885.9336.302br.net', +'ad.doubleclick.net.50887.9336.302br.net', +'ad.doubleclick.net.50888.9336.302br.net', +'ad.doubleclick.net.50889.9336.302br.net', +'ad.doubleclick.net.50890.9336.302br.net', +'ad.doubleclick.net.50891.9336.302br.net', +'ad.doubleclick.net.50893.9336.302br.net', +'ad.doubleclick.net.50894.9336.302br.net', +'ad.doubleclick.net.50896.9336.302br.net', +'ad.doubleclick.net.50897.9336.302br.net', +'ad.doubleclick.net.50899.9336.302br.net', +'ad.doubleclick.net.50902.9336.302br.net', +'ad.doubleclick.net.50903.9336.302br.net', +'ad.doubleclick.net.50905.9336.302br.net', +'ad.doubleclick.net.50908.9336.302br.net', +'ad.doubleclick.net.50909.9336.302br.net', +'ad.doubleclick.net.50910.9336.302br.net', +'ad.doubleclick.net.50911.9336.302br.net', +'ad.doubleclick.net.50912.9336.302br.net', +'ad.doubleclick.net.50913.9336.302br.net', +'ad.doubleclick.net.50914.9336.302br.net', +'ad.doubleclick.net.50915.9336.302br.net', +'ad.doubleclick.net.50916.9336.302br.net', +'ad.doubleclick.net.50917.9336.302br.net', +'ad.doubleclick.net.50918.9336.302br.net', +'ad.doubleclick.net.50920.9336.302br.net', +'ad.doubleclick.net.50921.9336.302br.net', +'ad.doubleclick.net.50922.9336.302br.net', +'ad.doubleclick.net.50923.9336.302br.net', +'ad.doubleclick.net.50924.9336.302br.net', +'ad.doubleclick.net.50925.9336.302br.net', +'ad.doubleclick.net.50926.9336.302br.net', +'ad.doubleclick.net.50927.9336.302br.net', +'ad.doubleclick.net.50928.9336.302br.net', +'ad.doubleclick.net.50929.9336.302br.net', +'ad.doubleclick.net.50930.9336.302br.net', +'ad.doubleclick.net.50931.9336.302br.net', +'ad.doubleclick.net.50932.9336.302br.net', +'ad.doubleclick.net.50933.9336.302br.net', +'ad.doubleclick.net.50934.9336.302br.net', +'ad.doubleclick.net.50935.9336.302br.net', +'ad.doubleclick.net.50936.9336.302br.net', +'ad.doubleclick.net.50937.9336.302br.net', +'ad.doubleclick.net.50938.9336.302br.net', +'ad.doubleclick.net.50939.9336.302br.net', +'ad.doubleclick.net.50958.9336.302br.net', +'ad.doubleclick.net.50959.9336.302br.net', +'ad.doubleclick.net.50960.9336.302br.net', +'ad.doubleclick.net.50962.9336.302br.net', +'ad.doubleclick.net.50963.9336.302br.net', +'ad.doubleclick.net.50965.9336.302br.net', +'ad.doubleclick.net.50966.9336.302br.net', +'ad.doubleclick.net.50968.9336.302br.net', +'ad.doubleclick.net.50969.9336.302br.net', +'ad.doubleclick.net.50971.9336.302br.net', +'ad.doubleclick.net.50974.9336.302br.net', +'ad.doubleclick.net.50977.9336.302br.net', +'ad.doubleclick.net.50980.9336.302br.net', +'ad.doubleclick.net.50983.9336.302br.net', +'ad.doubleclick.net.50986.9336.302br.net', +'ad.doubleclick.net.50989.9336.302br.net', +'ad.doubleclick.net.50992.9336.302br.net', +'ad.doubleclick.net.50993.9336.302br.net', +'ad.doubleclick.net.50995.9336.302br.net', +'ad.doubleclick.net.50996.9336.302br.net', +'ad.doubleclick.net.50998.9336.302br.net', +'ad.doubleclick.net.50999.9336.302br.net', +'ad.doubleclick.net.51001.9336.302br.net', +'ad.doubleclick.net.51002.9336.302br.net', +'ad.doubleclick.net.51004.9336.302br.net', +'ad.doubleclick.net.51005.9336.302br.net', +'ad.doubleclick.net.51007.9336.302br.net', +'ad.doubleclick.net.51008.9336.302br.net', +'ad.doubleclick.net.51010.9336.302br.net', +'ad.doubleclick.net.51011.9336.302br.net', +'ad.doubleclick.net.51013.9336.302br.net', +'ad.doubleclick.net.51016.9336.302br.net', +'ad.doubleclick.net.51019.9336.302br.net', +'ad.doubleclick.net.51022.9336.302br.net', +'ad.doubleclick.net.51025.9336.302br.net', +'ad.doubleclick.net.51026.9336.302br.net', +'ad.doubleclick.net.51028.9336.302br.net', +'ad.doubleclick.net.51031.9336.302br.net', +'ad.doubleclick.net.51037.9336.302br.net', +'ad.doubleclick.net.51040.9336.302br.net', +'ad.doubleclick.net.51043.9336.302br.net', +'ad.doubleclick.net.51044.9336.302br.net', +'ad.doubleclick.net.51046.9336.302br.net', +'ad.doubleclick.net.51047.9336.302br.net', +'ad.doubleclick.net.51049.9336.302br.net', +'ad.doubleclick.net.51050.9336.302br.net', +'ad.doubleclick.net.51057.9185.302br.net', +'ad.doubleclick.net.51066.9185.302br.net', +'ad.doubleclick.net.51157.9318.302br.net', +'ad.doubleclick.net.51158.9318.302br.net', +'ad.doubleclick.net.51159.9318.302br.net', +'ad.doubleclick.net.51160.9318.302br.net', +'ad.doubleclick.net.51161.9318.302br.net', +'ad.doubleclick.net.51162.9318.302br.net', +'ad.doubleclick.net.51163.9318.302br.net', +'ad.doubleclick.net.51164.9318.302br.net', +'ad.doubleclick.net.51166.9318.302br.net', +'ad.doubleclick.net.51167.9318.302br.net', +'ad.doubleclick.net.51168.9318.302br.net', +'ad.doubleclick.net.51169.9318.302br.net', +'ad.doubleclick.net.51170.9318.302br.net', +'ad.doubleclick.net.51175.9318.302br.net', +'ad.doubleclick.net.51176.9318.302br.net', +'ad.doubleclick.net.51178.9318.302br.net', +'ad.doubleclick.net.51179.9318.302br.net', +'ad.doubleclick.net.51184.9318.302br.net', +'ad.doubleclick.net.51185.9318.302br.net', +'ad.doubleclick.net.51187.9318.302br.net', +'ad.doubleclick.net.51188.9318.302br.net', +'ad.doubleclick.net.51189.9318.302br.net', +'ad.doubleclick.net.51190.9318.302br.net', +'ad.doubleclick.net.51191.9318.302br.net', +'ad.doubleclick.net.51192.9318.302br.net', +'ad.doubleclick.net.51193.9318.302br.net', +'ad.doubleclick.net.51194.9318.302br.net', +'ad.doubleclick.net.51195.9318.302br.net', +'ad.doubleclick.net.51196.9318.302br.net', +'ad.doubleclick.net.51197.9318.302br.net', +'ad.doubleclick.net.51198.9318.302br.net', +'ad.doubleclick.net.51199.9318.302br.net', +'ad.doubleclick.net.51200.9318.302br.net', +'ad.doubleclick.net.51201.9318.302br.net', +'ad.doubleclick.net.51202.9318.302br.net', +'ad.doubleclick.net.51203.9318.302br.net', +'ad.doubleclick.net.51204.9318.302br.net', +'ad.doubleclick.net.51205.9318.302br.net', +'ad.doubleclick.net.51206.9318.302br.net', +'ad.doubleclick.net.51208.9318.302br.net', +'ad.doubleclick.net.51209.9318.302br.net', +'ad.doubleclick.net.51211.9318.302br.net', +'ad.doubleclick.net.51212.9318.302br.net', +'ad.doubleclick.net.51214.9318.302br.net', +'ad.doubleclick.net.51215.9318.302br.net', +'ad.doubleclick.net.51216.9318.302br.net', +'ad.doubleclick.net.51217.9318.302br.net', +'ad.doubleclick.net.51218.9318.302br.net', +'ad.doubleclick.net.51220.9318.302br.net', +'ad.doubleclick.net.51221.9318.302br.net', +'ad.doubleclick.net.51223.9318.302br.net', +'ad.doubleclick.net.51224.9318.302br.net', +'ad.doubleclick.net.51225.9318.302br.net', +'ad.doubleclick.net.51226.9318.302br.net', +'ad.doubleclick.net.51227.9318.302br.net', +'ad.doubleclick.net.51229.9318.302br.net', +'ad.doubleclick.net.51230.9318.302br.net', +'ad.doubleclick.net.51231.9318.302br.net', +'ad.doubleclick.net.51232.9318.302br.net', +'ad.doubleclick.net.51233.9318.302br.net', +'ad.doubleclick.net.51235.9318.302br.net', +'ad.doubleclick.net.51236.9318.302br.net', +'ad.doubleclick.net.51238.9318.302br.net', +'ad.doubleclick.net.51239.9318.302br.net', +'ad.doubleclick.net.51241.9318.302br.net', +'ad.doubleclick.net.51242.9318.302br.net', +'ad.doubleclick.net.51243.9318.302br.net', +'ad.doubleclick.net.51244.9318.302br.net', +'ad.doubleclick.net.51245.9318.302br.net', +'ad.doubleclick.net.51246.9318.302br.net', +'ad.doubleclick.net.51247.9318.302br.net', +'ad.doubleclick.net.51248.9318.302br.net', +'ad.doubleclick.net.51250.9318.302br.net', +'ad.doubleclick.net.51251.9318.302br.net', +'ad.doubleclick.net.51252.9318.302br.net', +'ad.doubleclick.net.51253.9318.302br.net', +'ad.doubleclick.net.51254.9318.302br.net', +'ad.doubleclick.net.51256.9318.302br.net', +'ad.doubleclick.net.51257.9318.302br.net', +'ad.doubleclick.net.51258.9318.302br.net', +'ad.doubleclick.net.51259.9318.302br.net', +'ad.doubleclick.net.51260.9318.302br.net', +'ad.doubleclick.net.51262.9318.302br.net', +'ad.doubleclick.net.51265.9318.302br.net', +'ad.doubleclick.net.51266.9318.302br.net', +'ad.doubleclick.net.51268.9318.302br.net', +'ad.doubleclick.net.51269.9318.302br.net', +'ad.doubleclick.net.51270.9318.302br.net', +'ad.doubleclick.net.51271.9318.302br.net', +'ad.doubleclick.net.51272.9318.302br.net', +'ad.doubleclick.net.51297.9185.302br.net', +'ad.doubleclick.net.51300.9185.302br.net', +'ad.doubleclick.net.51309.9185.302br.net', +'ad.doubleclick.net.51312.9185.302br.net', +'ad.doubleclick.net.51315.9185.302br.net', +'ad.doubleclick.net.51318.9185.302br.net', +'ad.doubleclick.net.51515.9076.302br.net', +'ad.doubleclick.net.51518.9076.302br.net', +'ad.doubleclick.net.51521.9374.302br.net', +'ad.doubleclick.net.51524.9374.302br.net', +'ad.doubleclick.net.51542.9078.302br.net', +'ad.doubleclick.net.51596.9087.302br.net', +'ad.doubleclick.net.51599.9086.302br.net', +'ad.doubleclick.net.51602.9086.302br.net', +'ad.doubleclick.net.51605.9085.302br.net', +'ad.doubleclick.net.51608.9085.302br.net', +'ad.doubleclick.net.51617.9082.302br.net', +'ad.doubleclick.net.51620.9082.302br.net', +'ad.doubleclick.net.51623.9375.302br.net', +'ad.doubleclick.net.51638.9076.302br.net', +'ad.doubleclick.net.51641.9076.302br.net', +'ad.doubleclick.net.51644.9076.302br.net', +'ad.doubleclick.net.51647.9374.302br.net', +'ad.doubleclick.net.51650.9374.302br.net', +'ad.doubleclick.net.51653.9374.302br.net', +'ad.doubleclick.net.51656.9374.302br.net', +'ad.doubleclick.net.51659.9374.302br.net', +'ad.doubleclick.net.51662.9374.302br.net', +'ad.doubleclick.net.51683.9078.302br.net', +'ad.doubleclick.net.51686.9078.302br.net', +'ad.doubleclick.net.51689.9078.302br.net', +'ad.doubleclick.net.51692.9078.302br.net', +'ad.doubleclick.net.51695.9078.302br.net', +'ad.doubleclick.net.51698.9078.302br.net', +'ad.doubleclick.net.51701.9079.302br.net', +'ad.doubleclick.net.51704.9079.302br.net', +'ad.doubleclick.net.51707.9079.302br.net', +'ad.doubleclick.net.51710.9079.302br.net', +'ad.doubleclick.net.51713.9079.302br.net', +'ad.doubleclick.net.51719.9080.302br.net', +'ad.doubleclick.net.51722.9080.302br.net', +'ad.doubleclick.net.51725.9080.302br.net', +'ad.doubleclick.net.51728.9080.302br.net', +'ad.doubleclick.net.51731.9080.302br.net', +'ad.doubleclick.net.51737.9375.302br.net', +'ad.doubleclick.net.51740.9375.302br.net', +'ad.doubleclick.net.51743.9375.302br.net', +'ad.doubleclick.net.51746.9375.302br.net', +'ad.doubleclick.net.51749.9375.302br.net', +'ad.doubleclick.net.51752.9375.302br.net', +'ad.doubleclick.net.51755.9084.302br.net', +'ad.doubleclick.net.51758.9084.302br.net', +'ad.doubleclick.net.51761.9084.302br.net', +'ad.doubleclick.net.51764.9084.302br.net', +'ad.doubleclick.net.51767.9084.302br.net', +'ad.doubleclick.net.51770.9084.302br.net', +'ad.doubleclick.net.51773.9082.302br.net', +'ad.doubleclick.net.51776.9082.302br.net', +'ad.doubleclick.net.51779.9082.302br.net', +'ad.doubleclick.net.51800.9085.302br.net', +'ad.doubleclick.net.51803.9085.302br.net', +'ad.doubleclick.net.51806.9085.302br.net', +'ad.doubleclick.net.51809.9085.302br.net', +'ad.doubleclick.net.51812.9085.302br.net', +'ad.doubleclick.net.51815.9085.302br.net', +'ad.doubleclick.net.51818.9086.302br.net', +'ad.doubleclick.net.51821.9086.302br.net', +'ad.doubleclick.net.51824.9086.302br.net', +'ad.doubleclick.net.51827.9086.302br.net', +'ad.doubleclick.net.51830.9086.302br.net', +'ad.doubleclick.net.51833.9086.302br.net', +'ad.doubleclick.net.51836.9087.302br.net', +'ad.doubleclick.net.51839.9087.302br.net', +'ad.doubleclick.net.51842.9087.302br.net', +'ad.doubleclick.net.51845.9087.302br.net', +'ad.doubleclick.net.51851.9087.302br.net', +'ad.doubleclick.net.51852.9250.302br.net', +'ad.doubleclick.net.51858.9250.302br.net', +'ad.doubleclick.net.51859.9250.302br.net', +'ad.doubleclick.net.51861.9364.302br.net', +'ad.doubleclick.net.51863.9364.302br.net', +'ad.doubleclick.net.51865.9364.302br.net', +'ad.doubleclick.net.51867.9359.302br.net', +'ad.doubleclick.net.51869.9359.302br.net', +'ad.doubleclick.net.51871.9359.302br.net', +'ad.doubleclick.net.51911.9250.302br.net', +'ad.doubleclick.net.51914.9250.302br.net', +'ad.doubleclick.net.51917.9250.302br.net', +'ad.doubleclick.net.51920.9250.302br.net', +'ad.doubleclick.net.51923.9250.302br.net', +'ad.doubleclick.net.51926.9250.302br.net', +'ad.doubleclick.net.51929.9250.302br.net', +'ad.doubleclick.net.51932.9250.302br.net', +'ad.doubleclick.net.51935.9250.302br.net', +'ad.doubleclick.net.51938.9250.302br.net', +'ad.doubleclick.net.51941.9250.302br.net', +'ad.doubleclick.net.51944.9250.302br.net', +'ad.doubleclick.net.51958.9359.302br.net', +'ad.doubleclick.net.51961.9359.302br.net', +'ad.doubleclick.net.51964.9359.302br.net', +'ad.doubleclick.net.51967.9359.302br.net', +'ad.doubleclick.net.51970.9359.302br.net', +'ad.doubleclick.net.51973.9359.302br.net', +'ad.doubleclick.net.51975.9381.302br.net', +'ad.doubleclick.net.51976.9381.302br.net', +'ad.doubleclick.net.52011.9382.302br.net', +'ad.doubleclick.net.52014.9382.302br.net', +'ad.doubleclick.net.52017.9382.302br.net', +'ad.doubleclick.net.52020.9382.302br.net', +'ad.doubleclick.net.52023.9382.302br.net', +'ad.doubleclick.net.52029.9382.302br.net', +'ad.doubleclick.net.52032.9382.302br.net', +'ad.doubleclick.net.52064.9383.302br.net', +'ad.doubleclick.net.52066.9383.302br.net', +'ad.doubleclick.net.52067.9383.302br.net', +'ad.doubleclick.net.52069.9383.302br.net', +'ad.doubleclick.net.52070.9383.302br.net', +'ad.doubleclick.net.52072.9383.302br.net', +'ad.doubleclick.net.52079.9383.302br.net', +'ad.doubleclick.net.52081.9383.302br.net', +'ad.doubleclick.net.52094.9383.302br.net', +'ad.doubleclick.net.52096.9383.302br.net', +'ad.doubleclick.net.52097.9383.302br.net', +'ad.doubleclick.net.52099.9383.302br.net', +'ad.doubleclick.net.52100.9383.302br.net', +'ad.doubleclick.net.52102.9383.302br.net', +'ad.doubleclick.net.52103.9383.302br.net', +'ad.doubleclick.net.52105.9383.302br.net', +'ad.doubleclick.net.52106.9383.302br.net', +'ad.doubleclick.net.52108.9383.302br.net', +'ad.doubleclick.net.52112.9383.302br.net', +'ad.doubleclick.net.52114.9383.302br.net', +'ad.doubleclick.net.52115.9383.302br.net', +'ad.doubleclick.net.52117.9383.302br.net', +'ad.doubleclick.net.52118.9383.302br.net', +'ad.doubleclick.net.52120.9383.302br.net', +'ad.doubleclick.net.52126.9335.302br.net', +'ad.doubleclick.net.52129.9384.302br.net', +'ad.doubleclick.net.52132.9384.302br.net', +'ad.doubleclick.net.52135.9384.302br.net', +'ad.doubleclick.net.52141.9384.302br.net', +'ad.doubleclick.net.52144.9384.302br.net', +'ad.doubleclick.net.52147.9384.302br.net', +'ad.doubleclick.net.52150.9384.302br.net', +'ad.doubleclick.net.52208.9318.302br.net', +'ad.doubleclick.net.52212.9318.302br.net', +'ad.doubleclick.net.52222.9318.302br.net', +'ad.doubleclick.net.52224.9318.302br.net', +'ad.doubleclick.net.52230.9318.302br.net', +'ad.doubleclick.net.52235.9318.302br.net', +'ad.doubleclick.net.52242.9318.302br.net', +'ad.doubleclick.net.52245.9318.302br.net', +'ad.doubleclick.net.52253.9318.302br.net', +'ad.doubleclick.net.52263.9318.302br.net', +'ad.doubleclick.net.52270.9318.302br.net', +'ad.doubleclick.net.52284.9318.302br.net', +'ad.doubleclick.net.52295.9318.302br.net', +'ad.doubleclick.net.52303.9318.302br.net', +'ad.doubleclick.net.52310.9318.302br.net', +'ad.doubleclick.net.52318.9318.302br.net', +'ad.doubleclick.net.52319.9318.302br.net', +'ad.doubleclick.net.52360.9303.302br.net', +'ad.doubleclick.net.52361.9303.302br.net', +'ad.doubleclick.net.52363.9303.302br.net', +'ad.doubleclick.net.52364.9303.302br.net', +'ad.doubleclick.net.52366.9303.302br.net', +'ad.doubleclick.net.52367.9303.302br.net', +'ad.doubleclick.net.52559.9335.302br.net', +'ad.doubleclick.net.52561.9335.302br.net', +'ad.doubleclick.net.52565.9335.302br.net', +'ad.doubleclick.net.52567.9335.302br.net', +'ad.doubleclick.net.52568.9335.302br.net', +'ad.doubleclick.net.52570.9335.302br.net', +'ad.doubleclick.net.52591.9239.302br.net', +'ad.doubleclick.net.52594.9240.302br.net', +'ad.doubleclick.net.52603.9076.302br.net', +'ad.doubleclick.net.52606.9076.302br.net', +'ad.doubleclick.net.52609.9076.302br.net', +'ad.doubleclick.net.52610.9082.302br.net', +'ad.doubleclick.net.52612.9082.302br.net', +'ad.doubleclick.net.52613.9082.302br.net', +'ad.doubleclick.net.52615.9082.302br.net', +'ad.doubleclick.net.52616.9082.302br.net', +'ad.doubleclick.net.52618.9082.302br.net', +'ad.doubleclick.net.52620.9014.302br.net', +'ad.doubleclick.net.52623.9014.302br.net', +'ad.doubleclick.net.52626.9014.302br.net', +'ad.doubleclick.net.52680.9389.302br.net', +'ad.doubleclick.net.52681.9389.302br.net', +'ad.doubleclick.net.52682.9389.302br.net', +'ad.doubleclick.net.52683.9389.302br.net', +'ad.doubleclick.net.52684.9389.302br.net', +'ad.doubleclick.net.52686.9389.302br.net', +'ad.doubleclick.net.52687.9389.302br.net', +'ad.doubleclick.net.52688.9389.302br.net', +'ad.doubleclick.net.52689.9389.302br.net', +'ad.doubleclick.net.52690.9389.302br.net', +'ad.doubleclick.net.52692.9389.302br.net', +'ad.doubleclick.net.52693.9389.302br.net', +'ad.doubleclick.net.52694.9389.302br.net', +'ad.doubleclick.net.52695.9389.302br.net', +'ad.doubleclick.net.52696.9389.302br.net', +'ad.doubleclick.net.52698.9389.302br.net', +'ad.doubleclick.net.52699.9389.302br.net', +'ad.doubleclick.net.52700.9389.302br.net', +'ad.doubleclick.net.52701.9389.302br.net', +'ad.doubleclick.net.52702.9389.302br.net', +'ad.doubleclick.net.52704.9389.302br.net', +'ad.doubleclick.net.52705.9389.302br.net', +'ad.doubleclick.net.52733.9390.302br.net', +'ad.doubleclick.net.52734.9390.302br.net', +'ad.doubleclick.net.52735.9390.302br.net', +'ad.doubleclick.net.52736.9390.302br.net', +'ad.doubleclick.net.52737.9390.302br.net', +'ad.doubleclick.net.52738.9390.302br.net', +'ad.doubleclick.net.52740.9390.302br.net', +'ad.doubleclick.net.52741.9390.302br.net', +'ad.doubleclick.net.54440.9199.302br.net', +'ad.doubleclick.net.54441.9199.302br.net', +'ad.doubleclick.net.54442.9199.302br.net', +'ad.doubleclick.net.54453.9199.302br.net', +'ad.doubleclick.net.54458.9199.302br.net', +'ad.doubleclick.net.54459.9199.302br.net', +'ad.doubleclick.net.54460.9199.302br.net', +'ad.doubleclick.net.54488.9199.302br.net', +'ad.doubleclick.net.54489.9199.302br.net', +'ad.doubleclick.net.54548.9199.302br.net', +'ad.doubleclick.net.54549.9199.302br.net', +'ad.doubleclick.net.54560.9199.302br.net', +'ad.doubleclick.net.54561.9199.302br.net', +'ad.doubleclick.net.54567.9199.302br.net', +'ad.doubleclick.net.54568.9199.302br.net', +'ad.doubleclick.net.54578.9199.302br.net', +'ad.doubleclick.net.54579.9199.302br.net', +'ad.doubleclick.net.54580.9199.302br.net', +'ad.doubleclick.net.54603.9199.302br.net', +'ad.doubleclick.net.54604.9199.302br.net', +'ad.doubleclick.net.54608.9199.302br.net', +'ad.doubleclick.net.54609.9199.302br.net', +'ad.doubleclick.net.54610.9199.302br.net', +'ad.doubleclick.net.54615.9199.302br.net', +'ad.doubleclick.net.54717.9199.302br.net', +'ad.doubleclick.net.54718.9199.302br.net', +'ad.doubleclick.net.54728.9199.302br.net', +'ad.doubleclick.net.54729.9199.302br.net', +'ad.doubleclick.net.54740.9199.302br.net', +'ad.doubleclick.net.54741.9199.302br.net', +'ad.doubleclick.net.54762.9199.302br.net', +'ad.doubleclick.net.54763.9199.302br.net', +'ad.doubleclick.net.54768.9199.302br.net', +'ad.doubleclick.net.54769.9199.302br.net', +'ad.doubleclick.net.54792.9199.302br.net', +'ad.doubleclick.net.54793.9199.302br.net', +'ad.doubleclick.net.54831.9199.302br.net', +'ad.doubleclick.net.54832.9199.302br.net', +'ad.doubleclick.net.54837.9199.302br.net', +'ad.doubleclick.net.54852.9199.302br.net', +'ad.doubleclick.net.54853.9199.302br.net', +'ad.doubleclick.net.54867.9199.302br.net', +'ad.doubleclick.net.54878.9199.302br.net', +'ad.doubleclick.net.54879.9199.302br.net', +'ad.doubleclick.net.54880.9199.302br.net', +'ad.doubleclick.net.54936.9199.302br.net', +'ad.doubleclick.net.54937.9199.302br.net', +'ad.doubleclick.net.55008.9199.302br.net', +'ad.doubleclick.net.55009.9199.302br.net', +'ad.doubleclick.net.55017.9199.302br.net', +'ad.doubleclick.net.55018.9199.302br.net', +'ad.doubleclick.net.55029.9199.302br.net', +'ad.doubleclick.net.55030.9199.302br.net', +'ad.doubleclick.net.55817.9239.302br.net', +'ad.doubleclick.net.55821.9376.302br.net', +'ad.doubleclick.net.55823.9376.302br.net', +'ad.doubleclick.net.55824.9376.302br.net', +'ad.doubleclick.net.55826.9376.302br.net', +'ad.doubleclick.net.55829.9077.302br.net', +'ad.doubleclick.net.55832.9077.302br.net', +'ad.doubleclick.net.55835.9083.302br.net', +'ad.doubleclick.net.55838.9083.302br.net', +'ad.doubleclick.net.55841.9376.302br.net', +'ad.doubleclick.net.55844.9376.302br.net', +'ad.doubleclick.net.55847.9376.302br.net', +'ad.doubleclick.net.55850.9077.302br.net', +'ad.doubleclick.net.55853.9077.302br.net', +'ad.doubleclick.net.55856.9077.302br.net', +'ad.doubleclick.net.55859.9077.302br.net', +'ad.doubleclick.net.55862.9077.302br.net', +'ad.doubleclick.net.55865.9077.302br.net', +'ad.doubleclick.net.55868.9083.302br.net', +'ad.doubleclick.net.55871.9083.302br.net', +'ad.doubleclick.net.55874.9083.302br.net', +'ad.doubleclick.net.55877.9083.302br.net', +'ad.doubleclick.net.55880.9083.302br.net', +'ad.doubleclick.net.55883.9083.302br.net', +'ad.doubleclick.net.56116.9240.302br.net', +'ad.doubleclick.net.56119.9240.302br.net', +'ad.doubleclick.net.56122.9376.302br.net', +'ad.doubleclick.net.56125.9376.302br.net', +'ad.doubleclick.net.56128.9376.302br.net', +'ad.doubleclick.net.56139.9392.302br.net', +'ad.doubleclick.net.56140.9392.302br.net', +'ad.doubleclick.net.56142.9392.302br.net', +'ad.doubleclick.net.56143.9392.302br.net', +'ad.doubleclick.net.56154.9392.302br.net', +'ad.doubleclick.net.56155.9392.302br.net', +'ad.doubleclick.net.56162.9392.302br.net', +'ad.doubleclick.net.56163.9392.302br.net', +'ad.doubleclick.net.56164.9392.302br.net', +'ad.doubleclick.net.56166.9392.302br.net', +'ad.doubleclick.net.56169.9392.302br.net', +'ad.doubleclick.net.56170.9392.302br.net', +'ad.doubleclick.net.56172.9392.302br.net', +'ad.doubleclick.net.56173.9392.302br.net', +'ad.doubleclick.net.56177.9392.302br.net', +'ad.doubleclick.net.56178.9392.302br.net', +'ad.doubleclick.net.56179.9392.302br.net', +'ad.doubleclick.net.56181.9392.302br.net', +'ad.doubleclick.net.56182.9392.302br.net', +'ad.doubleclick.net.56184.9394.302br.net', +'ad.doubleclick.net.56187.9394.302br.net', +'ad.doubleclick.net.56190.9394.302br.net', +'ad.doubleclick.net.56236.9393.302br.net', +'ad.doubleclick.net.56239.9393.302br.net', +'ad.doubleclick.net.56242.9393.302br.net', +'ad.doubleclick.net.56248.9393.302br.net', +'ad.doubleclick.net.56251.9393.302br.net', +'ad.doubleclick.net.56254.9393.302br.net', +'ad.doubleclick.net.56257.9393.302br.net', +'ad.doubleclick.net.56260.9393.302br.net', +'ad.doubleclick.net.56263.9393.302br.net', +'ad.doubleclick.net.56265.9393.302br.net', +'ad.doubleclick.net.56268.9393.302br.net', +'ad.doubleclick.net.56271.9393.302br.net', +'ad.doubleclick.net.56273.9393.302br.net', +'ad.doubleclick.net.56276.9393.302br.net', +'ad.doubleclick.net.56279.9393.302br.net', +'ad.doubleclick.net.56286.9078.302br.net', +'ad.doubleclick.net.56287.9078.302br.net', +'ad.doubleclick.net.56304.9078.302br.net', +'ad.doubleclick.net.56307.9078.302br.net', +'ad.doubleclick.net.56313.9078.302br.net', +'ad.doubleclick.net.56316.9078.302br.net', +'ad.doubleclick.net.56317.9078.302br.net', +'ad.doubleclick.net.56319.9078.302br.net', +'ad.doubleclick.net.56320.9078.302br.net', +'ad.doubleclick.net.56322.9078.302br.net', +'ad.doubleclick.net.56323.9078.302br.net', +'ad.doubleclick.net.56348.9078.302br.net', +'ad.doubleclick.net.56350.9078.302br.net', +'ad.doubleclick.net.56353.9078.302br.net', +'ad.doubleclick.net.56354.9078.302br.net', +'ad.doubleclick.net.56356.9078.302br.net', +'ad.doubleclick.net.56359.9078.302br.net', +'ad.doubleclick.net.56360.9078.302br.net', +'ad.doubleclick.net.56362.9078.302br.net', +'ad.doubleclick.net.56364.9078.302br.net', +'ad.doubleclick.net.56365.9078.302br.net', +'ad.doubleclick.net.56366.9078.302br.net', +'ad.doubleclick.net.56367.9078.302br.net', +'ad.doubleclick.net.56368.9078.302br.net', +'ad.doubleclick.net.56371.9078.302br.net', +'ad.doubleclick.net.56374.9078.302br.net', +'ad.doubleclick.net.56375.9078.302br.net', +'ad.doubleclick.net.56377.9078.302br.net', +'ad.doubleclick.net.56378.9078.302br.net', +'ad.doubleclick.net.56380.9078.302br.net', +'ad.doubleclick.net.56383.9078.302br.net', +'ad.doubleclick.net.56386.9078.302br.net', +'ad.doubleclick.net.56432.9397.302br.net', +'ad.doubleclick.net.56433.9397.302br.net', +'ad.doubleclick.net.56434.9397.302br.net', +'ad.doubleclick.net.56435.9376.302br.net', +'ad.doubleclick.net.56437.9376.302br.net', +'ad.doubleclick.net.56438.9376.302br.net', +'ad.doubleclick.net.56440.9376.302br.net', +'ad.doubleclick.net.56441.9376.302br.net', +'ad.doubleclick.net.56443.9376.302br.net', +'ad.doubleclick.net.56446.9083.302br.net', +'ad.doubleclick.net.56449.9083.302br.net', +'ad.doubleclick.net.56452.9083.302br.net', +'ad.doubleclick.net.56455.9086.302br.net', +'ad.doubleclick.net.56458.9086.302br.net', +'ad.doubleclick.net.56461.9086.302br.net', +'ad.doubleclick.net.56482.9083.302br.net', +'ad.doubleclick.net.56485.9083.302br.net', +'ad.doubleclick.net.56488.9083.302br.net', +'ad.doubleclick.net.56491.9376.302br.net', +'ad.doubleclick.net.56494.9376.302br.net', +'ad.doubleclick.net.56497.9376.302br.net', +'ad.doubleclick.net.56500.9083.302br.net', +'ad.doubleclick.net.56503.9083.302br.net', +'ad.doubleclick.net.56506.9083.302br.net', +'ad.doubleclick.net.56509.9086.302br.net', +'ad.doubleclick.net.56512.9086.302br.net', +'ad.doubleclick.net.56515.9086.302br.net', +'ad.doubleclick.net.56607.9336.302br.net', +'ad.doubleclick.net.56608.9336.302br.net', +'ad.doubleclick.net.56610.9336.302br.net', +'ad.doubleclick.net.56611.9336.302br.net', +'ad.doubleclick.net.56613.9336.302br.net', +'ad.doubleclick.net.56614.9336.302br.net', +'ad.doubleclick.net.56628.9336.302br.net', +'ad.doubleclick.net.56634.9336.302br.net', +'ad.doubleclick.net.56635.9336.302br.net', +'ad.doubleclick.net.56637.9336.302br.net', +'ad.doubleclick.net.56638.9336.302br.net', +'ad.doubleclick.net.56640.9336.302br.net', +'ad.doubleclick.net.56641.9336.302br.net', +'ad.doubleclick.net.56643.9336.302br.net', +'ad.doubleclick.net.56644.9336.302br.net', +'ad.doubleclick.net.56646.9336.302br.net', +'ad.doubleclick.net.56647.9336.302br.net', +'ad.doubleclick.net.56649.9336.302br.net', +'ad.doubleclick.net.56650.9336.302br.net', +'ad.doubleclick.net.56652.9336.302br.net', +'ad.doubleclick.net.56653.9336.302br.net', +'ad.doubleclick.net.56655.9336.302br.net', +'ad.doubleclick.net.56656.9336.302br.net', +'ad.doubleclick.net.56658.9336.302br.net', +'ad.doubleclick.net.56659.9336.302br.net', +'ad.doubleclick.net.56682.9336.302br.net', +'ad.doubleclick.net.56685.9336.302br.net', +'ad.doubleclick.net.56688.9336.302br.net', +'ad.doubleclick.net.56689.9336.302br.net', +'ad.doubleclick.net.56691.9336.302br.net', +'ad.doubleclick.net.56692.9336.302br.net', +'ad.doubleclick.net.56694.9336.302br.net', +'ad.doubleclick.net.56695.9336.302br.net', +'ad.doubleclick.net.56708.9053.302br.net', +'ad.doubleclick.net.56709.9053.302br.net', +'ad.doubleclick.net.56710.9053.302br.net', +'ad.doubleclick.net.56711.9053.302br.net', +'ad.doubleclick.net.56712.9053.302br.net', +'ad.doubleclick.net.56713.9053.302br.net', +'ad.doubleclick.net.56715.9053.302br.net', +'ad.doubleclick.net.56716.9053.302br.net', +'ad.doubleclick.net.56724.9078.302br.net', +'ad.doubleclick.net.56754.9078.302br.net', +'ad.doubleclick.net.56760.9078.302br.net', +'ad.doubleclick.net.56761.9078.302br.net', +'ad.doubleclick.net.56766.9078.302br.net', +'ad.doubleclick.net.56769.9078.302br.net', +'ad.doubleclick.net.56770.9078.302br.net', +'ad.doubleclick.net.56772.9078.302br.net', +'ad.doubleclick.net.56786.9083.302br.net', +'ad.doubleclick.net.56787.9083.302br.net', +'ad.doubleclick.net.56897.9401.302br.net', +'ad.doubleclick.net.56898.9401.302br.net', +'ad.doubleclick.net.56902.9401.302br.net', +'ad.doubleclick.net.56903.9401.302br.net', +'ad.doubleclick.net.56904.9401.302br.net', +'ad.doubleclick.net.56912.9401.302br.net', +'ad.doubleclick.net.56913.9401.302br.net', +'ad.doubleclick.net.56917.9402.302br.net', +'ad.doubleclick.net.56918.9402.302br.net', +'ad.doubleclick.net.56921.9402.302br.net', +'ad.doubleclick.net.56922.9402.302br.net', +'ad.doubleclick.net.56924.9402.302br.net', +'ad.doubleclick.net.56925.9402.302br.net', +'ad.doubleclick.net.56927.9402.302br.net', +'ad.doubleclick.net.56930.9402.302br.net', +'ad.doubleclick.net.56931.9402.302br.net', +'ad.doubleclick.net.56933.9402.302br.net', +'ad.doubleclick.net.56934.9402.302br.net', +'ad.doubleclick.net.56936.9402.302br.net', +'ad.doubleclick.net.56937.9402.302br.net', +'ad.doubleclick.net.56939.9401.302br.net', +'ad.doubleclick.net.56942.9401.302br.net', +'ad.doubleclick.net.56945.9401.302br.net', +'ad.doubleclick.net.56946.9401.302br.net', +'ad.doubleclick.net.56948.9401.302br.net', +'ad.doubleclick.net.56951.9401.302br.net', +'ad.doubleclick.net.56954.9401.302br.net', +'ad.doubleclick.net.56955.9401.302br.net', +'ad.doubleclick.net.56957.9401.302br.net', +'ad.doubleclick.net.56958.9401.302br.net', +'ad.doubleclick.net.56961.9401.302br.net', +'ad.doubleclick.net.56963.9401.302br.net', +'ad.doubleclick.net.56964.9401.302br.net', +'ad.doubleclick.net.56966.9401.302br.net', +'ad.doubleclick.net.56967.9401.302br.net', +'ad.doubleclick.net.56970.9401.302br.net', +'ad.doubleclick.net.56976.9401.302br.net', +'ad.doubleclick.net.56982.9401.302br.net', +'ad.doubleclick.net.56998.9401.302br.net', +'ad.doubleclick.net.56999.9401.302br.net', +'ad.doubleclick.net.57000.9404.302br.net', +'ad.doubleclick.net.57002.9404.302br.net', +'ad.doubleclick.net.57003.9404.302br.net', +'ad.doubleclick.net.57005.9404.302br.net', +'ad.doubleclick.net.57006.9404.302br.net', +'ad.doubleclick.net.57008.9404.302br.net', +'ad.doubleclick.net.57009.9404.302br.net', +'ad.doubleclick.net.57011.9404.302br.net', +'ad.doubleclick.net.57014.9404.302br.net', +'ad.doubleclick.net.57015.9404.302br.net', +'ad.doubleclick.net.57017.9404.302br.net', +'ad.doubleclick.net.57020.9404.302br.net', +'ad.doubleclick.net.57021.9404.302br.net', +'ad.doubleclick.net.57023.9404.302br.net', +'ad.doubleclick.net.57026.9404.302br.net', +'ad.doubleclick.net.57047.9405.302br.net', +'ad.doubleclick.net.57050.9405.302br.net', +'ad.doubleclick.net.57053.9405.302br.net', +'ad.doubleclick.net.57056.9406.302br.net', +'ad.doubleclick.net.57059.9406.302br.net', +'ad.doubleclick.net.57062.9406.302br.net', +'ad.doubleclick.net.57065.9406.302br.net', +'ad.doubleclick.net.57068.9406.302br.net', +'ad.doubleclick.net.57071.9406.302br.net', +'ad.doubleclick.net.57169.9406.302br.net', +'ad.doubleclick.net.57173.9406.302br.net', +'ad.doubleclick.net.57176.9406.302br.net', +'ad.doubleclick.net.57178.9406.302br.net', +'ad.doubleclick.net.57181.9406.302br.net', +'ad.doubleclick.net.57185.9406.302br.net', +'ad.doubleclick.net.57188.9406.302br.net', +'ad.doubleclick.net.57190.9406.302br.net', +'ad.doubleclick.net.57194.9406.302br.net', +'ad.doubleclick.net.57197.9406.302br.net', +'ad.doubleclick.net.57200.9406.302br.net', +'ad.doubleclick.net.57202.9406.302br.net', +'ad.doubleclick.net.57209.9406.302br.net', +'ad.doubleclick.net.57212.9406.302br.net', +'ad.doubleclick.net.57214.9406.302br.net', +'ad.doubleclick.net.57218.9406.302br.net', +'ad.doubleclick.net.57220.9406.302br.net', +'ad.doubleclick.net.57222.9406.302br.net', +'ad.doubleclick.net.57223.9406.302br.net', +'ad.doubleclick.net.57225.9406.302br.net', +'ad.doubleclick.net.57226.9406.302br.net', +'ad.doubleclick.net.57228.9406.302br.net', +'ad.doubleclick.net.57229.9406.302br.net', +'ad.doubleclick.net.57231.9406.302br.net', +'ad.doubleclick.net.57232.9406.302br.net', +'ad.doubleclick.net.57234.9406.302br.net', +'ad.doubleclick.net.57235.9406.302br.net', +'ad.doubleclick.net.57237.9406.302br.net', +'ad.doubleclick.net.57238.9406.302br.net', +'ad.doubleclick.net.57240.9406.302br.net', +'ad.doubleclick.net.57241.9406.302br.net', +'ad.doubleclick.net.57243.9406.302br.net', +'ad.doubleclick.net.57245.9408.302br.net', +'ad.doubleclick.net.57246.9408.302br.net', +'ad.doubleclick.net.57248.9408.302br.net', +'ad.doubleclick.net.57251.9408.302br.net', +'ad.doubleclick.net.57252.9408.302br.net', +'ad.doubleclick.net.57254.9408.302br.net', +'ad.doubleclick.net.57255.9408.302br.net', +'ad.doubleclick.net.57260.9401.302br.net', +'ad.doubleclick.net.57263.9401.302br.net', +'ad.doubleclick.net.57266.9401.302br.net', +'ad.doubleclick.net.57276.9250.302br.net', +'ad.doubleclick.net.57279.9250.302br.net', +'ad.doubleclick.net.57282.9250.302br.net', +'ad.doubleclick.net.57285.9250.302br.net', +'ad.doubleclick.net.57288.9250.302br.net', +'ad.doubleclick.net.57291.9250.302br.net', +'ad.doubleclick.net.57293.9410.302br.net', +'ad.doubleclick.net.57296.9410.302br.net', +'ad.doubleclick.net.57299.9410.302br.net', +'ad.doubleclick.net.57302.9410.302br.net', +'ad.doubleclick.net.57303.9410.302br.net', +'ad.doubleclick.net.57305.9410.302br.net', +'ad.doubleclick.net.57306.9410.302br.net', +'ad.doubleclick.net.57308.9410.302br.net', +'ad.doubleclick.net.57309.9410.302br.net', +'ad.doubleclick.net.57311.9410.302br.net', +'ad.doubleclick.net.57312.9410.302br.net', +'ad.doubleclick.net.57314.9410.302br.net', +'ad.doubleclick.net.57315.9410.302br.net', +'ad.doubleclick.net.57317.9410.302br.net', +'ad.doubleclick.net.57318.9410.302br.net', +'ad.doubleclick.net.57328.9411.302br.net', +'ad.doubleclick.net.57330.9411.302br.net', +'ad.doubleclick.net.57331.9411.302br.net', +'ad.doubleclick.net.57333.9411.302br.net', +'ad.doubleclick.net.57356.9231.302br.net', +'ad.doubleclick.net.57357.9231.302br.net', +'ad.doubleclick.net.57359.9231.302br.net', +'ad.doubleclick.net.57360.9231.302br.net', +'ad.doubleclick.net.57371.9231.302br.net', +'ad.doubleclick.net.57372.9231.302br.net', +'ad.doubleclick.net.57380.9231.302br.net', +'ad.doubleclick.net.57381.9231.302br.net', +'ad.doubleclick.net.57389.9231.302br.net', +'ad.doubleclick.net.57390.9231.302br.net', +'ad.doubleclick.net.57392.9231.302br.net', +'ad.doubleclick.net.57393.9231.302br.net', +'ad.doubleclick.net.57395.9231.302br.net', +'ad.doubleclick.net.57396.9231.302br.net', +'ad.doubleclick.net.57401.9166.302br.net', +'ad.doubleclick.net.57402.9166.302br.net', +'ad.doubleclick.net.57404.9166.302br.net', +'ad.doubleclick.net.57405.9166.302br.net', +'ad.doubleclick.net.57407.9166.302br.net', +'ad.doubleclick.net.57408.9166.302br.net', +'ad.doubleclick.net.57410.9166.302br.net', +'ad.doubleclick.net.57411.9166.302br.net', +'ad.doubleclick.net.57413.9166.302br.net', +'ad.doubleclick.net.57414.9166.302br.net', +'ad.doubleclick.net.57416.9166.302br.net', +'ad.doubleclick.net.57417.9166.302br.net', +'ad.doubleclick.net.57419.9166.302br.net', +'ad.doubleclick.net.57420.9166.302br.net', +'ad.doubleclick.net.57422.9166.302br.net', +'ad.doubleclick.net.57423.9166.302br.net', +'ad.doubleclick.net.57425.9166.302br.net', +'ad.doubleclick.net.57426.9166.302br.net', +'ad.doubleclick.net.57901.9418.302br.net', +'ad.doubleclick.net.57903.9418.302br.net', +'ad.doubleclick.net.57904.9418.302br.net', +'ad.doubleclick.net.57906.9418.302br.net', +'ad.doubleclick.net.57913.9418.302br.net', +'ad.doubleclick.net.57915.9418.302br.net', +'ad.doubleclick.net.57921.9418.302br.net', +'ad.doubleclick.net.57924.9418.302br.net', +'ad.doubleclick.net.57927.9418.302br.net', +'ad.doubleclick.net.57928.9418.302br.net', +'ad.doubleclick.net.57930.9418.302br.net', +'ad.doubleclick.net.57933.9418.302br.net', +'ad.doubleclick.net.57936.9418.302br.net', +'ad.doubleclick.net.57937.9418.302br.net', +'ad.doubleclick.net.57939.9418.302br.net', +'ad.doubleclick.net.57940.9418.302br.net', +'ad.doubleclick.net.57942.9418.302br.net', +'ad.doubleclick.net.57943.9418.302br.net', +'ad.doubleclick.net.57945.9418.302br.net', +'ad.doubleclick.net.57946.9418.302br.net', +'ad.doubleclick.net.57948.9418.302br.net', +'ad.doubleclick.net.57951.9418.302br.net', +'ad.doubleclick.net.57954.9418.302br.net', +'ad.doubleclick.net.57957.9418.302br.net', +'ad.doubleclick.net.57958.9418.302br.net', +'ad.doubleclick.net.57960.9418.302br.net', +'ad.doubleclick.net.57961.9418.302br.net', +'ad.doubleclick.net.57963.9418.302br.net', +'ad.doubleclick.net.57964.9418.302br.net', +'ad.doubleclick.net.57966.9418.302br.net', +'ad.doubleclick.net.57967.9418.302br.net', +'ad.doubleclick.net.57969.9418.302br.net', +'ad.doubleclick.net.57972.9418.302br.net', +'ad.doubleclick.net.57973.9418.302br.net', +'ad.doubleclick.net.57975.9418.302br.net', +'ad.doubleclick.net.57978.9418.302br.net', +'ad.doubleclick.net.57981.9418.302br.net', +'ad.doubleclick.net.57982.9418.302br.net', +'ad.doubleclick.net.57984.9418.302br.net', +'ad.doubleclick.net.57985.9418.302br.net', +'ad.doubleclick.net.57987.9418.302br.net', +'ad.doubleclick.net.57990.9418.302br.net', +'ad.doubleclick.net.57991.9418.302br.net', +'ad.doubleclick.net.57993.9418.302br.net', +'ad.doubleclick.net.57994.9418.302br.net', +'ad.doubleclick.net.57996.9418.302br.net', +'ad.doubleclick.net.57999.9418.302br.net', +'ad.doubleclick.net.58000.9418.302br.net', +'ad.doubleclick.net.58002.9418.302br.net', +'ad.doubleclick.net.58005.9418.302br.net', +'ad.doubleclick.net.58008.9418.302br.net', +'ad.doubleclick.net.58009.9418.302br.net', +'ad.doubleclick.net.58011.9418.302br.net', +'ad.doubleclick.net.58015.9418.302br.net', +'ad.doubleclick.net.58017.9418.302br.net', +'ad.doubleclick.net.58018.9418.302br.net', +'ad.doubleclick.net.58020.9418.302br.net', +'ad.doubleclick.net.58021.9418.302br.net', +'ad.doubleclick.net.58023.9418.302br.net', +'ad.doubleclick.net.58024.9418.302br.net', +'ad.doubleclick.net.58026.9418.302br.net', +'ad.doubleclick.net.58027.9418.302br.net', +'ad.doubleclick.net.58029.9418.302br.net', +'ad.doubleclick.net.58032.9418.302br.net', +'ad.doubleclick.net.58033.9418.302br.net', +'ad.doubleclick.net.58035.9418.302br.net', +'ad.doubleclick.net.58038.9418.302br.net', +'ad.doubleclick.net.58039.9418.302br.net', +'ad.doubleclick.net.58041.9418.302br.net', +'ad.doubleclick.net.58042.9418.302br.net', +'ad.doubleclick.net.58044.9418.302br.net', +'ad.doubleclick.net.58048.9418.302br.net', +'ad.doubleclick.net.58050.9418.302br.net', +'ad.doubleclick.net.58051.9418.302br.net', +'ad.doubleclick.net.58053.9418.302br.net', +'ad.doubleclick.net.58054.9418.302br.net', +'ad.doubleclick.net.58056.9418.302br.net', +'ad.doubleclick.net.58057.9418.302br.net', +'ad.doubleclick.net.58059.9418.302br.net', +'ad.doubleclick.net.58060.9418.302br.net', +'ad.doubleclick.net.58062.9418.302br.net', +'ad.doubleclick.net.58065.9418.302br.net', +'ad.doubleclick.net.58066.9418.302br.net', +'ad.doubleclick.net.58068.9418.302br.net', +'ad.doubleclick.net.58072.9418.302br.net', +'ad.doubleclick.net.58074.9418.302br.net', +'ad.doubleclick.net.58075.9418.302br.net', +'ad.doubleclick.net.58077.9418.302br.net', +'ad.doubleclick.net.58078.9418.302br.net', +'ad.doubleclick.net.58080.9418.302br.net', +'ad.doubleclick.net.58081.9418.302br.net', +'ad.doubleclick.net.58083.9418.302br.net', +'ad.doubleclick.net.58086.9418.302br.net', +'ad.doubleclick.net.58087.9418.302br.net', +'ad.doubleclick.net.58089.9418.302br.net', +'ad.doubleclick.net.58092.9418.302br.net', +'ad.doubleclick.net.58096.9418.302br.net', +'ad.doubleclick.net.58098.9418.302br.net', +'ad.doubleclick.net.58099.9418.302br.net', +'ad.doubleclick.net.58101.9418.302br.net', +'ad.doubleclick.net.58102.9418.302br.net', +'ad.doubleclick.net.58104.9418.302br.net', +'ad.doubleclick.net.58105.9418.302br.net', +'ad.doubleclick.net.58107.9418.302br.net', +'ad.doubleclick.net.58113.9418.302br.net', +'ad.doubleclick.net.58114.9418.302br.net', +'ad.doubleclick.net.58116.9418.302br.net', +'ad.doubleclick.net.58117.9418.302br.net', +'ad.doubleclick.net.58119.9418.302br.net', +'ad.doubleclick.net.58120.9418.302br.net', +'ad.doubleclick.net.58122.9418.302br.net', +'ad.doubleclick.net.58123.9418.302br.net', +'ad.doubleclick.net.58125.9418.302br.net', +'ad.doubleclick.net.58126.9418.302br.net', +'ad.doubleclick.net.58128.9418.302br.net', +'ad.doubleclick.net.58131.9418.302br.net', +'ad.doubleclick.net.58137.9418.302br.net', +'ad.doubleclick.net.58140.9418.302br.net', +'ad.doubleclick.net.58141.9418.302br.net', +'ad.doubleclick.net.58143.9418.302br.net', +'ad.doubleclick.net.58144.9418.302br.net', +'ad.doubleclick.net.58146.9418.302br.net', +'ad.doubleclick.net.58151.9078.302br.net', +'ad.doubleclick.net.58153.9411.302br.net', +'ad.doubleclick.net.58155.9411.302br.net', +'ad.doubleclick.net.58156.9411.302br.net', +'ad.doubleclick.net.58158.9411.302br.net', +'ad.doubleclick.net.58162.9411.302br.net', +'ad.doubleclick.net.58164.9411.302br.net', +'ad.doubleclick.net.58165.9411.302br.net', +'ad.doubleclick.net.58167.9411.302br.net', +'ad.doubleclick.net.58169.9419.302br.net', +'ad.doubleclick.net.58170.9419.302br.net', +'ad.doubleclick.net.58171.9419.302br.net', +'ad.doubleclick.net.58172.9419.302br.net', +'ad.doubleclick.net.58245.9420.302br.net', +'ad.doubleclick.net.58246.9420.302br.net', +'ad.doubleclick.net.58247.9420.302br.net', +'ad.doubleclick.net.58248.9420.302br.net', +'ad.doubleclick.net.58249.9420.302br.net', +'ad.doubleclick.net.58250.9420.302br.net', +'ad.doubleclick.net.58252.9420.302br.net', +'ad.doubleclick.net.58253.9420.302br.net', +'ad.doubleclick.net.58256.9404.302br.net', +'ad.doubleclick.net.58259.9404.302br.net', +'ad.doubleclick.net.58262.9404.302br.net', +'ad.doubleclick.net.58263.9404.302br.net', +'ad.doubleclick.net.58265.9404.302br.net', +'ad.doubleclick.net.58268.9404.302br.net', +'ad.doubleclick.net.58269.9404.302br.net', +'ad.doubleclick.net.58271.9404.302br.net', +'ad.doubleclick.net.58272.9404.302br.net', +'ad.doubleclick.net.58274.9404.302br.net', +'ad.doubleclick.net.58277.9404.302br.net', +'ad.doubleclick.net.58278.9404.302br.net', +'ad.doubleclick.net.58280.9404.302br.net', +'ad.doubleclick.net.58282.9423.302br.net', +'ad.doubleclick.net.58284.9423.302br.net', +'ad.doubleclick.net.58286.9423.302br.net', +'ad.doubleclick.net.58288.9423.302br.net', +'ad.doubleclick.net.58290.9423.302br.net', +'ad.doubleclick.net.58292.9423.302br.net', +'ad.doubleclick.net.58296.9423.302br.net', +'ad.doubleclick.net.58300.9423.302br.net', +'ad.doubleclick.net.58302.9423.302br.net', +'ad.doubleclick.net.58306.9423.302br.net', +'ad.doubleclick.net.58308.9423.302br.net', +'ad.doubleclick.net.58310.9423.302br.net', +'ad.doubleclick.net.58314.9423.302br.net', +'ad.doubleclick.net.58315.9423.302br.net', +'ad.doubleclick.net.58316.9423.302br.net', +'ad.doubleclick.net.58320.9423.302br.net', +'ad.doubleclick.net.58330.9318.302br.net', +'ad.doubleclick.net.58332.9318.302br.net', +'ad.doubleclick.net.58334.9318.302br.net', +'ad.doubleclick.net.58335.9318.302br.net', +'ad.doubleclick.net.58336.9318.302br.net', +'ad.doubleclick.net.58338.9318.302br.net', +'ad.doubleclick.net.58339.9318.302br.net', +'ad.doubleclick.net.58340.9318.302br.net', +'ad.doubleclick.net.58341.9318.302br.net', +'ad.doubleclick.net.58342.9318.302br.net', +'ad.doubleclick.net.58343.9318.302br.net', +'ad.doubleclick.net.58344.9318.302br.net', +'ad.doubleclick.net.58345.9318.302br.net', +'ad.doubleclick.net.58347.9318.302br.net', +'ad.doubleclick.net.58348.9318.302br.net', +'ad.doubleclick.net.58350.9318.302br.net', +'ad.doubleclick.net.58351.9318.302br.net', +'ad.doubleclick.net.58352.9318.302br.net', +'ad.doubleclick.net.58353.9318.302br.net', +'ad.doubleclick.net.58354.9318.302br.net', +'ad.doubleclick.net.58355.9318.302br.net', +'ad.doubleclick.net.58356.9318.302br.net', +'ad.doubleclick.net.58357.9318.302br.net', +'ad.doubleclick.net.58359.9318.302br.net', +'ad.doubleclick.net.58360.9318.302br.net', +'ad.doubleclick.net.58361.9318.302br.net', +'ad.doubleclick.net.58362.9318.302br.net', +'ad.doubleclick.net.58363.9318.302br.net', +'ad.doubleclick.net.58364.9318.302br.net', +'ad.doubleclick.net.58365.9318.302br.net', +'ad.doubleclick.net.58366.9318.302br.net', +'ad.doubleclick.net.58368.9318.302br.net', +'ad.doubleclick.net.58369.9318.302br.net', +'ad.doubleclick.net.58371.9318.302br.net', +'ad.doubleclick.net.58372.9318.302br.net', +'ad.doubleclick.net.58373.9318.302br.net', +'ad.doubleclick.net.58374.9318.302br.net', +'ad.doubleclick.net.58375.9318.302br.net', +'ad.doubleclick.net.58376.9318.302br.net', +'ad.doubleclick.net.58377.9318.302br.net', +'ad.doubleclick.net.58378.9318.302br.net', +'ad.doubleclick.net.58380.9318.302br.net', +'ad.doubleclick.net.58381.9318.302br.net', +'ad.doubleclick.net.58383.9318.302br.net', +'ad.doubleclick.net.58385.9318.302br.net', +'ad.doubleclick.net.58386.9318.302br.net', +'ad.doubleclick.net.58387.9318.302br.net', +'ad.doubleclick.net.58389.9318.302br.net', +'ad.doubleclick.net.58392.9318.302br.net', +'ad.doubleclick.net.58393.9318.302br.net', +'ad.doubleclick.net.58394.9318.302br.net', +'ad.doubleclick.net.58395.9318.302br.net', +'ad.doubleclick.net.58404.9318.302br.net', +'ad.doubleclick.net.58407.9318.302br.net', +'ad.doubleclick.net.58410.9318.302br.net', +'ad.doubleclick.net.58411.9318.302br.net', +'ad.doubleclick.net.58413.9318.302br.net', +'ad.doubleclick.net.58417.9318.302br.net', +'ad.doubleclick.net.58419.9318.302br.net', +'ad.doubleclick.net.58425.9318.302br.net', +'ad.doubleclick.net.58428.9318.302br.net', +'ad.doubleclick.net.58429.9318.302br.net', +'ad.doubleclick.net.58431.9318.302br.net', +'ad.doubleclick.net.58437.9318.302br.net', +'ad.doubleclick.net.58441.9318.302br.net', +'ad.doubleclick.net.58443.9318.302br.net', +'ad.doubleclick.net.58449.9318.302br.net', +'ad.doubleclick.net.58452.9318.302br.net', +'ad.doubleclick.net.58453.9318.302br.net', +'ad.doubleclick.net.58455.9318.302br.net', +'ad.doubleclick.net.58456.9318.302br.net', +'ad.doubleclick.net.58458.9318.302br.net', +'ad.doubleclick.net.58459.9318.302br.net', +'ad.doubleclick.net.58461.9318.302br.net', +'ad.doubleclick.net.58462.9318.302br.net', +'ad.doubleclick.net.58464.9318.302br.net', +'ad.doubleclick.net.58467.9318.302br.net', +'ad.doubleclick.net.58479.9318.302br.net', +'ad.doubleclick.net.58480.9318.302br.net', +'ad.doubleclick.net.58482.9318.302br.net', +'ad.doubleclick.net.58483.9318.302br.net', +'ad.doubleclick.net.58485.9318.302br.net', +'ad.doubleclick.net.58494.9318.302br.net', +'ad.doubleclick.net.58497.9318.302br.net', +'ad.doubleclick.net.58498.9318.302br.net', +'ad.doubleclick.net.58500.9318.302br.net', +'ad.doubleclick.net.58503.9318.302br.net', +'ad.doubleclick.net.58504.9318.302br.net', +'ad.doubleclick.net.58506.9318.302br.net', +'ad.doubleclick.net.58509.9318.302br.net', +'ad.doubleclick.net.58518.9318.302br.net', +'ad.doubleclick.net.58522.9318.302br.net', +'ad.doubleclick.net.58524.9318.302br.net', +'ad.doubleclick.net.58527.9318.302br.net', +'ad.doubleclick.net.58530.9318.302br.net', +'ad.doubleclick.net.58533.9318.302br.net', +'ad.doubleclick.net.58551.9318.302br.net', +'ad.doubleclick.net.58557.9318.302br.net', +'ad.doubleclick.net.58560.9318.302br.net', +'ad.doubleclick.net.58572.9318.302br.net', +'ad.doubleclick.net.58573.9318.302br.net', +'ad.doubleclick.net.58574.9318.302br.net', +'ad.doubleclick.net.58578.9318.302br.net', +'ad.doubleclick.net.58579.9318.302br.net', +'ad.doubleclick.net.58580.9318.302br.net', +'ad.doubleclick.net.58585.9318.302br.net', +'ad.doubleclick.net.58587.9318.302br.net', +'ad.doubleclick.net.58588.9318.302br.net', +'ad.doubleclick.net.58591.9318.302br.net', +'ad.doubleclick.net.58592.9318.302br.net', +'ad.doubleclick.net.58593.9318.302br.net', +'ad.doubleclick.net.58596.9318.302br.net', +'ad.doubleclick.net.58597.9318.302br.net', +'ad.doubleclick.net.58599.9318.302br.net', +'ad.doubleclick.net.58603.9318.302br.net', +'ad.doubleclick.net.58604.9318.302br.net', +'ad.doubleclick.net.58606.9318.302br.net', +'ad.doubleclick.net.58607.9318.302br.net', +'ad.doubleclick.net.58608.9318.302br.net', +'ad.doubleclick.net.58612.9318.302br.net', +'ad.doubleclick.net.58613.9318.302br.net', +'ad.doubleclick.net.58614.9318.302br.net', +'ad.doubleclick.net.58618.9318.302br.net', +'ad.doubleclick.net.58619.9318.302br.net', +'ad.doubleclick.net.58625.9318.302br.net', +'ad.doubleclick.net.58627.9318.302br.net', +'ad.doubleclick.net.58628.9318.302br.net', +'ad.doubleclick.net.58630.9318.302br.net', +'ad.doubleclick.net.58631.9318.302br.net', +'ad.doubleclick.net.58633.9318.302br.net', +'ad.doubleclick.net.58635.9318.302br.net', +'ad.doubleclick.net.58638.9318.302br.net', +'ad.doubleclick.net.58639.9318.302br.net', +'ad.doubleclick.net.58640.9318.302br.net', +'ad.doubleclick.net.58642.9318.302br.net', +'ad.doubleclick.net.58644.9318.302br.net', +'ad.doubleclick.net.58646.9318.302br.net', +'ad.doubleclick.net.58648.9318.302br.net', +'ad.doubleclick.net.58651.9318.302br.net', +'ad.doubleclick.net.58652.9318.302br.net', +'ad.doubleclick.net.58654.9318.302br.net', +'ad.doubleclick.net.58655.9318.302br.net', +'ad.doubleclick.net.58657.9318.302br.net', +'ad.doubleclick.net.58658.9318.302br.net', +'ad.doubleclick.net.58660.9318.302br.net', +'ad.doubleclick.net.58661.9318.302br.net', +'ad.doubleclick.net.58663.9318.302br.net', +'ad.doubleclick.net.58665.9318.302br.net', +'ad.doubleclick.net.58668.9318.302br.net', +'ad.doubleclick.net.58669.9318.302br.net', +'ad.doubleclick.net.58670.9318.302br.net', +'ad.doubleclick.net.58671.9318.302br.net', +'ad.doubleclick.net.58673.9318.302br.net', +'ad.doubleclick.net.58674.9318.302br.net', +'ad.doubleclick.net.58676.9318.302br.net', +'ad.doubleclick.net.58678.9318.302br.net', +'ad.doubleclick.net.58679.9318.302br.net', +'ad.doubleclick.net.58681.9318.302br.net', +'ad.doubleclick.net.58683.9318.302br.net', +'ad.doubleclick.net.58685.9318.302br.net', +'ad.doubleclick.net.58686.9318.302br.net', +'ad.doubleclick.net.58687.9318.302br.net', +'ad.doubleclick.net.58689.9318.302br.net', +'ad.doubleclick.net.58691.9318.302br.net', +'ad.doubleclick.net.58692.9318.302br.net', +'ad.doubleclick.net.58693.9318.302br.net', +'ad.doubleclick.net.58694.9318.302br.net', +'ad.doubleclick.net.58695.9318.302br.net', +'ad.doubleclick.net.58696.9318.302br.net', +'ad.doubleclick.net.58698.9318.302br.net', +'ad.doubleclick.net.58699.9318.302br.net', +'ad.doubleclick.net.58700.9318.302br.net', +'ad.doubleclick.net.58704.9318.302br.net', +'ad.doubleclick.net.58706.9318.302br.net', +'ad.doubleclick.net.58711.9318.302br.net', +'ad.doubleclick.net.58712.9318.302br.net', +'ad.doubleclick.net.58713.9318.302br.net', +'ad.doubleclick.net.58715.9318.302br.net', +'ad.doubleclick.net.58717.9318.302br.net', +'ad.doubleclick.net.58718.9318.302br.net', +'ad.doubleclick.net.58723.9318.302br.net', +'ad.doubleclick.net.58724.9318.302br.net', +'ad.doubleclick.net.58726.9318.302br.net', +'ad.doubleclick.net.58730.9318.302br.net', +'ad.doubleclick.net.58731.9318.302br.net', +'ad.doubleclick.net.58732.9318.302br.net', +'ad.doubleclick.net.58734.9318.302br.net', +'ad.doubleclick.net.58737.9318.302br.net', +'ad.doubleclick.net.58740.9318.302br.net', +'ad.doubleclick.net.58741.9318.302br.net', +'ad.doubleclick.net.58743.9318.302br.net', +'ad.doubleclick.net.58746.9318.302br.net', +'ad.doubleclick.net.58748.9318.302br.net', +'ad.doubleclick.net.58752.9318.302br.net', +'ad.doubleclick.net.58753.9318.302br.net', +'ad.doubleclick.net.58754.9318.302br.net', +'ad.doubleclick.net.58759.9318.302br.net', +'ad.doubleclick.net.58760.9318.302br.net', +'ad.doubleclick.net.58762.9318.302br.net', +'ad.doubleclick.net.58763.9318.302br.net', +'ad.doubleclick.net.58767.9318.302br.net', +'ad.doubleclick.net.58770.9318.302br.net', +'ad.doubleclick.net.58774.9318.302br.net', +'ad.doubleclick.net.58776.9318.302br.net', +'ad.doubleclick.net.58779.9318.302br.net', +'ad.doubleclick.net.58781.9318.302br.net', +'ad.doubleclick.net.58782.9318.302br.net', +'ad.doubleclick.net.58785.9318.302br.net', +'ad.doubleclick.net.58787.9318.302br.net', +'ad.doubleclick.net.58791.9318.302br.net', +'ad.doubleclick.net.58793.9318.302br.net', +'ad.doubleclick.net.58795.9318.302br.net', +'ad.doubleclick.net.58796.9318.302br.net', +'ad.doubleclick.net.58797.9318.302br.net', +'ad.doubleclick.net.58798.9318.302br.net', +'ad.doubleclick.net.58800.9318.302br.net', +'ad.doubleclick.net.58801.9318.302br.net', +'ad.doubleclick.net.58802.9318.302br.net', +'ad.doubleclick.net.58803.9318.302br.net', +'ad.doubleclick.net.58804.9318.302br.net', +'ad.doubleclick.net.58806.9318.302br.net', +'ad.doubleclick.net.58808.9318.302br.net', +'ad.doubleclick.net.58809.9318.302br.net', +'ad.doubleclick.net.58810.9318.302br.net', +'ad.doubleclick.net.58812.9318.302br.net', +'ad.doubleclick.net.58815.9318.302br.net', +'ad.doubleclick.net.58816.9318.302br.net', +'ad.doubleclick.net.58818.9318.302br.net', +'ad.doubleclick.net.58820.9318.302br.net', +'ad.doubleclick.net.58821.9318.302br.net', +'ad.doubleclick.net.58822.9318.302br.net', +'ad.doubleclick.net.58824.9318.302br.net', +'ad.doubleclick.net.58826.9318.302br.net', +'ad.doubleclick.net.58827.9318.302br.net', +'ad.doubleclick.net.58828.9318.302br.net', +'ad.doubleclick.net.58829.9318.302br.net', +'ad.doubleclick.net.58830.9318.302br.net', +'ad.doubleclick.net.58831.9318.302br.net', +'ad.doubleclick.net.58834.9318.302br.net', +'ad.doubleclick.net.58835.9318.302br.net', +'ad.doubleclick.net.58836.9318.302br.net', +'ad.doubleclick.net.58837.9318.302br.net', +'ad.doubleclick.net.58839.9318.302br.net', +'ad.doubleclick.net.58843.9318.302br.net', +'ad.doubleclick.net.58844.9318.302br.net', +'ad.doubleclick.net.58846.9318.302br.net', +'ad.doubleclick.net.58849.9318.302br.net', +'ad.doubleclick.net.58855.9318.302br.net', +'ad.doubleclick.net.58856.9318.302br.net', +'ad.doubleclick.net.58857.9318.302br.net', +'ad.doubleclick.net.58860.9318.302br.net', +'ad.doubleclick.net.58861.9318.302br.net', +'ad.doubleclick.net.58862.9318.302br.net', +'ad.doubleclick.net.58864.9318.302br.net', +'ad.doubleclick.net.58867.9318.302br.net', +'ad.doubleclick.net.58868.9318.302br.net', +'ad.doubleclick.net.58870.9318.302br.net', +'ad.doubleclick.net.58872.9318.302br.net', +'ad.doubleclick.net.58873.9318.302br.net', +'ad.doubleclick.net.58874.9318.302br.net', +'ad.doubleclick.net.58875.9318.302br.net', +'ad.doubleclick.net.58879.9318.302br.net', +'ad.doubleclick.net.58881.9318.302br.net', +'ad.doubleclick.net.58886.9318.302br.net', +'ad.doubleclick.net.58890.9318.302br.net', +'ad.doubleclick.net.58892.9318.302br.net', +'ad.doubleclick.net.58893.9318.302br.net', +'ad.doubleclick.net.58896.9318.302br.net', +'ad.doubleclick.net.58899.9318.302br.net', +'ad.doubleclick.net.58902.9318.302br.net', +'ad.doubleclick.net.58905.9318.302br.net', +'ad.doubleclick.net.58907.9318.302br.net', +'ad.doubleclick.net.58909.9318.302br.net', +'ad.doubleclick.net.58911.9318.302br.net', +'ad.doubleclick.net.58920.9318.302br.net', +'ad.doubleclick.net.58923.9318.302br.net', +'ad.doubleclick.net.58926.9318.302br.net', +'ad.doubleclick.net.58928.9318.302br.net', +'ad.doubleclick.net.58929.9318.302br.net', +'ad.doubleclick.net.58932.9318.302br.net', +'ad.doubleclick.net.58933.9318.302br.net', +'ad.doubleclick.net.58936.9318.302br.net', +'ad.doubleclick.net.58937.9318.302br.net', +'ad.doubleclick.net.58938.9318.302br.net', +'ad.doubleclick.net.58939.9318.302br.net', +'ad.doubleclick.net.58942.9318.302br.net', +'ad.doubleclick.net.58943.9318.302br.net', +'ad.doubleclick.net.58944.9318.302br.net', +'ad.doubleclick.net.58946.9318.302br.net', +'ad.doubleclick.net.58951.9318.302br.net', +'ad.doubleclick.net.58952.9318.302br.net', +'ad.doubleclick.net.58954.9318.302br.net', +'ad.doubleclick.net.58956.9318.302br.net', +'ad.doubleclick.net.58957.9318.302br.net', +'ad.doubleclick.net.58959.9318.302br.net', +'ad.doubleclick.net.58961.9318.302br.net', +'ad.doubleclick.net.58964.9318.302br.net', +'ad.doubleclick.net.58969.9318.302br.net', +'ad.doubleclick.net.58970.9318.302br.net', +'ad.doubleclick.net.58971.9318.302br.net', +'ad.doubleclick.net.58975.9318.302br.net', +'ad.doubleclick.net.58976.9318.302br.net', +'ad.doubleclick.net.58977.9318.302br.net', +'ad.doubleclick.net.58978.9318.302br.net', +'ad.doubleclick.net.58981.9318.302br.net', +'ad.doubleclick.net.58982.9318.302br.net', +'ad.doubleclick.net.58984.9318.302br.net', +'ad.doubleclick.net.58988.9318.302br.net', +'ad.doubleclick.net.58989.9318.302br.net', +'ad.doubleclick.net.58993.9318.302br.net', +'ad.doubleclick.net.58994.9318.302br.net', +'ad.doubleclick.net.58996.9318.302br.net', +'ad.doubleclick.net.58999.9318.302br.net', +'ad.doubleclick.net.59000.9318.302br.net', +'ad.doubleclick.net.59005.9318.302br.net', +'ad.doubleclick.net.59006.9318.302br.net', +'ad.doubleclick.net.59007.9318.302br.net', +'ad.doubleclick.net.59014.9318.302br.net', +'ad.doubleclick.net.59015.9318.302br.net', +'ad.doubleclick.net.59017.9318.302br.net', +'ad.doubleclick.net.59020.9318.302br.net', +'ad.doubleclick.net.59022.9318.302br.net', +'ad.doubleclick.net.59026.9318.302br.net', +'ad.doubleclick.net.59027.9318.302br.net', +'ad.doubleclick.net.59032.9318.302br.net', +'ad.doubleclick.net.59033.9318.302br.net', +'ad.doubleclick.net.59035.9318.302br.net', +'ad.doubleclick.net.59037.9318.302br.net', +'ad.doubleclick.net.59039.9318.302br.net', +'ad.doubleclick.net.59040.9318.302br.net', +'ad.doubleclick.net.59044.9318.302br.net', +'ad.doubleclick.net.59046.9318.302br.net', +'ad.doubleclick.net.59047.9318.302br.net', +'ad.doubleclick.net.59050.9318.302br.net', +'ad.doubleclick.net.59052.9318.302br.net', +'ad.doubleclick.net.59055.9318.302br.net', +'ad.doubleclick.net.59057.9318.302br.net', +'ad.doubleclick.net.59058.9318.302br.net', +'ad.doubleclick.net.59064.9318.302br.net', +'ad.doubleclick.net.59067.9318.302br.net', +'ad.doubleclick.net.59072.9318.302br.net', +'ad.doubleclick.net.59073.9318.302br.net', +'ad.doubleclick.net.59074.9318.302br.net', +'ad.doubleclick.net.59077.9318.302br.net', +'ad.doubleclick.net.59078.9318.302br.net', +'ad.doubleclick.net.59082.9318.302br.net', +'ad.doubleclick.net.59087.9318.302br.net', +'ad.doubleclick.net.59093.9318.302br.net', +'ad.doubleclick.net.59095.9318.302br.net', +'ad.doubleclick.net.59098.9318.302br.net', +'ad.doubleclick.net.59099.9318.302br.net', +'ad.doubleclick.net.59100.9318.302br.net', +'ad.doubleclick.net.59104.9318.302br.net', +'ad.doubleclick.net.59105.9318.302br.net', +'ad.doubleclick.net.59107.9318.302br.net', +'ad.doubleclick.net.59109.9318.302br.net', +'ad.doubleclick.net.59111.9318.302br.net', +'ad.doubleclick.net.59115.9318.302br.net', +'ad.doubleclick.net.59116.9318.302br.net', +'ad.doubleclick.net.59118.9318.302br.net', +'ad.doubleclick.net.59122.9318.302br.net', +'ad.doubleclick.net.59123.9318.302br.net', +'ad.doubleclick.net.59127.9318.302br.net', +'ad.doubleclick.net.59130.9318.302br.net', +'ad.doubleclick.net.59131.9318.302br.net', +'ad.doubleclick.net.59134.9318.302br.net', +'ad.doubleclick.net.59135.9318.302br.net', +'ad.doubleclick.net.59136.9318.302br.net', +'ad.doubleclick.net.59140.9318.302br.net', +'ad.doubleclick.net.59146.9318.302br.net', +'ad.doubleclick.net.59147.9318.302br.net', +'ad.doubleclick.net.59148.9318.302br.net', +'ad.doubleclick.net.59151.9318.302br.net', +'ad.doubleclick.net.59154.9318.302br.net', +'ad.doubleclick.net.59156.9318.302br.net', +'ad.doubleclick.net.59162.9318.302br.net', +'ad.doubleclick.net.59163.9318.302br.net', +'ad.doubleclick.net.59165.9318.302br.net', +'ad.doubleclick.net.59166.9318.302br.net', +'ad.doubleclick.net.59168.9318.302br.net', +'ad.doubleclick.net.59169.9318.302br.net', +'ad.doubleclick.net.59171.9318.302br.net', +'ad.doubleclick.net.59174.9318.302br.net', +'ad.doubleclick.net.59176.9318.302br.net', +'ad.doubleclick.net.59178.9318.302br.net', +'ad.doubleclick.net.59179.9318.302br.net', +'ad.doubleclick.net.59188.9318.302br.net', +'ad.doubleclick.net.59189.9318.302br.net', +'ad.doubleclick.net.59192.9318.302br.net', +'ad.doubleclick.net.59194.9318.302br.net', +'ad.doubleclick.net.59196.9318.302br.net', +'ad.doubleclick.net.59199.9318.302br.net', +'ad.doubleclick.net.59204.9318.302br.net', +'ad.doubleclick.net.59209.9318.302br.net', +'ad.doubleclick.net.59211.9318.302br.net', +'ad.doubleclick.net.59220.9318.302br.net', +'ad.doubleclick.net.59222.9318.302br.net', +'ad.doubleclick.net.59223.9318.302br.net', +'ad.doubleclick.net.59224.9318.302br.net', +'ad.doubleclick.net.59227.9318.302br.net', +'ad.doubleclick.net.59228.9318.302br.net', +'ad.doubleclick.net.59229.9318.302br.net', +'ad.doubleclick.net.59233.9318.302br.net', +'ad.doubleclick.net.59234.9318.302br.net', +'ad.doubleclick.net.59236.9318.302br.net', +'ad.doubleclick.net.59238.9318.302br.net', +'ad.doubleclick.net.59240.9318.302br.net', +'ad.doubleclick.net.59242.9318.302br.net', +'ad.doubleclick.net.59245.9318.302br.net', +'ad.doubleclick.net.59246.9318.302br.net', +'ad.doubleclick.net.59251.9318.302br.net', +'ad.doubleclick.net.59252.9318.302br.net', +'ad.doubleclick.net.59253.9318.302br.net', +'ad.doubleclick.net.59255.9318.302br.net', +'ad.doubleclick.net.59257.9318.302br.net', +'ad.doubleclick.net.59258.9318.302br.net', +'ad.doubleclick.net.59260.9318.302br.net', +'ad.doubleclick.net.59263.9318.302br.net', +'ad.doubleclick.net.59264.9318.302br.net', +'ad.doubleclick.net.59265.9318.302br.net', +'ad.doubleclick.net.59266.9318.302br.net', +'ad.doubleclick.net.59269.9318.302br.net', +'ad.doubleclick.net.59270.9318.302br.net', +'ad.doubleclick.net.59271.9318.302br.net', +'ad.doubleclick.net.59274.9318.302br.net', +'ad.doubleclick.net.59279.9318.302br.net', +'ad.doubleclick.net.59284.9318.302br.net', +'ad.doubleclick.net.59286.9318.302br.net', +'ad.doubleclick.net.59287.9318.302br.net', +'ad.doubleclick.net.59290.9318.302br.net', +'ad.doubleclick.net.59291.9318.302br.net', +'ad.doubleclick.net.59295.9318.302br.net', +'ad.doubleclick.net.59298.9318.302br.net', +'ad.doubleclick.net.59300.9318.302br.net', +'ad.doubleclick.net.59301.9318.302br.net', +'ad.doubleclick.net.59305.9318.302br.net', +'ad.doubleclick.net.59306.9318.302br.net', +'ad.doubleclick.net.59311.9318.302br.net', +'ad.doubleclick.net.59312.9318.302br.net', +'ad.doubleclick.net.59317.9318.302br.net', +'ad.doubleclick.net.59319.9318.302br.net', +'ad.doubleclick.net.59320.9318.302br.net', +'ad.doubleclick.net.59323.9318.302br.net', +'ad.doubleclick.net.59324.9318.302br.net', +'ad.doubleclick.net.59329.9318.302br.net', +'ad.doubleclick.net.59330.9318.302br.net', +'ad.doubleclick.net.59331.9318.302br.net', +'ad.doubleclick.net.59335.9318.302br.net', +'ad.doubleclick.net.59336.9318.302br.net', +'ad.doubleclick.net.59337.9318.302br.net', +'ad.doubleclick.net.59341.9318.302br.net', +'ad.doubleclick.net.59342.9318.302br.net', +'ad.doubleclick.net.59347.9318.302br.net', +'ad.doubleclick.net.59349.9318.302br.net', +'ad.doubleclick.net.59351.9318.302br.net', +'ad.doubleclick.net.59356.9318.302br.net', +'ad.doubleclick.net.59359.9318.302br.net', +'ad.doubleclick.net.59362.9318.302br.net', +'ad.doubleclick.net.59363.9318.302br.net', +'ad.doubleclick.net.59368.9318.302br.net', +'ad.doubleclick.net.59372.9318.302br.net', +'ad.doubleclick.net.59374.9318.302br.net', +'ad.doubleclick.net.59376.9318.302br.net', +'ad.doubleclick.net.59380.9318.302br.net', +'ad.doubleclick.net.59382.9318.302br.net', +'ad.doubleclick.net.59385.9318.302br.net', +'ad.doubleclick.net.59388.9318.302br.net', +'ad.doubleclick.net.59390.9318.302br.net', +'ad.doubleclick.net.59396.9318.302br.net', +'ad.doubleclick.net.59401.9318.302br.net', +'ad.doubleclick.net.59402.9318.302br.net', +'ad.doubleclick.net.59404.9318.302br.net', +'ad.doubleclick.net.59407.9318.302br.net', +'ad.doubleclick.net.59410.9318.302br.net', +'ad.doubleclick.net.59413.9318.302br.net', +'ad.doubleclick.net.59414.9318.302br.net', +'ad.doubleclick.net.59415.9318.302br.net', +'ad.doubleclick.net.59419.9318.302br.net', +'ad.doubleclick.net.59422.9318.302br.net', +'ad.doubleclick.net.59423.9318.302br.net', +'ad.doubleclick.net.59424.9318.302br.net', +'ad.doubleclick.net.59426.9318.302br.net', +'ad.doubleclick.net.59427.9318.302br.net', +'ad.doubleclick.net.59430.9318.302br.net', +'ad.doubleclick.net.59432.9318.302br.net', +'ad.doubleclick.net.59436.9318.302br.net', +'ad.doubleclick.net.59440.9318.302br.net', +'ad.doubleclick.net.59444.9318.302br.net', +'ad.doubleclick.net.59446.9318.302br.net', +'ad.doubleclick.net.59449.9318.302br.net', +'ad.doubleclick.net.59450.9318.302br.net', +'ad.doubleclick.net.59453.9318.302br.net', +'ad.doubleclick.net.59455.9318.302br.net', +'ad.doubleclick.net.59456.9318.302br.net', +'ad.doubleclick.net.59457.9318.302br.net', +'ad.doubleclick.net.59461.9318.302br.net', +'ad.doubleclick.net.59463.9318.302br.net', +'ad.doubleclick.net.59465.9318.302br.net', +'ad.doubleclick.net.59466.9318.302br.net', +'ad.doubleclick.net.59471.9318.302br.net', +'ad.doubleclick.net.59472.9318.302br.net', +'ad.doubleclick.net.59476.9318.302br.net', +'ad.doubleclick.net.59477.9318.302br.net', +'ad.doubleclick.net.59481.9318.302br.net', +'ad.doubleclick.net.59484.9318.302br.net', +'ad.doubleclick.net.59486.9318.302br.net', +'ad.doubleclick.net.59489.9318.302br.net', +'ad.doubleclick.net.59492.9318.302br.net', +'ad.doubleclick.net.59494.9318.302br.net', +'ad.doubleclick.net.59495.9318.302br.net', +'ad.doubleclick.net.59496.9318.302br.net', +'ad.doubleclick.net.59499.9318.302br.net', +'ad.doubleclick.net.59502.9318.302br.net', +'ad.doubleclick.net.59503.9318.302br.net', +'ad.doubleclick.net.59504.9318.302br.net', +'ad.doubleclick.net.59509.9318.302br.net', +'ad.doubleclick.net.59510.9318.302br.net', +'ad.doubleclick.net.59514.9318.302br.net', +'ad.doubleclick.net.59517.9318.302br.net', +'ad.doubleclick.net.59520.9318.302br.net', +'ad.doubleclick.net.59525.9318.302br.net', +'ad.doubleclick.net.59527.9318.302br.net', +'ad.doubleclick.net.59531.9318.302br.net', +'ad.doubleclick.net.59536.9318.302br.net', +'ad.doubleclick.net.59537.9318.302br.net', +'ad.doubleclick.net.59542.9318.302br.net', +'ad.doubleclick.net.59543.9318.302br.net', +'ad.doubleclick.net.59544.9318.302br.net', +'ad.doubleclick.net.59548.9318.302br.net', +'ad.doubleclick.net.59554.9318.302br.net', +'ad.doubleclick.net.59555.9318.302br.net', +'ad.doubleclick.net.59556.9318.302br.net', +'ad.doubleclick.net.59558.9318.302br.net', +'ad.doubleclick.net.59559.9318.302br.net', +'ad.doubleclick.net.59561.9318.302br.net', +'ad.doubleclick.net.59562.9318.302br.net', +'ad.doubleclick.net.59565.9318.302br.net', +'ad.doubleclick.net.59567.9318.302br.net', +'ad.doubleclick.net.59576.9318.302br.net', +'ad.doubleclick.net.59577.9318.302br.net', +'ad.doubleclick.net.59578.9318.302br.net', +'ad.doubleclick.net.59580.9318.302br.net', +'ad.doubleclick.net.59581.9318.302br.net', +'ad.doubleclick.net.59583.9318.302br.net', +'ad.doubleclick.net.59586.9318.302br.net', +'ad.doubleclick.net.59589.9318.302br.net', +'ad.doubleclick.net.59598.9318.302br.net', +'ad.doubleclick.net.59601.9318.302br.net', +'ad.doubleclick.net.59604.9318.302br.net', +'ad.doubleclick.net.59611.9318.302br.net', +'ad.doubleclick.net.59613.9318.302br.net', +'ad.doubleclick.net.59616.9318.302br.net', +'ad.doubleclick.net.59619.9318.302br.net', +'ad.doubleclick.net.59622.9318.302br.net', +'ad.doubleclick.net.59625.9318.302br.net', +'ad.doubleclick.net.59634.9318.302br.net', +'ad.doubleclick.net.59637.9318.302br.net', +'ad.doubleclick.net.59640.9318.302br.net', +'ad.doubleclick.net.59646.9318.302br.net', +'ad.doubleclick.net.59652.9318.302br.net', +'ad.doubleclick.net.59655.9318.302br.net', +'ad.doubleclick.net.59661.9318.302br.net', +'ad.doubleclick.net.59668.9318.302br.net', +'ad.doubleclick.net.59670.9318.302br.net', +'ad.doubleclick.net.59679.9318.302br.net', +'ad.doubleclick.net.59682.9318.302br.net', +'ad.doubleclick.net.59685.9318.302br.net', +'ad.doubleclick.net.59686.9318.302br.net', +'ad.doubleclick.net.59688.9318.302br.net', +'ad.doubleclick.net.59689.9318.302br.net', +'ad.doubleclick.net.59691.9318.302br.net', +'ad.doubleclick.net.59694.9318.302br.net', +'ad.doubleclick.net.59697.9318.302br.net', +'ad.doubleclick.net.59700.9318.302br.net', +'ad.doubleclick.net.59704.9318.302br.net', +'ad.doubleclick.net.59706.9318.302br.net', +'ad.doubleclick.net.59709.9318.302br.net', +'ad.doubleclick.net.59712.9318.302br.net', +'ad.doubleclick.net.59719.9318.302br.net', +'ad.doubleclick.net.59721.9318.302br.net', +'ad.doubleclick.net.59727.9318.302br.net', +'ad.doubleclick.net.59730.9318.302br.net', +'ad.doubleclick.net.59731.9318.302br.net', +'ad.doubleclick.net.59733.9318.302br.net', +'ad.doubleclick.net.59734.9318.302br.net', +'ad.doubleclick.net.59736.9318.302br.net', +'ad.doubleclick.net.59739.9318.302br.net', +'ad.doubleclick.net.59742.9318.302br.net', +'ad.doubleclick.net.59746.9318.302br.net', +'ad.doubleclick.net.59748.9318.302br.net', +'ad.doubleclick.net.59751.9318.302br.net', +'ad.doubleclick.net.59755.9318.302br.net', +'ad.doubleclick.net.59757.9318.302br.net', +'ad.doubleclick.net.59764.9318.302br.net', +'ad.doubleclick.net.59766.9318.302br.net', +'ad.doubleclick.net.59769.9318.302br.net', +'ad.doubleclick.net.59772.9318.302br.net', +'ad.doubleclick.net.59776.9318.302br.net', +'ad.doubleclick.net.59778.9318.302br.net', +'ad.doubleclick.net.59781.9318.302br.net', +'ad.doubleclick.net.59784.9318.302br.net', +'ad.doubleclick.net.59790.9318.302br.net', +'ad.doubleclick.net.59793.9318.302br.net', +'ad.doubleclick.net.59794.9318.302br.net', +'ad.doubleclick.net.59796.9318.302br.net', +'ad.doubleclick.net.59799.9318.302br.net', +'ad.doubleclick.net.59800.9318.302br.net', +'ad.doubleclick.net.59802.9318.302br.net', +'ad.doubleclick.net.59806.9318.302br.net', +'ad.doubleclick.net.59808.9318.302br.net', +'ad.doubleclick.net.59815.9318.302br.net', +'ad.doubleclick.net.59817.9318.302br.net', +'ad.doubleclick.net.59820.9318.302br.net', +'ad.doubleclick.net.59821.9318.302br.net', +'ad.doubleclick.net.59823.9318.302br.net', +'ad.doubleclick.net.59824.9318.302br.net', +'ad.doubleclick.net.59826.9318.302br.net', +'ad.doubleclick.net.59827.9318.302br.net', +'ad.doubleclick.net.59829.9318.302br.net', +'ad.doubleclick.net.59833.9318.302br.net', +'ad.doubleclick.net.59835.9318.302br.net', +'ad.doubleclick.net.59839.9318.302br.net', +'ad.doubleclick.net.59841.9318.302br.net', +'ad.doubleclick.net.59842.9318.302br.net', +'ad.doubleclick.net.59844.9318.302br.net', +'ad.doubleclick.net.59845.9318.302br.net', +'ad.doubleclick.net.59847.9318.302br.net', +'ad.doubleclick.net.59851.9318.302br.net', +'ad.doubleclick.net.59853.9318.302br.net', +'ad.doubleclick.net.59862.9318.302br.net', +'ad.doubleclick.net.59866.9318.302br.net', +'ad.doubleclick.net.59868.9318.302br.net', +'ad.doubleclick.net.59877.9318.302br.net', +'ad.doubleclick.net.59886.9318.302br.net', +'ad.doubleclick.net.59887.9318.302br.net', +'ad.doubleclick.net.59889.9318.302br.net', +'ad.doubleclick.net.59892.9318.302br.net', +'ad.doubleclick.net.59895.9318.302br.net', +'ad.doubleclick.net.59896.9318.302br.net', +'ad.doubleclick.net.59898.9318.302br.net', +'ad.doubleclick.net.59901.9318.302br.net', +'ad.doubleclick.net.59902.9318.302br.net', +'ad.doubleclick.net.59904.9318.302br.net', +'ad.doubleclick.net.59905.9318.302br.net', +'ad.doubleclick.net.59907.9318.302br.net', +'ad.doubleclick.net.59910.9318.302br.net', +'ad.doubleclick.net.59913.9318.302br.net', +'ad.doubleclick.net.59916.9318.302br.net', +'ad.doubleclick.net.59922.9318.302br.net', +'ad.doubleclick.net.59925.9318.302br.net', +'ad.doubleclick.net.59928.9318.302br.net', +'ad.doubleclick.net.59931.9318.302br.net', +'ad.doubleclick.net.59938.9318.302br.net', +'ad.doubleclick.net.59940.9318.302br.net', +'ad.doubleclick.net.59946.9318.302br.net', +'ad.doubleclick.net.59949.9318.302br.net', +'ad.doubleclick.net.59952.9318.302br.net', +'ad.doubleclick.net.59956.9318.302br.net', +'ad.doubleclick.net.59958.9318.302br.net', +'ad.doubleclick.net.59959.9318.302br.net', +'ad.doubleclick.net.59961.9318.302br.net', +'ad.doubleclick.net.59964.9318.302br.net', +'ad.doubleclick.net.59968.9318.302br.net', +'ad.doubleclick.net.59970.9318.302br.net', +'ad.doubleclick.net.59976.9318.302br.net', +'ad.doubleclick.net.59977.9318.302br.net', +'ad.doubleclick.net.59979.9318.302br.net', +'ad.doubleclick.net.59980.9318.302br.net', +'ad.doubleclick.net.59982.9318.302br.net', +'ad.doubleclick.net.59983.9318.302br.net', +'ad.doubleclick.net.59985.9318.302br.net', +'ad.doubleclick.net.59986.9318.302br.net', +'ad.doubleclick.net.59988.9318.302br.net', +'ad.doubleclick.net.59991.9318.302br.net', +'ad.doubleclick.net.59994.9318.302br.net', +'ad.doubleclick.net.60000.9318.302br.net', +'ad.doubleclick.net.60003.9318.302br.net', +'ad.doubleclick.net.60006.9318.302br.net', +'ad.doubleclick.net.60012.9318.302br.net', +'ad.doubleclick.net.60013.9318.302br.net', +'ad.doubleclick.net.60015.9318.302br.net', +'ad.doubleclick.net.60019.9318.302br.net', +'ad.doubleclick.net.60021.9318.302br.net', +'ad.doubleclick.net.60024.9318.302br.net', +'ad.doubleclick.net.60027.9318.302br.net', +'ad.doubleclick.net.60031.9318.302br.net', +'ad.doubleclick.net.60033.9318.302br.net', +'ad.doubleclick.net.60039.9318.302br.net', +'ad.doubleclick.net.60040.9318.302br.net', +'ad.doubleclick.net.60042.9318.302br.net', +'ad.doubleclick.net.60054.9318.302br.net', +'ad.doubleclick.net.60057.9318.302br.net', +'ad.doubleclick.net.60060.9318.302br.net', +'ad.doubleclick.net.60061.9318.302br.net', +'ad.doubleclick.net.60063.9318.302br.net', +'ad.doubleclick.net.60070.9318.302br.net', +'ad.doubleclick.net.60072.9318.302br.net', +'ad.doubleclick.net.60075.9318.302br.net', +'ad.doubleclick.net.60078.9318.302br.net', +'ad.doubleclick.net.60084.9318.302br.net', +'ad.doubleclick.net.60085.9318.302br.net', +'ad.doubleclick.net.60087.9318.302br.net', +'ad.doubleclick.net.60090.9318.302br.net', +'ad.doubleclick.net.60099.9318.302br.net', +'ad.doubleclick.net.60102.9318.302br.net', +'ad.doubleclick.net.60108.9318.302br.net', +'ad.doubleclick.net.60112.9318.302br.net', +'ad.doubleclick.net.60114.9318.302br.net', +'ad.doubleclick.net.60120.9318.302br.net', +'ad.doubleclick.net.60123.9318.302br.net', +'ad.doubleclick.net.60126.9318.302br.net', +'ad.doubleclick.net.60129.9318.302br.net', +'ad.doubleclick.net.60132.9318.302br.net', +'ad.doubleclick.net.60138.9318.302br.net', +'ad.doubleclick.net.60141.9318.302br.net', +'ad.doubleclick.net.60144.9318.302br.net', +'ad.doubleclick.net.60147.9318.302br.net', +'ad.doubleclick.net.60150.9318.302br.net', +'ad.doubleclick.net.60156.9318.302br.net', +'ad.doubleclick.net.60159.9318.302br.net', +'ad.doubleclick.net.60165.9318.302br.net', +'ad.doubleclick.net.60166.9318.302br.net', +'ad.doubleclick.net.60168.9318.302br.net', +'ad.doubleclick.net.60169.9318.302br.net', +'ad.doubleclick.net.60171.9318.302br.net', +'ad.doubleclick.net.60174.9318.302br.net', +'ad.doubleclick.net.60175.9318.302br.net', +'ad.doubleclick.net.60177.9318.302br.net', +'ad.doubleclick.net.60183.9318.302br.net', +'ad.doubleclick.net.60186.9318.302br.net', +'ad.doubleclick.net.60192.9318.302br.net', +'ad.doubleclick.net.60195.9318.302br.net', +'ad.doubleclick.net.60198.9318.302br.net', +'ad.doubleclick.net.60201.9318.302br.net', +'ad.doubleclick.net.60204.9318.302br.net', +'ad.doubleclick.net.60205.9318.302br.net', +'ad.doubleclick.net.60207.9318.302br.net', +'ad.doubleclick.net.60208.9318.302br.net', +'ad.doubleclick.net.60210.9318.302br.net', +'ad.doubleclick.net.60213.9318.302br.net', +'ad.doubleclick.net.60219.9318.302br.net', +'ad.doubleclick.net.60222.9318.302br.net', +'ad.doubleclick.net.60228.9318.302br.net', +'ad.doubleclick.net.60231.9318.302br.net', +'ad.doubleclick.net.60232.9318.302br.net', +'ad.doubleclick.net.60234.9318.302br.net', +'ad.doubleclick.net.60235.9318.302br.net', +'ad.doubleclick.net.60237.9318.302br.net', +'ad.doubleclick.net.60238.9318.302br.net', +'ad.doubleclick.net.60240.9318.302br.net', +'ad.doubleclick.net.60243.9318.302br.net', +'ad.doubleclick.net.60246.9318.302br.net', +'ad.doubleclick.net.60249.9318.302br.net', +'ad.doubleclick.net.60253.9318.302br.net', +'ad.doubleclick.net.60255.9318.302br.net', +'ad.doubleclick.net.60261.9318.302br.net', +'ad.doubleclick.net.60265.9318.302br.net', +'ad.doubleclick.net.60267.9318.302br.net', +'ad.doubleclick.net.60268.9318.302br.net', +'ad.doubleclick.net.60270.9318.302br.net', +'ad.doubleclick.net.60273.9318.302br.net', +'ad.doubleclick.net.60276.9318.302br.net', +'ad.doubleclick.net.60277.9318.302br.net', +'ad.doubleclick.net.60279.9318.302br.net', +'ad.doubleclick.net.60286.9318.302br.net', +'ad.doubleclick.net.60288.9318.302br.net', +'ad.doubleclick.net.60291.9318.302br.net', +'ad.doubleclick.net.60294.9318.302br.net', +'ad.doubleclick.net.60295.9318.302br.net', +'ad.doubleclick.net.60297.9318.302br.net', +'ad.doubleclick.net.60309.9318.302br.net', +'ad.doubleclick.net.60310.9318.302br.net', +'ad.doubleclick.net.60312.9318.302br.net', +'ad.doubleclick.net.60313.9318.302br.net', +'ad.doubleclick.net.60315.9318.302br.net', +'ad.doubleclick.net.60318.9318.302br.net', +'ad.doubleclick.net.60321.9318.302br.net', +'ad.doubleclick.net.60324.9318.302br.net', +'ad.doubleclick.net.60333.9318.302br.net', +'ad.doubleclick.net.60346.9318.302br.net', +'ad.doubleclick.net.60348.9318.302br.net', +'ad.doubleclick.net.60349.9318.302br.net', +'ad.doubleclick.net.60351.9318.302br.net', +'ad.doubleclick.net.60354.9318.302br.net', +'ad.doubleclick.net.60360.9318.302br.net', +'ad.doubleclick.net.60361.9318.302br.net', +'ad.doubleclick.net.60363.9318.302br.net', +'ad.doubleclick.net.60366.9318.302br.net', +'ad.doubleclick.net.60369.9318.302br.net', +'ad.doubleclick.net.60373.9156.302br.net', +'ad.doubleclick.net.60376.9156.302br.net', +'ad.doubleclick.net.60379.9156.302br.net', +'ad.doubleclick.net.60394.9187.302br.net', +'ad.doubleclick.net.60397.9187.302br.net', +'ad.doubleclick.net.60402.9424.302br.net', +'ad.doubleclick.net.60405.9424.302br.net', +'ad.doubleclick.net.60408.9424.302br.net', +'ad.doubleclick.net.60411.9424.302br.net', +'ad.doubleclick.net.60421.9112.302br.net', +'ad.doubleclick.net.60424.9112.302br.net', +'ad.doubleclick.net.60427.9112.302br.net', +'ad.doubleclick.net.60520.9279.302br.net', +'ad.doubleclick.net.60521.9279.302br.net', +'ad.doubleclick.net.60523.9279.302br.net', +'ad.doubleclick.net.60524.9279.302br.net', +'ad.doubleclick.net.60526.9279.302br.net', +'ad.doubleclick.net.60527.9279.302br.net', +'ad.doubleclick.net.60529.9279.302br.net', +'ad.doubleclick.net.60530.9279.302br.net', +'ad.doubleclick.net.60531.9279.302br.net', +'ad.doubleclick.net.60532.9279.302br.net', +'ad.doubleclick.net.60533.9279.302br.net', +'ad.doubleclick.net.60535.9279.302br.net', +'ad.doubleclick.net.60536.9279.302br.net', +'ad.doubleclick.net.60538.9279.302br.net', +'ad.doubleclick.net.60539.9279.302br.net', +'ad.doubleclick.net.60541.9279.302br.net', +'ad.doubleclick.net.60542.9279.302br.net', +'ad.doubleclick.net.60543.9279.302br.net', +'ad.doubleclick.net.60544.9279.302br.net', +'ad.doubleclick.net.60545.9279.302br.net', +'ad.doubleclick.net.60546.9279.302br.net', +'ad.doubleclick.net.60547.9279.302br.net', +'ad.doubleclick.net.60548.9279.302br.net', +'ad.doubleclick.net.60550.9279.302br.net', +'ad.doubleclick.net.60551.9279.302br.net', +'ad.doubleclick.net.60553.9279.302br.net', +'ad.doubleclick.net.60554.9279.302br.net', +'ad.doubleclick.net.60555.9436.302br.net', +'ad.doubleclick.net.60557.9436.302br.net', +'ad.doubleclick.net.60560.9436.302br.net', +'ad.doubleclick.net.60561.9436.302br.net', +'ad.doubleclick.net.60563.9436.302br.net', +'ad.doubleclick.net.60566.9436.302br.net', +'ad.doubleclick.net.60567.9436.302br.net', +'ad.doubleclick.net.60569.9436.302br.net', +'ad.doubleclick.net.60572.9436.302br.net', +'ad.doubleclick.net.60575.9436.302br.net', +'ad.doubleclick.net.60576.9436.302br.net', +'ad.doubleclick.net.60578.9436.302br.net', +'ad.doubleclick.net.60581.9436.302br.net', +'ad.doubleclick.net.60584.9436.302br.net', +'ad.doubleclick.net.60587.9436.302br.net', +'ad.doubleclick.net.60590.9436.302br.net', +'ad.doubleclick.net.60591.9436.302br.net', +'ad.doubleclick.net.60593.9436.302br.net', +'ad.doubleclick.net.60596.9436.302br.net', +'ad.doubleclick.net.60597.9436.302br.net', +'ad.doubleclick.net.60599.9436.302br.net', +'ad.doubleclick.net.60600.9436.302br.net', +'ad.doubleclick.net.60602.9436.302br.net', +'ad.doubleclick.net.60603.9436.302br.net', +'ad.doubleclick.net.60605.9436.302br.net', +'ad.doubleclick.net.60608.9436.302br.net', +'ad.doubleclick.net.60622.9439.302br.net', +'ad.doubleclick.net.60623.9439.302br.net', +'ad.doubleclick.net.60625.9439.302br.net', +'ad.doubleclick.net.60628.9439.302br.net', +'ad.doubleclick.net.60631.9439.302br.net', +'ad.doubleclick.net.60632.9439.302br.net', +'ad.doubleclick.net.60646.9250.302br.net', +'ad.doubleclick.net.60649.9250.302br.net', +'ad.doubleclick.net.60652.9250.302br.net', +'ad.doubleclick.net.60655.9250.302br.net', +'ad.doubleclick.net.60658.9250.302br.net', +'ad.doubleclick.net.60661.9250.302br.net', +'ad.doubleclick.net.60664.9250.302br.net', +'ad.doubleclick.net.60667.9250.302br.net', +'ad.doubleclick.net.60670.9250.302br.net', +'ad.doubleclick.net.60673.9250.302br.net', +'ad.doubleclick.net.60676.9250.302br.net', +'ad.doubleclick.net.60679.9250.302br.net', +'ad.doubleclick.net.60682.9250.302br.net', +'ad.doubleclick.net.60685.9250.302br.net', +'ad.doubleclick.net.60688.9250.302br.net', +'ad.doubleclick.net.60691.9250.302br.net', +'ad.doubleclick.net.60693.9336.302br.net', +'ad.doubleclick.net.60696.9336.302br.net', +'ad.doubleclick.net.60699.9336.302br.net', +'ad.doubleclick.net.60702.9336.302br.net', +'ad.doubleclick.net.60705.9336.302br.net', +'ad.doubleclick.net.60708.9336.302br.net', +'ad.doubleclick.net.60711.9336.302br.net', +'ad.doubleclick.net.60728.9336.302br.net', +'ad.doubleclick.net.60729.9336.302br.net', +'ad.doubleclick.net.60730.9336.302br.net', +'ad.doubleclick.net.60732.9336.302br.net', +'ad.doubleclick.net.60733.9336.302br.net', +'ad.doubleclick.net.60735.9336.302br.net', +'ad.doubleclick.net.60736.9336.302br.net', +'ad.doubleclick.net.60738.9336.302br.net', +'ad.doubleclick.net.60739.9336.302br.net', +'ad.doubleclick.net.60741.9336.302br.net', +'ad.doubleclick.net.60742.9336.302br.net', +'ad.doubleclick.net.60744.9336.302br.net', +'ad.doubleclick.net.60745.9336.302br.net', +'ad.doubleclick.net.60747.9336.302br.net', +'ad.doubleclick.net.60750.9336.302br.net', +'ad.doubleclick.net.60753.9336.302br.net', +'ad.doubleclick.net.60756.9336.302br.net', +'ad.doubleclick.net.60757.9336.302br.net', +'ad.doubleclick.net.60759.9336.302br.net', +'ad.doubleclick.net.60762.9336.302br.net', +'ad.doubleclick.net.60763.9336.302br.net', +'ad.doubleclick.net.60765.9336.302br.net', +'ad.doubleclick.net.60768.9336.302br.net', +'ad.doubleclick.net.60771.9336.302br.net', +'ad.doubleclick.net.60774.9336.302br.net', +'ad.doubleclick.net.60777.9336.302br.net', +'ad.doubleclick.net.60780.9336.302br.net', +'ad.doubleclick.net.60781.9336.302br.net', +'ad.doubleclick.net.60783.9336.302br.net', +'ad.doubleclick.net.60784.9336.302br.net', +'ad.doubleclick.net.60786.9336.302br.net', +'ad.doubleclick.net.60789.9336.302br.net', +'ad.doubleclick.net.60792.9336.302br.net', +'ad.doubleclick.net.60795.9336.302br.net', +'ad.doubleclick.net.60798.9336.302br.net', +'ad.doubleclick.net.60800.9336.302br.net', +'ad.doubleclick.net.60801.9336.302br.net', +'ad.doubleclick.net.60804.9336.302br.net', +'ad.doubleclick.net.60805.9336.302br.net', +'ad.doubleclick.net.60807.9336.302br.net', +'ad.doubleclick.net.60808.9336.302br.net', +'ad.doubleclick.net.60810.9336.302br.net', +'ad.doubleclick.net.60811.9336.302br.net', +'ad.doubleclick.net.60813.9336.302br.net', +'ad.doubleclick.net.60814.9336.302br.net', +'ad.doubleclick.net.60816.9336.302br.net', +'ad.doubleclick.net.60819.9336.302br.net', +'ad.doubleclick.net.60822.9336.302br.net', +'ad.doubleclick.net.60824.9336.302br.net', +'ad.doubleclick.net.60825.9336.302br.net', +'ad.doubleclick.net.60826.9336.302br.net', +'ad.doubleclick.net.60828.9336.302br.net', +'ad.doubleclick.net.60829.9336.302br.net', +'ad.doubleclick.net.60831.9336.302br.net', +'ad.doubleclick.net.60834.9336.302br.net', +'ad.doubleclick.net.60837.9336.302br.net', +'ad.doubleclick.net.60840.9336.302br.net', +'ad.doubleclick.net.60843.9336.302br.net', +'ad.doubleclick.net.60846.9336.302br.net', +'ad.doubleclick.net.60847.9336.302br.net', +'ad.doubleclick.net.60849.9336.302br.net', +'ad.doubleclick.net.60850.9336.302br.net', +'ad.doubleclick.net.60852.9336.302br.net', +'ad.doubleclick.net.60853.9336.302br.net', +'ad.doubleclick.net.60855.9336.302br.net', +'ad.doubleclick.net.60858.9336.302br.net', +'ad.doubleclick.net.60861.9336.302br.net', +'ad.doubleclick.net.60864.9336.302br.net', +'ad.doubleclick.net.60867.9336.302br.net', +'ad.doubleclick.net.60870.9336.302br.net', +'ad.doubleclick.net.60873.9336.302br.net', +'ad.doubleclick.net.60874.9336.302br.net', +'ad.doubleclick.net.60876.9336.302br.net', +'ad.doubleclick.net.60879.9336.302br.net', +'ad.doubleclick.net.60888.9336.302br.net', +'ad.doubleclick.net.60891.9336.302br.net', +'ad.doubleclick.net.60897.9336.302br.net', +'ad.doubleclick.net.60899.9336.302br.net', +'ad.doubleclick.net.60900.9336.302br.net', +'ad.doubleclick.net.60901.9336.302br.net', +'ad.doubleclick.net.60902.9336.302br.net', +'ad.doubleclick.net.60903.9336.302br.net', +'ad.doubleclick.net.60904.9336.302br.net', +'ad.doubleclick.net.60905.9336.302br.net', +'ad.doubleclick.net.60906.9336.302br.net', +'ad.doubleclick.net.60907.9336.302br.net', +'ad.doubleclick.net.60909.9336.302br.net', +'ad.doubleclick.net.60910.9336.302br.net', +'ad.doubleclick.net.60911.9336.302br.net', +'ad.doubleclick.net.60912.9336.302br.net', +'ad.doubleclick.net.60913.9336.302br.net', +'ad.doubleclick.net.60914.9336.302br.net', +'ad.doubleclick.net.60915.9336.302br.net', +'ad.doubleclick.net.60916.9336.302br.net', +'ad.doubleclick.net.60918.9336.302br.net', +'ad.doubleclick.net.60921.9336.302br.net', +'ad.doubleclick.net.60924.9336.302br.net', +'ad.doubleclick.net.60927.9336.302br.net', +'ad.doubleclick.net.60928.9336.302br.net', +'ad.doubleclick.net.60930.9336.302br.net', +'ad.doubleclick.net.60933.9336.302br.net', +'ad.doubleclick.net.60934.9336.302br.net', +'ad.doubleclick.net.60936.9336.302br.net', +'ad.doubleclick.net.60937.9336.302br.net', +'ad.doubleclick.net.60939.9336.302br.net', +'ad.doubleclick.net.60942.9336.302br.net', +'ad.doubleclick.net.60943.9336.302br.net', +'ad.doubleclick.net.60945.9336.302br.net', +'ad.doubleclick.net.60948.9336.302br.net', +'ad.doubleclick.net.60951.9336.302br.net', +'ad.doubleclick.net.60954.9336.302br.net', +'ad.doubleclick.net.60955.9336.302br.net', +'ad.doubleclick.net.60957.9336.302br.net', +'ad.doubleclick.net.60958.9336.302br.net', +'ad.doubleclick.net.60960.9336.302br.net', +'ad.doubleclick.net.60961.9336.302br.net', +'ad.doubleclick.net.60963.9336.302br.net', +'ad.doubleclick.net.60966.9336.302br.net', +'ad.doubleclick.net.60967.9336.302br.net', +'ad.doubleclick.net.60969.9336.302br.net', +'ad.doubleclick.net.60972.9336.302br.net', +'ad.doubleclick.net.60975.9336.302br.net', +'ad.doubleclick.net.60976.9336.302br.net', +'ad.doubleclick.net.60977.9336.302br.net', +'ad.doubleclick.net.60978.9336.302br.net', +'ad.doubleclick.net.60979.9336.302br.net', +'ad.doubleclick.net.60981.9336.302br.net', +'ad.doubleclick.net.60982.9336.302br.net', +'ad.doubleclick.net.60983.9336.302br.net', +'ad.doubleclick.net.60984.9336.302br.net', +'ad.doubleclick.net.60985.9336.302br.net', +'ad.doubleclick.net.60987.9336.302br.net', +'ad.doubleclick.net.60990.9336.302br.net', +'ad.doubleclick.net.60993.9336.302br.net', +'ad.doubleclick.net.60996.9336.302br.net', +'ad.doubleclick.net.60997.9336.302br.net', +'ad.doubleclick.net.60999.9336.302br.net', +'ad.doubleclick.net.6100.302br.net', +'ad.doubleclick.net.61000.9336.302br.net', +'ad.doubleclick.net.61002.9336.302br.net', +'ad.doubleclick.net.61003.9336.302br.net', +'ad.doubleclick.net.61005.9336.302br.net', +'ad.doubleclick.net.61008.9336.302br.net', +'ad.doubleclick.net.61009.9336.302br.net', +'ad.doubleclick.net.61011.9336.302br.net', +'ad.doubleclick.net.61014.9336.302br.net', +'ad.doubleclick.net.61017.9336.302br.net', +'ad.doubleclick.net.61018.9336.302br.net', +'ad.doubleclick.net.61020.9336.302br.net', +'ad.doubleclick.net.61021.9336.302br.net', +'ad.doubleclick.net.61023.9336.302br.net', +'ad.doubleclick.net.61024.9336.302br.net', +'ad.doubleclick.net.61026.9336.302br.net', +'ad.doubleclick.net.61029.9336.302br.net', +'ad.doubleclick.net.61032.9336.302br.net', +'ad.doubleclick.net.61066.9293.302br.net', +'ad.doubleclick.net.61067.9293.302br.net', +'ad.doubleclick.net.61069.9293.302br.net', +'ad.doubleclick.net.61070.9293.302br.net', +'ad.doubleclick.net.61072.9293.302br.net', +'ad.doubleclick.net.61073.9293.302br.net', +'ad.doubleclick.net.61074.9293.302br.net', +'ad.doubleclick.net.61075.9293.302br.net', +'ad.doubleclick.net.61076.9293.302br.net', +'ad.doubleclick.net.61078.9294.302br.net', +'ad.doubleclick.net.61079.9294.302br.net', +'ad.doubleclick.net.61081.9294.302br.net', +'ad.doubleclick.net.61082.9294.302br.net', +'ad.doubleclick.net.61083.9294.302br.net', +'ad.doubleclick.net.61084.9294.302br.net', +'ad.doubleclick.net.61085.9294.302br.net', +'ad.doubleclick.net.61086.9294.302br.net', +'ad.doubleclick.net.61087.9294.302br.net', +'ad.doubleclick.net.61088.9294.302br.net', +'ad.doubleclick.net.61095.9187.302br.net', +'ad.doubleclick.net.61097.9187.302br.net', +'ad.doubleclick.net.61098.9330.302br.net', +'ad.doubleclick.net.61100.9330.302br.net', +'ad.doubleclick.net.61101.9330.302br.net', +'ad.doubleclick.net.61103.9330.302br.net', +'ad.doubleclick.net.61107.9450.302br.net', +'ad.doubleclick.net.61108.9450.302br.net', +'ad.doubleclick.net.61109.9450.302br.net', +'ad.doubleclick.net.61110.9450.302br.net', +'ad.doubleclick.net.61111.9450.302br.net', +'ad.doubleclick.net.61112.9450.302br.net', +'ad.doubleclick.net.61113.9450.302br.net', +'ad.doubleclick.net.61114.9450.302br.net', +'ad.doubleclick.net.61127.9450.302br.net', +'ad.doubleclick.net.61128.9450.302br.net', +'ad.doubleclick.net.61129.9450.302br.net', +'ad.doubleclick.net.61130.9450.302br.net', +'ad.doubleclick.net.61131.9450.302br.net', +'ad.doubleclick.net.61132.9450.302br.net', +'ad.doubleclick.net.61133.9450.302br.net', +'ad.doubleclick.net.61134.9450.302br.net', +'ad.doubleclick.net.61135.9450.302br.net', +'ad.doubleclick.net.61136.9450.302br.net', +'ad.doubleclick.net.61137.9450.302br.net', +'ad.doubleclick.net.61138.9450.302br.net', +'ad.doubleclick.net.61139.9450.302br.net', +'ad.doubleclick.net.61140.9450.302br.net', +'ad.doubleclick.net.61141.9450.302br.net', +'ad.doubleclick.net.61142.9450.302br.net', +'ad.doubleclick.net.61144.9450.302br.net', +'ad.doubleclick.net.61148.9450.302br.net', +'ad.doubleclick.net.61152.9450.302br.net', +'ad.doubleclick.net.61154.9450.302br.net', +'ad.doubleclick.net.61156.9450.302br.net', +'ad.doubleclick.net.61158.9450.302br.net', +'ad.doubleclick.net.61160.9450.302br.net', +'ad.doubleclick.net.61162.9450.302br.net', +'ad.doubleclick.net.61165.9450.302br.net', +'ad.doubleclick.net.61166.9450.302br.net', +'ad.doubleclick.net.61170.9450.302br.net', +'ad.doubleclick.net.61171.9450.302br.net', +'ad.doubleclick.net.61172.9450.302br.net', +'ad.doubleclick.net.61174.9450.302br.net', +'ad.doubleclick.net.61176.9450.302br.net', +'ad.doubleclick.net.61179.9450.302br.net', +'ad.doubleclick.net.61180.9450.302br.net', +'ad.doubleclick.net.61181.9450.302br.net', +'ad.doubleclick.net.61182.9450.302br.net', +'ad.doubleclick.net.61196.9450.302br.net', +'ad.doubleclick.net.61200.9450.302br.net', +'ad.doubleclick.net.61202.9450.302br.net', +'ad.doubleclick.net.61203.9450.302br.net', +'ad.doubleclick.net.61204.9450.302br.net', +'ad.doubleclick.net.61205.9450.302br.net', +'ad.doubleclick.net.61206.9450.302br.net', +'ad.doubleclick.net.61236.9454.302br.net', +'ad.doubleclick.net.61238.9454.302br.net', +'ad.doubleclick.net.61253.9401.302br.net', +'ad.doubleclick.net.61255.9401.302br.net', +'ad.doubleclick.net.61257.9401.302br.net', +'ad.doubleclick.net.61261.9401.302br.net', +'ad.doubleclick.net.61263.9401.302br.net', +'ad.doubleclick.net.61265.9401.302br.net', +'ad.doubleclick.net.61269.9401.302br.net', +'ad.doubleclick.net.61271.9401.302br.net', +'ad.doubleclick.net.61281.9290.302br.net', +'ad.doubleclick.net.61282.9290.302br.net', +'ad.doubleclick.net.61286.9362.302br.net', +'ad.doubleclick.net.61287.9362.302br.net', +'ad.doubleclick.net.61288.9362.302br.net', +'ad.doubleclick.net.61289.9362.302br.net', +'ad.doubleclick.net.61290.9362.302br.net', +'ad.doubleclick.net.61291.9362.302br.net', +'ad.doubleclick.net.61293.9303.302br.net', +'ad.doubleclick.net.61294.9303.302br.net', +'ad.doubleclick.net.61296.9303.302br.net', +'ad.doubleclick.net.61297.9303.302br.net', +'ad.doubleclick.net.61299.9303.302br.net', +'ad.doubleclick.net.61320.9454.302br.net', +'ad.doubleclick.net.61321.9454.302br.net', +'ad.doubleclick.net.61322.9454.302br.net', +'ad.doubleclick.net.61323.9454.302br.net', +'ad.doubleclick.net.61324.9454.302br.net', +'ad.doubleclick.net.61432.9465.302br.net', +'ad.doubleclick.net.61435.9465.302br.net', +'ad.doubleclick.net.61438.9465.302br.net', +'ad.doubleclick.net.61476.9465.302br.net', +'ad.doubleclick.net.61509.9465.302br.net', +'ad.doubleclick.net.61518.9465.302br.net', +'ad.doubleclick.net.61560.9465.302br.net', +'ad.doubleclick.net.61608.9465.302br.net', +'ad.doubleclick.net.61743.9465.302br.net', +'ad.doubleclick.net.62882.9469.302br.net', +'ad.doubleclick.net.62883.9469.302br.net', +'ad.doubleclick.net.62884.9469.302br.net', +'ad.doubleclick.net.62885.9469.302br.net', +'ad.doubleclick.net.62886.9469.302br.net', +'ad.doubleclick.net.62887.9469.302br.net', +'ad.doubleclick.net.62888.9469.302br.net', +'ad.doubleclick.net.62889.9469.302br.net', +'ad.doubleclick.net.62890.9469.302br.net', +'ad.doubleclick.net.62891.9469.302br.net', +'ad.doubleclick.net.62892.9469.302br.net', +'ad.doubleclick.net.62893.9469.302br.net', +'ad.doubleclick.net.62897.9469.302br.net', +'ad.doubleclick.net.62898.9469.302br.net', +'ad.doubleclick.net.62899.9469.302br.net', +'ad.doubleclick.net.62902.9347.302br.net', +'ad.doubleclick.net.62905.9347.302br.net', +'ad.doubleclick.net.62908.9347.302br.net', +'ad.doubleclick.net.62945.9382.302br.net', +'ad.doubleclick.net.62948.9382.302br.net', +'ad.doubleclick.net.62951.9382.302br.net', +'ad.doubleclick.net.62957.9382.302br.net', +'ad.doubleclick.net.62960.9382.302br.net', +'ad.doubleclick.net.62966.9382.302br.net', +'ad.doubleclick.net.62969.9384.302br.net', +'ad.doubleclick.net.62972.9384.302br.net', +'ad.doubleclick.net.62975.9384.302br.net', +'ad.doubleclick.net.62981.9384.302br.net', +'ad.doubleclick.net.62984.9384.302br.net', +'ad.doubleclick.net.62990.9384.302br.net', +'ad.doubleclick.net.62993.9450.302br.net', +'ad.doubleclick.net.62994.9450.302br.net', +'ad.doubleclick.net.62995.9450.302br.net', +'ad.doubleclick.net.62996.9450.302br.net', +'ad.doubleclick.net.62997.9450.302br.net', +'ad.doubleclick.net.62999.9450.302br.net', +'ad.doubleclick.net.63000.9450.302br.net', +'ad.doubleclick.net.63004.9450.302br.net', +'ad.doubleclick.net.63005.9450.302br.net', +'ad.doubleclick.net.63006.9450.302br.net', +'ad.doubleclick.net.63020.9454.302br.net', +'ad.doubleclick.net.63023.9454.302br.net', +'ad.doubleclick.net.63026.9454.302br.net', +'ad.doubleclick.net.63047.9476.302br.net', +'ad.doubleclick.net.63050.9476.302br.net', +'ad.doubleclick.net.63053.9476.302br.net', +'ad.doubleclick.net.63056.9479.302br.net', +'ad.doubleclick.net.63059.9479.302br.net', +'ad.doubleclick.net.63062.9479.302br.net', +'ad.doubleclick.net.63128.9090.302br.net', +'ad.doubleclick.net.63134.9090.302br.net', +'ad.doubleclick.net.63137.9090.302br.net', +'ad.doubleclick.net.63149.9090.302br.net', +'ad.doubleclick.net.63186.9090.302br.net', +'ad.doubleclick.net.63189.9090.302br.net', +'ad.doubleclick.net.63192.9090.302br.net', +'ad.doubleclick.net.63341.9485.302br.net', +'ad.doubleclick.net.63344.9485.302br.net', +'ad.doubleclick.net.63347.9485.302br.net', +'ad.doubleclick.net.63350.9485.302br.net', +'ad.doubleclick.net.63351.9485.302br.net', +'ad.doubleclick.net.63353.9485.302br.net', +'ad.doubleclick.net.63354.9485.302br.net', +'ad.doubleclick.net.63395.9485.302br.net', +'ad.doubleclick.net.63396.9485.302br.net', +'ad.doubleclick.net.63397.9485.302br.net', +'ad.doubleclick.net.63400.9289.302br.net', +'ad.doubleclick.net.63401.9289.302br.net', +'ad.doubleclick.net.63403.9289.302br.net', +'ad.doubleclick.net.63406.9289.302br.net', +'ad.doubleclick.net.63407.9289.302br.net', +'ad.doubleclick.net.63408.9289.302br.net', +'ad.doubleclick.net.63409.9289.302br.net', +'ad.doubleclick.net.63410.9289.302br.net', +'ad.doubleclick.net.63411.9289.302br.net', +'ad.doubleclick.net.63412.9289.302br.net', +'ad.doubleclick.net.63413.9289.302br.net', +'ad.doubleclick.net.63415.9289.302br.net', +'ad.doubleclick.net.63416.9289.302br.net', +'ad.doubleclick.net.63418.9289.302br.net', +'ad.doubleclick.net.63419.9289.302br.net', +'ad.doubleclick.net.63421.9289.302br.net', +'ad.doubleclick.net.63424.9289.302br.net', +'ad.doubleclick.net.63427.9289.302br.net', +'ad.doubleclick.net.63764.9250.302br.net', +'ad.doubleclick.net.63767.9250.302br.net', +'ad.doubleclick.net.63772.9250.302br.net', +'ad.doubleclick.net.63775.9250.302br.net', +'ad.doubleclick.net.63778.9250.302br.net', +'ad.doubleclick.net.63781.9250.302br.net', +'ad.doubleclick.net.63784.9250.302br.net', +'ad.doubleclick.net.63787.9250.302br.net', +'ad.doubleclick.net.63790.9250.302br.net', +'ad.doubleclick.net.63793.9250.302br.net', +'ad.doubleclick.net.63796.9250.302br.net', +'ad.doubleclick.net.63799.9250.302br.net', +'ad.doubleclick.net.63802.9250.302br.net', +'ad.doubleclick.net.63805.9250.302br.net', +'ad.doubleclick.net.63806.9465.302br.net', +'ad.doubleclick.net.63808.9465.302br.net', +'ad.doubleclick.net.63809.9465.302br.net', +'ad.doubleclick.net.63811.9465.302br.net', +'ad.doubleclick.net.63812.9465.302br.net', +'ad.doubleclick.net.63814.9465.302br.net', +'ad.doubleclick.net.63815.9465.302br.net', +'ad.doubleclick.net.63817.9465.302br.net', +'ad.doubleclick.net.63818.9465.302br.net', +'ad.doubleclick.net.63820.9465.302br.net', +'ad.doubleclick.net.63823.9465.302br.net', +'ad.doubleclick.net.63824.9465.302br.net', +'ad.doubleclick.net.63826.9465.302br.net', +'ad.doubleclick.net.63827.9465.302br.net', +'ad.doubleclick.net.63829.9465.302br.net', +'ad.doubleclick.net.63830.9465.302br.net', +'ad.doubleclick.net.63832.9465.302br.net', +'ad.doubleclick.net.63834.9465.302br.net', +'ad.doubleclick.net.63835.9465.302br.net', +'ad.doubleclick.net.63836.9465.302br.net', +'ad.doubleclick.net.63837.9465.302br.net', +'ad.doubleclick.net.63838.9465.302br.net', +'ad.doubleclick.net.63839.9465.302br.net', +'ad.doubleclick.net.63840.9465.302br.net', +'ad.doubleclick.net.63841.9465.302br.net', +'ad.doubleclick.net.63843.9465.302br.net', +'ad.doubleclick.net.63844.9465.302br.net', +'ad.doubleclick.net.63845.9465.302br.net', +'ad.doubleclick.net.63846.9465.302br.net', +'ad.doubleclick.net.63847.9465.302br.net', +'ad.doubleclick.net.63848.9465.302br.net', +'ad.doubleclick.net.63849.9465.302br.net', +'ad.doubleclick.net.63850.9465.302br.net', +'ad.doubleclick.net.63852.9465.302br.net', +'ad.doubleclick.net.63853.9465.302br.net', +'ad.doubleclick.net.63855.9465.302br.net', +'ad.doubleclick.net.63856.9465.302br.net', +'ad.doubleclick.net.63858.9465.302br.net', +'ad.doubleclick.net.63859.9465.302br.net', +'ad.doubleclick.net.63860.9465.302br.net', +'ad.doubleclick.net.63861.9465.302br.net', +'ad.doubleclick.net.63862.9465.302br.net', +'ad.doubleclick.net.63863.9465.302br.net', +'ad.doubleclick.net.63864.9465.302br.net', +'ad.doubleclick.net.63865.9465.302br.net', +'ad.doubleclick.net.63866.9465.302br.net', +'ad.doubleclick.net.63867.9465.302br.net', +'ad.doubleclick.net.63868.9465.302br.net', +'ad.doubleclick.net.63869.9465.302br.net', +'ad.doubleclick.net.63870.9465.302br.net', +'ad.doubleclick.net.63871.9465.302br.net', +'ad.doubleclick.net.63873.9465.302br.net', +'ad.doubleclick.net.63874.9465.302br.net', +'ad.doubleclick.net.63875.9465.302br.net', +'ad.doubleclick.net.63876.9465.302br.net', +'ad.doubleclick.net.63877.9465.302br.net', +'ad.doubleclick.net.63878.9465.302br.net', +'ad.doubleclick.net.63879.9465.302br.net', +'ad.doubleclick.net.63880.9465.302br.net', +'ad.doubleclick.net.63882.9465.302br.net', +'ad.doubleclick.net.63883.9465.302br.net', +'ad.doubleclick.net.63884.9465.302br.net', +'ad.doubleclick.net.63885.9465.302br.net', +'ad.doubleclick.net.63886.9465.302br.net', +'ad.doubleclick.net.63887.9465.302br.net', +'ad.doubleclick.net.63888.9465.302br.net', +'ad.doubleclick.net.63889.9465.302br.net', +'ad.doubleclick.net.63890.9465.302br.net', +'ad.doubleclick.net.63891.9465.302br.net', +'ad.doubleclick.net.63892.9465.302br.net', +'ad.doubleclick.net.63894.9465.302br.net', +'ad.doubleclick.net.63895.9465.302br.net', +'ad.doubleclick.net.63897.9465.302br.net', +'ad.doubleclick.net.63898.9465.302br.net', +'ad.doubleclick.net.63900.9465.302br.net', +'ad.doubleclick.net.63901.9465.302br.net', +'ad.doubleclick.net.63903.9465.302br.net', +'ad.doubleclick.net.63904.9465.302br.net', +'ad.doubleclick.net.63905.9465.302br.net', +'ad.doubleclick.net.63906.9465.302br.net', +'ad.doubleclick.net.63907.9465.302br.net', +'ad.doubleclick.net.63973.9465.302br.net', +'ad.doubleclick.net.63976.9465.302br.net', +'ad.doubleclick.net.63979.9465.302br.net', +'ad.doubleclick.net.63982.9465.302br.net', +'ad.doubleclick.net.63985.9465.302br.net', +'ad.doubleclick.net.63988.9465.302br.net', +'ad.doubleclick.net.63991.9465.302br.net', +'ad.doubleclick.net.63994.9465.302br.net', +'ad.doubleclick.net.64010.9494.302br.net', +'ad.doubleclick.net.64013.9494.302br.net', +'ad.doubleclick.net.64016.9494.302br.net', +'ad.doubleclick.net.64728.9149.302br.net', +'ad.doubleclick.net.64731.9149.302br.net', +'ad.doubleclick.net.64734.9149.302br.net', +'ad.doubleclick.net.64736.9506.302br.net', +'ad.doubleclick.net.64738.9506.302br.net', +'ad.doubleclick.net.64739.9506.302br.net', +'ad.doubleclick.net.64741.9506.302br.net', +'ad.doubleclick.net.64742.9506.302br.net', +'ad.doubleclick.net.64744.9506.302br.net', +'ad.doubleclick.net.64745.9506.302br.net', +'ad.doubleclick.net.64748.9506.302br.net', +'ad.doubleclick.net.64751.9506.302br.net', +'ad.doubleclick.net.64755.9314.302br.net', +'ad.doubleclick.net.64758.9314.302br.net', +'ad.doubleclick.net.64761.9314.302br.net', +'ad.doubleclick.net.64763.9314.302br.net', +'ad.doubleclick.net.64765.9314.302br.net', +'ad.doubleclick.net.64766.9314.302br.net', +'ad.doubleclick.net.64768.9314.302br.net', +'ad.doubleclick.net.64771.9314.302br.net', +'ad.doubleclick.net.64772.9314.302br.net', +'ad.doubleclick.net.64774.9314.302br.net', +'ad.doubleclick.net.64775.9314.302br.net', +'ad.doubleclick.net.64777.9314.302br.net', +'ad.doubleclick.net.64780.9314.302br.net', +'ad.doubleclick.net.64799.9314.302br.net', +'ad.doubleclick.net.64801.9314.302br.net', +'ad.doubleclick.net.64802.9314.302br.net', +'ad.doubleclick.net.64804.9314.302br.net', +'ad.doubleclick.net.64805.9314.302br.net', +'ad.doubleclick.net.64807.9314.302br.net', +'ad.doubleclick.net.64826.9313.302br.net', +'ad.doubleclick.net.64827.9313.302br.net', +'ad.doubleclick.net.64828.9313.302br.net', +'ad.doubleclick.net.64829.9313.302br.net', +'ad.doubleclick.net.64830.9313.302br.net', +'ad.doubleclick.net.64831.9313.302br.net', +'ad.doubleclick.net.64832.9313.302br.net', +'ad.doubleclick.net.64833.9313.302br.net', +'ad.doubleclick.net.64834.9313.302br.net', +'ad.doubleclick.net.64835.9313.302br.net', +'ad.doubleclick.net.64836.9313.302br.net', +'ad.doubleclick.net.64837.9313.302br.net', +'ad.doubleclick.net.64838.9313.302br.net', +'ad.doubleclick.net.64839.9313.302br.net', +'ad.doubleclick.net.64840.9313.302br.net', +'ad.doubleclick.net.64841.9313.302br.net', +'ad.doubleclick.net.64842.9313.302br.net', +'ad.doubleclick.net.64843.9313.302br.net', +'ad.doubleclick.net.64880.9496.302br.net', +'ad.doubleclick.net.64882.9496.302br.net', +'ad.doubleclick.net.64883.9496.302br.net', +'ad.doubleclick.net.64885.9496.302br.net', +'ad.doubleclick.net.64886.9496.302br.net', +'ad.doubleclick.net.64888.9496.302br.net', +'ad.doubleclick.net.64889.9496.302br.net', +'ad.doubleclick.net.64891.9496.302br.net', +'ad.doubleclick.net.64892.9496.302br.net', +'ad.doubleclick.net.64894.9496.302br.net', +'ad.doubleclick.net.64897.9496.302br.net', +'ad.doubleclick.net.64900.9496.302br.net', +'ad.doubleclick.net.64901.9496.302br.net', +'ad.doubleclick.net.64903.9496.302br.net', +'ad.doubleclick.net.64906.9496.302br.net', +'ad.doubleclick.net.64909.9496.302br.net', +'ad.doubleclick.net.64912.9496.302br.net', +'ad.doubleclick.net.64914.9496.302br.net', +'ad.doubleclick.net.64915.9496.302br.net', +'ad.doubleclick.net.64918.9496.302br.net', +'ad.doubleclick.net.64921.9496.302br.net', +'ad.doubleclick.net.64924.9496.302br.net', +'ad.doubleclick.net.64927.9496.302br.net', +'ad.doubleclick.net.64929.9496.302br.net', +'ad.doubleclick.net.64930.9496.302br.net', +'ad.doubleclick.net.64933.9496.302br.net', +'ad.doubleclick.net.64934.9496.302br.net', +'ad.doubleclick.net.64936.9496.302br.net', +'ad.doubleclick.net.64938.9496.302br.net', +'ad.doubleclick.net.64939.9496.302br.net', +'ad.doubleclick.net.64941.9496.302br.net', +'ad.doubleclick.net.64942.9496.302br.net', +'ad.doubleclick.net.64943.9496.302br.net', +'ad.doubleclick.net.64944.9496.302br.net', +'ad.doubleclick.net.64945.9496.302br.net', +'ad.doubleclick.net.64947.9496.302br.net', +'ad.doubleclick.net.64948.9496.302br.net', +'ad.doubleclick.net.64951.9496.302br.net', +'ad.doubleclick.net.64954.9496.302br.net', +'ad.doubleclick.net.64957.9496.302br.net', +'ad.doubleclick.net.64960.9496.302br.net', +'ad.doubleclick.net.64963.9496.302br.net', +'ad.doubleclick.net.64966.9496.302br.net', +'ad.doubleclick.net.64968.9496.302br.net', +'ad.doubleclick.net.64969.9496.302br.net', +'ad.doubleclick.net.64972.9496.302br.net', +'ad.doubleclick.net.64975.9496.302br.net', +'ad.doubleclick.net.64978.9496.302br.net', +'ad.doubleclick.net.64981.9496.302br.net', +'ad.doubleclick.net.64984.9496.302br.net', +'ad.doubleclick.net.64985.9496.302br.net', +'ad.doubleclick.net.64987.9496.302br.net', +'ad.doubleclick.net.64990.9496.302br.net', +'ad.doubleclick.net.64993.9496.302br.net', +'ad.doubleclick.net.64996.9496.302br.net', +'ad.doubleclick.net.64999.9496.302br.net', +'ad.doubleclick.net.65000.9496.302br.net', +'ad.doubleclick.net.65002.9496.302br.net', +'ad.doubleclick.net.65005.9496.302br.net', +'ad.doubleclick.net.65008.9496.302br.net', +'ad.doubleclick.net.65020.9496.302br.net', +'ad.doubleclick.net.65023.9496.302br.net', +'ad.doubleclick.net.65026.9496.302br.net', +'ad.doubleclick.net.65029.9496.302br.net', +'ad.doubleclick.net.65032.9496.302br.net', +'ad.doubleclick.net.65035.9496.302br.net', +'ad.doubleclick.net.65038.9496.302br.net', +'ad.doubleclick.net.65041.9496.302br.net', +'ad.doubleclick.net.65042.9496.302br.net', +'ad.doubleclick.net.65044.9496.302br.net', +'ad.doubleclick.net.65047.9496.302br.net', +'ad.doubleclick.net.65050.9496.302br.net', +'ad.doubleclick.net.65051.9496.302br.net', +'ad.doubleclick.net.65053.9496.302br.net', +'ad.doubleclick.net.65054.9496.302br.net', +'ad.doubleclick.net.65056.9496.302br.net', +'ad.doubleclick.net.65059.9496.302br.net', +'ad.doubleclick.net.65062.9496.302br.net', +'ad.doubleclick.net.65063.9496.302br.net', +'ad.doubleclick.net.65065.9496.302br.net', +'ad.doubleclick.net.65068.9496.302br.net', +'ad.doubleclick.net.65069.9496.302br.net', +'ad.doubleclick.net.65071.9496.302br.net', +'ad.doubleclick.net.65078.9496.302br.net', +'ad.doubleclick.net.65080.9496.302br.net', +'ad.doubleclick.net.65081.9496.302br.net', +'ad.doubleclick.net.65083.9496.302br.net', +'ad.doubleclick.net.65085.9496.302br.net', +'ad.doubleclick.net.65086.9496.302br.net', +'ad.doubleclick.net.65088.9496.302br.net', +'ad.doubleclick.net.65089.9496.302br.net', +'ad.doubleclick.net.65091.9496.302br.net', +'ad.doubleclick.net.65092.9496.302br.net', +'ad.doubleclick.net.65094.9496.302br.net', +'ad.doubleclick.net.65095.9496.302br.net', +'ad.doubleclick.net.65097.9496.302br.net', +'ad.doubleclick.net.65098.9496.302br.net', +'ad.doubleclick.net.65100.9496.302br.net', +'ad.doubleclick.net.65101.9496.302br.net', +'ad.doubleclick.net.65103.9496.302br.net', +'ad.doubleclick.net.65104.9496.302br.net', +'ad.doubleclick.net.65106.9496.302br.net', +'ad.doubleclick.net.65107.9496.302br.net', +'ad.doubleclick.net.65109.9496.302br.net', +'ad.doubleclick.net.65110.9496.302br.net', +'ad.doubleclick.net.65112.9496.302br.net', +'ad.doubleclick.net.65113.9496.302br.net', +'ad.doubleclick.net.65115.9496.302br.net', +'ad.doubleclick.net.65116.9496.302br.net', +'ad.doubleclick.net.65118.9496.302br.net', +'ad.doubleclick.net.65119.9496.302br.net', +'ad.doubleclick.net.65120.9499.302br.net', +'ad.doubleclick.net.65122.9499.302br.net', +'ad.doubleclick.net.65123.9499.302br.net', +'ad.doubleclick.net.65125.9499.302br.net', +'ad.doubleclick.net.65126.9499.302br.net', +'ad.doubleclick.net.65128.9499.302br.net', +'ad.doubleclick.net.65129.9499.302br.net', +'ad.doubleclick.net.65131.9499.302br.net', +'ad.doubleclick.net.65132.9499.302br.net', +'ad.doubleclick.net.65134.9499.302br.net', +'ad.doubleclick.net.65137.9499.302br.net', +'ad.doubleclick.net.65158.9499.302br.net', +'ad.doubleclick.net.65161.9499.302br.net', +'ad.doubleclick.net.65164.9499.302br.net', +'ad.doubleclick.net.65167.9499.302br.net', +'ad.doubleclick.net.65170.9499.302br.net', +'ad.doubleclick.net.65171.9499.302br.net', +'ad.doubleclick.net.65172.9499.302br.net', +'ad.doubleclick.net.65173.9499.302br.net', +'ad.doubleclick.net.65174.9499.302br.net', +'ad.doubleclick.net.65176.9499.302br.net', +'ad.doubleclick.net.65177.9499.302br.net', +'ad.doubleclick.net.65179.9499.302br.net', +'ad.doubleclick.net.65181.9499.302br.net', +'ad.doubleclick.net.65182.9499.302br.net', +'ad.doubleclick.net.65183.9499.302br.net', +'ad.doubleclick.net.65185.9499.302br.net', +'ad.doubleclick.net.65188.9499.302br.net', +'ad.doubleclick.net.65191.9499.302br.net', +'ad.doubleclick.net.65192.9499.302br.net', +'ad.doubleclick.net.65194.9499.302br.net', +'ad.doubleclick.net.65195.9499.302br.net', +'ad.doubleclick.net.65197.9499.302br.net', +'ad.doubleclick.net.65198.9499.302br.net', +'ad.doubleclick.net.65200.9499.302br.net', +'ad.doubleclick.net.65201.9499.302br.net', +'ad.doubleclick.net.65203.9499.302br.net', +'ad.doubleclick.net.65204.9499.302br.net', +'ad.doubleclick.net.65206.9499.302br.net', +'ad.doubleclick.net.65207.9499.302br.net', +'ad.doubleclick.net.65208.9499.302br.net', +'ad.doubleclick.net.65209.9499.302br.net', +'ad.doubleclick.net.65210.9499.302br.net', +'ad.doubleclick.net.65211.9499.302br.net', +'ad.doubleclick.net.65212.9499.302br.net', +'ad.doubleclick.net.65213.9499.302br.net', +'ad.doubleclick.net.65214.9499.302br.net', +'ad.doubleclick.net.65215.9499.302br.net', +'ad.doubleclick.net.65216.9499.302br.net', +'ad.doubleclick.net.65217.9499.302br.net', +'ad.doubleclick.net.65218.9499.302br.net', +'ad.doubleclick.net.65221.9499.302br.net', +'ad.doubleclick.net.65225.9499.302br.net', +'ad.doubleclick.net.65226.9499.302br.net', +'ad.doubleclick.net.65227.9499.302br.net', +'ad.doubleclick.net.65228.9499.302br.net', +'ad.doubleclick.net.65229.9499.302br.net', +'ad.doubleclick.net.65230.9499.302br.net', +'ad.doubleclick.net.65233.9499.302br.net', +'ad.doubleclick.net.65239.9499.302br.net', +'ad.doubleclick.net.65241.9499.302br.net', +'ad.doubleclick.net.65242.9499.302br.net', +'ad.doubleclick.net.65243.9499.302br.net', +'ad.doubleclick.net.65244.9499.302br.net', +'ad.doubleclick.net.65245.9499.302br.net', +'ad.doubleclick.net.65246.9499.302br.net', +'ad.doubleclick.net.65247.9499.302br.net', +'ad.doubleclick.net.65248.9499.302br.net', +'ad.doubleclick.net.65254.9499.302br.net', +'ad.doubleclick.net.65255.9499.302br.net', +'ad.doubleclick.net.65257.9499.302br.net', +'ad.doubleclick.net.65258.9499.302br.net', +'ad.doubleclick.net.65260.9499.302br.net', +'ad.doubleclick.net.65281.9499.302br.net', +'ad.doubleclick.net.65284.9499.302br.net', +'ad.doubleclick.net.65287.9499.302br.net', +'ad.doubleclick.net.65290.9499.302br.net', +'ad.doubleclick.net.65292.9510.302br.net', +'ad.doubleclick.net.65295.9510.302br.net', +'ad.doubleclick.net.65298.9510.302br.net', +'ad.doubleclick.net.65328.9509.302br.net', +'ad.doubleclick.net.65331.9509.302br.net', +'ad.doubleclick.net.65334.9509.302br.net', +'ad.doubleclick.net.65356.9509.302br.net', +'ad.doubleclick.net.65359.9509.302br.net', +'ad.doubleclick.net.65362.9509.302br.net', +'ad.doubleclick.net.65365.9509.302br.net', +'ad.doubleclick.net.65368.9509.302br.net', +'ad.doubleclick.net.65371.9509.302br.net', +'ad.doubleclick.net.65373.9499.302br.net', +'ad.doubleclick.net.65374.9499.302br.net', +'ad.doubleclick.net.65376.9499.302br.net', +'ad.doubleclick.net.65377.9499.302br.net', +'ad.doubleclick.net.65378.9499.302br.net', +'ad.doubleclick.net.65379.9499.302br.net', +'ad.doubleclick.net.65380.9499.302br.net', +'ad.doubleclick.net.65382.9499.302br.net', +'ad.doubleclick.net.65383.9499.302br.net', +'ad.doubleclick.net.65385.9499.302br.net', +'ad.doubleclick.net.65386.9499.302br.net', +'ad.doubleclick.net.65388.9499.302br.net', +'ad.doubleclick.net.65389.9499.302br.net', +'ad.doubleclick.net.65391.9499.302br.net', +'ad.doubleclick.net.65392.9499.302br.net', +'ad.doubleclick.net.65394.9499.302br.net', +'ad.doubleclick.net.65395.9499.302br.net', +'ad.doubleclick.net.65397.9499.302br.net', +'ad.doubleclick.net.65398.9499.302br.net', +'ad.doubleclick.net.65473.9503.302br.net', +'ad.doubleclick.net.65476.9503.302br.net', +'ad.doubleclick.net.65479.9503.302br.net', +'ad.doubleclick.net.65482.9503.302br.net', +'ad.doubleclick.net.65485.9503.302br.net', +'ad.doubleclick.net.65497.9503.302br.net', +'ad.doubleclick.net.65500.9503.302br.net', +'ad.doubleclick.net.65503.9503.302br.net', +'ad.doubleclick.net.65515.9503.302br.net', +'ad.doubleclick.net.65536.9503.302br.net', +'ad.doubleclick.net.65539.9503.302br.net', +'ad.doubleclick.net.65542.9503.302br.net', +'ad.doubleclick.net.65544.9503.302br.net', +'ad.doubleclick.net.65545.9503.302br.net', +'ad.doubleclick.net.65546.9503.302br.net', +'ad.doubleclick.net.65547.9503.302br.net', +'ad.doubleclick.net.65548.9503.302br.net', +'ad.doubleclick.net.65549.9503.302br.net', +'ad.doubleclick.net.65550.9503.302br.net', +'ad.doubleclick.net.65551.9503.302br.net', +'ad.doubleclick.net.65552.9503.302br.net', +'ad.doubleclick.net.65554.9503.302br.net', +'ad.doubleclick.net.65556.9503.302br.net', +'ad.doubleclick.net.65557.9503.302br.net', +'ad.doubleclick.net.65559.9503.302br.net', +'ad.doubleclick.net.65560.9503.302br.net', +'ad.doubleclick.net.65562.9503.302br.net', +'ad.doubleclick.net.65563.9503.302br.net', +'ad.doubleclick.net.65565.9503.302br.net', +'ad.doubleclick.net.65566.9503.302br.net', +'ad.doubleclick.net.65568.9503.302br.net', +'ad.doubleclick.net.65569.9503.302br.net', +'ad.doubleclick.net.65571.9503.302br.net', +'ad.doubleclick.net.65572.9503.302br.net', +'ad.doubleclick.net.65574.9503.302br.net', +'ad.doubleclick.net.65575.9503.302br.net', +'ad.doubleclick.net.65578.9503.302br.net', +'ad.doubleclick.net.65581.9503.302br.net', +'ad.doubleclick.net.65584.9503.302br.net', +'ad.doubleclick.net.65587.9503.302br.net', +'ad.doubleclick.net.65590.9503.302br.net', +'ad.doubleclick.net.65592.9503.302br.net', +'ad.doubleclick.net.65593.9503.302br.net', +'ad.doubleclick.net.65595.9503.302br.net', +'ad.doubleclick.net.65596.9503.302br.net', +'ad.doubleclick.net.65598.9503.302br.net', +'ad.doubleclick.net.65599.9503.302br.net', +'ad.doubleclick.net.65605.9503.302br.net', +'ad.doubleclick.net.65608.9503.302br.net', +'ad.doubleclick.net.65610.9503.302br.net', +'ad.doubleclick.net.65611.9503.302br.net', +'ad.doubleclick.net.65612.9503.302br.net', +'ad.doubleclick.net.65613.9503.302br.net', +'ad.doubleclick.net.65614.9503.302br.net', +'ad.doubleclick.net.65617.9503.302br.net', +'ad.doubleclick.net.65620.9503.302br.net', +'ad.doubleclick.net.65626.9503.302br.net', +'ad.doubleclick.net.65629.9503.302br.net', +'ad.doubleclick.net.65630.9503.302br.net', +'ad.doubleclick.net.65631.9503.302br.net', +'ad.doubleclick.net.65632.9503.302br.net', +'ad.doubleclick.net.65634.9503.302br.net', +'ad.doubleclick.net.65635.9503.302br.net', +'ad.doubleclick.net.65638.9503.302br.net', +'ad.doubleclick.net.65641.9503.302br.net', +'ad.doubleclick.net.65644.9503.302br.net', +'ad.doubleclick.net.65647.9503.302br.net', +'ad.doubleclick.net.65648.9503.302br.net', +'ad.doubleclick.net.65650.9503.302br.net', +'ad.doubleclick.net.65651.9503.302br.net', +'ad.doubleclick.net.65653.9503.302br.net', +'ad.doubleclick.net.65654.9503.302br.net', +'ad.doubleclick.net.65656.9503.302br.net', +'ad.doubleclick.net.65659.9503.302br.net', +'ad.doubleclick.net.65662.9503.302br.net', +'ad.doubleclick.net.65663.9503.302br.net', +'ad.doubleclick.net.65665.9503.302br.net', +'ad.doubleclick.net.65666.9503.302br.net', +'ad.doubleclick.net.65668.9503.302br.net', +'ad.doubleclick.net.65669.9503.302br.net', +'ad.doubleclick.net.65671.9503.302br.net', +'ad.doubleclick.net.65672.9503.302br.net', +'ad.doubleclick.net.65674.9503.302br.net', +'ad.doubleclick.net.65675.9503.302br.net', +'ad.doubleclick.net.65677.9503.302br.net', +'ad.doubleclick.net.65678.9503.302br.net', +'ad.doubleclick.net.65680.9503.302br.net', +'ad.doubleclick.net.65683.9503.302br.net', +'ad.doubleclick.net.65684.9503.302br.net', +'ad.doubleclick.net.65686.9503.302br.net', +'ad.doubleclick.net.65689.9503.302br.net', +'ad.doubleclick.net.65692.9503.302br.net', +'ad.doubleclick.net.65693.9503.302br.net', +'ad.doubleclick.net.65695.9503.302br.net', +'ad.doubleclick.net.65698.9503.302br.net', +'ad.doubleclick.net.65701.9503.302br.net', +'ad.doubleclick.net.65704.9503.302br.net', +'ad.doubleclick.net.65705.9503.302br.net', +'ad.doubleclick.net.65707.9503.302br.net', +'ad.doubleclick.net.65708.9503.302br.net', +'ad.doubleclick.net.65710.9503.302br.net', +'ad.doubleclick.net.65711.9503.302br.net', +'ad.doubleclick.net.65713.9503.302br.net', +'ad.doubleclick.net.65714.9503.302br.net', +'ad.doubleclick.net.65716.9503.302br.net', +'ad.doubleclick.net.65717.9503.302br.net', +'ad.doubleclick.net.65719.9503.302br.net', +'ad.doubleclick.net.65720.9503.302br.net', +'ad.doubleclick.net.65722.9503.302br.net', +'ad.doubleclick.net.65723.9503.302br.net', +'ad.doubleclick.net.65724.9503.302br.net', +'ad.doubleclick.net.65725.9503.302br.net', +'ad.doubleclick.net.65726.9503.302br.net', +'ad.doubleclick.net.65727.9503.302br.net', +'ad.doubleclick.net.65728.9503.302br.net', +'ad.doubleclick.net.65730.9503.302br.net', +'ad.doubleclick.net.65731.9503.302br.net', +'ad.doubleclick.net.65732.9503.302br.net', +'ad.doubleclick.net.65733.9503.302br.net', +'ad.doubleclick.net.65734.9503.302br.net', +'ad.doubleclick.net.65736.9503.302br.net', +'ad.doubleclick.net.65737.9503.302br.net', +'ad.doubleclick.net.65738.9503.302br.net', +'ad.doubleclick.net.65739.9503.302br.net', +'ad.doubleclick.net.65740.9503.302br.net', +'ad.doubleclick.net.65741.9503.302br.net', +'ad.doubleclick.net.65742.9503.302br.net', +'ad.doubleclick.net.65743.9503.302br.net', +'ad.doubleclick.net.65745.9503.302br.net', +'ad.doubleclick.net.65746.9503.302br.net', +'ad.doubleclick.net.65747.9503.302br.net', +'ad.doubleclick.net.65748.9503.302br.net', +'ad.doubleclick.net.65749.9503.302br.net', +'ad.doubleclick.net.65751.9503.302br.net', +'ad.doubleclick.net.65752.9503.302br.net', +'ad.doubleclick.net.65754.9503.302br.net', +'ad.doubleclick.net.65755.9503.302br.net', +'ad.doubleclick.net.65757.9503.302br.net', +'ad.doubleclick.net.65758.9503.302br.net', +'ad.doubleclick.net.65759.9503.302br.net', +'ad.doubleclick.net.65760.9503.302br.net', +'ad.doubleclick.net.65761.9503.302br.net', +'ad.doubleclick.net.65762.9503.302br.net', +'ad.doubleclick.net.65763.9503.302br.net', +'ad.doubleclick.net.65764.9503.302br.net', +'ad.doubleclick.net.65765.9503.302br.net', +'ad.doubleclick.net.65766.9503.302br.net', +'ad.doubleclick.net.65767.9503.302br.net', +'ad.doubleclick.net.65768.9503.302br.net', +'ad.doubleclick.net.65769.9503.302br.net', +'ad.doubleclick.net.65770.9503.302br.net', +'ad.doubleclick.net.65771.9503.302br.net', +'ad.doubleclick.net.65772.9503.302br.net', +'ad.doubleclick.net.65773.9503.302br.net', +'ad.doubleclick.net.65774.9503.302br.net', +'ad.doubleclick.net.65775.9503.302br.net', +'ad.doubleclick.net.65776.9503.302br.net', +'ad.doubleclick.net.65777.9503.302br.net', +'ad.doubleclick.net.65778.9503.302br.net', +'ad.doubleclick.net.65779.9503.302br.net', +'ad.doubleclick.net.65780.9503.302br.net', +'ad.doubleclick.net.65781.9503.302br.net', +'ad.doubleclick.net.65782.9503.302br.net', +'ad.doubleclick.net.65783.9503.302br.net', +'ad.doubleclick.net.65784.9503.302br.net', +'ad.doubleclick.net.65785.9503.302br.net', +'ad.doubleclick.net.65786.9503.302br.net', +'ad.doubleclick.net.65787.9503.302br.net', +'ad.doubleclick.net.65788.9503.302br.net', +'ad.doubleclick.net.65789.9503.302br.net', +'ad.doubleclick.net.65790.9503.302br.net', +'ad.doubleclick.net.65791.9503.302br.net', +'ad.doubleclick.net.65792.9503.302br.net', +'ad.doubleclick.net.65793.9503.302br.net', +'ad.doubleclick.net.65794.9503.302br.net', +'ad.doubleclick.net.65797.9503.302br.net', +'ad.doubleclick.net.65800.9503.302br.net', +'ad.doubleclick.net.65803.9503.302br.net', +'ad.doubleclick.net.65806.9503.302br.net', +'ad.doubleclick.net.65809.9503.302br.net', +'ad.doubleclick.net.65812.9503.302br.net', +'ad.doubleclick.net.65815.9503.302br.net', +'ad.doubleclick.net.65818.9503.302br.net', +'ad.doubleclick.net.65821.9503.302br.net', +'ad.doubleclick.net.65824.9503.302br.net', +'ad.doubleclick.net.65827.9503.302br.net', +'ad.doubleclick.net.65830.9503.302br.net', +'ad.doubleclick.net.65833.9503.302br.net', +'ad.doubleclick.net.65836.9503.302br.net', +'ad.doubleclick.net.65839.9503.302br.net', +'ad.doubleclick.net.65842.9503.302br.net', +'ad.doubleclick.net.65845.9501.302br.net', +'ad.doubleclick.net.65848.9501.302br.net', +'ad.doubleclick.net.65851.9501.302br.net', +'ad.doubleclick.net.65854.9501.302br.net', +'ad.doubleclick.net.65860.9501.302br.net', +'ad.doubleclick.net.65863.9501.302br.net', +'ad.doubleclick.net.65878.9501.302br.net', +'ad.doubleclick.net.65881.9501.302br.net', +'ad.doubleclick.net.65887.9501.302br.net', +'ad.doubleclick.net.65890.9501.302br.net', +'ad.doubleclick.net.65893.9501.302br.net', +'ad.doubleclick.net.65896.9501.302br.net', +'ad.doubleclick.net.65902.9501.302br.net', +'ad.doubleclick.net.65909.9501.302br.net', +'ad.doubleclick.net.65910.9501.302br.net', +'ad.doubleclick.net.65911.9501.302br.net', +'ad.doubleclick.net.65914.9501.302br.net', +'ad.doubleclick.net.65915.9501.302br.net', +'ad.doubleclick.net.65916.9501.302br.net', +'ad.doubleclick.net.65917.9501.302br.net', +'ad.doubleclick.net.65918.9501.302br.net', +'ad.doubleclick.net.65919.9501.302br.net', +'ad.doubleclick.net.65920.9501.302br.net', +'ad.doubleclick.net.65921.9501.302br.net', +'ad.doubleclick.net.65922.9501.302br.net', +'ad.doubleclick.net.65923.9501.302br.net', +'ad.doubleclick.net.65925.9501.302br.net', +'ad.doubleclick.net.65926.9501.302br.net', +'ad.doubleclick.net.65928.9501.302br.net', +'ad.doubleclick.net.65929.9501.302br.net', +'ad.doubleclick.net.65931.9501.302br.net', +'ad.doubleclick.net.65932.9501.302br.net', +'ad.doubleclick.net.65934.9501.302br.net', +'ad.doubleclick.net.65935.9501.302br.net', +'ad.doubleclick.net.65936.9501.302br.net', +'ad.doubleclick.net.65937.9501.302br.net', +'ad.doubleclick.net.65938.9501.302br.net', +'ad.doubleclick.net.65939.9501.302br.net', +'ad.doubleclick.net.65940.9501.302br.net', +'ad.doubleclick.net.65941.9501.302br.net', +'ad.doubleclick.net.65942.9501.302br.net', +'ad.doubleclick.net.65943.9501.302br.net', +'ad.doubleclick.net.65944.9501.302br.net', +'ad.doubleclick.net.65946.9501.302br.net', +'ad.doubleclick.net.65947.9501.302br.net', +'ad.doubleclick.net.65950.9501.302br.net', +'ad.doubleclick.net.65952.9501.302br.net', +'ad.doubleclick.net.65953.9501.302br.net', +'ad.doubleclick.net.65955.9501.302br.net', +'ad.doubleclick.net.65956.9501.302br.net', +'ad.doubleclick.net.65962.9501.302br.net', +'ad.doubleclick.net.65965.9501.302br.net', +'ad.doubleclick.net.65967.9501.302br.net', +'ad.doubleclick.net.65968.9501.302br.net', +'ad.doubleclick.net.65969.9501.302br.net', +'ad.doubleclick.net.65971.9501.302br.net', +'ad.doubleclick.net.65974.9501.302br.net', +'ad.doubleclick.net.65977.9501.302br.net', +'ad.doubleclick.net.65980.9501.302br.net', +'ad.doubleclick.net.65982.9501.302br.net', +'ad.doubleclick.net.65983.9501.302br.net', +'ad.doubleclick.net.65985.9501.302br.net', +'ad.doubleclick.net.65986.9501.302br.net', +'ad.doubleclick.net.65988.9501.302br.net', +'ad.doubleclick.net.65989.9501.302br.net', +'ad.doubleclick.net.65992.9501.302br.net', +'ad.doubleclick.net.65995.9501.302br.net', +'ad.doubleclick.net.65996.9501.302br.net', +'ad.doubleclick.net.65998.9501.302br.net', +'ad.doubleclick.net.66000.9501.302br.net', +'ad.doubleclick.net.66001.9501.302br.net', +'ad.doubleclick.net.66002.9501.302br.net', +'ad.doubleclick.net.66003.9501.302br.net', +'ad.doubleclick.net.66004.9501.302br.net', +'ad.doubleclick.net.66005.9501.302br.net', +'ad.doubleclick.net.66007.9501.302br.net', +'ad.doubleclick.net.66009.9501.302br.net', +'ad.doubleclick.net.66010.9501.302br.net', +'ad.doubleclick.net.66011.9501.302br.net', +'ad.doubleclick.net.66013.9501.302br.net', +'ad.doubleclick.net.66015.9501.302br.net', +'ad.doubleclick.net.66016.9501.302br.net', +'ad.doubleclick.net.66018.9501.302br.net', +'ad.doubleclick.net.66019.9501.302br.net', +'ad.doubleclick.net.66020.9501.302br.net', +'ad.doubleclick.net.66021.9501.302br.net', +'ad.doubleclick.net.66022.9501.302br.net', +'ad.doubleclick.net.66024.9501.302br.net', +'ad.doubleclick.net.66025.9501.302br.net', +'ad.doubleclick.net.66026.9501.302br.net', +'ad.doubleclick.net.66027.9501.302br.net', +'ad.doubleclick.net.66028.9501.302br.net', +'ad.doubleclick.net.66030.9501.302br.net', +'ad.doubleclick.net.66031.9501.302br.net', +'ad.doubleclick.net.66032.9501.302br.net', +'ad.doubleclick.net.66034.9501.302br.net', +'ad.doubleclick.net.66037.9501.302br.net', +'ad.doubleclick.net.66038.9501.302br.net', +'ad.doubleclick.net.66039.9501.302br.net', +'ad.doubleclick.net.66040.9501.302br.net', +'ad.doubleclick.net.66043.9501.302br.net', +'ad.doubleclick.net.66044.9501.302br.net', +'ad.doubleclick.net.66045.9501.302br.net', +'ad.doubleclick.net.66046.9501.302br.net', +'ad.doubleclick.net.66047.9501.302br.net', +'ad.doubleclick.net.66048.9501.302br.net', +'ad.doubleclick.net.66049.9501.302br.net', +'ad.doubleclick.net.66050.9501.302br.net', +'ad.doubleclick.net.66051.9501.302br.net', +'ad.doubleclick.net.66052.9501.302br.net', +'ad.doubleclick.net.66054.9501.302br.net', +'ad.doubleclick.net.66055.9501.302br.net', +'ad.doubleclick.net.66061.9501.302br.net', +'ad.doubleclick.net.66062.9501.302br.net', +'ad.doubleclick.net.66064.9501.302br.net', +'ad.doubleclick.net.66067.9501.302br.net', +'ad.doubleclick.net.66069.9501.302br.net', +'ad.doubleclick.net.66070.9501.302br.net', +'ad.doubleclick.net.66072.9501.302br.net', +'ad.doubleclick.net.66073.9501.302br.net', +'ad.doubleclick.net.66075.9501.302br.net', +'ad.doubleclick.net.66076.9501.302br.net', +'ad.doubleclick.net.66077.9501.302br.net', +'ad.doubleclick.net.66078.9501.302br.net', +'ad.doubleclick.net.66079.9501.302br.net', +'ad.doubleclick.net.66082.9501.302br.net', +'ad.doubleclick.net.66083.9501.302br.net', +'ad.doubleclick.net.66084.9501.302br.net', +'ad.doubleclick.net.66085.9501.302br.net', +'ad.doubleclick.net.66087.9501.302br.net', +'ad.doubleclick.net.66088.9501.302br.net', +'ad.doubleclick.net.66090.9501.302br.net', +'ad.doubleclick.net.66091.9501.302br.net', +'ad.doubleclick.net.66093.9501.302br.net', +'ad.doubleclick.net.66094.9501.302br.net', +'ad.doubleclick.net.66096.9501.302br.net', +'ad.doubleclick.net.66097.9501.302br.net', +'ad.doubleclick.net.66098.9501.302br.net', +'ad.doubleclick.net.66099.9501.302br.net', +'ad.doubleclick.net.66100.9501.302br.net', +'ad.doubleclick.net.66101.9501.302br.net', +'ad.doubleclick.net.66102.9501.302br.net', +'ad.doubleclick.net.66103.9501.302br.net', +'ad.doubleclick.net.66105.9501.302br.net', +'ad.doubleclick.net.66106.9501.302br.net', +'ad.doubleclick.net.66108.9501.302br.net', +'ad.doubleclick.net.66109.9501.302br.net', +'ad.doubleclick.net.66111.9501.302br.net', +'ad.doubleclick.net.66112.9501.302br.net', +'ad.doubleclick.net.66113.9501.302br.net', +'ad.doubleclick.net.66114.9501.302br.net', +'ad.doubleclick.net.66115.9501.302br.net', +'ad.doubleclick.net.66117.9501.302br.net', +'ad.doubleclick.net.66118.9501.302br.net', +'ad.doubleclick.net.66119.9501.302br.net', +'ad.doubleclick.net.66120.9501.302br.net', +'ad.doubleclick.net.66121.9501.302br.net', +'ad.doubleclick.net.66122.9501.302br.net', +'ad.doubleclick.net.66123.9501.302br.net', +'ad.doubleclick.net.66124.9501.302br.net', +'ad.doubleclick.net.66127.9501.302br.net', +'ad.doubleclick.net.66130.9501.302br.net', +'ad.doubleclick.net.66136.9501.302br.net', +'ad.doubleclick.net.66142.9501.302br.net', +'ad.doubleclick.net.66148.9501.302br.net', +'ad.doubleclick.net.66154.9501.302br.net', +'ad.doubleclick.net.66157.9501.302br.net', +'ad.doubleclick.net.66160.9501.302br.net', +'ad.doubleclick.net.66163.9501.302br.net', +'ad.doubleclick.net.66166.9501.302br.net', +'ad.doubleclick.net.66169.9501.302br.net', +'ad.doubleclick.net.66172.9501.302br.net', +'ad.doubleclick.net.66175.9501.302br.net', +'ad.doubleclick.net.66178.9501.302br.net', +'ad.doubleclick.net.66181.9501.302br.net', +'ad.doubleclick.net.66184.9501.302br.net', +'ad.doubleclick.net.66185.9501.302br.net', +'ad.doubleclick.net.66186.9501.302br.net', +'ad.doubleclick.net.66187.9501.302br.net', +'ad.doubleclick.net.66188.9501.302br.net', +'ad.doubleclick.net.66189.9501.302br.net', +'ad.doubleclick.net.66190.9501.302br.net', +'ad.doubleclick.net.66191.9501.302br.net', +'ad.doubleclick.net.66192.9501.302br.net', +'ad.doubleclick.net.66193.9501.302br.net', +'ad.doubleclick.net.66194.9501.302br.net', +'ad.doubleclick.net.66195.9501.302br.net', +'ad.doubleclick.net.66196.9501.302br.net', +'ad.doubleclick.net.66197.9501.302br.net', +'ad.doubleclick.net.66198.9501.302br.net', +'ad.doubleclick.net.66199.9501.302br.net', +'ad.doubleclick.net.66200.9501.302br.net', +'ad.doubleclick.net.66201.9501.302br.net', +'ad.doubleclick.net.66202.9501.302br.net', +'ad.doubleclick.net.66203.9501.302br.net', +'ad.doubleclick.net.66204.9501.302br.net', +'ad.doubleclick.net.66205.9501.302br.net', +'ad.doubleclick.net.66206.9501.302br.net', +'ad.doubleclick.net.66207.9501.302br.net', +'ad.doubleclick.net.66208.9501.302br.net', +'ad.doubleclick.net.66209.9501.302br.net', +'ad.doubleclick.net.66210.9501.302br.net', +'ad.doubleclick.net.66211.9501.302br.net', +'ad.doubleclick.net.66212.9501.302br.net', +'ad.doubleclick.net.66213.9501.302br.net', +'ad.doubleclick.net.66214.9501.302br.net', +'ad.doubleclick.net.66215.9501.302br.net', +'ad.doubleclick.net.66216.9501.302br.net', +'ad.doubleclick.net.66217.9501.302br.net', +'ad.doubleclick.net.66218.9501.302br.net', +'ad.doubleclick.net.66219.9501.302br.net', +'ad.doubleclick.net.66220.9501.302br.net', +'ad.doubleclick.net.66581.9156.302br.net', +'ad.doubleclick.net.66584.9156.302br.net', +'ad.doubleclick.net.66587.9156.302br.net', +'ad.doubleclick.net.66590.9513.302br.net', +'ad.doubleclick.net.66591.9513.302br.net', +'ad.doubleclick.net.66592.9513.302br.net', +'ad.doubleclick.net.66593.9513.302br.net', +'ad.doubleclick.net.66594.9513.302br.net', +'ad.doubleclick.net.66595.9513.302br.net', +'ad.doubleclick.net.66596.9513.302br.net', +'ad.doubleclick.net.66597.9513.302br.net', +'ad.doubleclick.net.66598.9513.302br.net', +'ad.doubleclick.net.66599.9513.302br.net', +'ad.doubleclick.net.66600.9513.302br.net', +'ad.doubleclick.net.66601.9513.302br.net', +'ad.doubleclick.net.66602.9513.302br.net', +'ad.doubleclick.net.66603.9513.302br.net', +'ad.doubleclick.net.66604.9513.302br.net', +'ad.doubleclick.net.66605.9513.302br.net', +'ad.doubleclick.net.66606.9513.302br.net', +'ad.doubleclick.net.66607.9513.302br.net', +'ad.doubleclick.net.66608.9513.302br.net', +'ad.doubleclick.net.66609.9513.302br.net', +'ad.doubleclick.net.66610.9513.302br.net', +'ad.doubleclick.net.66611.9513.302br.net', +'ad.doubleclick.net.66612.9513.302br.net', +'ad.doubleclick.net.66613.9513.302br.net', +'ad.doubleclick.net.66614.9513.302br.net', +'ad.doubleclick.net.66615.9513.302br.net', +'ad.doubleclick.net.66616.9513.302br.net', +'ad.doubleclick.net.66618.9513.302br.net', +'ad.doubleclick.net.66619.9513.302br.net', +'ad.doubleclick.net.66620.9513.302br.net', +'ad.doubleclick.net.66621.9513.302br.net', +'ad.doubleclick.net.66622.9513.302br.net', +'ad.doubleclick.net.66623.9513.302br.net', +'ad.doubleclick.net.66624.9513.302br.net', +'ad.doubleclick.net.66625.9513.302br.net', +'ad.doubleclick.net.66995.9515.302br.net', +'ad.doubleclick.net.66996.9515.302br.net', +'ad.doubleclick.net.66997.9515.302br.net', +'ad.doubleclick.net.66998.9515.302br.net', +'ad.doubleclick.net.66999.9515.302br.net', +'ad.doubleclick.net.67000.9515.302br.net', +'ad.doubleclick.net.67001.9515.302br.net', +'ad.doubleclick.net.67002.9515.302br.net', +'ad.doubleclick.net.67003.9515.302br.net', +'ad.doubleclick.net.67004.9515.302br.net', +'ad.doubleclick.net.67005.9515.302br.net', +'ad.doubleclick.net.67006.9515.302br.net', +'ad.doubleclick.net.67008.9515.302br.net', +'ad.doubleclick.net.67010.9515.302br.net', +'ad.doubleclick.net.67012.9515.302br.net', +'ad.doubleclick.net.67015.9515.302br.net', +'ad.doubleclick.net.67017.9515.302br.net', +'ad.doubleclick.net.67023.9521.302br.net', +'ad.doubleclick.net.67026.9521.302br.net', +'ad.doubleclick.net.67029.9521.302br.net', +'ad.doubleclick.net.67254.9336.302br.net', +'ad.doubleclick.net.67255.9336.302br.net', +'ad.doubleclick.net.67257.9336.302br.net', +'ad.doubleclick.net.67260.9336.302br.net', +'ad.doubleclick.net.67261.9336.302br.net', +'ad.doubleclick.net.67263.9336.302br.net', +'ad.doubleclick.net.67265.9336.302br.net', +'ad.doubleclick.net.67266.9336.302br.net', +'ad.doubleclick.net.67267.9336.302br.net', +'ad.doubleclick.net.67268.9336.302br.net', +'ad.doubleclick.net.67269.9336.302br.net', +'ad.doubleclick.net.67270.9336.302br.net', +'ad.doubleclick.net.67272.9336.302br.net', +'ad.doubleclick.net.67273.9336.302br.net', +'ad.doubleclick.net.67275.9336.302br.net', +'ad.doubleclick.net.67276.9336.302br.net', +'ad.doubleclick.net.67278.9336.302br.net', +'ad.doubleclick.net.67279.9336.302br.net', +'ad.doubleclick.net.67280.9336.302br.net', +'ad.doubleclick.net.67281.9336.302br.net', +'ad.doubleclick.net.67282.9336.302br.net', +'ad.doubleclick.net.67284.9336.302br.net', +'ad.doubleclick.net.67285.9336.302br.net', +'ad.doubleclick.net.67287.9336.302br.net', +'ad.doubleclick.net.67290.9336.302br.net', +'ad.doubleclick.net.67293.9336.302br.net', +'ad.doubleclick.net.67296.9336.302br.net', +'ad.doubleclick.net.67299.9336.302br.net', +'ad.doubleclick.net.67300.9336.302br.net', +'ad.doubleclick.net.67302.9336.302br.net', +'ad.doubleclick.net.67303.9336.302br.net', +'ad.doubleclick.net.67305.9336.302br.net', +'ad.doubleclick.net.67306.9336.302br.net', +'ad.doubleclick.net.67308.9336.302br.net', +'ad.doubleclick.net.67309.9336.302br.net', +'ad.doubleclick.net.67311.9336.302br.net', +'ad.doubleclick.net.67314.9336.302br.net', +'ad.doubleclick.net.67317.9336.302br.net', +'ad.doubleclick.net.67320.9336.302br.net', +'ad.doubleclick.net.67321.9336.302br.net', +'ad.doubleclick.net.67323.9336.302br.net', +'ad.doubleclick.net.67326.9336.302br.net', +'ad.doubleclick.net.67329.9336.302br.net', +'ad.doubleclick.net.67332.9336.302br.net', +'ad.doubleclick.net.67333.9336.302br.net', +'ad.doubleclick.net.67335.9336.302br.net', +'ad.doubleclick.net.67338.9336.302br.net', +'ad.doubleclick.net.67341.9336.302br.net', +'ad.doubleclick.net.67344.9336.302br.net', +'ad.doubleclick.net.67347.9336.302br.net', +'ad.doubleclick.net.67350.9336.302br.net', +'ad.doubleclick.net.67353.9336.302br.net', +'ad.doubleclick.net.67356.9336.302br.net', +'ad.doubleclick.net.67359.9336.302br.net', +'ad.doubleclick.net.67362.9336.302br.net', +'ad.doubleclick.net.67363.9336.302br.net', +'ad.doubleclick.net.67365.9336.302br.net', +'ad.doubleclick.net.67368.9336.302br.net', +'ad.doubleclick.net.67371.9336.302br.net', +'ad.doubleclick.net.67374.9336.302br.net', +'ad.doubleclick.net.67375.9336.302br.net', +'ad.doubleclick.net.67377.9336.302br.net', +'ad.doubleclick.net.67378.9336.302br.net', +'ad.doubleclick.net.67380.9336.302br.net', +'ad.doubleclick.net.67381.9336.302br.net', +'ad.doubleclick.net.67383.9336.302br.net', +'ad.doubleclick.net.67386.9336.302br.net', +'ad.doubleclick.net.67389.9336.302br.net', +'ad.doubleclick.net.67392.9336.302br.net', +'ad.doubleclick.net.67395.9336.302br.net', +'ad.doubleclick.net.67396.9336.302br.net', +'ad.doubleclick.net.67398.9336.302br.net', +'ad.doubleclick.net.67399.9336.302br.net', +'ad.doubleclick.net.67401.9336.302br.net', +'ad.doubleclick.net.67402.9336.302br.net', +'ad.doubleclick.net.67404.9336.302br.net', +'ad.doubleclick.net.67405.9336.302br.net', +'ad.doubleclick.net.67407.9336.302br.net', +'ad.doubleclick.net.67408.9336.302br.net', +'ad.doubleclick.net.67410.9336.302br.net', +'ad.doubleclick.net.67411.9336.302br.net', +'ad.doubleclick.net.67413.9336.302br.net', +'ad.doubleclick.net.67416.9336.302br.net', +'ad.doubleclick.net.67419.9336.302br.net', +'ad.doubleclick.net.67422.9336.302br.net', +'ad.doubleclick.net.67425.9336.302br.net', +'ad.doubleclick.net.67426.9336.302br.net', +'ad.doubleclick.net.67430.9336.302br.net', +'ad.doubleclick.net.67431.9336.302br.net', +'ad.doubleclick.net.67432.9336.302br.net', +'ad.doubleclick.net.67436.9336.302br.net', +'ad.doubleclick.net.67437.9336.302br.net', +'ad.doubleclick.net.67438.9336.302br.net', +'ad.doubleclick.net.67439.9336.302br.net', +'ad.doubleclick.net.67440.9336.302br.net', +'ad.doubleclick.net.67441.9336.302br.net', +'ad.doubleclick.net.67442.9336.302br.net', +'ad.doubleclick.net.67443.9336.302br.net', +'ad.doubleclick.net.67444.9336.302br.net', +'ad.doubleclick.net.67445.9336.302br.net', +'ad.doubleclick.net.67446.9336.302br.net', +'ad.doubleclick.net.67447.9336.302br.net', +'ad.doubleclick.net.67449.9336.302br.net', +'ad.doubleclick.net.67450.9336.302br.net', +'ad.doubleclick.net.67451.9336.302br.net', +'ad.doubleclick.net.67452.9336.302br.net', +'ad.doubleclick.net.67453.9336.302br.net', +'ad.doubleclick.net.67454.9336.302br.net', +'ad.doubleclick.net.67455.9336.302br.net', +'ad.doubleclick.net.67456.9336.302br.net', +'ad.doubleclick.net.67458.9336.302br.net', +'ad.doubleclick.net.67459.9336.302br.net', +'ad.doubleclick.net.67461.9336.302br.net', +'ad.doubleclick.net.67462.9336.302br.net', +'ad.doubleclick.net.67464.9336.302br.net', +'ad.doubleclick.net.67465.9336.302br.net', +'ad.doubleclick.net.67467.9336.302br.net', +'ad.doubleclick.net.67468.9336.302br.net', +'ad.doubleclick.net.67470.9336.302br.net', +'ad.doubleclick.net.67473.9336.302br.net', +'ad.doubleclick.net.67476.9336.302br.net', +'ad.doubleclick.net.67479.9336.302br.net', +'ad.doubleclick.net.67480.9336.302br.net', +'ad.doubleclick.net.67485.9336.302br.net', +'ad.doubleclick.net.67488.9336.302br.net', +'ad.doubleclick.net.67489.9336.302br.net', +'ad.doubleclick.net.67491.9336.302br.net', +'ad.doubleclick.net.67494.9336.302br.net', +'ad.doubleclick.net.67497.9336.302br.net', +'ad.doubleclick.net.67498.9336.302br.net', +'ad.doubleclick.net.67500.9336.302br.net', +'ad.doubleclick.net.67501.9336.302br.net', +'ad.doubleclick.net.67503.9336.302br.net', +'ad.doubleclick.net.67512.9336.302br.net', +'ad.doubleclick.net.67515.9336.302br.net', +'ad.doubleclick.net.67518.9336.302br.net', +'ad.doubleclick.net.67519.9336.302br.net', +'ad.doubleclick.net.67521.9336.302br.net', +'ad.doubleclick.net.67524.9336.302br.net', +'ad.doubleclick.net.67530.9336.302br.net', +'ad.doubleclick.net.67533.9336.302br.net', +'ad.doubleclick.net.67536.9336.302br.net', +'ad.doubleclick.net.67539.9336.302br.net', +'ad.doubleclick.net.67545.9336.302br.net', +'ad.doubleclick.net.67546.9336.302br.net', +'ad.doubleclick.net.67548.9336.302br.net', +'ad.doubleclick.net.67549.9336.302br.net', +'ad.doubleclick.net.67551.9336.302br.net', +'ad.doubleclick.net.67552.9336.302br.net', +'ad.doubleclick.net.67554.9336.302br.net', +'ad.doubleclick.net.67557.9336.302br.net', +'ad.doubleclick.net.67558.9336.302br.net', +'ad.doubleclick.net.67560.9336.302br.net', +'ad.doubleclick.net.67561.9336.302br.net', +'ad.doubleclick.net.67563.9336.302br.net', +'ad.doubleclick.net.67564.9336.302br.net', +'ad.doubleclick.net.67566.9336.302br.net', +'ad.doubleclick.net.67567.9336.302br.net', +'ad.doubleclick.net.67568.9336.302br.net', +'ad.doubleclick.net.67569.9336.302br.net', +'ad.doubleclick.net.67570.9336.302br.net', +'ad.doubleclick.net.67571.9336.302br.net', +'ad.doubleclick.net.67572.9336.302br.net', +'ad.doubleclick.net.67573.9336.302br.net', +'ad.doubleclick.net.67575.9336.302br.net', +'ad.doubleclick.net.67576.9336.302br.net', +'ad.doubleclick.net.67578.9336.302br.net', +'ad.doubleclick.net.67579.9336.302br.net', +'ad.doubleclick.net.67580.9336.302br.net', +'ad.doubleclick.net.67581.9336.302br.net', +'ad.doubleclick.net.67582.9336.302br.net', +'ad.doubleclick.net.67584.9336.302br.net', +'ad.doubleclick.net.67587.9336.302br.net', +'ad.doubleclick.net.67589.9515.302br.net', +'ad.doubleclick.net.67590.9515.302br.net', +'ad.doubleclick.net.67591.9515.302br.net', +'ad.doubleclick.net.67592.9515.302br.net', +'ad.doubleclick.net.67593.9515.302br.net', +'ad.doubleclick.net.67594.9515.302br.net', +'ad.doubleclick.net.68039.9530.302br.net', +'ad.doubleclick.net.68040.9164.302br.net', +'ad.doubleclick.net.68041.9164.302br.net', +'ad.doubleclick.net.68042.9164.302br.net', +'ad.doubleclick.net.68043.9164.302br.net', +'ad.doubleclick.net.68044.9164.302br.net', +'ad.doubleclick.net.68045.9164.302br.net', +'ad.doubleclick.net.68061.9164.302br.net', +'ad.doubleclick.net.68062.9164.302br.net', +'ad.doubleclick.net.68063.9164.302br.net', +'ad.doubleclick.net.68067.9164.302br.net', +'ad.doubleclick.net.68068.9164.302br.net', +'ad.doubleclick.net.68069.9164.302br.net', +'ad.doubleclick.net.68070.9164.302br.net', +'ad.doubleclick.net.68071.9164.302br.net', +'ad.doubleclick.net.68072.9164.302br.net', +'ad.doubleclick.net.68074.9164.302br.net', +'ad.doubleclick.net.68075.9164.302br.net', +'ad.doubleclick.net.68085.9164.302br.net', +'ad.doubleclick.net.68086.9164.302br.net', +'ad.doubleclick.net.68087.9164.302br.net', +'ad.doubleclick.net.68088.9164.302br.net', +'ad.doubleclick.net.68089.9164.302br.net', +'ad.doubleclick.net.68090.9164.302br.net', +'ad.doubleclick.net.68091.9164.302br.net', +'ad.doubleclick.net.68092.9164.302br.net', +'ad.doubleclick.net.68093.9164.302br.net', +'ad.doubleclick.net.68104.9322.302br.net', +'ad.doubleclick.net.68107.9322.302br.net', +'ad.doubleclick.net.68110.9322.302br.net', +'ad.doubleclick.net.68113.9322.302br.net', +'ad.doubleclick.net.68116.9322.302br.net', +'ad.doubleclick.net.68118.9485.302br.net', +'ad.doubleclick.net.68119.9485.302br.net', +'ad.doubleclick.net.68120.9485.302br.net', +'ad.doubleclick.net.68121.9485.302br.net', +'ad.doubleclick.net.68122.9485.302br.net', +'ad.doubleclick.net.68123.9485.302br.net', +'ad.doubleclick.net.68124.9535.302br.net', +'ad.doubleclick.net.68126.9535.302br.net', +'ad.doubleclick.net.68129.9535.302br.net', +'ad.doubleclick.net.68132.9485.302br.net', +'ad.doubleclick.net.68134.9485.302br.net', +'ad.doubleclick.net.68136.9485.302br.net', +'ad.doubleclick.net.68153.9538.302br.net', +'ad.doubleclick.net.68156.9538.302br.net', +'ad.doubleclick.net.68159.9538.302br.net', +'ad.doubleclick.net.68168.9538.302br.net', +'ad.doubleclick.net.68171.9539.302br.net', +'ad.doubleclick.net.68302.9418.302br.net', +'ad.doubleclick.net.68303.9418.302br.net', +'ad.doubleclick.net.68304.9418.302br.net', +'ad.doubleclick.net.68306.9418.302br.net', +'ad.doubleclick.net.68307.9418.302br.net', +'ad.doubleclick.net.68308.9418.302br.net', +'ad.doubleclick.net.68309.9418.302br.net', +'ad.doubleclick.net.68310.9418.302br.net', +'ad.doubleclick.net.68312.9418.302br.net', +'ad.doubleclick.net.68313.9418.302br.net', +'ad.doubleclick.net.68314.9418.302br.net', +'ad.doubleclick.net.68315.9418.302br.net', +'ad.doubleclick.net.68316.9418.302br.net', +'ad.doubleclick.net.68318.9418.302br.net', +'ad.doubleclick.net.68319.9418.302br.net', +'ad.doubleclick.net.68320.9418.302br.net', +'ad.doubleclick.net.68321.9418.302br.net', +'ad.doubleclick.net.68322.9418.302br.net', +'ad.doubleclick.net.68324.9418.302br.net', +'ad.doubleclick.net.68325.9418.302br.net', +'ad.doubleclick.net.68326.9418.302br.net', +'ad.doubleclick.net.68327.9418.302br.net', +'ad.doubleclick.net.68328.9418.302br.net', +'ad.doubleclick.net.68329.9418.302br.net', +'ad.doubleclick.net.68330.9418.302br.net', +'ad.doubleclick.net.68331.9418.302br.net', +'ad.doubleclick.net.68332.9418.302br.net', +'ad.doubleclick.net.68333.9418.302br.net', +'ad.doubleclick.net.68334.9418.302br.net', +'ad.doubleclick.net.68336.9418.302br.net', +'ad.doubleclick.net.68337.9418.302br.net', +'ad.doubleclick.net.68339.9418.302br.net', +'ad.doubleclick.net.68340.9418.302br.net', +'ad.doubleclick.net.68341.9418.302br.net', +'ad.doubleclick.net.68342.9418.302br.net', +'ad.doubleclick.net.68343.9418.302br.net', +'ad.doubleclick.net.68345.9418.302br.net', +'ad.doubleclick.net.68346.9418.302br.net', +'ad.doubleclick.net.68347.9418.302br.net', +'ad.doubleclick.net.68348.9418.302br.net', +'ad.doubleclick.net.68349.9418.302br.net', +'ad.doubleclick.net.68350.9418.302br.net', +'ad.doubleclick.net.68351.9418.302br.net', +'ad.doubleclick.net.68352.9418.302br.net', +'ad.doubleclick.net.68353.9418.302br.net', +'ad.doubleclick.net.68354.9418.302br.net', +'ad.doubleclick.net.68355.9418.302br.net', +'ad.doubleclick.net.68377.9544.302br.net', +'ad.doubleclick.net.68378.9544.302br.net', +'ad.doubleclick.net.68380.9544.302br.net', +'ad.doubleclick.net.68381.9544.302br.net', +'ad.doubleclick.net.68382.9544.302br.net', +'ad.doubleclick.net.68383.9544.302br.net', +'ad.doubleclick.net.68384.9544.302br.net', +'ad.doubleclick.net.68385.9544.302br.net', +'ad.doubleclick.net.68386.9544.302br.net', +'ad.doubleclick.net.68387.9544.302br.net', +'ad.doubleclick.net.68388.9544.302br.net', +'ad.doubleclick.net.68389.9544.302br.net', +'ad.doubleclick.net.68390.9544.302br.net', +'ad.doubleclick.net.68391.9544.302br.net', +'ad.doubleclick.net.68392.9544.302br.net', +'ad.doubleclick.net.68393.9544.302br.net', +'ad.doubleclick.net.68394.9544.302br.net', +'ad.doubleclick.net.68395.9544.302br.net', +'ad.doubleclick.net.68396.9544.302br.net', +'ad.doubleclick.net.68397.9544.302br.net', +'ad.doubleclick.net.68400.9350.302br.net', +'ad.doubleclick.net.68401.9350.302br.net', +'ad.doubleclick.net.68403.9350.302br.net', +'ad.doubleclick.net.68406.9350.302br.net', +'ad.doubleclick.net.68473.9485.302br.net', +'ad.doubleclick.net.68474.9485.302br.net', +'ad.doubleclick.net.68475.9485.302br.net', +'ad.doubleclick.net.68476.9485.302br.net', +'ad.doubleclick.net.68477.9485.302br.net', +'ad.doubleclick.net.68478.9485.302br.net', +'ad.doubleclick.net.68479.9485.302br.net', +'ad.doubleclick.net.68480.9485.302br.net', +'ad.doubleclick.net.68481.9485.302br.net', +'ad.doubleclick.net.68482.9485.302br.net', +'ad.doubleclick.net.68483.9485.302br.net', +'ad.doubleclick.net.68484.9485.302br.net', +'ad.doubleclick.net.68485.9450.302br.net', +'ad.doubleclick.net.68486.9450.302br.net', +'ad.doubleclick.net.68487.9450.302br.net', +'ad.doubleclick.net.68488.9450.302br.net', +'ad.doubleclick.net.68489.9450.302br.net', +'ad.doubleclick.net.68490.9450.302br.net', +'ad.doubleclick.net.68498.9530.302br.net', +'ad.doubleclick.net.68501.9530.302br.net', +'ad.doubleclick.net.68508.9499.302br.net', +'ad.doubleclick.net.68511.9499.302br.net', +'ad.doubleclick.net.68512.9499.302br.net', +'ad.doubleclick.net.68514.9499.302br.net', +'ad.doubleclick.net.68517.9499.302br.net', +'ad.doubleclick.net.68520.9499.302br.net', +'ad.doubleclick.net.68523.9499.302br.net', +'ad.doubleclick.net.68526.9499.302br.net', +'ad.doubleclick.net.68529.9499.302br.net', +'ad.doubleclick.net.68532.9499.302br.net', +'ad.doubleclick.net.68533.9499.302br.net', +'ad.doubleclick.net.68535.9499.302br.net', +'ad.doubleclick.net.68536.9499.302br.net', +'ad.doubleclick.net.68538.9499.302br.net', +'ad.doubleclick.net.68539.9499.302br.net', +'ad.doubleclick.net.68541.9499.302br.net', +'ad.doubleclick.net.68542.9499.302br.net', +'ad.doubleclick.net.68544.9499.302br.net', +'ad.doubleclick.net.68545.9499.302br.net', +'ad.doubleclick.net.68547.9499.302br.net', +'ad.doubleclick.net.68550.9499.302br.net', +'ad.doubleclick.net.68588.9499.302br.net', +'ad.doubleclick.net.68594.9499.302br.net', +'ad.doubleclick.net.68609.9499.302br.net', +'ad.doubleclick.net.69424.9560.302br.net', +'ad.doubleclick.net.69425.9560.302br.net', +'ad.doubleclick.net.69427.9560.302br.net', +'ad.doubleclick.net.69428.9560.302br.net', +'ad.doubleclick.net.69430.9560.302br.net', +'ad.doubleclick.net.69433.9560.302br.net', +'ad.doubleclick.net.69434.9560.302br.net', +'ad.doubleclick.net.69436.9560.302br.net', +'ad.doubleclick.net.69439.9560.302br.net', +'ad.doubleclick.net.69456.9566.302br.net', +'ad.doubleclick.net.69457.9566.302br.net', +'ad.doubleclick.net.69458.9566.302br.net', +'ad.doubleclick.net.69483.9566.302br.net', +'ad.doubleclick.net.69484.9566.302br.net', +'ad.doubleclick.net.69485.9566.302br.net', +'ad.doubleclick.net.69537.9566.302br.net', +'ad.doubleclick.net.69538.9566.302br.net', +'ad.doubleclick.net.69539.9566.302br.net', +'ad.doubleclick.net.69541.9566.302br.net', +'ad.doubleclick.net.69542.9566.302br.net', +'ad.doubleclick.net.69543.9566.302br.net', +'ad.doubleclick.net.69544.9566.302br.net', +'ad.doubleclick.net.69545.9566.302br.net', +'ad.doubleclick.net.69561.9569.302br.net', +'ad.doubleclick.net.69562.9569.302br.net', +'ad.doubleclick.net.69563.9569.302br.net', +'ad.doubleclick.net.69564.9569.302br.net', +'ad.doubleclick.net.69565.9569.302br.net', +'ad.doubleclick.net.69566.9569.302br.net', +'ad.doubleclick.net.69567.9569.302br.net', +'ad.doubleclick.net.69568.9569.302br.net', +'ad.doubleclick.net.69569.9569.302br.net', +'ad.doubleclick.net.69570.9569.302br.net', +'ad.doubleclick.net.69571.9569.302br.net', +'ad.doubleclick.net.69572.9569.302br.net', +'ad.doubleclick.net.69573.9569.302br.net', +'ad.doubleclick.net.69574.9569.302br.net', +'ad.doubleclick.net.69575.9569.302br.net', +'ad.doubleclick.net.69651.9575.302br.net', +'ad.doubleclick.net.69652.9575.302br.net', +'ad.doubleclick.net.69653.9575.302br.net', +'ad.doubleclick.net.69654.9575.302br.net', +'ad.doubleclick.net.69655.9575.302br.net', +'ad.doubleclick.net.69656.9575.302br.net', +'ad.doubleclick.net.69657.9575.302br.net', +'ad.doubleclick.net.69658.9575.302br.net', +'ad.doubleclick.net.69659.9575.302br.net', +'ad.doubleclick.net.69660.9575.302br.net', +'ad.doubleclick.net.69661.9575.302br.net', +'ad.doubleclick.net.69662.9575.302br.net', +'ad.doubleclick.net.69663.9575.302br.net', +'ad.doubleclick.net.69664.9575.302br.net', +'ad.doubleclick.net.69665.9575.302br.net', +'ad.doubleclick.net.69709.9350.302br.net', +'ad.doubleclick.net.69712.9350.302br.net', +'ad.doubleclick.net.69715.9350.302br.net', +'ad.doubleclick.net.69718.9350.302br.net', +'ad.doubleclick.net.69721.9350.302br.net', +'ad.doubleclick.net.69724.9350.302br.net', +'ad.doubleclick.net.70240.9289.302br.net', +'ad.doubleclick.net.70241.9289.302br.net', +'ad.doubleclick.net.70243.9289.302br.net', +'ad.doubleclick.net.70244.9289.302br.net', +'ad.doubleclick.net.70245.9584.302br.net', +'ad.doubleclick.net.70246.9584.302br.net', +'ad.doubleclick.net.70248.9584.302br.net', +'ad.doubleclick.net.70249.9584.302br.net', +'ad.doubleclick.net.70250.9584.302br.net', +'ad.doubleclick.net.70251.9584.302br.net', +'ad.doubleclick.net.70252.9584.302br.net', +'ad.doubleclick.net.70253.9584.302br.net', +'ad.doubleclick.net.70254.9584.302br.net', +'ad.doubleclick.net.70256.9587.302br.net', +'ad.doubleclick.net.70259.9587.302br.net', +'ad.doubleclick.net.70260.9587.302br.net', +'ad.doubleclick.net.70262.9587.302br.net', +'ad.doubleclick.net.70263.9587.302br.net', +'ad.doubleclick.net.70271.9587.302br.net', +'ad.doubleclick.net.70277.9587.302br.net', +'ad.doubleclick.net.70294.9589.302br.net', +'ad.doubleclick.net.70295.9589.302br.net', +'ad.doubleclick.net.70296.9589.302br.net', +'ad.doubleclick.net.70297.9589.302br.net', +'ad.doubleclick.net.70298.9589.302br.net', +'ad.doubleclick.net.70299.9589.302br.net', +'ad.doubleclick.net.70300.9589.302br.net', +'ad.doubleclick.net.70301.9589.302br.net', +'ad.doubleclick.net.70302.9589.302br.net', +'ad.doubleclick.net.70304.9589.302br.net', +'ad.doubleclick.net.70307.9589.302br.net', +'ad.doubleclick.net.70310.9589.302br.net', +'ad.doubleclick.net.70344.9589.302br.net', +'ad.doubleclick.net.70347.9589.302br.net', +'ad.doubleclick.net.70350.9589.302br.net', +'ad.doubleclick.net.70353.9589.302br.net', +'ad.doubleclick.net.70356.9589.302br.net', +'ad.doubleclick.net.70359.9589.302br.net', +'ad.doubleclick.net.70383.9594.302br.net', +'ad.doubleclick.net.70386.9594.302br.net', +'ad.doubleclick.net.70389.9594.302br.net', +'ad.doubleclick.net.70392.9594.302br.net', +'ad.doubleclick.net.70410.9594.302br.net', +'ad.doubleclick.net.70413.9594.302br.net', +'ad.doubleclick.net.70427.9538.302br.net', +'ad.doubleclick.net.70581.9530.302br.net', +'ad.doubleclick.net.70584.9530.302br.net', +'ad.doubleclick.net.70587.9530.302br.net', +'ad.doubleclick.net.70755.9499.302br.net', +'ad.doubleclick.net.70964.9418.302br.net', +'ad.doubleclick.net.70965.9418.302br.net', +'ad.doubleclick.net.70966.9418.302br.net', +'ad.doubleclick.net.70971.9418.302br.net', +'ad.doubleclick.net.70977.9418.302br.net', +'ad.doubleclick.net.70992.9418.302br.net', +'ad.doubleclick.net.70993.9418.302br.net', +'ad.doubleclick.net.71013.9418.302br.net', +'ad.doubleclick.net.71014.9418.302br.net', +'ad.doubleclick.net.71016.9418.302br.net', +'ad.doubleclick.net.71017.9418.302br.net', +'ad.doubleclick.net.71031.9418.302br.net', +'ad.doubleclick.net.71032.9418.302br.net', +'ad.doubleclick.net.71040.9418.302br.net', +'ad.doubleclick.net.71041.9418.302br.net', +'ad.doubleclick.net.71088.9418.302br.net', +'ad.doubleclick.net.71089.9418.302br.net', +'ad.doubleclick.net.71103.9418.302br.net', +'ad.doubleclick.net.71104.9418.302br.net', +'ad.doubleclick.net.71112.9418.302br.net', +'ad.doubleclick.net.71113.9418.302br.net', +'ad.doubleclick.net.71118.9418.302br.net', +'ad.doubleclick.net.71119.9418.302br.net', +'ad.doubleclick.net.71130.9418.302br.net', +'ad.doubleclick.net.71151.9418.302br.net', +'ad.doubleclick.net.71152.9418.302br.net', +'ad.doubleclick.net.71154.9418.302br.net', +'ad.doubleclick.net.71157.9418.302br.net', +'ad.doubleclick.net.71158.9418.302br.net', +'ad.doubleclick.net.71160.9418.302br.net', +'ad.doubleclick.net.71175.9418.302br.net', +'ad.doubleclick.net.71184.9418.302br.net', +'ad.doubleclick.net.71185.9418.302br.net', +'ad.doubleclick.net.71187.9418.302br.net', +'ad.doubleclick.net.71188.9418.302br.net', +'ad.doubleclick.net.71190.9418.302br.net', +'ad.doubleclick.net.71199.9418.302br.net', +'ad.doubleclick.net.71205.9418.302br.net', +'ad.doubleclick.net.71214.9418.302br.net', +'ad.doubleclick.net.71215.9418.302br.net', +'ad.doubleclick.net.71217.9418.302br.net', +'ad.doubleclick.net.71218.9418.302br.net', +'ad.doubleclick.net.71221.9418.302br.net', +'ad.doubleclick.net.71222.9418.302br.net', +'ad.doubleclick.net.71224.9418.302br.net', +'ad.doubleclick.net.71593.9598.302br.net', +'ad.doubleclick.net.71595.9598.302br.net', +'ad.doubleclick.net.71597.9598.302br.net', +'ad.doubleclick.net.71599.9598.302br.net', +'ad.doubleclick.net.71601.9598.302br.net', +'ad.doubleclick.net.71603.9598.302br.net', +'ad.doubleclick.net.71605.9598.302br.net', +'ad.doubleclick.net.71606.9598.302br.net', +'ad.doubleclick.net.71607.9598.302br.net', +'ad.doubleclick.net.71619.9598.302br.net', +'ad.doubleclick.net.71621.9598.302br.net', +'ad.doubleclick.net.71623.9598.302br.net', +'ad.doubleclick.net.71627.9598.302br.net', +'ad.doubleclick.net.71629.9598.302br.net', +'ad.doubleclick.net.71631.9598.302br.net', +'ad.doubleclick.net.71633.9598.302br.net', +'ad.doubleclick.net.71637.9598.302br.net', +'ad.doubleclick.net.71639.9598.302br.net', +'ad.doubleclick.net.71641.9598.302br.net', +'ad.doubleclick.net.71642.9418.302br.net', +'ad.doubleclick.net.71643.9418.302br.net', +'ad.doubleclick.net.71644.9418.302br.net', +'ad.doubleclick.net.71645.9176.302br.net', +'ad.doubleclick.net.71646.9176.302br.net', +'ad.doubleclick.net.71647.9176.302br.net', +'ad.doubleclick.net.71654.9176.302br.net', +'ad.doubleclick.net.71655.9176.302br.net', +'ad.doubleclick.net.71656.9176.302br.net', +'ad.doubleclick.net.71657.9176.302br.net', +'ad.doubleclick.net.71658.9176.302br.net', +'ad.doubleclick.net.71659.9176.302br.net', +'ad.doubleclick.net.71660.9176.302br.net', +'ad.doubleclick.net.71661.9176.302br.net', +'ad.doubleclick.net.71662.9176.302br.net', +'ad.doubleclick.net.71669.9176.302br.net', +'ad.doubleclick.net.71670.9176.302br.net', +'ad.doubleclick.net.71671.9176.302br.net', +'ad.doubleclick.net.71678.9176.302br.net', +'ad.doubleclick.net.71679.9176.302br.net', +'ad.doubleclick.net.71680.9176.302br.net', +'ad.doubleclick.net.71684.9176.302br.net', +'ad.doubleclick.net.71685.9176.302br.net', +'ad.doubleclick.net.71693.9176.302br.net', +'ad.doubleclick.net.71694.9176.302br.net', +'ad.doubleclick.net.71705.9176.302br.net', +'ad.doubleclick.net.71706.9176.302br.net', +'ad.doubleclick.net.71707.9176.302br.net', +'ad.doubleclick.net.71708.9176.302br.net', +'ad.doubleclick.net.71709.9176.302br.net', +'ad.doubleclick.net.71710.9176.302br.net', +'ad.doubleclick.net.71795.9603.302br.net', +'ad.doubleclick.net.71796.9603.302br.net', +'ad.doubleclick.net.71798.9603.302br.net', +'ad.doubleclick.net.71799.9603.302br.net', +'ad.doubleclick.net.71800.9603.302br.net', +'ad.doubleclick.net.71801.9603.302br.net', +'ad.doubleclick.net.71802.9603.302br.net', +'ad.doubleclick.net.71803.9603.302br.net', +'ad.doubleclick.net.71804.9603.302br.net', +'ad.doubleclick.net.71805.9603.302br.net', +'ad.doubleclick.net.71806.9603.302br.net', +'ad.doubleclick.net.71807.9603.302br.net', +'ad.doubleclick.net.71808.9603.302br.net', +'ad.doubleclick.net.72205.9602.302br.net', +'ad.doubleclick.net.72206.9602.302br.net', +'ad.doubleclick.net.72207.9602.302br.net', +'ad.doubleclick.net.72208.9602.302br.net', +'ad.doubleclick.net.72209.9602.302br.net', +'ad.doubleclick.net.72210.9602.302br.net', +'ad.doubleclick.net.72211.9602.302br.net', +'ad.doubleclick.net.72212.9602.302br.net', +'ad.doubleclick.net.72213.9602.302br.net', +'ad.doubleclick.net.72219.9369.302br.net', +'ad.doubleclick.net.72222.9369.302br.net', +'ad.doubleclick.net.72225.9369.302br.net', +'ad.doubleclick.net.72227.9418.302br.net', +'ad.doubleclick.net.72228.9418.302br.net', +'ad.doubleclick.net.72229.9538.302br.net', +'ad.doubleclick.net.72285.9381.302br.net', +'ad.doubleclick.net.72286.9381.302br.net', +'ad.doubleclick.net.72287.9381.302br.net', +'ad.doubleclick.net.72313.9090.302br.net', +'ad.doubleclick.net.72314.9090.302br.net', +'ad.doubleclick.net.72316.9090.302br.net', +'ad.doubleclick.net.72317.9090.302br.net', +'ad.doubleclick.net.72319.9090.302br.net', +'ad.doubleclick.net.72320.9090.302br.net', +'ad.doubleclick.net.72323.9090.302br.net', +'ad.doubleclick.net.72326.9090.302br.net', +'ad.doubleclick.net.72332.9090.302br.net', +'ad.doubleclick.net.72448.9607.302br.net', +'ad.doubleclick.net.72451.9607.302br.net', +'ad.doubleclick.net.72454.9607.302br.net', +'ad.doubleclick.net.72457.9607.302br.net', +'ad.doubleclick.net.72459.9607.302br.net', +'ad.doubleclick.net.72460.9607.302br.net', +'ad.doubleclick.net.72462.9607.302br.net', +'ad.doubleclick.net.72463.9607.302br.net', +'ad.doubleclick.net.72465.9607.302br.net', +'ad.doubleclick.net.72466.9607.302br.net', +'ad.doubleclick.net.72467.9607.302br.net', +'ad.doubleclick.net.72468.9607.302br.net', +'ad.doubleclick.net.72469.9607.302br.net', +'ad.doubleclick.net.72470.9607.302br.net', +'ad.doubleclick.net.72471.9607.302br.net', +'ad.doubleclick.net.72472.9607.302br.net', +'ad.doubleclick.net.72473.9607.302br.net', +'ad.doubleclick.net.72474.9607.302br.net', +'ad.doubleclick.net.72475.9607.302br.net', +'ad.doubleclick.net.72476.9607.302br.net', +'ad.doubleclick.net.72477.9607.302br.net', +'ad.doubleclick.net.72478.9607.302br.net', +'ad.doubleclick.net.72479.9607.302br.net', +'ad.doubleclick.net.72480.9607.302br.net', +'ad.doubleclick.net.72481.9607.302br.net', +'ad.doubleclick.net.72482.9607.302br.net', +'ad.doubleclick.net.72483.9608.302br.net', +'ad.doubleclick.net.72484.9608.302br.net', +'ad.doubleclick.net.72485.9608.302br.net', +'ad.doubleclick.net.72486.9608.302br.net', +'ad.doubleclick.net.72487.9608.302br.net', +'ad.doubleclick.net.72488.9608.302br.net', +'ad.doubleclick.net.72490.9608.302br.net', +'ad.doubleclick.net.72491.9608.302br.net', +'ad.doubleclick.net.72493.9608.302br.net', +'ad.doubleclick.net.72494.9608.302br.net', +'ad.doubleclick.net.72495.9608.302br.net', +'ad.doubleclick.net.72496.9608.302br.net', +'ad.doubleclick.net.72497.9608.302br.net', +'ad.doubleclick.net.72498.9608.302br.net', +'ad.doubleclick.net.72499.9608.302br.net', +'ad.doubleclick.net.72500.9608.302br.net', +'ad.doubleclick.net.72502.9608.302br.net', +'ad.doubleclick.net.72503.9608.302br.net', +'ad.doubleclick.net.72505.9608.302br.net', +'ad.doubleclick.net.72508.9608.302br.net', +'ad.doubleclick.net.72510.9608.302br.net', +'ad.doubleclick.net.72511.9608.302br.net', +'ad.doubleclick.net.72512.9608.302br.net', +'ad.doubleclick.net.72514.9608.302br.net', +'ad.doubleclick.net.72515.9608.302br.net', +'ad.doubleclick.net.72570.9609.302br.net', +'ad.doubleclick.net.72571.9609.302br.net', +'ad.doubleclick.net.72572.9609.302br.net', +'ad.doubleclick.net.72573.9609.302br.net', +'ad.doubleclick.net.72574.9609.302br.net', +'ad.doubleclick.net.72575.9609.302br.net', +'ad.doubleclick.net.72576.9609.302br.net', +'ad.doubleclick.net.72577.9609.302br.net', +'ad.doubleclick.net.72578.9609.302br.net', +'ad.doubleclick.net.72586.9604.302br.net', +'ad.doubleclick.net.72587.9604.302br.net', +'ad.doubleclick.net.72611.9450.302br.net', +'ad.doubleclick.net.72613.9450.302br.net', +'ad.doubleclick.net.72615.9450.302br.net', +'ad.doubleclick.net.72617.9450.302br.net', +'ad.doubleclick.net.72619.9450.302br.net', +'ad.doubleclick.net.72621.9450.302br.net', +'ad.doubleclick.net.72622.9450.302br.net', +'ad.doubleclick.net.72623.9450.302br.net', +'ad.doubleclick.net.72624.9450.302br.net', +'ad.doubleclick.net.72625.9450.302br.net', +'ad.doubleclick.net.72627.9450.302br.net', +'ad.doubleclick.net.72629.9450.302br.net', +'ad.doubleclick.net.72630.9450.302br.net', +'ad.doubleclick.net.72631.9450.302br.net', +'ad.doubleclick.net.72632.9450.302br.net', +'ad.doubleclick.net.72633.9450.302br.net', +'ad.doubleclick.net.72634.9450.302br.net', +'ad.doubleclick.net.72635.9450.302br.net', +'ad.doubleclick.net.72642.9450.302br.net', +'ad.doubleclick.net.72643.9450.302br.net', +'ad.doubleclick.net.72644.9450.302br.net', +'ad.doubleclick.net.72645.9450.302br.net', +'ad.doubleclick.net.72646.9450.302br.net', +'ad.doubleclick.net.72647.9450.302br.net', +'ad.doubleclick.net.72652.9450.302br.net', +'ad.doubleclick.net.72653.9450.302br.net', +'ad.doubleclick.net.72654.9450.302br.net', +'ad.doubleclick.net.72655.9450.302br.net', +'ad.doubleclick.net.72658.9450.302br.net', +'ad.doubleclick.net.72659.9450.302br.net', +'ad.doubleclick.net.72672.9450.302br.net', +'ad.doubleclick.net.72673.9450.302br.net', +'ad.doubleclick.net.72674.9450.302br.net', +'ad.doubleclick.net.72675.9450.302br.net', +'ad.doubleclick.net.72676.9450.302br.net', +'ad.doubleclick.net.72677.9450.302br.net', +'ad.doubleclick.net.72698.9450.302br.net', +'ad.doubleclick.net.72699.9450.302br.net', +'ad.doubleclick.net.72700.9450.302br.net', +'ad.doubleclick.net.72701.9450.302br.net', +'ad.doubleclick.net.72703.9450.302br.net', +'ad.doubleclick.net.72705.9450.302br.net', +'ad.doubleclick.net.72706.9450.302br.net', +'ad.doubleclick.net.72707.9450.302br.net', +'ad.doubleclick.net.72708.9450.302br.net', +'ad.doubleclick.net.72709.9450.302br.net', +'ad.doubleclick.net.72713.9450.302br.net', +'ad.doubleclick.net.72714.9450.302br.net', +'ad.doubleclick.net.72715.9450.302br.net', +'ad.doubleclick.net.72717.9450.302br.net', +'ad.doubleclick.net.72718.9450.302br.net', +'ad.doubleclick.net.72719.9450.302br.net', +'ad.doubleclick.net.72721.9450.302br.net', +'ad.doubleclick.net.72722.9450.302br.net', +'ad.doubleclick.net.72723.9450.302br.net', +'ad.doubleclick.net.72733.9454.302br.net', +'ad.doubleclick.net.72735.9454.302br.net', +'ad.doubleclick.net.72737.9454.302br.net', +'ad.doubleclick.net.72739.9454.302br.net', +'ad.doubleclick.net.72741.9454.302br.net', +'ad.doubleclick.net.72742.9450.302br.net', +'ad.doubleclick.net.72743.9450.302br.net', +'ad.doubleclick.net.72744.9450.302br.net', +'ad.doubleclick.net.72745.9450.302br.net', +'ad.doubleclick.net.72746.9450.302br.net', +'ad.doubleclick.net.72747.9450.302br.net', +'ad.doubleclick.net.72748.9450.302br.net', +'ad.doubleclick.net.72749.9450.302br.net', +'ad.doubleclick.net.72751.9369.302br.net', +'ad.doubleclick.net.72754.9369.302br.net', +'ad.doubleclick.net.72757.9369.302br.net', +'ad.doubleclick.net.72760.9369.302br.net', +'ad.doubleclick.net.72763.9369.302br.net', +'ad.doubleclick.net.72766.9369.302br.net', +'ad.doubleclick.net.72769.9369.302br.net', +'ad.doubleclick.net.72772.9369.302br.net', +'ad.doubleclick.net.72775.9369.302br.net', +'ad.doubleclick.net.72778.9369.302br.net', +'ad.doubleclick.net.72781.9369.302br.net', +'ad.doubleclick.net.72784.9369.302br.net', +'ad.doubleclick.net.72835.9613.302br.net', +'ad.doubleclick.net.72836.9613.302br.net', +'ad.doubleclick.net.72838.9613.302br.net', +'ad.doubleclick.net.72839.9613.302br.net', +'ad.doubleclick.net.72841.9613.302br.net', +'ad.doubleclick.net.72842.9613.302br.net', +'ad.doubleclick.net.72844.9613.302br.net', +'ad.doubleclick.net.72845.9613.302br.net', +'ad.doubleclick.net.72847.9613.302br.net', +'ad.doubleclick.net.72848.9613.302br.net', +'ad.doubleclick.net.72850.9613.302br.net', +'ad.doubleclick.net.72851.9613.302br.net', +'ad.doubleclick.net.72893.9624.302br.net', +'ad.doubleclick.net.72967.9515.302br.net', +'ad.doubleclick.net.72968.9515.302br.net', +'ad.doubleclick.net.72969.9515.302br.net', +'ad.doubleclick.net.72970.9515.302br.net', +'ad.doubleclick.net.72994.9322.302br.net', +'ad.doubleclick.net.73000.9322.302br.net', +'ad.doubleclick.net.73003.9322.302br.net', +'ad.doubleclick.net.73101.9616.302br.net', +'ad.doubleclick.net.73104.9616.302br.net', +'ad.doubleclick.net.73108.9617.302br.net', +'ad.doubleclick.net.73109.9617.302br.net', +'ad.doubleclick.net.73110.9617.302br.net', +'ad.doubleclick.net.73114.9617.302br.net', +'ad.doubleclick.net.73136.9617.302br.net', +'ad.doubleclick.net.73138.9617.302br.net', +'ad.doubleclick.net.73139.9617.302br.net', +'ad.doubleclick.net.73141.9617.302br.net', +'ad.doubleclick.net.73142.9617.302br.net', +'ad.doubleclick.net.73143.9617.302br.net', +'ad.doubleclick.net.73147.9617.302br.net', +'ad.doubleclick.net.73148.9617.302br.net', +'ad.doubleclick.net.73149.9617.302br.net', +'ad.doubleclick.net.73150.9617.302br.net', +'ad.doubleclick.net.73153.9617.302br.net', +'ad.doubleclick.net.73154.9617.302br.net', +'ad.doubleclick.net.73155.9617.302br.net', +'ad.doubleclick.net.73156.9617.302br.net', +'ad.doubleclick.net.73157.9617.302br.net', +'ad.doubleclick.net.73158.9617.302br.net', +'ad.doubleclick.net.73166.9620.302br.net', +'ad.doubleclick.net.73167.9620.302br.net', +'ad.doubleclick.net.73168.9620.302br.net', +'ad.doubleclick.net.73169.9620.302br.net', +'ad.doubleclick.net.73170.9620.302br.net', +'ad.doubleclick.net.73171.9620.302br.net', +'ad.doubleclick.net.73172.9620.302br.net', +'ad.doubleclick.net.73173.9620.302br.net', +'ad.doubleclick.net.73174.9620.302br.net', +'ad.doubleclick.net.73175.9620.302br.net', +'ad.doubleclick.net.73176.9620.302br.net', +'ad.doubleclick.net.73177.9620.302br.net', +'ad.doubleclick.net.73178.9620.302br.net', +'ad.doubleclick.net.73179.9620.302br.net', +'ad.doubleclick.net.73180.9620.302br.net', +'ad.doubleclick.net.73181.9620.302br.net', +'ad.doubleclick.net.73182.9620.302br.net', +'ad.doubleclick.net.73183.9620.302br.net', +'ad.doubleclick.net.73187.9617.302br.net', +'ad.doubleclick.net.73188.9617.302br.net', +'ad.doubleclick.net.73189.9617.302br.net', +'ad.doubleclick.net.73190.9617.302br.net', +'ad.doubleclick.net.73191.9617.302br.net', +'ad.doubleclick.net.73192.9617.302br.net', +'ad.doubleclick.net.73194.9616.302br.net', +'ad.doubleclick.net.73197.9616.302br.net', +'ad.doubleclick.net.73203.9616.302br.net', +'ad.doubleclick.net.73209.9616.302br.net', +'ad.doubleclick.net.73273.9423.302br.net', +'ad.doubleclick.net.73276.9423.302br.net', +'ad.doubleclick.net.73279.9423.302br.net', +'ad.doubleclick.net.73282.9423.302br.net', +'ad.doubleclick.net.73285.9423.302br.net', +'ad.doubleclick.net.73288.9423.302br.net', +'ad.doubleclick.net.73291.9423.302br.net', +'ad.doubleclick.net.73294.9423.302br.net', +'ad.doubleclick.net.73297.9423.302br.net', +'ad.doubleclick.net.73300.9423.302br.net', +'ad.doubleclick.net.73303.9423.302br.net', +'ad.doubleclick.net.73304.9423.302br.net', +'ad.doubleclick.net.73306.9423.302br.net', +'ad.doubleclick.net.73309.9423.302br.net', +'ad.doubleclick.net.73312.9423.302br.net', +'ad.doubleclick.net.73318.9423.302br.net', +'ad.doubleclick.net.73321.9423.302br.net', +'ad.doubleclick.net.73324.9423.302br.net', +'ad.doubleclick.net.73327.9423.302br.net', +'ad.doubleclick.net.73330.9423.302br.net', +'ad.doubleclick.net.73344.9621.302br.net', +'ad.doubleclick.net.73345.9621.302br.net', +'ad.doubleclick.net.73347.9621.302br.net', +'ad.doubleclick.net.73348.9621.302br.net', +'ad.doubleclick.net.73350.9621.302br.net', +'ad.doubleclick.net.73351.9621.302br.net', +'ad.doubleclick.net.73353.9621.302br.net', +'ad.doubleclick.net.73354.9621.302br.net', +'ad.doubleclick.net.73356.9621.302br.net', +'ad.doubleclick.net.73357.9621.302br.net', +'ad.doubleclick.net.73359.9621.302br.net', +'ad.doubleclick.net.73360.9621.302br.net', +'ad.doubleclick.net.73362.9621.302br.net', +'ad.doubleclick.net.73363.9621.302br.net', +'ad.doubleclick.net.73365.9621.302br.net', +'ad.doubleclick.net.73366.9621.302br.net', +'ad.doubleclick.net.73368.9621.302br.net', +'ad.doubleclick.net.73369.9621.302br.net', +'ad.doubleclick.net.73370.9621.302br.net', +'ad.doubleclick.net.73372.9621.302br.net', +'ad.doubleclick.net.73373.9621.302br.net', +'ad.doubleclick.net.73375.9621.302br.net', +'ad.doubleclick.net.73376.9621.302br.net', +'ad.doubleclick.net.73378.9621.302br.net', +'ad.doubleclick.net.73379.9621.302br.net', +'ad.doubleclick.net.73381.9621.302br.net', +'ad.doubleclick.net.73382.9621.302br.net', +'ad.doubleclick.net.73384.9621.302br.net', +'ad.doubleclick.net.73385.9621.302br.net', +'ad.doubleclick.net.73387.9621.302br.net', +'ad.doubleclick.net.73388.9621.302br.net', +'ad.doubleclick.net.73390.9621.302br.net', +'ad.doubleclick.net.73391.9621.302br.net', +'ad.doubleclick.net.73393.9621.302br.net', +'ad.doubleclick.net.73394.9621.302br.net', +'ad.doubleclick.net.73396.9621.302br.net', +'ad.doubleclick.net.73397.9621.302br.net', +'ad.doubleclick.net.73399.9621.302br.net', +'ad.doubleclick.net.73400.9621.302br.net', +'ad.doubleclick.net.73402.9621.302br.net', +'ad.doubleclick.net.73403.9621.302br.net', +'ad.doubleclick.net.73405.9621.302br.net', +'ad.doubleclick.net.73406.9621.302br.net', +'ad.doubleclick.net.73408.9621.302br.net', +'ad.doubleclick.net.73409.9621.302br.net', +'ad.doubleclick.net.73411.9621.302br.net', +'ad.doubleclick.net.73412.9621.302br.net', +'ad.doubleclick.net.73414.9621.302br.net', +'ad.doubleclick.net.73415.9621.302br.net', +'ad.doubleclick.net.73417.9621.302br.net', +'ad.doubleclick.net.73418.9621.302br.net', +'ad.doubleclick.net.73420.9621.302br.net', +'ad.doubleclick.net.73421.9621.302br.net', +'ad.doubleclick.net.73423.9621.302br.net', +'ad.doubleclick.net.73424.9621.302br.net', +'ad.doubleclick.net.73426.9621.302br.net', +'ad.doubleclick.net.73427.9621.302br.net', +'ad.doubleclick.net.73429.9621.302br.net', +'ad.doubleclick.net.73430.9621.302br.net', +'ad.doubleclick.net.73432.9621.302br.net', +'ad.doubleclick.net.73434.9621.302br.net', +'ad.doubleclick.net.73437.9621.302br.net', +'ad.doubleclick.net.73440.9621.302br.net', +'ad.doubleclick.net.73443.9621.302br.net', +'ad.doubleclick.net.73446.9621.302br.net', +'ad.doubleclick.net.73449.9621.302br.net', +'ad.doubleclick.net.73497.9620.302br.net', +'ad.doubleclick.net.73498.9620.302br.net', +'ad.doubleclick.net.73500.9620.302br.net', +'ad.doubleclick.net.73501.9620.302br.net', +'ad.doubleclick.net.73503.9620.302br.net', +'ad.doubleclick.net.73504.9620.302br.net', +'ad.doubleclick.net.73505.9620.302br.net', +'ad.doubleclick.net.73506.9620.302br.net', +'ad.doubleclick.net.73507.9620.302br.net', +'ad.doubleclick.net.73508.9620.302br.net', +'ad.doubleclick.net.73509.9620.302br.net', +'ad.doubleclick.net.73510.9620.302br.net', +'ad.doubleclick.net.73511.9620.302br.net', +'ad.doubleclick.net.73512.9620.302br.net', +'ad.doubleclick.net.73513.9620.302br.net', +'ad.doubleclick.net.73515.9620.302br.net', +'ad.doubleclick.net.73517.9620.302br.net', +'ad.doubleclick.net.73518.9620.302br.net', +'ad.doubleclick.net.73519.9620.302br.net', +'ad.doubleclick.net.73520.9620.302br.net', +'ad.doubleclick.net.73521.9620.302br.net', +'ad.doubleclick.net.73522.9620.302br.net', +'ad.doubleclick.net.73523.9620.302br.net', +'ad.doubleclick.net.73524.9620.302br.net', +'ad.doubleclick.net.73525.9620.302br.net', +'ad.doubleclick.net.73526.9620.302br.net', +'ad.doubleclick.net.73527.9620.302br.net', +'ad.doubleclick.net.73528.9620.302br.net', +'ad.doubleclick.net.73529.9620.302br.net', +'ad.doubleclick.net.73530.9620.302br.net', +'ad.doubleclick.net.73531.9620.302br.net', +'ad.doubleclick.net.73533.9620.302br.net', +'ad.doubleclick.net.73534.9620.302br.net', +'ad.doubleclick.net.73535.9620.302br.net', +'ad.doubleclick.net.73536.9620.302br.net', +'ad.doubleclick.net.73537.9620.302br.net', +'ad.doubleclick.net.73538.9620.302br.net', +'ad.doubleclick.net.73539.9620.302br.net', +'ad.doubleclick.net.73540.9620.302br.net', +'ad.doubleclick.net.73541.9619.302br.net', +'ad.doubleclick.net.73542.9619.302br.net', +'ad.doubleclick.net.73543.9619.302br.net', +'ad.doubleclick.net.73544.9619.302br.net', +'ad.doubleclick.net.73545.9619.302br.net', +'ad.doubleclick.net.73546.9619.302br.net', +'ad.doubleclick.net.73547.9619.302br.net', +'ad.doubleclick.net.73549.9619.302br.net', +'ad.doubleclick.net.73550.9619.302br.net', +'ad.doubleclick.net.73551.9619.302br.net', +'ad.doubleclick.net.73552.9619.302br.net', +'ad.doubleclick.net.73553.9619.302br.net', +'ad.doubleclick.net.73555.9619.302br.net', +'ad.doubleclick.net.73556.9619.302br.net', +'ad.doubleclick.net.73558.9619.302br.net', +'ad.doubleclick.net.73559.9619.302br.net', +'ad.doubleclick.net.73560.9619.302br.net', +'ad.doubleclick.net.73561.9619.302br.net', +'ad.doubleclick.net.73562.9619.302br.net', +'ad.doubleclick.net.73563.9619.302br.net', +'ad.doubleclick.net.73564.9619.302br.net', +'ad.doubleclick.net.73565.9619.302br.net', +'ad.doubleclick.net.73566.9619.302br.net', +'ad.doubleclick.net.73567.9619.302br.net', +'ad.doubleclick.net.73568.9619.302br.net', +'ad.doubleclick.net.73570.9619.302br.net', +'ad.doubleclick.net.73571.9619.302br.net', +'ad.doubleclick.net.73573.9619.302br.net', +'ad.doubleclick.net.73574.9619.302br.net', +'ad.doubleclick.net.73576.9619.302br.net', +'ad.doubleclick.net.73578.9619.302br.net', +'ad.doubleclick.net.73579.9619.302br.net', +'ad.doubleclick.net.73581.9619.302br.net', +'ad.doubleclick.net.73582.9619.302br.net', +'ad.doubleclick.net.73584.9619.302br.net', +'ad.doubleclick.net.73585.9619.302br.net', +'ad.doubleclick.net.73587.9619.302br.net', +'ad.doubleclick.net.73588.9619.302br.net', +'ad.doubleclick.net.73590.9619.302br.net', +'ad.doubleclick.net.73591.9619.302br.net', +'ad.doubleclick.net.73593.9619.302br.net', +'ad.doubleclick.net.73594.9619.302br.net', +'ad.doubleclick.net.73596.9619.302br.net', +'ad.doubleclick.net.73597.9619.302br.net', +'ad.doubleclick.net.73599.9619.302br.net', +'ad.doubleclick.net.73600.9619.302br.net', +'ad.doubleclick.net.73602.9619.302br.net', +'ad.doubleclick.net.73603.9619.302br.net', +'ad.doubleclick.net.73622.9620.302br.net', +'ad.doubleclick.net.73624.9620.302br.net', +'ad.doubleclick.net.73625.9620.302br.net', +'ad.doubleclick.net.73627.9620.302br.net', +'ad.doubleclick.net.73628.9620.302br.net', +'ad.doubleclick.net.73630.9620.302br.net', +'ad.doubleclick.net.73631.9620.302br.net', +'ad.doubleclick.net.73633.9620.302br.net', +'ad.doubleclick.net.73634.9620.302br.net', +'ad.doubleclick.net.73636.9620.302br.net', +'ad.doubleclick.net.73637.9620.302br.net', +'ad.doubleclick.net.73639.9620.302br.net', +'ad.doubleclick.net.73640.9620.302br.net', +'ad.doubleclick.net.73642.9620.302br.net', +'ad.doubleclick.net.73643.9620.302br.net', +'ad.doubleclick.net.73645.9620.302br.net', +'ad.doubleclick.net.73646.9620.302br.net', +'ad.doubleclick.net.73648.9620.302br.net', +'ad.doubleclick.net.73649.9620.302br.net', +'ad.doubleclick.net.73651.9620.302br.net', +'ad.doubleclick.net.73652.9620.302br.net', +'ad.doubleclick.net.73654.9620.302br.net', +'ad.doubleclick.net.73655.9620.302br.net', +'ad.doubleclick.net.73657.9620.302br.net', +'ad.doubleclick.net.73658.9620.302br.net', +'ad.doubleclick.net.73660.9620.302br.net', +'ad.doubleclick.net.73661.9620.302br.net', +'ad.doubleclick.net.73663.9620.302br.net', +'ad.doubleclick.net.73664.9620.302br.net', +'ad.doubleclick.net.73666.9620.302br.net', +'ad.doubleclick.net.73667.9620.302br.net', +'ad.doubleclick.net.73669.9620.302br.net', +'ad.doubleclick.net.73670.9620.302br.net', +'ad.doubleclick.net.73672.9620.302br.net', +'ad.doubleclick.net.73673.9620.302br.net', +'ad.doubleclick.net.73675.9620.302br.net', +'ad.doubleclick.net.73676.9619.302br.net', +'ad.doubleclick.net.73678.9619.302br.net', +'ad.doubleclick.net.73679.9619.302br.net', +'ad.doubleclick.net.73681.9619.302br.net', +'ad.doubleclick.net.73682.9619.302br.net', +'ad.doubleclick.net.73684.9619.302br.net', +'ad.doubleclick.net.73685.9619.302br.net', +'ad.doubleclick.net.73687.9619.302br.net', +'ad.doubleclick.net.73688.9619.302br.net', +'ad.doubleclick.net.73690.9619.302br.net', +'ad.doubleclick.net.73691.9619.302br.net', +'ad.doubleclick.net.73693.9619.302br.net', +'ad.doubleclick.net.73694.9619.302br.net', +'ad.doubleclick.net.73696.9619.302br.net', +'ad.doubleclick.net.73697.9619.302br.net', +'ad.doubleclick.net.73699.9619.302br.net', +'ad.doubleclick.net.73700.9619.302br.net', +'ad.doubleclick.net.73702.9619.302br.net', +'ad.doubleclick.net.73703.9618.302br.net', +'ad.doubleclick.net.73705.9618.302br.net', +'ad.doubleclick.net.73706.9618.302br.net', +'ad.doubleclick.net.73708.9618.302br.net', +'ad.doubleclick.net.73709.9618.302br.net', +'ad.doubleclick.net.73711.9618.302br.net', +'ad.doubleclick.net.73712.9618.302br.net', +'ad.doubleclick.net.73714.9618.302br.net', +'ad.doubleclick.net.73715.9618.302br.net', +'ad.doubleclick.net.73717.9618.302br.net', +'ad.doubleclick.net.73718.9618.302br.net', +'ad.doubleclick.net.73720.9618.302br.net', +'ad.doubleclick.net.73722.9620.302br.net', +'ad.doubleclick.net.73725.9620.302br.net', +'ad.doubleclick.net.73728.9620.302br.net', +'ad.doubleclick.net.73731.9620.302br.net', +'ad.doubleclick.net.73734.9620.302br.net', +'ad.doubleclick.net.73737.9620.302br.net', +'ad.doubleclick.net.73740.9619.302br.net', +'ad.doubleclick.net.73743.9619.302br.net', +'ad.doubleclick.net.73746.9619.302br.net', +'ad.doubleclick.net.73749.9618.302br.net', +'ad.doubleclick.net.73752.9618.302br.net', +'ad.doubleclick.net.73755.9618.302br.net', +'ad.doubleclick.net.73892.9624.302br.net', +'ad.doubleclick.net.73893.9624.302br.net', +'ad.doubleclick.net.74579.9336.302br.net', +'ad.doubleclick.net.74580.9336.302br.net', +'ad.doubleclick.net.74582.9336.302br.net', +'ad.doubleclick.net.74583.9336.302br.net', +'ad.doubleclick.net.74585.9336.302br.net', +'ad.doubleclick.net.74586.9336.302br.net', +'ad.doubleclick.net.74588.9336.302br.net', +'ad.doubleclick.net.74591.9336.302br.net', +'ad.doubleclick.net.74594.9336.302br.net', +'ad.doubleclick.net.74597.9336.302br.net', +'ad.doubleclick.net.74598.9336.302br.net', +'ad.doubleclick.net.74600.9336.302br.net', +'ad.doubleclick.net.74601.9336.302br.net', +'ad.doubleclick.net.74603.9336.302br.net', +'ad.doubleclick.net.74606.9336.302br.net', +'ad.doubleclick.net.74609.9336.302br.net', +'ad.doubleclick.net.74612.9336.302br.net', +'ad.doubleclick.net.74613.9336.302br.net', +'ad.doubleclick.net.74615.9336.302br.net', +'ad.doubleclick.net.74618.9336.302br.net', +'ad.doubleclick.net.74619.9336.302br.net', +'ad.doubleclick.net.74621.9336.302br.net', +'ad.doubleclick.net.74624.9336.302br.net', +'ad.doubleclick.net.74627.9336.302br.net', +'ad.doubleclick.net.74630.9336.302br.net', +'ad.doubleclick.net.74631.9336.302br.net', +'ad.doubleclick.net.74633.9336.302br.net', +'ad.doubleclick.net.74636.9336.302br.net', +'ad.doubleclick.net.74639.9336.302br.net', +'ad.doubleclick.net.74642.9336.302br.net', +'ad.doubleclick.net.74645.9336.302br.net', +'ad.doubleclick.net.74648.9336.302br.net', +'ad.doubleclick.net.74651.9336.302br.net', +'ad.doubleclick.net.74654.9336.302br.net', +'ad.doubleclick.net.74655.9336.302br.net', +'ad.doubleclick.net.74657.9336.302br.net', +'ad.doubleclick.net.74658.9336.302br.net', +'ad.doubleclick.net.74660.9336.302br.net', +'ad.doubleclick.net.74661.9336.302br.net', +'ad.doubleclick.net.74663.9336.302br.net', +'ad.doubleclick.net.74664.9336.302br.net', +'ad.doubleclick.net.74666.9336.302br.net', +'ad.doubleclick.net.74667.9336.302br.net', +'ad.doubleclick.net.74669.9336.302br.net', +'ad.doubleclick.net.74670.9336.302br.net', +'ad.doubleclick.net.74672.9336.302br.net', +'ad.doubleclick.net.74673.9336.302br.net', +'ad.doubleclick.net.74675.9336.302br.net', +'ad.doubleclick.net.74676.9336.302br.net', +'ad.doubleclick.net.74678.9336.302br.net', +'ad.doubleclick.net.74679.9336.302br.net', +'ad.doubleclick.net.74681.9336.302br.net', +'ad.doubleclick.net.74682.9336.302br.net', +'ad.doubleclick.net.74684.9336.302br.net', +'ad.doubleclick.net.74685.9336.302br.net', +'ad.doubleclick.net.74687.9336.302br.net', +'ad.doubleclick.net.74688.9336.302br.net', +'ad.doubleclick.net.74690.9336.302br.net', +'ad.doubleclick.net.74693.9336.302br.net', +'ad.doubleclick.net.74694.9336.302br.net', +'ad.doubleclick.net.74696.9336.302br.net', +'ad.doubleclick.net.74697.9336.302br.net', +'ad.doubleclick.net.74699.9336.302br.net', +'ad.doubleclick.net.74700.9336.302br.net', +'ad.doubleclick.net.74702.9336.302br.net', +'ad.doubleclick.net.74703.9336.302br.net', +'ad.doubleclick.net.74705.9336.302br.net', +'ad.doubleclick.net.74708.9336.302br.net', +'ad.doubleclick.net.74711.9336.302br.net', +'ad.doubleclick.net.74714.9336.302br.net', +'ad.doubleclick.net.74717.9336.302br.net', +'ad.doubleclick.net.74720.9336.302br.net', +'ad.doubleclick.net.74726.9336.302br.net', +'ad.doubleclick.net.74729.9336.302br.net', +'ad.doubleclick.net.74732.9336.302br.net', +'ad.doubleclick.net.74735.9336.302br.net', +'ad.doubleclick.net.74738.9336.302br.net', +'ad.doubleclick.net.74741.9336.302br.net', +'ad.doubleclick.net.74744.9336.302br.net', +'ad.doubleclick.net.74747.9336.302br.net', +'ad.doubleclick.net.74750.9336.302br.net', +'ad.doubleclick.net.74753.9336.302br.net', +'ad.doubleclick.net.74754.9336.302br.net', +'ad.doubleclick.net.74756.9336.302br.net', +'ad.doubleclick.net.74757.9336.302br.net', +'ad.doubleclick.net.74759.9336.302br.net', +'ad.doubleclick.net.74762.9336.302br.net', +'ad.doubleclick.net.74763.9336.302br.net', +'ad.doubleclick.net.74765.9336.302br.net', +'ad.doubleclick.net.74766.9336.302br.net', +'ad.doubleclick.net.74768.9336.302br.net', +'ad.doubleclick.net.74771.9336.302br.net', +'ad.doubleclick.net.74772.9336.302br.net', +'ad.doubleclick.net.74774.9336.302br.net', +'ad.doubleclick.net.74777.9336.302br.net', +'ad.doubleclick.net.74780.9336.302br.net', +'ad.doubleclick.net.74783.9336.302br.net', +'ad.doubleclick.net.74786.9336.302br.net', +'ad.doubleclick.net.74787.9336.302br.net', +'ad.doubleclick.net.74789.9336.302br.net', +'ad.doubleclick.net.74790.9336.302br.net', +'ad.doubleclick.net.74792.9336.302br.net', +'ad.doubleclick.net.74795.9336.302br.net', +'ad.doubleclick.net.74796.9336.302br.net', +'ad.doubleclick.net.74798.9336.302br.net', +'ad.doubleclick.net.74799.9336.302br.net', +'ad.doubleclick.net.74800.9336.302br.net', +'ad.doubleclick.net.74801.9336.302br.net', +'ad.doubleclick.net.74802.9336.302br.net', +'ad.doubleclick.net.74804.9336.302br.net', +'ad.doubleclick.net.74805.9336.302br.net', +'ad.doubleclick.net.74807.9336.302br.net', +'ad.doubleclick.net.74808.9336.302br.net', +'ad.doubleclick.net.74810.9336.302br.net', +'ad.doubleclick.net.74811.9336.302br.net', +'ad.doubleclick.net.74813.9336.302br.net', +'ad.doubleclick.net.74816.9336.302br.net', +'ad.doubleclick.net.74817.9336.302br.net', +'ad.doubleclick.net.74819.9336.302br.net', +'ad.doubleclick.net.74820.9336.302br.net', +'ad.doubleclick.net.74822.9336.302br.net', +'ad.doubleclick.net.74823.9336.302br.net', +'ad.doubleclick.net.74825.9336.302br.net', +'ad.doubleclick.net.74826.9336.302br.net', +'ad.doubleclick.net.74828.9336.302br.net', +'ad.doubleclick.net.74829.9336.302br.net', +'ad.doubleclick.net.74831.9336.302br.net', +'ad.doubleclick.net.74834.9336.302br.net', +'ad.doubleclick.net.74835.9336.302br.net', +'ad.doubleclick.net.74837.9336.302br.net', +'ad.doubleclick.net.74838.9336.302br.net', +'ad.doubleclick.net.74843.9336.302br.net', +'ad.doubleclick.net.74846.9336.302br.net', +'ad.doubleclick.net.74849.9336.302br.net', +'ad.doubleclick.net.74852.9336.302br.net', +'ad.doubleclick.net.74853.9336.302br.net', +'ad.doubleclick.net.74855.9336.302br.net', +'ad.doubleclick.net.74856.9336.302br.net', +'ad.doubleclick.net.74858.9336.302br.net', +'ad.doubleclick.net.74861.9336.302br.net', +'ad.doubleclick.net.74862.9336.302br.net', +'ad.doubleclick.net.74864.9336.302br.net', +'ad.doubleclick.net.74867.9336.302br.net', +'ad.doubleclick.net.74870.9336.302br.net', +'ad.doubleclick.net.74873.9336.302br.net', +'ad.doubleclick.net.74876.9336.302br.net', +'ad.doubleclick.net.74877.9336.302br.net', +'ad.doubleclick.net.74879.9336.302br.net', +'ad.doubleclick.net.74882.9336.302br.net', +'ad.doubleclick.net.74885.9336.302br.net', +'ad.doubleclick.net.74897.9336.302br.net', +'ad.doubleclick.net.74898.9336.302br.net', +'ad.doubleclick.net.74901.9336.302br.net', +'ad.doubleclick.net.74903.9336.302br.net', +'ad.doubleclick.net.74912.9336.302br.net', +'ad.doubleclick.net.74915.9336.302br.net', +'ad.doubleclick.net.74918.9336.302br.net', +'ad.doubleclick.net.74919.9336.302br.net', +'ad.doubleclick.net.74921.9336.302br.net', +'ad.doubleclick.net.74922.9336.302br.net', +'ad.doubleclick.net.74924.9336.302br.net', +'ad.doubleclick.net.74925.9336.302br.net', +'ad.doubleclick.net.74927.9336.302br.net', +'ad.doubleclick.net.74928.9336.302br.net', +'ad.doubleclick.net.74930.9336.302br.net', +'ad.doubleclick.net.74936.9336.302br.net', +'ad.doubleclick.net.74939.9336.302br.net', +'ad.doubleclick.net.74940.9336.302br.net', +'ad.doubleclick.net.74942.9336.302br.net', +'ad.doubleclick.net.74943.9336.302br.net', +'ad.doubleclick.net.74945.9336.302br.net', +'ad.doubleclick.net.74948.9336.302br.net', +'ad.doubleclick.net.74951.9336.302br.net', +'ad.doubleclick.net.74953.9336.302br.net', +'ad.doubleclick.net.74954.9336.302br.net', +'ad.doubleclick.net.74955.9336.302br.net', +'ad.doubleclick.net.74957.9336.302br.net', +'ad.doubleclick.net.74958.9336.302br.net', +'ad.doubleclick.net.74959.9336.302br.net', +'ad.doubleclick.net.74960.9336.302br.net', +'ad.doubleclick.net.74961.9336.302br.net', +'ad.doubleclick.net.74963.9336.302br.net', +'ad.doubleclick.net.74964.9336.302br.net', +'ad.doubleclick.net.74966.9336.302br.net', +'ad.doubleclick.net.74969.9336.302br.net', +'ad.doubleclick.net.74970.9336.302br.net', +'ad.doubleclick.net.74972.9336.302br.net', +'ad.doubleclick.net.74973.9336.302br.net', +'ad.doubleclick.net.74975.9336.302br.net', +'ad.doubleclick.net.74976.9336.302br.net', +'ad.doubleclick.net.74978.9336.302br.net', +'ad.doubleclick.net.74981.9336.302br.net', +'ad.doubleclick.net.74982.9336.302br.net', +'ad.doubleclick.net.74984.9336.302br.net', +'ad.doubleclick.net.74987.9336.302br.net', +'ad.doubleclick.net.74988.9336.302br.net', +'ad.doubleclick.net.74990.9336.302br.net', +'ad.doubleclick.net.74993.9336.302br.net', +'ad.doubleclick.net.74996.9336.302br.net', +'ad.doubleclick.net.74997.9336.302br.net', +'ad.doubleclick.net.74998.9336.302br.net', +'ad.doubleclick.net.74999.9336.302br.net', +'ad.doubleclick.net.75000.9336.302br.net', +'ad.doubleclick.net.75002.9336.302br.net', +'ad.doubleclick.net.75003.9336.302br.net', +'ad.doubleclick.net.75005.9336.302br.net', +'ad.doubleclick.net.75006.9336.302br.net', +'ad.doubleclick.net.75007.9336.302br.net', +'ad.doubleclick.net.75008.9336.302br.net', +'ad.doubleclick.net.75009.9336.302br.net', +'ad.doubleclick.net.75011.9336.302br.net', +'ad.doubleclick.net.75012.9336.302br.net', +'ad.doubleclick.net.75014.9336.302br.net', +'ad.doubleclick.net.75015.9336.302br.net', +'ad.doubleclick.net.75017.9336.302br.net', +'ad.doubleclick.net.75018.9336.302br.net', +'ad.doubleclick.net.75020.9336.302br.net', +'ad.doubleclick.net.75021.9336.302br.net', +'ad.doubleclick.net.75022.9336.302br.net', +'ad.doubleclick.net.75023.9336.302br.net', +'ad.doubleclick.net.75024.9336.302br.net', +'ad.doubleclick.net.75026.9336.302br.net', +'ad.doubleclick.net.75027.9336.302br.net', +'ad.doubleclick.net.75028.9336.302br.net', +'ad.doubleclick.net.75029.9336.302br.net', +'ad.doubleclick.net.75030.9336.302br.net', +'ad.doubleclick.net.75035.9336.302br.net', +'ad.doubleclick.net.75038.9336.302br.net', +'ad.doubleclick.net.75039.9336.302br.net', +'ad.doubleclick.net.75040.9336.302br.net', +'ad.doubleclick.net.75041.9336.302br.net', +'ad.doubleclick.net.75042.9336.302br.net', +'ad.doubleclick.net.75043.9336.302br.net', +'ad.doubleclick.net.75044.9336.302br.net', +'ad.doubleclick.net.75045.9336.302br.net', +'ad.doubleclick.net.75047.9336.302br.net', +'ad.doubleclick.net.75050.9336.302br.net', +'ad.doubleclick.net.75053.9336.302br.net', +'ad.doubleclick.net.75054.9336.302br.net', +'ad.doubleclick.net.75056.9336.302br.net', +'ad.doubleclick.net.75071.9336.302br.net', +'ad.doubleclick.net.75074.9336.302br.net', +'ad.doubleclick.net.75077.9336.302br.net', +'ad.doubleclick.net.75080.9336.302br.net', +'ad.doubleclick.net.75083.9336.302br.net', +'ad.doubleclick.net.75084.9336.302br.net', +'ad.doubleclick.net.75086.9336.302br.net', +'ad.doubleclick.net.75089.9336.302br.net', +'ad.doubleclick.net.75090.9336.302br.net', +'ad.doubleclick.net.75092.9336.302br.net', +'ad.doubleclick.net.75093.9336.302br.net', +'ad.doubleclick.net.75095.9336.302br.net', +'ad.doubleclick.net.75107.9336.302br.net', +'ad.doubleclick.net.75110.9336.302br.net', +'ad.doubleclick.net.75113.9336.302br.net', +'ad.doubleclick.net.75114.9336.302br.net', +'ad.doubleclick.net.75116.9336.302br.net', +'ad.doubleclick.net.75117.9336.302br.net', +'ad.doubleclick.net.75119.9336.302br.net', +'ad.doubleclick.net.75120.9336.302br.net', +'ad.doubleclick.net.75122.9336.302br.net', +'ad.doubleclick.net.75123.9336.302br.net', +'ad.doubleclick.net.75125.9336.302br.net', +'ad.doubleclick.net.75128.9336.302br.net', +'ad.doubleclick.net.75129.9336.302br.net', +'ad.doubleclick.net.75131.9336.302br.net', +'ad.doubleclick.net.75132.9336.302br.net', +'ad.doubleclick.net.75134.9336.302br.net', +'ad.doubleclick.net.75135.9336.302br.net', +'ad.doubleclick.net.75136.9336.302br.net', +'ad.doubleclick.net.75137.9336.302br.net', +'ad.doubleclick.net.75138.9336.302br.net', +'ad.doubleclick.net.75139.9336.302br.net', +'ad.doubleclick.net.75140.9336.302br.net', +'ad.doubleclick.net.75141.9336.302br.net', +'ad.doubleclick.net.75142.9336.302br.net', +'ad.doubleclick.net.75143.9336.302br.net', +'ad.doubleclick.net.75144.9336.302br.net', +'ad.doubleclick.net.75145.9336.302br.net', +'ad.doubleclick.net.75146.9336.302br.net', +'ad.doubleclick.net.75147.9336.302br.net', +'ad.doubleclick.net.75148.9336.302br.net', +'ad.doubleclick.net.75149.9336.302br.net', +'ad.doubleclick.net.75150.9336.302br.net', +'ad.doubleclick.net.75151.9336.302br.net', +'ad.doubleclick.net.75152.9336.302br.net', +'ad.doubleclick.net.75153.9336.302br.net', +'ad.doubleclick.net.75155.9336.302br.net', +'ad.doubleclick.net.75158.9336.302br.net', +'ad.doubleclick.net.75161.9336.302br.net', +'ad.doubleclick.net.75162.9336.302br.net', +'ad.doubleclick.net.75164.9336.302br.net', +'ad.doubleclick.net.75165.9336.302br.net', +'ad.doubleclick.net.75167.9336.302br.net', +'ad.doubleclick.net.75168.9336.302br.net', +'ad.doubleclick.net.75170.9336.302br.net', +'ad.doubleclick.net.75171.9336.302br.net', +'ad.doubleclick.net.75173.9336.302br.net', +'ad.doubleclick.net.75176.9336.302br.net', +'ad.doubleclick.net.75177.9336.302br.net', +'ad.doubleclick.net.75179.9336.302br.net', +'ad.doubleclick.net.75180.9336.302br.net', +'ad.doubleclick.net.75182.9336.302br.net', +'ad.doubleclick.net.75185.9336.302br.net', +'ad.doubleclick.net.75186.9336.302br.net', +'ad.doubleclick.net.75188.9336.302br.net', +'ad.doubleclick.net.75189.9336.302br.net', +'ad.doubleclick.net.75191.9336.302br.net', +'ad.doubleclick.net.75192.9336.302br.net', +'ad.doubleclick.net.75194.9336.302br.net', +'ad.doubleclick.net.75195.9336.302br.net', +'ad.doubleclick.net.75197.9336.302br.net', +'ad.doubleclick.net.75198.9336.302br.net', +'ad.doubleclick.net.75200.9336.302br.net', +'ad.doubleclick.net.75201.9336.302br.net', +'ad.doubleclick.net.75203.9336.302br.net', +'ad.doubleclick.net.75204.9336.302br.net', +'ad.doubleclick.net.75206.9336.302br.net', +'ad.doubleclick.net.75207.9336.302br.net', +'ad.doubleclick.net.75209.9336.302br.net', +'ad.doubleclick.net.75210.9336.302br.net', +'ad.doubleclick.net.75212.9336.302br.net', +'ad.doubleclick.net.75213.9336.302br.net', +'ad.doubleclick.net.75218.9336.302br.net', +'ad.doubleclick.net.75219.9336.302br.net', +'ad.doubleclick.net.75221.9336.302br.net', +'ad.doubleclick.net.75222.9336.302br.net', +'ad.doubleclick.net.75224.9336.302br.net', +'ad.doubleclick.net.75225.9336.302br.net', +'ad.doubleclick.net.75227.9336.302br.net', +'ad.doubleclick.net.75228.9336.302br.net', +'ad.doubleclick.net.75230.9336.302br.net', +'ad.doubleclick.net.75233.9336.302br.net', +'ad.doubleclick.net.75236.9336.302br.net', +'ad.doubleclick.net.75242.9336.302br.net', +'ad.doubleclick.net.75245.9336.302br.net', +'ad.doubleclick.net.75246.9336.302br.net', +'ad.doubleclick.net.75248.9336.302br.net', +'ad.doubleclick.net.75249.9336.302br.net', +'ad.doubleclick.net.75251.9336.302br.net', +'ad.doubleclick.net.75252.9336.302br.net', +'ad.doubleclick.net.75254.9336.302br.net', +'ad.doubleclick.net.75255.9336.302br.net', +'ad.doubleclick.net.75257.9336.302br.net', +'ad.doubleclick.net.75258.9336.302br.net', +'ad.doubleclick.net.75260.9336.302br.net', +'ad.doubleclick.net.75261.9336.302br.net', +'ad.doubleclick.net.75288.9112.302br.net', +'ad.doubleclick.net.75289.9112.302br.net', +'ad.doubleclick.net.75291.9112.302br.net', +'ad.doubleclick.net.75294.9112.302br.net', +'ad.doubleclick.net.75295.9625.302br.net', +'ad.doubleclick.net.75296.9625.302br.net', +'ad.doubleclick.net.75297.9625.302br.net', +'ad.doubleclick.net.75298.9625.302br.net', +'ad.doubleclick.net.75299.9625.302br.net', +'ad.doubleclick.net.75300.9625.302br.net', +'ad.doubleclick.net.75301.9625.302br.net', +'ad.doubleclick.net.75302.9625.302br.net', +'ad.doubleclick.net.75303.9625.302br.net', +'ad.doubleclick.net.75305.9625.302br.net', +'ad.doubleclick.net.75306.9625.302br.net', +'ad.doubleclick.net.75307.9625.302br.net', +'ad.doubleclick.net.75308.9625.302br.net', +'ad.doubleclick.net.75309.9625.302br.net', +'ad.doubleclick.net.75310.9625.302br.net', +'ad.doubleclick.net.75311.9625.302br.net', +'ad.doubleclick.net.75312.9625.302br.net', +'ad.doubleclick.net.75368.9088.302br.net', +'ad.doubleclick.net.75369.9088.302br.net', +'ad.doubleclick.net.75370.9088.302br.net', +'ad.doubleclick.net.75371.9088.302br.net', +'ad.doubleclick.net.75372.9088.302br.net', +'ad.doubleclick.net.75373.9088.302br.net', +'ad.doubleclick.net.75374.9088.302br.net', +'ad.doubleclick.net.75375.9088.302br.net', +'ad.doubleclick.net.75376.9088.302br.net', +'ad.doubleclick.net.75396.9088.302br.net', +'ad.doubleclick.net.75397.9088.302br.net', +'ad.doubleclick.net.75399.9088.302br.net', +'ad.doubleclick.net.75400.9088.302br.net', +'ad.doubleclick.net.75402.9088.302br.net', +'ad.doubleclick.net.75403.9088.302br.net', +'ad.doubleclick.net.75405.9366.302br.net', +'ad.doubleclick.net.75408.9366.302br.net', +'ad.doubleclick.net.75411.9366.302br.net', +'ad.doubleclick.net.75414.9366.302br.net', +'ad.doubleclick.net.75417.9366.302br.net', +'ad.doubleclick.net.75420.9366.302br.net', +'ad.doubleclick.net.75423.9366.302br.net', +'ad.doubleclick.net.75426.9366.302br.net', +'ad.doubleclick.net.75429.9366.302br.net', +'ad.doubleclick.net.75435.9366.302br.net', +'ad.doubleclick.net.75438.9366.302br.net', +'ad.doubleclick.net.75441.9366.302br.net', +'ad.doubleclick.net.75447.9366.302br.net', +'ad.doubleclick.net.75450.9366.302br.net', +'ad.doubleclick.net.75453.9366.302br.net', +'ad.doubleclick.net.75456.9366.302br.net', +'ad.doubleclick.net.75459.9366.302br.net', +'ad.doubleclick.net.75462.9366.302br.net', +'ad.doubleclick.net.75483.9627.302br.net', +'ad.doubleclick.net.75486.9627.302br.net', +'ad.doubleclick.net.75489.9627.302br.net', +'ad.doubleclick.net.75511.9627.302br.net', +'ad.doubleclick.net.75514.9627.302br.net', +'ad.doubleclick.net.75517.9627.302br.net', +'ad.doubleclick.net.75520.9627.302br.net', +'ad.doubleclick.net.75523.9627.302br.net', +'ad.doubleclick.net.75526.9627.302br.net', +'ad.doubleclick.net.75528.9628.302br.net', +'ad.doubleclick.net.75529.9628.302br.net', +'ad.doubleclick.net.75531.9628.302br.net', +'ad.doubleclick.net.75532.9628.302br.net', +'ad.doubleclick.net.75534.9628.302br.net', +'ad.doubleclick.net.75535.9628.302br.net', +'ad.doubleclick.net.75537.9628.302br.net', +'ad.doubleclick.net.75540.9628.302br.net', +'ad.doubleclick.net.75541.9628.302br.net', +'ad.doubleclick.net.75543.9628.302br.net', +'ad.doubleclick.net.75544.9628.302br.net', +'ad.doubleclick.net.75546.9198.302br.net', +'ad.doubleclick.net.75547.9198.302br.net', +'ad.doubleclick.net.75548.9198.302br.net', +'ad.doubleclick.net.75549.9198.302br.net', +'ad.doubleclick.net.75550.9198.302br.net', +'ad.doubleclick.net.75564.9198.302br.net', +'ad.doubleclick.net.75565.9198.302br.net', +'ad.doubleclick.net.75570.9198.302br.net', +'ad.doubleclick.net.75573.9198.302br.net', +'ad.doubleclick.net.75574.9198.302br.net', +'ad.doubleclick.net.75600.9198.302br.net', +'ad.doubleclick.net.75618.9198.302br.net', +'ad.doubleclick.net.75619.9198.302br.net', +'ad.doubleclick.net.75621.9198.302br.net', +'ad.doubleclick.net.75627.9198.302br.net', +'ad.doubleclick.net.75648.9198.302br.net', +'ad.doubleclick.net.75651.9198.302br.net', +'ad.doubleclick.net.75652.9198.302br.net', +'ad.doubleclick.net.75666.9198.302br.net', +'ad.doubleclick.net.75714.9198.302br.net', +'ad.doubleclick.net.75723.9198.302br.net', +'ad.doubleclick.net.75724.9198.302br.net', +'ad.doubleclick.net.75822.9630.302br.net', +'ad.doubleclick.net.75823.9630.302br.net', +'ad.doubleclick.net.75828.9630.302br.net', +'ad.doubleclick.net.75829.9630.302br.net', +'ad.doubleclick.net.75831.9630.302br.net', +'ad.doubleclick.net.75832.9630.302br.net', +'ad.doubleclick.net.75833.9630.302br.net', +'ad.doubleclick.net.75834.9630.302br.net', +'ad.doubleclick.net.75835.9630.302br.net', +'ad.doubleclick.net.75839.9630.302br.net', +'ad.doubleclick.net.75840.9630.302br.net', +'ad.doubleclick.net.75841.9630.302br.net', +'ad.doubleclick.net.75846.9630.302br.net', +'ad.doubleclick.net.75847.9630.302br.net', +'ad.doubleclick.net.75852.9630.302br.net', +'ad.doubleclick.net.75853.9630.302br.net', +'ad.doubleclick.net.75855.9630.302br.net', +'ad.doubleclick.net.75856.9630.302br.net', +'ad.doubleclick.net.75861.9630.302br.net', +'ad.doubleclick.net.75862.9630.302br.net', +'ad.doubleclick.net.75864.9630.302br.net', +'ad.doubleclick.net.75865.9630.302br.net', +'ad.doubleclick.net.75872.9630.302br.net', +'ad.doubleclick.net.75873.9630.302br.net', +'ad.doubleclick.net.75874.9630.302br.net', +'ad.doubleclick.net.75876.9630.302br.net', +'ad.doubleclick.net.75877.9630.302br.net', +'ad.doubleclick.net.75879.9630.302br.net', +'ad.doubleclick.net.75880.9630.302br.net', +'ad.doubleclick.net.75882.9630.302br.net', +'ad.doubleclick.net.75883.9630.302br.net', +'ad.doubleclick.net.75888.9630.302br.net', +'ad.doubleclick.net.75889.9630.302br.net', +'ad.doubleclick.net.75891.9630.302br.net', +'ad.doubleclick.net.75892.9630.302br.net', +'ad.doubleclick.net.75897.9630.302br.net', +'ad.doubleclick.net.75898.9630.302br.net', +'ad.doubleclick.net.75903.9630.302br.net', +'ad.doubleclick.net.75904.9630.302br.net', +'ad.doubleclick.net.75914.9630.302br.net', +'ad.doubleclick.net.75915.9630.302br.net', +'ad.doubleclick.net.75916.9630.302br.net', +'ad.doubleclick.net.75924.9293.302br.net', +'ad.doubleclick.net.75925.9293.302br.net', +'ad.doubleclick.net.75926.9293.302br.net', +'ad.doubleclick.net.75927.9293.302br.net', +'ad.doubleclick.net.75928.9293.302br.net', +'ad.doubleclick.net.75935.9631.302br.net', +'ad.doubleclick.net.75936.9631.302br.net', +'ad.doubleclick.net.75937.9631.302br.net', +'ad.doubleclick.net.75938.9631.302br.net', +'ad.doubleclick.net.75939.9631.302br.net', +'ad.doubleclick.net.75940.9631.302br.net', +'ad.doubleclick.net.75943.9632.302br.net', +'ad.doubleclick.net.75945.9632.302br.net', +'ad.doubleclick.net.75948.9632.302br.net', +'ad.doubleclick.net.75951.9632.302br.net', +'ad.doubleclick.net.75954.9632.302br.net', +'ad.doubleclick.net.75955.9632.302br.net', +'ad.doubleclick.net.75957.9632.302br.net', +'ad.doubleclick.net.75961.9632.302br.net', +'ad.doubleclick.net.75963.9632.302br.net', +'ad.doubleclick.net.75964.9632.302br.net', +'ad.doubleclick.net.75966.9632.302br.net', +'ad.doubleclick.net.75970.9632.302br.net', +'ad.doubleclick.net.75972.9632.302br.net', +'ad.doubleclick.net.75976.9632.302br.net', +'ad.doubleclick.net.75978.9632.302br.net', +'ad.doubleclick.net.75981.9632.302br.net', +'ad.doubleclick.net.75984.9632.302br.net', +'ad.doubleclick.net.75985.9632.302br.net', +'ad.doubleclick.net.75987.9632.302br.net', +'ad.doubleclick.net.75988.9632.302br.net', +'ad.doubleclick.net.75990.9632.302br.net', +'ad.doubleclick.net.75994.9632.302br.net', +'ad.doubleclick.net.75996.9632.302br.net', +'ad.doubleclick.net.76024.9635.302br.net', +'ad.doubleclick.net.76025.9635.302br.net', +'ad.doubleclick.net.76026.9635.302br.net', +'ad.doubleclick.net.76027.9635.302br.net', +'ad.doubleclick.net.76028.9635.302br.net', +'ad.doubleclick.net.76029.9635.302br.net', +'ad.doubleclick.net.76030.9635.302br.net', +'ad.doubleclick.net.76031.9635.302br.net', +'ad.doubleclick.net.76032.9635.302br.net', +'ad.doubleclick.net.76094.9636.302br.net', +'ad.doubleclick.net.76096.9636.302br.net', +'ad.doubleclick.net.76100.9636.302br.net', +'ad.doubleclick.net.76104.9636.302br.net', +'ad.doubleclick.net.76108.9635.302br.net', +'ad.doubleclick.net.76109.9635.302br.net', +'ad.doubleclick.net.76110.9635.302br.net', +'ad.doubleclick.net.76111.9635.302br.net', +'ad.doubleclick.net.76112.9635.302br.net', +'ad.doubleclick.net.76117.9635.302br.net', +'ad.doubleclick.net.76118.9635.302br.net', +'ad.doubleclick.net.76119.9635.302br.net', +'ad.doubleclick.net.76120.9635.302br.net', +'ad.doubleclick.net.76121.9635.302br.net', +'ad.doubleclick.net.76122.9635.302br.net', +'ad.doubleclick.net.76123.9635.302br.net', +'ad.doubleclick.net.76124.9635.302br.net', +'ad.doubleclick.net.76125.9635.302br.net', +'ad.doubleclick.net.76126.9635.302br.net', +'ad.doubleclick.net.76127.9635.302br.net', +'ad.doubleclick.net.76137.9635.302br.net', +'ad.doubleclick.net.76138.9635.302br.net', +'ad.doubleclick.net.76139.9635.302br.net', +'ad.doubleclick.net.76140.9635.302br.net', +'ad.doubleclick.net.76141.9635.302br.net', +'ad.doubleclick.net.76142.9635.302br.net', +'ad.doubleclick.net.76149.9635.302br.net', +'ad.doubleclick.net.76150.9635.302br.net', +'ad.doubleclick.net.76151.9635.302br.net', +'ad.doubleclick.net.76153.9635.302br.net', +'ad.doubleclick.net.76154.9635.302br.net', +'ad.doubleclick.net.76156.9635.302br.net', +'ad.doubleclick.net.76157.9635.302br.net', +'ad.doubleclick.net.76159.9635.302br.net', +'ad.doubleclick.net.76160.9635.302br.net', +'ad.doubleclick.net.76162.9635.302br.net', +'ad.doubleclick.net.76163.9635.302br.net', +'ad.doubleclick.net.76164.9635.302br.net', +'ad.doubleclick.net.76165.9635.302br.net', +'ad.doubleclick.net.76166.9635.302br.net', +'ad.doubleclick.net.76167.9635.302br.net', +'ad.doubleclick.net.76168.9635.302br.net', +'ad.doubleclick.net.76169.9635.302br.net', +'ad.doubleclick.net.76170.9635.302br.net', +'ad.doubleclick.net.76171.9635.302br.net', +'ad.doubleclick.net.76172.9635.302br.net', +'ad.doubleclick.net.76174.9635.302br.net', +'ad.doubleclick.net.76175.9635.302br.net', +'ad.doubleclick.net.76177.9635.302br.net', +'ad.doubleclick.net.76178.9635.302br.net', +'ad.doubleclick.net.76180.9635.302br.net', +'ad.doubleclick.net.76181.9635.302br.net', +'ad.doubleclick.net.76189.9635.302br.net', +'ad.doubleclick.net.76190.9635.302br.net', +'ad.doubleclick.net.76192.9635.302br.net', +'ad.doubleclick.net.76193.9635.302br.net', +'ad.doubleclick.net.76443.9624.302br.net', +'ad.doubleclick.net.76444.9624.302br.net', +'ad.doubleclick.net.76445.9624.302br.net', +'ad.doubleclick.net.76447.9624.302br.net', +'ad.doubleclick.net.76449.9624.302br.net', +'ad.doubleclick.net.76450.9624.302br.net', +'ad.doubleclick.net.76455.9624.302br.net', +'ad.doubleclick.net.76457.9624.302br.net', +'ad.doubleclick.net.76459.9624.302br.net', +'ad.doubleclick.net.76460.9624.302br.net', +'ad.doubleclick.net.76461.9624.302br.net', +'ad.doubleclick.net.76462.9624.302br.net', +'ad.doubleclick.net.76463.9624.302br.net', +'ad.doubleclick.net.76464.9624.302br.net', +'ad.doubleclick.net.76465.9624.302br.net', +'ad.doubleclick.net.76466.9624.302br.net', +'ad.doubleclick.net.76467.9624.302br.net', +'ad.doubleclick.net.76468.9624.302br.net', +'ad.doubleclick.net.76469.9624.302br.net', +'ad.doubleclick.net.76470.9624.302br.net', +'ad.doubleclick.net.76499.9450.302br.net', +'ad.doubleclick.net.76500.9450.302br.net', +'ad.doubleclick.net.76501.9450.302br.net', +'ad.doubleclick.net.76502.9450.302br.net', +'ad.doubleclick.net.76529.9544.302br.net', +'ad.doubleclick.net.76530.9544.302br.net', +'ad.doubleclick.net.76531.9544.302br.net', +'ad.doubleclick.net.76532.9544.302br.net', +'ad.doubleclick.net.76533.9544.302br.net', +'ad.doubleclick.net.76534.9544.302br.net', +'ad.doubleclick.net.76535.9544.302br.net', +'ad.doubleclick.net.76536.9544.302br.net', +'ad.doubleclick.net.76537.9544.302br.net', +'ad.doubleclick.net.76538.9544.302br.net', +'ad.doubleclick.net.76539.9544.302br.net', +'ad.doubleclick.net.76540.9544.302br.net', +'ad.doubleclick.net.76541.9544.302br.net', +'ad.doubleclick.net.76542.9544.302br.net', +'ad.doubleclick.net.76543.9544.302br.net', +'ad.doubleclick.net.76544.9544.302br.net', +'ad.doubleclick.net.76545.9544.302br.net', +'ad.doubleclick.net.76546.9544.302br.net', +'ad.doubleclick.net.76547.9544.302br.net', +'ad.doubleclick.net.76548.9544.302br.net', +'ad.doubleclick.net.76549.9544.302br.net', +'ad.doubleclick.net.76568.9603.302br.net', +'ad.doubleclick.net.76569.9603.302br.net', +'ad.doubleclick.net.76572.9603.302br.net', +'ad.doubleclick.net.76574.9603.302br.net', +'ad.doubleclick.net.76575.9603.302br.net', +'ad.doubleclick.net.76576.9603.302br.net', +'ad.doubleclick.net.76577.9603.302br.net', +'ad.doubleclick.net.76578.9603.302br.net', +'ad.doubleclick.net.76579.9603.302br.net', +'ad.doubleclick.net.76581.9603.302br.net', +'ad.doubleclick.net.76598.9450.302br.net', +'ad.doubleclick.net.76599.9450.302br.net', +'ad.doubleclick.net.76600.9450.302br.net', +'ad.doubleclick.net.76601.9450.302br.net', +'ad.doubleclick.net.76604.9648.302br.net', +'ad.doubleclick.net.76605.9648.302br.net', +'ad.doubleclick.net.76606.9648.302br.net', +'ad.doubleclick.net.76607.9648.302br.net', +'ad.doubleclick.net.76608.9648.302br.net', +'ad.doubleclick.net.76609.9648.302br.net', +'ad.doubleclick.net.76610.9648.302br.net', +'ad.doubleclick.net.76611.9648.302br.net', +'ad.doubleclick.net.76612.9648.302br.net', +'ad.doubleclick.net.76622.9647.302br.net', +'ad.doubleclick.net.76623.9647.302br.net', +'ad.doubleclick.net.76624.9647.302br.net', +'ad.doubleclick.net.76625.9647.302br.net', +'ad.doubleclick.net.76626.9647.302br.net', +'ad.doubleclick.net.76627.9647.302br.net', +'ad.doubleclick.net.76635.9646.302br.net', +'ad.doubleclick.net.76636.9646.302br.net', +'ad.doubleclick.net.76638.9646.302br.net', +'ad.doubleclick.net.76639.9646.302br.net', +'ad.doubleclick.net.76641.9646.302br.net', +'ad.doubleclick.net.76652.9611.302br.net', +'ad.doubleclick.net.76654.9611.302br.net', +'ad.doubleclick.net.76655.9611.302br.net', +'ad.doubleclick.net.76657.9611.302br.net', +'ad.doubleclick.net.76658.9611.302br.net', +'ad.doubleclick.net.76660.9611.302br.net', +'ad.doubleclick.net.76661.9611.302br.net', +'ad.doubleclick.net.76663.9611.302br.net', +'ad.doubleclick.net.76664.9611.302br.net', +'ad.doubleclick.net.76666.9611.302br.net', +'ad.doubleclick.net.76667.9611.302br.net', +'ad.doubleclick.net.76669.9611.302br.net', +'ad.doubleclick.net.76670.9611.302br.net', +'ad.doubleclick.net.76672.9611.302br.net', +'ad.doubleclick.net.76673.9611.302br.net', +'ad.doubleclick.net.76675.9611.302br.net', +'ad.doubleclick.net.76676.9611.302br.net', +'ad.doubleclick.net.76678.9611.302br.net', +'ad.doubleclick.net.76679.9611.302br.net', +'ad.doubleclick.net.76681.9611.302br.net', +'ad.doubleclick.net.76682.9611.302br.net', +'ad.doubleclick.net.76684.9611.302br.net', +'ad.doubleclick.net.76685.9611.302br.net', +'ad.doubleclick.net.76687.9611.302br.net', +'ad.doubleclick.net.76688.9611.302br.net', +'ad.doubleclick.net.76690.9611.302br.net', +'ad.doubleclick.net.76691.9611.302br.net', +'ad.doubleclick.net.76693.9611.302br.net', +'ad.doubleclick.net.76694.9611.302br.net', +'ad.doubleclick.net.76696.9611.302br.net', +'ad.doubleclick.net.76697.9611.302br.net', +'ad.doubleclick.net.76699.9611.302br.net', +'ad.doubleclick.net.76700.9611.302br.net', +'ad.doubleclick.net.76702.9611.302br.net', +'ad.doubleclick.net.76703.9611.302br.net', +'ad.doubleclick.net.76705.9611.302br.net', +'ad.doubleclick.net.76706.9611.302br.net', +'ad.doubleclick.net.76708.9611.302br.net', +'ad.doubleclick.net.76709.9611.302br.net', +'ad.doubleclick.net.76711.9611.302br.net', +'ad.doubleclick.net.76712.9611.302br.net', +'ad.doubleclick.net.76714.9611.302br.net', +'ad.doubleclick.net.76715.9611.302br.net', +'ad.doubleclick.net.76717.9611.302br.net', +'ad.doubleclick.net.76718.9611.302br.net', +'ad.doubleclick.net.76720.9611.302br.net', +'ad.doubleclick.net.76721.9611.302br.net', +'ad.doubleclick.net.76723.9611.302br.net', +'ad.doubleclick.net.76724.9611.302br.net', +'ad.doubleclick.net.76726.9611.302br.net', +'ad.doubleclick.net.76727.9611.302br.net', +'ad.doubleclick.net.76729.9611.302br.net', +'ad.doubleclick.net.76730.9611.302br.net', +'ad.doubleclick.net.76732.9611.302br.net', +'ad.doubleclick.net.76735.9649.302br.net', +'ad.doubleclick.net.76738.9649.302br.net', +'ad.doubleclick.net.76741.9649.302br.net', +'ad.doubleclick.net.76744.9649.302br.net', +'ad.doubleclick.net.76747.9649.302br.net', +'ad.doubleclick.net.76750.9649.302br.net', +'ad.doubleclick.net.76753.9649.302br.net', +'ad.doubleclick.net.76756.9649.302br.net', +'ad.doubleclick.net.76759.9649.302br.net', +'ad.doubleclick.net.76762.9649.302br.net', +'ad.doubleclick.net.76763.9649.302br.net', +'ad.doubleclick.net.76765.9649.302br.net', +'ad.doubleclick.net.76768.9649.302br.net', +'ad.doubleclick.net.76771.9649.302br.net', +'ad.doubleclick.net.76774.9649.302br.net', +'ad.doubleclick.net.76775.9649.302br.net', +'ad.doubleclick.net.76777.9649.302br.net', +'ad.doubleclick.net.76780.9649.302br.net', +'ad.doubleclick.net.76783.9649.302br.net', +'ad.doubleclick.net.76786.9649.302br.net', +'ad.doubleclick.net.76789.9649.302br.net', +'ad.doubleclick.net.76860.9650.302br.net', +'ad.doubleclick.net.76863.9650.302br.net', +'ad.doubleclick.net.76866.9650.302br.net', +'ad.doubleclick.net.76869.9650.302br.net', +'ad.doubleclick.net.76872.9650.302br.net', +'ad.doubleclick.net.76873.9076.302br.net', +'ad.doubleclick.net.76875.9076.302br.net', +'ad.doubleclick.net.76876.9076.302br.net', +'ad.doubleclick.net.76878.9076.302br.net', +'ad.doubleclick.net.76880.9076.302br.net', +'ad.doubleclick.net.76883.9076.302br.net', +'ad.doubleclick.net.76886.9076.302br.net', +'ad.doubleclick.net.76889.9076.302br.net', +'ad.doubleclick.net.76890.9076.302br.net', +'ad.doubleclick.net.76892.9076.302br.net', +'ad.doubleclick.net.76893.9076.302br.net', +'ad.doubleclick.net.76895.9076.302br.net', +'ad.doubleclick.net.76896.9076.302br.net', +'ad.doubleclick.net.76898.9076.302br.net', +'ad.doubleclick.net.76902.9076.302br.net', +'ad.doubleclick.net.76905.9076.302br.net', +'ad.doubleclick.net.76908.9076.302br.net', +'ad.doubleclick.net.76911.9077.302br.net', +'ad.doubleclick.net.76914.9077.302br.net', +'ad.doubleclick.net.76915.9077.302br.net', +'ad.doubleclick.net.76917.9077.302br.net', +'ad.doubleclick.net.76918.9077.302br.net', +'ad.doubleclick.net.76920.9077.302br.net', +'ad.doubleclick.net.76922.9077.302br.net', +'ad.doubleclick.net.76925.9077.302br.net', +'ad.doubleclick.net.76926.9077.302br.net', +'ad.doubleclick.net.76932.9078.302br.net', +'ad.doubleclick.net.76935.9078.302br.net', +'ad.doubleclick.net.76939.9078.302br.net', +'ad.doubleclick.net.76941.9078.302br.net', +'ad.doubleclick.net.76943.9078.302br.net', +'ad.doubleclick.net.76946.9078.302br.net', +'ad.doubleclick.net.76949.9078.302br.net', +'ad.doubleclick.net.76953.9079.302br.net', +'ad.doubleclick.net.76956.9079.302br.net', +'ad.doubleclick.net.76959.9079.302br.net', +'ad.doubleclick.net.76961.9079.302br.net', +'ad.doubleclick.net.76964.9375.302br.net', +'ad.doubleclick.net.76967.9375.302br.net', +'ad.doubleclick.net.76970.9375.302br.net', +'ad.doubleclick.net.76974.9375.302br.net', +'ad.doubleclick.net.76977.9375.302br.net', +'ad.doubleclick.net.76980.9375.302br.net', +'ad.doubleclick.net.76983.9084.302br.net', +'ad.doubleclick.net.76986.9084.302br.net', +'ad.doubleclick.net.76989.9084.302br.net', +'ad.doubleclick.net.76991.9084.302br.net', +'ad.doubleclick.net.76995.9082.302br.net', +'ad.doubleclick.net.76998.9082.302br.net', +'ad.doubleclick.net.77001.9082.302br.net', +'ad.doubleclick.net.77002.9082.302br.net', +'ad.doubleclick.net.77004.9082.302br.net', +'ad.doubleclick.net.77005.9082.302br.net', +'ad.doubleclick.net.77007.9082.302br.net', +'ad.doubleclick.net.77010.9083.302br.net', +'ad.doubleclick.net.77013.9083.302br.net', +'ad.doubleclick.net.77016.9083.302br.net', +'ad.doubleclick.net.77019.9083.302br.net', +'ad.doubleclick.net.77022.9083.302br.net', +'ad.doubleclick.net.77025.9083.302br.net', +'ad.doubleclick.net.77046.9085.302br.net', +'ad.doubleclick.net.77049.9085.302br.net', +'ad.doubleclick.net.77052.9085.302br.net', +'ad.doubleclick.net.77053.9085.302br.net', +'ad.doubleclick.net.77054.9085.302br.net', +'ad.doubleclick.net.77055.9085.302br.net', +'ad.doubleclick.net.77057.9085.302br.net', +'ad.doubleclick.net.77058.9085.302br.net', +'ad.doubleclick.net.77060.9085.302br.net', +'ad.doubleclick.net.77061.9085.302br.net', +'ad.doubleclick.net.77063.9085.302br.net', +'ad.doubleclick.net.77064.9085.302br.net', +'ad.doubleclick.net.77066.9085.302br.net', +'ad.doubleclick.net.77067.9085.302br.net', +'ad.doubleclick.net.77070.9087.302br.net', +'ad.doubleclick.net.77073.9087.302br.net', +'ad.doubleclick.net.77076.9087.302br.net', +'ad.doubleclick.net.77077.9087.302br.net', +'ad.doubleclick.net.77079.9087.302br.net', +'ad.doubleclick.net.77082.9087.302br.net', +'ad.doubleclick.net.77148.9450.302br.net', +'ad.doubleclick.net.77150.9450.302br.net', +'ad.doubleclick.net.77152.9450.302br.net', +'ad.doubleclick.net.77154.9450.302br.net', +'ad.doubleclick.net.77196.9279.302br.net', +'ad.doubleclick.net.77197.9279.302br.net', +'ad.doubleclick.net.77198.9279.302br.net', +'ad.doubleclick.net.77199.9279.302br.net', +'ad.doubleclick.net.77200.9279.302br.net', +'ad.doubleclick.net.77201.9279.302br.net', +'ad.doubleclick.net.77202.9279.302br.net', +'ad.doubleclick.net.77203.9279.302br.net', +'ad.doubleclick.net.77236.9584.302br.net', +'ad.doubleclick.net.77237.9584.302br.net', +'ad.doubleclick.net.77238.9584.302br.net', +'ad.doubleclick.net.77239.9584.302br.net', +'ad.doubleclick.net.77240.9584.302br.net', +'ad.doubleclick.net.77241.9584.302br.net', +'ad.doubleclick.net.77242.9584.302br.net', +'ad.doubleclick.net.77243.9584.302br.net', +'ad.doubleclick.net.77244.9584.302br.net', +'ad.doubleclick.net.77245.9584.302br.net', +'ad.doubleclick.net.77246.9584.302br.net', +'ad.doubleclick.net.77248.9584.302br.net', +'ad.doubleclick.net.77379.9654.302br.net', +'ad.doubleclick.net.77382.9654.302br.net', +'ad.doubleclick.net.77385.9654.302br.net', +'ad.doubleclick.net.77403.9654.302br.net', +'ad.doubleclick.net.77404.9654.302br.net', +'ad.doubleclick.net.77409.9654.302br.net', +'ad.doubleclick.net.77412.9654.302br.net', +'ad.doubleclick.net.77443.9658.302br.net', +'ad.doubleclick.net.77446.9658.302br.net', +'ad.doubleclick.net.77449.9658.302br.net', +'ad.doubleclick.net.77474.9632.302br.net', +'ad.doubleclick.net.77475.9632.302br.net', +'ad.doubleclick.net.77477.9632.302br.net', +'ad.doubleclick.net.77499.9632.302br.net', +'ad.doubleclick.net.77501.9632.302br.net', +'ad.doubleclick.net.77504.9632.302br.net', +'ad.doubleclick.net.77519.9632.302br.net', +'ad.doubleclick.net.77638.9663.302br.net', +'ad.doubleclick.net.77639.9663.302br.net', +'ad.doubleclick.net.77640.9663.302br.net', +'ad.doubleclick.net.77641.9663.302br.net', +'ad.doubleclick.net.77642.9663.302br.net', +'ad.doubleclick.net.77643.9663.302br.net', +'ad.doubleclick.net.77644.9663.302br.net', +'ad.doubleclick.net.77645.9663.302br.net', +'ad.doubleclick.net.77646.9663.302br.net', +'ad.doubleclick.net.77647.9663.302br.net', +'ad.doubleclick.net.77648.9663.302br.net', +'ad.doubleclick.net.77649.9663.302br.net', +'ad.doubleclick.net.77650.9663.302br.net', +'ad.doubleclick.net.77651.9663.302br.net', +'ad.doubleclick.net.77652.9663.302br.net', +'ad.doubleclick.net.77653.9663.302br.net', +'ad.doubleclick.net.77654.9663.302br.net', +'ad.doubleclick.net.77655.9663.302br.net', +'ad.doubleclick.net.77661.9515.302br.net', +'ad.doubleclick.net.77662.9515.302br.net', +'ad.doubleclick.net.77663.9515.302br.net', +'ad.doubleclick.net.77664.9515.302br.net', +'ad.doubleclick.net.77665.9515.302br.net', +'ad.doubleclick.net.77666.9503.302br.net', +'ad.doubleclick.net.77667.9503.302br.net', +'ad.doubleclick.net.77668.9503.302br.net', +'ad.doubleclick.net.77669.9503.302br.net', +'ad.doubleclick.net.77670.9503.302br.net', +'ad.doubleclick.net.77671.9503.302br.net', +'ad.doubleclick.net.77673.9503.302br.net', +'ad.doubleclick.net.77676.9503.302br.net', +'ad.doubleclick.net.77679.9503.302br.net', +'ad.doubleclick.net.77680.9503.302br.net', +'ad.doubleclick.net.77682.9503.302br.net', +'ad.doubleclick.net.77683.9503.302br.net', +'ad.doubleclick.net.77685.9503.302br.net', +'ad.doubleclick.net.77686.9503.302br.net', +'ad.doubleclick.net.77688.9503.302br.net', +'ad.doubleclick.net.77689.9503.302br.net', +'ad.doubleclick.net.77691.9503.302br.net', +'ad.doubleclick.net.77693.9503.302br.net', +'ad.doubleclick.net.77694.9503.302br.net', +'ad.doubleclick.net.77695.9503.302br.net', +'ad.doubleclick.net.77697.9503.302br.net', +'ad.doubleclick.net.77700.9503.302br.net', +'ad.doubleclick.net.77701.9503.302br.net', +'ad.doubleclick.net.77703.9503.302br.net', +'ad.doubleclick.net.77704.9503.302br.net', +'ad.doubleclick.net.77706.9503.302br.net', +'ad.doubleclick.net.77707.9503.302br.net', +'ad.doubleclick.net.77709.9503.302br.net', +'ad.doubleclick.net.77710.9503.302br.net', +'ad.doubleclick.net.77712.9503.302br.net', +'ad.doubleclick.net.77713.9503.302br.net', +'ad.doubleclick.net.77714.9501.302br.net', +'ad.doubleclick.net.77715.9501.302br.net', +'ad.doubleclick.net.77716.9501.302br.net', +'ad.doubleclick.net.77718.9501.302br.net', +'ad.doubleclick.net.77719.9501.302br.net', +'ad.doubleclick.net.77721.9501.302br.net', +'ad.doubleclick.net.77722.9501.302br.net', +'ad.doubleclick.net.77724.9501.302br.net', +'ad.doubleclick.net.77725.9501.302br.net', +'ad.doubleclick.net.77726.9501.302br.net', +'ad.doubleclick.net.77727.9501.302br.net', +'ad.doubleclick.net.77728.9501.302br.net', +'ad.doubleclick.net.77730.9501.302br.net', +'ad.doubleclick.net.77731.9501.302br.net', +'ad.doubleclick.net.77733.9501.302br.net', +'ad.doubleclick.net.77734.9501.302br.net', +'ad.doubleclick.net.77736.9501.302br.net', +'ad.doubleclick.net.77737.9501.302br.net', +'ad.doubleclick.net.77738.9501.302br.net', +'ad.doubleclick.net.77739.9501.302br.net', +'ad.doubleclick.net.77740.9501.302br.net', +'ad.doubleclick.net.77742.9501.302br.net', +'ad.doubleclick.net.77745.9501.302br.net', +'ad.doubleclick.net.77746.9501.302br.net', +'ad.doubleclick.net.77747.9501.302br.net', +'ad.doubleclick.net.77748.9501.302br.net', +'ad.doubleclick.net.77749.9501.302br.net', +'ad.doubleclick.net.77751.9501.302br.net', +'ad.doubleclick.net.77752.9501.302br.net', +'ad.doubleclick.net.77754.9501.302br.net', +'ad.doubleclick.net.77755.9501.302br.net', +'ad.doubleclick.net.77757.9501.302br.net', +'ad.doubleclick.net.77760.9501.302br.net', +'ad.doubleclick.net.77813.9665.302br.net', +'ad.doubleclick.net.77814.9665.302br.net', +'ad.doubleclick.net.77815.9665.302br.net', +'ad.doubleclick.net.77816.9665.302br.net', +'ad.doubleclick.net.77817.9665.302br.net', +'ad.doubleclick.net.77818.9665.302br.net', +'ad.doubleclick.net.77819.9665.302br.net', +'ad.doubleclick.net.77820.9665.302br.net', +'ad.doubleclick.net.77821.9665.302br.net', +'ad.doubleclick.net.77859.9666.302br.net', +'ad.doubleclick.net.77862.9666.302br.net', +'ad.doubleclick.net.77865.9666.302br.net', +'ad.doubleclick.net.77867.9666.302br.net', +'ad.doubleclick.net.77870.9666.302br.net', +'ad.doubleclick.net.77873.9666.302br.net', +'ad.doubleclick.net.78093.9617.302br.net', +'ad.doubleclick.net.78094.9617.302br.net', +'ad.doubleclick.net.78095.9668.302br.net', +'ad.doubleclick.net.78108.9667.302br.net', +'ad.doubleclick.net.78109.9667.302br.net', +'ad.doubleclick.net.78114.9667.302br.net', +'ad.doubleclick.net.78115.9667.302br.net', +'ad.doubleclick.net.78117.9667.302br.net', +'ad.doubleclick.net.78184.9450.302br.net', +'ad.doubleclick.net.78185.9450.302br.net', +'ad.doubleclick.net.78186.9450.302br.net', +'ad.doubleclick.net.78187.9450.302br.net', +'ad.doubleclick.net.78188.9450.302br.net', +'ad.doubleclick.net.78189.9450.302br.net', +'ad.doubleclick.net.78190.9450.302br.net', +'ad.doubleclick.net.78191.9450.302br.net', +'ad.doubleclick.net.78192.9450.302br.net', +'ad.doubleclick.net.78193.9450.302br.net', +'ad.doubleclick.net.78224.9450.302br.net', +'ad.doubleclick.net.78225.9450.302br.net', +'ad.doubleclick.net.78226.9450.302br.net', +'ad.doubleclick.net.78227.9450.302br.net', +'ad.doubleclick.net.78228.9454.302br.net', +'ad.doubleclick.net.78229.9454.302br.net', +'ad.doubleclick.net.78230.9454.302br.net', +'ad.doubleclick.net.78231.9454.302br.net', +'ad.doubleclick.net.78232.9454.302br.net', +'ad.doubleclick.net.78233.9454.302br.net', +'ad.doubleclick.net.78234.9454.302br.net', +'ad.doubleclick.net.78235.9454.302br.net', +'ad.doubleclick.net.78237.9454.302br.net', +'ad.doubleclick.net.78239.9454.302br.net', +'ad.doubleclick.net.78240.9454.302br.net', +'ad.doubleclick.net.78241.9454.302br.net', +'ad.doubleclick.net.78242.9454.302br.net', +'ad.doubleclick.net.78243.9454.302br.net', +'ad.doubleclick.net.78244.9671.302br.net', +'ad.doubleclick.net.78245.9671.302br.net', +'ad.doubleclick.net.78246.9671.302br.net', +'ad.doubleclick.net.78247.9671.302br.net', +'ad.doubleclick.net.78248.9671.302br.net', +'ad.doubleclick.net.78249.9671.302br.net', +'ad.doubleclick.net.78250.9671.302br.net', +'ad.doubleclick.net.78251.9671.302br.net', +'ad.doubleclick.net.78256.9671.302br.net', +'ad.doubleclick.net.78257.9671.302br.net', +'ad.doubleclick.net.78260.9671.302br.net', +'ad.doubleclick.net.78261.9671.302br.net', +'ad.doubleclick.net.78312.9671.302br.net', +'ad.doubleclick.net.78313.9671.302br.net', +'ad.doubleclick.net.78315.9671.302br.net', +'ad.doubleclick.net.78317.9671.302br.net', +'ad.doubleclick.net.78319.9671.302br.net', +'ad.doubleclick.net.78321.9671.302br.net', +'ad.doubleclick.net.78322.9671.302br.net', +'ad.doubleclick.net.78323.9671.302br.net', +'ad.doubleclick.net.78324.9671.302br.net', +'ad.doubleclick.net.78325.9671.302br.net', +'ad.doubleclick.net.78327.9671.302br.net', +'ad.doubleclick.net.78328.9671.302br.net', +'ad.doubleclick.net.78329.9671.302br.net', +'ad.doubleclick.net.78330.9671.302br.net', +'ad.doubleclick.net.78331.9671.302br.net', +'ad.doubleclick.net.78332.9671.302br.net', +'ad.doubleclick.net.78333.9671.302br.net', +'ad.doubleclick.net.78334.9671.302br.net', +'ad.doubleclick.net.78335.9671.302br.net', +'ad.doubleclick.net.78336.9671.302br.net', +'ad.doubleclick.net.78337.9671.302br.net', +'ad.doubleclick.net.78338.9671.302br.net', +'ad.doubleclick.net.78339.9671.302br.net', +'ad.doubleclick.net.78340.9671.302br.net', +'ad.doubleclick.net.78341.9671.302br.net', +'ad.doubleclick.net.78342.9671.302br.net', +'ad.doubleclick.net.78343.9671.302br.net', +'ad.doubleclick.net.78344.9671.302br.net', +'ad.doubleclick.net.78345.9671.302br.net', +'ad.doubleclick.net.78346.9671.302br.net', +'ad.doubleclick.net.78347.9671.302br.net', +'ad.doubleclick.net.78348.9671.302br.net', +'ad.doubleclick.net.78349.9671.302br.net', +'ad.doubleclick.net.78350.9671.302br.net', +'ad.doubleclick.net.78351.9671.302br.net', +'ad.doubleclick.net.78354.9671.302br.net', +'ad.doubleclick.net.78355.9671.302br.net', +'ad.doubleclick.net.78356.9671.302br.net', +'ad.doubleclick.net.78357.9671.302br.net', +'ad.doubleclick.net.78358.9671.302br.net', +'ad.doubleclick.net.78359.9671.302br.net', +'ad.doubleclick.net.78360.9671.302br.net', +'ad.doubleclick.net.78361.9671.302br.net', +'ad.doubleclick.net.78362.9671.302br.net', +'ad.doubleclick.net.78363.9671.302br.net', +'ad.doubleclick.net.78430.9671.302br.net', +'ad.doubleclick.net.78431.9671.302br.net', +'ad.doubleclick.net.78434.9671.302br.net', +'ad.doubleclick.net.78435.9671.302br.net', +'ad.doubleclick.net.78436.9671.302br.net', +'ad.doubleclick.net.78437.9671.302br.net', +'ad.doubleclick.net.78438.9671.302br.net', +'ad.doubleclick.net.78439.9671.302br.net', +'ad.doubleclick.net.78446.9671.302br.net', +'ad.doubleclick.net.78447.9671.302br.net', +'ad.doubleclick.net.78450.9671.302br.net', +'ad.doubleclick.net.78451.9671.302br.net', +'ad.doubleclick.net.78454.9671.302br.net', +'ad.doubleclick.net.78455.9671.302br.net', +'ad.doubleclick.net.78456.9671.302br.net', +'ad.doubleclick.net.78457.9671.302br.net', +'ad.doubleclick.net.78458.9671.302br.net', +'ad.doubleclick.net.78459.9671.302br.net', +'ad.doubleclick.net.78506.9671.302br.net', +'ad.doubleclick.net.78507.9671.302br.net', +'ad.doubleclick.net.78509.9671.302br.net', +'ad.doubleclick.net.78510.9671.302br.net', +'ad.doubleclick.net.78511.9671.302br.net', +'ad.doubleclick.net.78516.9671.302br.net', +'ad.doubleclick.net.78517.9671.302br.net', +'ad.doubleclick.net.78518.9671.302br.net', +'ad.doubleclick.net.78519.9671.302br.net', +'ad.doubleclick.net.78522.9671.302br.net', +'ad.doubleclick.net.78523.9671.302br.net', +'ad.doubleclick.net.78524.9671.302br.net', +'ad.doubleclick.net.78525.9671.302br.net', +'ad.doubleclick.net.78528.9671.302br.net', +'ad.doubleclick.net.78529.9671.302br.net', +'ad.doubleclick.net.78530.9671.302br.net', +'ad.doubleclick.net.78531.9671.302br.net', +'ad.doubleclick.net.78532.9671.302br.net', +'ad.doubleclick.net.78533.9671.302br.net', +'ad.doubleclick.net.78534.9671.302br.net', +'ad.doubleclick.net.78535.9671.302br.net', +'ad.doubleclick.net.78536.9671.302br.net', +'ad.doubleclick.net.78537.9671.302br.net', +'ad.doubleclick.net.78539.9671.302br.net', +'ad.doubleclick.net.78540.9671.302br.net', +'ad.doubleclick.net.78541.9671.302br.net', +'ad.doubleclick.net.78542.9671.302br.net', +'ad.doubleclick.net.78543.9671.302br.net', +'ad.doubleclick.net.78544.9671.302br.net', +'ad.doubleclick.net.78545.9671.302br.net', +'ad.doubleclick.net.78547.9671.302br.net', +'ad.doubleclick.net.78548.9671.302br.net', +'ad.doubleclick.net.78549.9671.302br.net', +'ad.doubleclick.net.78550.9671.302br.net', +'ad.doubleclick.net.78551.9671.302br.net', +'ad.doubleclick.net.78552.9671.302br.net', +'ad.doubleclick.net.78553.9671.302br.net', +'ad.doubleclick.net.78554.9671.302br.net', +'ad.doubleclick.net.78555.9671.302br.net', +'ad.doubleclick.net.78556.9671.302br.net', +'ad.doubleclick.net.78557.9671.302br.net', +'ad.doubleclick.net.78558.9671.302br.net', +'ad.doubleclick.net.78559.9671.302br.net', +'ad.doubleclick.net.78560.9671.302br.net', +'ad.doubleclick.net.78561.9671.302br.net', +'ad.doubleclick.net.78562.9671.302br.net', +'ad.doubleclick.net.78563.9671.302br.net', +'ad.doubleclick.net.78564.9671.302br.net', +'ad.doubleclick.net.78565.9671.302br.net', +'ad.doubleclick.net.78566.9671.302br.net', +'ad.doubleclick.net.78567.9671.302br.net', +'ad.doubleclick.net.78568.9671.302br.net', +'ad.doubleclick.net.78569.9671.302br.net', +'ad.doubleclick.net.78572.9672.302br.net', +'ad.doubleclick.net.78573.9672.302br.net', +'ad.doubleclick.net.78574.9672.302br.net', +'ad.doubleclick.net.78575.9672.302br.net', +'ad.doubleclick.net.78576.9672.302br.net', +'ad.doubleclick.net.78577.9672.302br.net', +'ad.doubleclick.net.78584.9672.302br.net', +'ad.doubleclick.net.78585.9672.302br.net', +'ad.doubleclick.net.78596.9671.302br.net', +'ad.doubleclick.net.78597.9671.302br.net', +'ad.doubleclick.net.78598.9671.302br.net', +'ad.doubleclick.net.78599.9671.302br.net', +'ad.doubleclick.net.78600.9671.302br.net', +'ad.doubleclick.net.78601.9671.302br.net', +'ad.doubleclick.net.78602.9671.302br.net', +'ad.doubleclick.net.78603.9671.302br.net', +'ad.doubleclick.net.78618.9671.302br.net', +'ad.doubleclick.net.78619.9671.302br.net', +'ad.doubleclick.net.78620.9671.302br.net', +'ad.doubleclick.net.78621.9671.302br.net', +'ad.doubleclick.net.78622.9671.302br.net', +'ad.doubleclick.net.78623.9671.302br.net', +'ad.doubleclick.net.78624.9671.302br.net', +'ad.doubleclick.net.78625.9671.302br.net', +'ad.doubleclick.net.78626.9671.302br.net', +'ad.doubleclick.net.78627.9671.302br.net', +'ad.doubleclick.net.78629.9671.302br.net', +'ad.doubleclick.net.78631.9671.302br.net', +'ad.doubleclick.net.78633.9671.302br.net', +'ad.doubleclick.net.78635.9671.302br.net', +'ad.doubleclick.net.78637.9671.302br.net', +'ad.doubleclick.net.78639.9671.302br.net', +'ad.doubleclick.net.78641.9671.302br.net', +'ad.doubleclick.net.78643.9671.302br.net', +'ad.doubleclick.net.78644.9671.302br.net', +'ad.doubleclick.net.78645.9671.302br.net', +'ad.doubleclick.net.78646.9671.302br.net', +'ad.doubleclick.net.78647.9671.302br.net', +'ad.doubleclick.net.78649.9671.302br.net', +'ad.doubleclick.net.78650.9671.302br.net', +'ad.doubleclick.net.78651.9671.302br.net', +'ad.doubleclick.net.78652.9671.302br.net', +'ad.doubleclick.net.78653.9671.302br.net', +'ad.doubleclick.net.78654.9671.302br.net', +'ad.doubleclick.net.78655.9671.302br.net', +'ad.doubleclick.net.78656.9671.302br.net', +'ad.doubleclick.net.78657.9671.302br.net', +'ad.doubleclick.net.78658.9671.302br.net', +'ad.doubleclick.net.78659.9671.302br.net', +'ad.doubleclick.net.78670.9671.302br.net', +'ad.doubleclick.net.78671.9671.302br.net', +'ad.doubleclick.net.78672.9671.302br.net', +'ad.doubleclick.net.78673.9671.302br.net', +'ad.doubleclick.net.78674.9671.302br.net', +'ad.doubleclick.net.78675.9671.302br.net', +'ad.doubleclick.net.78676.9671.302br.net', +'ad.doubleclick.net.78677.9671.302br.net', +'ad.doubleclick.net.78678.9672.302br.net', +'ad.doubleclick.net.78679.9672.302br.net', +'ad.doubleclick.net.78680.9672.302br.net', +'ad.doubleclick.net.78681.9672.302br.net', +'ad.doubleclick.net.78684.9672.302br.net', +'ad.doubleclick.net.78685.9672.302br.net', +'ad.doubleclick.net.78686.9671.302br.net', +'ad.doubleclick.net.78687.9671.302br.net', +'ad.doubleclick.net.78688.9671.302br.net', +'ad.doubleclick.net.78689.9671.302br.net', +'ad.doubleclick.net.78690.9671.302br.net', +'ad.doubleclick.net.78691.9671.302br.net', +'ad.doubleclick.net.78692.9671.302br.net', +'ad.doubleclick.net.78693.9671.302br.net', +'ad.doubleclick.net.78694.9671.302br.net', +'ad.doubleclick.net.78695.9671.302br.net', +'ad.doubleclick.net.78696.9671.302br.net', +'ad.doubleclick.net.78697.9671.302br.net', +'ad.doubleclick.net.78698.9672.302br.net', +'ad.doubleclick.net.78699.9672.302br.net', +'ad.doubleclick.net.78700.9672.302br.net', +'ad.doubleclick.net.78701.9672.302br.net', +'ad.doubleclick.net.78764.9326.302br.net', +'ad.doubleclick.net.78765.9326.302br.net', +'ad.doubleclick.net.78767.9326.302br.net', +'ad.doubleclick.net.78768.9326.302br.net', +'ad.doubleclick.net.78769.9326.302br.net', +'ad.doubleclick.net.78770.9326.302br.net', +'ad.doubleclick.net.78771.9326.302br.net', +'ad.doubleclick.net.78773.9326.302br.net', +'ad.doubleclick.net.78776.9326.302br.net', +'ad.doubleclick.net.78777.9326.302br.net', +'ad.doubleclick.net.78779.9326.302br.net', +'ad.doubleclick.net.78780.9326.302br.net', +'ad.doubleclick.net.78931.9678.302br.net', +'ad.doubleclick.net.78932.9678.302br.net', +'ad.doubleclick.net.78933.9678.302br.net', +'ad.doubleclick.net.78934.9678.302br.net', +'ad.doubleclick.net.79072.9678.302br.net', +'ad.doubleclick.net.79074.9678.302br.net', +'ad.doubleclick.net.79268.9678.302br.net', +'ad.doubleclick.net.79269.9678.302br.net', +'ad.doubleclick.net.79274.9678.302br.net', +'ad.doubleclick.net.79275.9678.302br.net', +'ad.doubleclick.net.79277.9678.302br.net', +'ad.doubleclick.net.79278.9678.302br.net', +'ad.doubleclick.net.79283.9678.302br.net', +'ad.doubleclick.net.79284.9678.302br.net', +'ad.doubleclick.net.79286.9678.302br.net', +'ad.doubleclick.net.79287.9678.302br.net', +'ad.doubleclick.net.79301.9678.302br.net', +'ad.doubleclick.net.79302.9678.302br.net', +'ad.doubleclick.net.79304.9678.302br.net', +'ad.doubleclick.net.79305.9678.302br.net', +'ad.doubleclick.net.79307.9678.302br.net', +'ad.doubleclick.net.79316.9678.302br.net', +'ad.doubleclick.net.79317.9678.302br.net', +'ad.doubleclick.net.79319.9678.302br.net', +'ad.doubleclick.net.79320.9678.302br.net', +'ad.doubleclick.net.79322.9678.302br.net', +'ad.doubleclick.net.79323.9678.302br.net', +'ad.doubleclick.net.79337.9678.302br.net', +'ad.doubleclick.net.79338.9678.302br.net', +'ad.doubleclick.net.79340.9678.302br.net', +'ad.doubleclick.net.79341.9678.302br.net', +'ad.doubleclick.net.79343.9678.302br.net', +'ad.doubleclick.net.79346.9678.302br.net', +'ad.doubleclick.net.79347.9678.302br.net', +'ad.doubleclick.net.79352.9678.302br.net', +'ad.doubleclick.net.79353.9678.302br.net', +'ad.doubleclick.net.79358.9678.302br.net', +'ad.doubleclick.net.79359.9678.302br.net', +'ad.doubleclick.net.79370.9678.302br.net', +'ad.doubleclick.net.79371.9678.302br.net', +'ad.doubleclick.net.79373.9678.302br.net', +'ad.doubleclick.net.79374.9678.302br.net', +'ad.doubleclick.net.79376.9678.302br.net', +'ad.doubleclick.net.79377.9678.302br.net', +'ad.doubleclick.net.79379.9678.302br.net', +'ad.doubleclick.net.79380.9678.302br.net', +'ad.doubleclick.net.79382.9678.302br.net', +'ad.doubleclick.net.79385.9678.302br.net', +'ad.doubleclick.net.79386.9678.302br.net', +'ad.doubleclick.net.79388.9678.302br.net', +'ad.doubleclick.net.79389.9678.302br.net', +'ad.doubleclick.net.79391.9678.302br.net', +'ad.doubleclick.net.79392.9678.302br.net', +'ad.doubleclick.net.79394.9678.302br.net', +'ad.doubleclick.net.79395.9678.302br.net', +'ad.doubleclick.net.79397.9678.302br.net', +'ad.doubleclick.net.79398.9678.302br.net', +'ad.doubleclick.net.79400.9678.302br.net', +'ad.doubleclick.net.79401.9678.302br.net', +'ad.doubleclick.net.79403.9678.302br.net', +'ad.doubleclick.net.79404.9678.302br.net', +'ad.doubleclick.net.79406.9678.302br.net', +'ad.doubleclick.net.79407.9678.302br.net', +'ad.doubleclick.net.79409.9678.302br.net', +'ad.doubleclick.net.79410.9678.302br.net', +'ad.doubleclick.net.79412.9678.302br.net', +'ad.doubleclick.net.79413.9678.302br.net', +'ad.doubleclick.net.79415.9678.302br.net', +'ad.doubleclick.net.79416.9678.302br.net', +'ad.doubleclick.net.79418.9678.302br.net', +'ad.doubleclick.net.79419.9678.302br.net', +'ad.doubleclick.net.79421.9678.302br.net', +'ad.doubleclick.net.79422.9678.302br.net', +'ad.doubleclick.net.79439.9678.302br.net', +'ad.doubleclick.net.79440.9678.302br.net', +'ad.doubleclick.net.79445.9678.302br.net', +'ad.doubleclick.net.79446.9678.302br.net', +'ad.doubleclick.net.79448.9678.302br.net', +'ad.doubleclick.net.79449.9678.302br.net', +'ad.doubleclick.net.79451.9678.302br.net', +'ad.doubleclick.net.79452.9678.302br.net', +'ad.doubleclick.net.79457.9678.302br.net', +'ad.doubleclick.net.79458.9678.302br.net', +'ad.doubleclick.net.79460.9678.302br.net', +'ad.doubleclick.net.79461.9678.302br.net', +'ad.doubleclick.net.79463.9678.302br.net', +'ad.doubleclick.net.79464.9678.302br.net', +'ad.doubleclick.net.79466.9678.302br.net', +'ad.doubleclick.net.79467.9678.302br.net', +'ad.doubleclick.net.79469.9678.302br.net', +'ad.doubleclick.net.79470.9678.302br.net', +'ad.doubleclick.net.79472.9678.302br.net', +'ad.doubleclick.net.79473.9678.302br.net', +'ad.doubleclick.net.79475.9678.302br.net', +'ad.doubleclick.net.79476.9678.302br.net', +'ad.doubleclick.net.79478.9678.302br.net', +'ad.doubleclick.net.79479.9678.302br.net', +'ad.doubleclick.net.79481.9678.302br.net', +'ad.doubleclick.net.79482.9678.302br.net', +'ad.doubleclick.net.79484.9678.302br.net', +'ad.doubleclick.net.79485.9678.302br.net', +'ad.doubleclick.net.79487.9678.302br.net', +'ad.doubleclick.net.79488.9678.302br.net', +'ad.doubleclick.net.79490.9678.302br.net', +'ad.doubleclick.net.79491.9678.302br.net', +'ad.doubleclick.net.79493.9678.302br.net', +'ad.doubleclick.net.79494.9678.302br.net', +'ad.doubleclick.net.79496.9678.302br.net', +'ad.doubleclick.net.79497.9678.302br.net', +'ad.doubleclick.net.79499.9678.302br.net', +'ad.doubleclick.net.79500.9678.302br.net', +'ad.doubleclick.net.79503.9090.302br.net', +'ad.doubleclick.net.79506.9090.302br.net', +'ad.doubleclick.net.79515.9090.302br.net', +'ad.doubleclick.net.79521.9090.302br.net', +'ad.doubleclick.net.79524.9090.302br.net', +'ad.doubleclick.net.79530.9090.302br.net', +'ad.doubleclick.net.79623.9676.302br.net', +'ad.doubleclick.net.79624.9676.302br.net', +'ad.doubleclick.net.79625.9676.302br.net', +'ad.doubleclick.net.79630.9676.302br.net', +'ad.doubleclick.net.79631.9676.302br.net', +'ad.doubleclick.net.79633.9676.302br.net', +'ad.doubleclick.net.79634.9676.302br.net', +'ad.doubleclick.net.79642.9676.302br.net', +'ad.doubleclick.net.79643.9676.302br.net', +'ad.doubleclick.net.79645.9676.302br.net', +'ad.doubleclick.net.79646.9676.302br.net', +'ad.doubleclick.net.79650.9676.302br.net', +'ad.doubleclick.net.79651.9676.302br.net', +'ad.doubleclick.net.79652.9676.302br.net', +'ad.doubleclick.net.79657.9676.302br.net', +'ad.doubleclick.net.79658.9676.302br.net', +'ad.doubleclick.net.79660.9676.302br.net', +'ad.doubleclick.net.79661.9676.302br.net', +'ad.doubleclick.net.79662.9676.302br.net', +'ad.doubleclick.net.79663.9676.302br.net', +'ad.doubleclick.net.79664.9676.302br.net', +'ad.doubleclick.net.79666.9676.302br.net', +'ad.doubleclick.net.79667.9676.302br.net', +'ad.doubleclick.net.79669.9676.302br.net', +'ad.doubleclick.net.79670.9676.302br.net', +'ad.doubleclick.net.79672.9676.302br.net', +'ad.doubleclick.net.79673.9676.302br.net', +'ad.doubleclick.net.79674.9676.302br.net', +'ad.doubleclick.net.79675.9676.302br.net', +'ad.doubleclick.net.79676.9676.302br.net', +'ad.doubleclick.net.79678.9676.302br.net', +'ad.doubleclick.net.79679.9676.302br.net', +'ad.doubleclick.net.79684.9676.302br.net', +'ad.doubleclick.net.79685.9676.302br.net', +'ad.doubleclick.net.79696.9676.302br.net', +'ad.doubleclick.net.79697.9676.302br.net', +'ad.doubleclick.net.79699.9676.302br.net', +'ad.doubleclick.net.79700.9676.302br.net', +'ad.doubleclick.net.79702.9676.302br.net', +'ad.doubleclick.net.79703.9676.302br.net', +'ad.doubleclick.net.79704.9326.302br.net', +'ad.doubleclick.net.79707.9326.302br.net', +'ad.doubleclick.net.79710.9326.302br.net', +'ad.doubleclick.net.79713.9326.302br.net', +'ad.doubleclick.net.79729.9326.302br.net', +'ad.doubleclick.net.79735.9680.302br.net', +'ad.doubleclick.net.79736.9680.302br.net', +'ad.doubleclick.net.79737.9680.302br.net', +'ad.doubleclick.net.79739.9680.302br.net', +'ad.doubleclick.net.79740.9680.302br.net', +'ad.doubleclick.net.79741.9680.302br.net', +'ad.doubleclick.net.79743.9680.302br.net', +'ad.doubleclick.net.79744.9680.302br.net', +'ad.doubleclick.net.79745.9680.302br.net', +'ad.doubleclick.net.79746.9680.302br.net', +'ad.doubleclick.net.79747.9680.302br.net', +'ad.doubleclick.net.79749.9680.302br.net', +'ad.doubleclick.net.79751.9680.302br.net', +'ad.doubleclick.net.79753.9680.302br.net', +'ad.doubleclick.net.79755.9680.302br.net', +'ad.doubleclick.net.79756.9680.302br.net', +'ad.doubleclick.net.79757.9680.302br.net', +'ad.doubleclick.net.79759.9680.302br.net', +'ad.doubleclick.net.79761.9680.302br.net', +'ad.doubleclick.net.79763.9680.302br.net', +'ad.doubleclick.net.79764.9680.302br.net', +'ad.doubleclick.net.79765.9680.302br.net', +'ad.doubleclick.net.79767.9680.302br.net', +'ad.doubleclick.net.79768.9680.302br.net', +'ad.doubleclick.net.79769.9680.302br.net', +'ad.doubleclick.net.79770.9680.302br.net', +'ad.doubleclick.net.79771.9680.302br.net', +'ad.doubleclick.net.79772.9680.302br.net', +'ad.doubleclick.net.79773.9680.302br.net', +'ad.doubleclick.net.79775.9126.302br.net', +'ad.doubleclick.net.79777.9126.302br.net', +'ad.doubleclick.net.79778.9126.302br.net', +'ad.doubleclick.net.79780.9126.302br.net', +'ad.doubleclick.net.79781.9126.302br.net', +'ad.doubleclick.net.79782.9126.302br.net', +'ad.doubleclick.net.79783.9126.302br.net', +'ad.doubleclick.net.79784.9126.302br.net', +'ad.doubleclick.net.79785.9126.302br.net', +'ad.doubleclick.net.79786.9126.302br.net', +'ad.doubleclick.net.79787.9126.302br.net', +'ad.doubleclick.net.79788.9126.302br.net', +'ad.doubleclick.net.79805.9676.302br.net', +'ad.doubleclick.net.79806.9676.302br.net', +'ad.doubleclick.net.79808.9676.302br.net', +'ad.doubleclick.net.79809.9676.302br.net', +'ad.doubleclick.net.79811.9676.302br.net', +'ad.doubleclick.net.79812.9676.302br.net', +'ad.doubleclick.net.79814.9676.302br.net', +'ad.doubleclick.net.79815.9676.302br.net', +'ad.doubleclick.net.79817.9676.302br.net', +'ad.doubleclick.net.79818.9676.302br.net', +'ad.doubleclick.net.79820.9676.302br.net', +'ad.doubleclick.net.79821.9676.302br.net', +'ad.doubleclick.net.79823.9676.302br.net', +'ad.doubleclick.net.79826.9676.302br.net', +'ad.doubleclick.net.79827.9676.302br.net', +'ad.doubleclick.net.79828.9676.302br.net', +'ad.doubleclick.net.79829.9676.302br.net', +'ad.doubleclick.net.79832.9676.302br.net', +'ad.doubleclick.net.79833.9676.302br.net', +'ad.doubleclick.net.79835.9676.302br.net', +'ad.doubleclick.net.79836.9676.302br.net', +'ad.doubleclick.net.79837.9676.302br.net', +'ad.doubleclick.net.79838.9676.302br.net', +'ad.doubleclick.net.79839.9676.302br.net', +'ad.doubleclick.net.79878.9681.302br.net', +'ad.doubleclick.net.79881.9681.302br.net', +'ad.doubleclick.net.79884.9681.302br.net', +'ad.doubleclick.net.79885.9681.302br.net', +'ad.doubleclick.net.79887.9681.302br.net', +'ad.doubleclick.net.79888.9681.302br.net', +'ad.doubleclick.net.79892.9681.302br.net', +'ad.doubleclick.net.79898.9681.302br.net', +'ad.doubleclick.net.79908.9681.302br.net', +'ad.doubleclick.net.79911.9681.302br.net', +'ad.doubleclick.net.79913.9681.302br.net', +'ad.doubleclick.net.79916.9681.302br.net', +'ad.doubleclick.net.79919.9681.302br.net', +'ad.doubleclick.net.79923.9681.302br.net', +'ad.doubleclick.net.79926.9681.302br.net', +'ad.doubleclick.net.79929.9681.302br.net', +'ad.doubleclick.net.79931.9336.302br.net', +'ad.doubleclick.net.79932.9336.302br.net', +'ad.doubleclick.net.79934.9336.302br.net', +'ad.doubleclick.net.79935.9336.302br.net', +'ad.doubleclick.net.79937.9336.302br.net', +'ad.doubleclick.net.79938.9336.302br.net', +'ad.doubleclick.net.79940.9336.302br.net', +'ad.doubleclick.net.79946.9336.302br.net', +'ad.doubleclick.net.79949.9336.302br.net', +'ad.doubleclick.net.79950.9336.302br.net', +'ad.doubleclick.net.79952.9336.302br.net', +'ad.doubleclick.net.79953.9336.302br.net', +'ad.doubleclick.net.79955.9336.302br.net', +'ad.doubleclick.net.79958.9336.302br.net', +'ad.doubleclick.net.79959.9336.302br.net', +'ad.doubleclick.net.79961.9336.302br.net', +'ad.doubleclick.net.79964.9336.302br.net', +'ad.doubleclick.net.79967.9336.302br.net', +'ad.doubleclick.net.79968.9336.302br.net', +'ad.doubleclick.net.79970.9336.302br.net', +'ad.doubleclick.net.79971.9336.302br.net', +'ad.doubleclick.net.79973.9336.302br.net', +'ad.doubleclick.net.79974.9336.302br.net', +'ad.doubleclick.net.79975.9336.302br.net', +'ad.doubleclick.net.79976.9336.302br.net', +'ad.doubleclick.net.79977.9336.302br.net', +'ad.doubleclick.net.79979.9336.302br.net', +'ad.doubleclick.net.79980.9336.302br.net', +'ad.doubleclick.net.79982.9336.302br.net', +'ad.doubleclick.net.79985.9336.302br.net', +'ad.doubleclick.net.79988.9336.302br.net', +'ad.doubleclick.net.79994.9336.302br.net', +'ad.doubleclick.net.79997.9336.302br.net', +'ad.doubleclick.net.80000.9336.302br.net', +'ad.doubleclick.net.80003.9336.302br.net', +'ad.doubleclick.net.80006.9336.302br.net', +'ad.doubleclick.net.80009.9336.302br.net', +'ad.doubleclick.net.80012.9336.302br.net', +'ad.doubleclick.net.80015.9336.302br.net', +'ad.doubleclick.net.80018.9336.302br.net', +'ad.doubleclick.net.80021.9336.302br.net', +'ad.doubleclick.net.80024.9336.302br.net', +'ad.doubleclick.net.80030.9336.302br.net', +'ad.doubleclick.net.80031.9336.302br.net', +'ad.doubleclick.net.80033.9336.302br.net', +'ad.doubleclick.net.80036.9336.302br.net', +'ad.doubleclick.net.80037.9336.302br.net', +'ad.doubleclick.net.80039.9336.302br.net', +'ad.doubleclick.net.80040.9336.302br.net', +'ad.doubleclick.net.80042.9336.302br.net', +'ad.doubleclick.net.80043.9336.302br.net', +'ad.doubleclick.net.80045.9336.302br.net', +'ad.doubleclick.net.80048.9336.302br.net', +'ad.doubleclick.net.80051.9336.302br.net', +'ad.doubleclick.net.80054.9336.302br.net', +'ad.doubleclick.net.80057.9336.302br.net', +'ad.doubleclick.net.80059.9336.302br.net', +'ad.doubleclick.net.80060.9336.302br.net', +'ad.doubleclick.net.80061.9336.302br.net', +'ad.doubleclick.net.80062.9336.302br.net', +'ad.doubleclick.net.80063.9336.302br.net', +'ad.doubleclick.net.80064.9336.302br.net', +'ad.doubleclick.net.80065.9336.302br.net', +'ad.doubleclick.net.80066.9336.302br.net', +'ad.doubleclick.net.80067.9336.302br.net', +'ad.doubleclick.net.80068.9336.302br.net', +'ad.doubleclick.net.80069.9336.302br.net', +'ad.doubleclick.net.80070.9336.302br.net', +'ad.doubleclick.net.80072.9336.302br.net', +'ad.doubleclick.net.80073.9336.302br.net', +'ad.doubleclick.net.80080.9336.302br.net', +'ad.doubleclick.net.80081.9336.302br.net', +'ad.doubleclick.net.80082.9336.302br.net', +'ad.doubleclick.net.80084.9336.302br.net', +'ad.doubleclick.net.80090.9336.302br.net', +'ad.doubleclick.net.80093.9336.302br.net', +'ad.doubleclick.net.80096.9336.302br.net', +'ad.doubleclick.net.80099.9336.302br.net', +'ad.doubleclick.net.80100.9336.302br.net', +'ad.doubleclick.net.80102.9336.302br.net', +'ad.doubleclick.net.80103.9336.302br.net', +'ad.doubleclick.net.80105.9336.302br.net', +'ad.doubleclick.net.80106.9336.302br.net', +'ad.doubleclick.net.80108.9336.302br.net', +'ad.doubleclick.net.80111.9336.302br.net', +'ad.doubleclick.net.80112.9336.302br.net', +'ad.doubleclick.net.80114.9336.302br.net', +'ad.doubleclick.net.80115.9336.302br.net', +'ad.doubleclick.net.80117.9336.302br.net', +'ad.doubleclick.net.80118.9336.302br.net', +'ad.doubleclick.net.80120.9336.302br.net', +'ad.doubleclick.net.80121.9336.302br.net', +'ad.doubleclick.net.80123.9336.302br.net', +'ad.doubleclick.net.80129.9336.302br.net', +'ad.doubleclick.net.80132.9336.302br.net', +'ad.doubleclick.net.80135.9336.302br.net', +'ad.doubleclick.net.80138.9336.302br.net', +'ad.doubleclick.net.80141.9336.302br.net', +'ad.doubleclick.net.80144.9336.302br.net', +'ad.doubleclick.net.80162.9336.302br.net', +'ad.doubleclick.net.80165.9336.302br.net', +'ad.doubleclick.net.80168.9336.302br.net', +'ad.doubleclick.net.80169.9336.302br.net', +'ad.doubleclick.net.80171.9336.302br.net', +'ad.doubleclick.net.80177.9336.302br.net', +'ad.doubleclick.net.80183.9336.302br.net', +'ad.doubleclick.net.80186.9336.302br.net', +'ad.doubleclick.net.80189.9336.302br.net', +'ad.doubleclick.net.80192.9336.302br.net', +'ad.doubleclick.net.80195.9336.302br.net', +'ad.doubleclick.net.80198.9336.302br.net', +'ad.doubleclick.net.80199.9336.302br.net', +'ad.doubleclick.net.80201.9336.302br.net', +'ad.doubleclick.net.80204.9336.302br.net', +'ad.doubleclick.net.80207.9336.302br.net', +'ad.doubleclick.net.80210.9336.302br.net', +'ad.doubleclick.net.80216.9336.302br.net', +'ad.doubleclick.net.80217.9336.302br.net', +'ad.doubleclick.net.80219.9336.302br.net', +'ad.doubleclick.net.80220.9336.302br.net', +'ad.doubleclick.net.80222.9336.302br.net', +'ad.doubleclick.net.80223.9336.302br.net', +'ad.doubleclick.net.80225.9336.302br.net', +'ad.doubleclick.net.80228.9336.302br.net', +'ad.doubleclick.net.80231.9336.302br.net', +'ad.doubleclick.net.80232.9336.302br.net', +'ad.doubleclick.net.80234.9336.302br.net', +'ad.doubleclick.net.80237.9336.302br.net', +'ad.doubleclick.net.80238.9336.302br.net', +'ad.doubleclick.net.80239.9336.302br.net', +'ad.doubleclick.net.80240.9336.302br.net', +'ad.doubleclick.net.80241.9336.302br.net', +'ad.doubleclick.net.80242.9336.302br.net', +'ad.doubleclick.net.80243.9336.302br.net', +'ad.doubleclick.net.80244.9336.302br.net', +'ad.doubleclick.net.80245.9336.302br.net', +'ad.doubleclick.net.80246.9336.302br.net', +'ad.doubleclick.net.80247.9336.302br.net', +'ad.doubleclick.net.80249.9336.302br.net', +'ad.doubleclick.net.80250.9336.302br.net', +'ad.doubleclick.net.80252.9336.302br.net', +'ad.doubleclick.net.80253.9336.302br.net', +'ad.doubleclick.net.80255.9336.302br.net', +'ad.doubleclick.net.80258.9336.302br.net', +'ad.doubleclick.net.80260.9336.302br.net', +'ad.doubleclick.net.80261.9336.302br.net', +'ad.doubleclick.net.80262.9336.302br.net', +'ad.doubleclick.net.80267.9336.302br.net', +'ad.doubleclick.net.80270.9336.302br.net', +'ad.doubleclick.net.80279.9336.302br.net', +'ad.doubleclick.net.80280.9336.302br.net', +'ad.doubleclick.net.80282.9336.302br.net', +'ad.doubleclick.net.80283.9336.302br.net', +'ad.doubleclick.net.80285.9336.302br.net', +'ad.doubleclick.net.80286.9336.302br.net', +'ad.doubleclick.net.80288.9336.302br.net', +'ad.doubleclick.net.80291.9450.302br.net', +'ad.doubleclick.net.80293.9450.302br.net', +'ad.doubleclick.net.80295.9450.302br.net', +'ad.doubleclick.net.80296.9450.302br.net', +'ad.doubleclick.net.80297.9450.302br.net', +'ad.doubleclick.net.80298.9450.302br.net', +'ad.doubleclick.net.80299.9450.302br.net', +'ad.doubleclick.net.80300.9450.302br.net', +'ad.doubleclick.net.80301.9450.302br.net', +'ad.doubleclick.net.80304.9450.302br.net', +'ad.doubleclick.net.80305.9450.302br.net', +'ad.doubleclick.net.80306.9450.302br.net', +'ad.doubleclick.net.80307.9450.302br.net', +'ad.doubleclick.net.80312.9450.302br.net', +'ad.doubleclick.net.80313.9450.302br.net', +'ad.doubleclick.net.80314.9450.302br.net', +'ad.doubleclick.net.80315.9450.302br.net', +'ad.doubleclick.net.80316.9450.302br.net', +'ad.doubleclick.net.80317.9450.302br.net', +'ad.doubleclick.net.80318.9682.302br.net', +'ad.doubleclick.net.80319.9682.302br.net', +'ad.doubleclick.net.80320.9682.302br.net', +'ad.doubleclick.net.80321.9682.302br.net', +'ad.doubleclick.net.80323.9682.302br.net', +'ad.doubleclick.net.80325.9682.302br.net', +'ad.doubleclick.net.80327.9682.302br.net', +'ad.doubleclick.net.80373.9677.302br.net', +'ad.doubleclick.net.80375.9677.302br.net', +'ad.doubleclick.net.80376.9677.302br.net', +'ad.doubleclick.net.80378.9677.302br.net', +'ad.doubleclick.net.80385.9677.302br.net', +'ad.doubleclick.net.80387.9677.302br.net', +'ad.doubleclick.net.80397.9677.302br.net', +'ad.doubleclick.net.80399.9677.302br.net', +'ad.doubleclick.net.80400.9677.302br.net', +'ad.doubleclick.net.80402.9677.302br.net', +'ad.doubleclick.net.80403.9677.302br.net', +'ad.doubleclick.net.80405.9677.302br.net', +'ad.doubleclick.net.80406.9677.302br.net', +'ad.doubleclick.net.80408.9677.302br.net', +'ad.doubleclick.net.80410.9515.302br.net', +'ad.doubleclick.net.80411.9515.302br.net', +'ad.doubleclick.net.80413.9515.302br.net', +'ad.doubleclick.net.80414.9515.302br.net', +'ad.doubleclick.net.80416.9515.302br.net', +'ad.doubleclick.net.80417.9515.302br.net', +'ad.doubleclick.net.80418.9515.302br.net', +'ad.doubleclick.net.80419.9515.302br.net', +'ad.doubleclick.net.80420.9515.302br.net', +'ad.doubleclick.net.80421.9515.302br.net', +'ad.doubleclick.net.80422.9515.302br.net', +'ad.doubleclick.net.80423.9515.302br.net', +'ad.doubleclick.net.80425.9515.302br.net', +'ad.doubleclick.net.80426.9515.302br.net', +'ad.doubleclick.net.80427.9515.302br.net', +'ad.doubleclick.net.80428.9515.302br.net', +'ad.doubleclick.net.80429.9515.302br.net', +'ad.doubleclick.net.80430.9515.302br.net', +'ad.doubleclick.net.80431.9515.302br.net', +'ad.doubleclick.net.80432.9515.302br.net', +'ad.doubleclick.net.80433.9515.302br.net', +'ad.doubleclick.net.80434.9515.302br.net', +'ad.doubleclick.net.80435.9515.302br.net', +'ad.doubleclick.net.80628.9685.302br.net', +'ad.doubleclick.net.80629.9685.302br.net', +'ad.doubleclick.net.80630.9685.302br.net', +'ad.doubleclick.net.80631.9685.302br.net', +'ad.doubleclick.net.80632.9685.302br.net', +'ad.doubleclick.net.80633.9685.302br.net', +'ad.doubleclick.net.80641.9685.302br.net', +'ad.doubleclick.net.80642.9685.302br.net', +'ad.doubleclick.net.80644.9685.302br.net', +'ad.doubleclick.net.80645.9685.302br.net', +'ad.doubleclick.net.80646.9685.302br.net', +'ad.doubleclick.net.80647.9685.302br.net', +'ad.doubleclick.net.80648.9685.302br.net', +'ad.doubleclick.net.80649.9685.302br.net', +'ad.doubleclick.net.80650.9685.302br.net', +'ad.doubleclick.net.80651.9685.302br.net', +'ad.doubleclick.net.80653.9685.302br.net', +'ad.doubleclick.net.80654.9685.302br.net', +'ad.doubleclick.net.80655.9685.302br.net', +'ad.doubleclick.net.80656.9685.302br.net', +'ad.doubleclick.net.80657.9685.302br.net', +'ad.doubleclick.net.80661.9685.302br.net', +'ad.doubleclick.net.80662.9685.302br.net', +'ad.doubleclick.net.80663.9685.302br.net', +'ad.doubleclick.net.80664.9685.302br.net', +'ad.doubleclick.net.80665.9685.302br.net', +'ad.doubleclick.net.80666.9685.302br.net', +'ad.doubleclick.net.80667.9685.302br.net', +'ad.doubleclick.net.80668.9685.302br.net', +'ad.doubleclick.net.80669.9685.302br.net', +'ad.doubleclick.net.80670.9685.302br.net', +'ad.doubleclick.net.80671.9685.302br.net', +'ad.doubleclick.net.80672.9685.302br.net', +'ad.doubleclick.net.80674.9685.302br.net', +'ad.doubleclick.net.80675.9685.302br.net', +'ad.doubleclick.net.80676.9685.302br.net', +'ad.doubleclick.net.80677.9685.302br.net', +'ad.doubleclick.net.80678.9685.302br.net', +'ad.doubleclick.net.80686.9685.302br.net', +'ad.doubleclick.net.80689.9685.302br.net', +'ad.doubleclick.net.80690.9685.302br.net', +'ad.doubleclick.net.80691.9685.302br.net', +'ad.doubleclick.net.80692.9685.302br.net', +'ad.doubleclick.net.80693.9685.302br.net', +'ad.doubleclick.net.80695.9685.302br.net', +'ad.doubleclick.net.80696.9685.302br.net', +'ad.doubleclick.net.80698.9685.302br.net', +'ad.doubleclick.net.80700.9685.302br.net', +'ad.doubleclick.net.80701.9685.302br.net', +'ad.doubleclick.net.80702.9685.302br.net', +'ad.doubleclick.net.80706.9685.302br.net', +'ad.doubleclick.net.80707.9685.302br.net', +'ad.doubleclick.net.80708.9685.302br.net', +'ad.doubleclick.net.80709.9685.302br.net', +'ad.doubleclick.net.80710.9685.302br.net', +'ad.doubleclick.net.80711.9685.302br.net', +'ad.doubleclick.net.80712.9685.302br.net', +'ad.doubleclick.net.80713.9685.302br.net', +'ad.doubleclick.net.80714.9685.302br.net', +'ad.doubleclick.net.80715.9685.302br.net', +'ad.doubleclick.net.80716.9685.302br.net', +'ad.doubleclick.net.80717.9685.302br.net', +'ad.doubleclick.net.80719.9357.302br.net', +'ad.doubleclick.net.80722.9357.302br.net', +'ad.doubleclick.net.80725.9357.302br.net', +'ad.doubleclick.net.80729.9357.302br.net', +'ad.doubleclick.net.80732.9357.302br.net', +'ad.doubleclick.net.80735.9357.302br.net', +'ad.doubleclick.net.80738.9357.302br.net', +'ad.doubleclick.net.80741.9357.302br.net', +'ad.doubleclick.net.80744.9357.302br.net', +'ad.doubleclick.net.80880.9682.302br.net', +'ad.doubleclick.net.80882.9682.302br.net', +'ad.doubleclick.net.80885.9682.302br.net', +'ad.doubleclick.net.80886.9682.302br.net', +'ad.doubleclick.net.80890.9682.302br.net', +'ad.doubleclick.net.80891.9682.302br.net', +'ad.doubleclick.net.80892.9682.302br.net', +'ad.doubleclick.net.80896.9682.302br.net', +'ad.doubleclick.net.80897.9682.302br.net', +'ad.doubleclick.net.80898.9682.302br.net', +'ad.doubleclick.net.80899.9682.302br.net', +'ad.doubleclick.net.80900.9682.302br.net', +'ad.doubleclick.net.80902.9682.302br.net', +'ad.doubleclick.net.80906.9682.302br.net', +'ad.doubleclick.net.80908.9682.302br.net', +'ad.doubleclick.net.80910.9682.302br.net', +'ad.doubleclick.net.80911.9682.302br.net', +'ad.doubleclick.net.80912.9682.302br.net', +'ad.doubleclick.net.80916.9682.302br.net', +'ad.doubleclick.net.80918.9682.302br.net', +'ad.doubleclick.net.80968.9689.302br.net', +'ad.doubleclick.net.80969.9689.302br.net', +'ad.doubleclick.net.80970.9689.302br.net', +'ad.doubleclick.net.80972.9689.302br.net', +'ad.doubleclick.net.80973.9689.302br.net', +'ad.doubleclick.net.80974.9689.302br.net', +'ad.doubleclick.net.80975.9689.302br.net', +'ad.doubleclick.net.80976.9689.302br.net', +'ad.doubleclick.net.80977.9689.302br.net', +'ad.doubleclick.net.80978.9689.302br.net', +'ad.doubleclick.net.80979.9689.302br.net', +'ad.doubleclick.net.80980.9584.302br.net', +'ad.doubleclick.net.80981.9584.302br.net', +'ad.doubleclick.net.80982.9584.302br.net', +'ad.doubleclick.net.80983.9584.302br.net', +'ad.doubleclick.net.80984.9584.302br.net', +'ad.doubleclick.net.80985.9584.302br.net', +'ad.doubleclick.net.80986.9584.302br.net', +'ad.doubleclick.net.80987.9584.302br.net', +'ad.doubleclick.net.80988.9584.302br.net', +'ad.doubleclick.net.80989.9584.302br.net', +'ad.doubleclick.net.80990.9584.302br.net', +'ad.doubleclick.net.80992.9584.302br.net', +'ad.doubleclick.net.80993.9584.302br.net', +'ad.doubleclick.net.80994.9584.302br.net', +'ad.doubleclick.net.80995.9544.302br.net', +'ad.doubleclick.net.80996.9544.302br.net', +'ad.doubleclick.net.80997.9544.302br.net', +'ad.doubleclick.net.80998.9544.302br.net', +'ad.doubleclick.net.80999.9544.302br.net', +'ad.doubleclick.net.81000.9544.302br.net', +'ad.doubleclick.net.81001.9544.302br.net', +'ad.doubleclick.net.81002.9544.302br.net', +'ad.doubleclick.net.81003.9544.302br.net', +'ad.doubleclick.net.892.9003.302br.net', +'ad.doubleclick.net.901.9003.302br.net', +'ad.doubleclick.net.947.9005.302br.net', +'ad.doubleclick.net.950.9005.302br.net', +'ad.doubleclick.net.954.9005.302br.net', +'ad.doubyeclick.net.60605.9436.302br.net', +'ad.dslr-forum.de', +'ad.duga.jp', +'ad.dyntracker.com', +'ad.dyntracker.de', +'ad.e-kolay.net', +'ad.eanalyzer.de', +'ad.eg.doubleclick.net', +'ad.egloos.com', +'ad.eltext.com', +'ad.ent400-2.tbn.ru', +'ad.ent400.tbn.ru', +'ad.eporner.com', +'ad.ero.be', +'ad.ero.nl', +'ad.erohost.com', +'ad.erotik-click.de', +'ad.es.chilinext.com', +'ad.es.doubleclick.net', +'ad.ethicalads.net', +'ad.ettoday.net', +'ad.eurosport.com', +'ad.evozi.com', +'ad.excite.co.jp', +'ad.extrabanner.com', +'ad.ezcybersearch.com', +'ad.ezmob.com', +'ad.family.go.com', +'ad.fi.doubleclick.net', +'ad.firstadsolution.com', +'ad.flurry.com', +'ad.foxnetworks.com', +'ad.fr.doubleclick.net', +'ad.freshersexposed.com', +'ad.games.ch', +'ad.globalinteractive.com', +'ad.globalismedia.com', +'ad.globe7.com', +'ad.go.com', +'ad.goo.ne.jp', +'ad.gr.doubleclick.net', +'ad.grafika.cz', +'ad.gt.doubleclick.net', +'ad.highsearch.co.kr', +'ad.hk.doubleclick.net', +'ad.hodomobile.com', +'ad.hornymatches.com', +'ad.hpg.com.br', +'ad.hpg.ig.com.br', +'ad.html.it', +'ad.hu.doubleclick.net', +'ad.hyena.cz', +'ad.ibest.com.br', +'ad.iconadserver.com', +'ad.ie.doubleclick.net', +'ad.iii.co.uk', +'ad.iinfo.cz', +'ad.il.doubleclick.net', +'ad.ilove.de', +'ad.ilse.nl', +'ad.in.doubleclick.net', +'ad.infoseek.com', +'ad.insightexpress.com', +'ad.intsig.net', +'ad.ipredictive.com', +'ad.ir.ru', +'ad.is.doubleclick.net', +'ad.it.chilinext.com', +'ad.it.doubleclick.net', +'ad.ittoolbox.com', +'ad.jamba.net', +'ad.jamster.co.uk', +'ad.jetsoftware.com', +'ad.jp.ap.valuecommerce.com', +'ad.jp.doubleclick.net', +'ad.juksr.com', +'ad.jumbaexchange.com', +'ad.kat.ph', +'ad.kataweb.it', +'ad.keenspace.com', +'ad.kr.doubleclick.net', +'ad.kw.doubleclick.net', +'ad.layer-ad.org', +'ad.lbb.org', +'ad.leadbolt.net', +'ad.leadboltads.net', +'ad.leadboltapps.net', +'ad.leadboltmobile.net', +'ad.letsbonus.com', +'ad.lfstmedia.com', +'ad.linkexchange.com', +'ad.linkexchange.net', +'ad.linksynergy.com', +'ad.linxcz.cz', +'ad.liveinternet.ru', +'ad.livere.co.kr', +'ad.lolipop.jp', +'ad.lupa.cz', +'ad.m5prod.net', +'ad.ma.doubleclick.net', +'ad.mail.ru', +'ad.main-netz.de', +'ad.maist.jp', +'ad.mangapanda.com', +'ad.mangareader.net', +'ad.marsmediachannels.com', +'ad.mbn.bb.ru', +'ad.media6degrees.com', +'ad.mediaadserver.com', +'ad.mediaplex.com', +'ad.mediaprecision.net', +'ad.mediastorm.hu', +'ad.mediresource.com', +'ad.mesomorphosis.com', +'ad.metanetwork.com', +'ad.mirror.co.uk', +'ad.mlnadvertising.com', +'ad.mo.doubleclick.net', +'ad.monetizus.com', +'ad.msn.co.il', +'ad.musicmatch.com', +'ad.mwork.vn', +'ad.mx.doubleclick.net', +'ad.my.doubleclick.net', +'ad.mylinea.com', +'ad.n2434.doubleclick.net', +'ad.n2434.doubleclick.net.22562.9135.302br.net', +'ad.n2434.doubleclick.net.22565.9135.302br.net', +'ad.net-activities.com', +'ad.networkcpm.com', +'ad.newmail.ru', +'ad.newsnow.net', +'ad.nifty.com', +'ad.nl.doubleclick.net', +'ad.no.doubleclick.net', +'ad.nobreak.com', +'ad.nozonedata.com', +'ad.nttnavi.co.jp', +'ad.nz.doubleclick.net', +'ad.ohmynews.com', +'ad.onlineadserv.com', +'ad.onyx7.com', +'ad.orbitel.bg', +'ad.oubleclick.net.44902.9339.302br.net', +'ad.outsidehub.com', +'ad.ox88.info', +'ad.payclick.it', +'ad.paycount.com', +'ad.paypal.com', +'ad.pbs.bb.ru', +'ad.pchome.com.tw', +'ad.pe.doubleclick.net', +'ad.pensamedia.org', +'ad.perfectworld.com', +'ad.perfectworld.eu', +'ad.ph.doubleclick.net', +'ad.pickadz.com', +'ad.pickple.net', +'ad.piximedia.com', +'ad.pixnet.net', +'ad.pl.doubleclick.net', +'ad.planclick.co.kr', +'ad.preferances.com', +'ad.prismamediadigital.com', +'ad.propellerads.com', +'ad.proxy.sh', +'ad.prv.pl', +'ad.pt.doubleclick.net', +'ad.publicidees.com', +'ad.punto-informatico.it', +'ad.pupsik.ru', +'ad.pyce.info', +'ad.rambler.ru', +'ad.reachjunction.com', +'ad.reachlocal.com', +'ad.realmcdn.net', +'ad.realmedia.co.kr', +'ad.reduxmedia.com', +'ad.referencement.01net.com', +'ad.rekket.com', +'ad.reklamstore.com', +'ad.repubblica.it', +'ad.retargeter.com', +'ad.reunion.com', +'ad.rkads.com', +'ad.ro.doubleclick.net', +'ad.ru.doubleclick.net', +'ad.sa.doubleclick.net', +'ad.sa9.woowy.com', +'ad.sab.woowy.com', +'ad.scadnet.com', +'ad.scanmedios.com', +'ad.se.doubleclick.net', +'ad.seagulltracer.com', +'ad.search.ch', +'ad.sensismediasmart.com.au', +'ad.sevenads.net', +'ad.sexcount.de', +'ad.seznam.cz', +'ad.sg.doubleclick.net', +'ad.shop.tbn.ru', +'ad.simgames.net', +'ad.singletrackworld.com', +'ad.sitemaji.com', +'ad.sk.doubleclick.net', +'ad.sma.punto.net', +'ad.sma.punto.org', +'ad.smaad.jp', +'ad.smaclick.com', +'ad.smartgroups.com', +'ad.smsmovies.net', +'ad.smsmovies.se', +'ad.soft365.com', +'ad.soicos.com', +'ad.strict.tbn.ru', +'ad.t-ad.co.kr', +'ad.tblamnetwork.com', +'ad.tbn.ru', +'ad.technoratimedia.com', +'ad.tek.no', +'ad.tenderteen.com', +'ad.terra.doubleclick.net', +'ad.text.tbn.ru', +'ad.th.doubleclick.net', +'ad.theadhost.com', +'ad.thewheelof.com', +'ad.thisav.com', +'ad.thoughtsondance.info', +'ad.tokyo-tube-ad.com', +'ad.tom.com', +'ad.toplist.cz', +'ad.topstat.com', +'ad.tr.doubleclick.net', +'ad.track1v.com', +'ad.trafficgate.net', +'ad.trafficmp.com.60640.9377.302br.net', +'ad.trafficmp.com.72284.9606.302br.net', +'ad.trafficmp.com.76504.9641.302br.net', +'ad.trafficmp.com.77832.9606.302br.net', +'ad.traffmonster.info', +'ad.trwv.net', +'ad.tubeadnetwork.com', +'ad.turn.com', +'ad.tv2.no', +'ad.tw.doubleclick.net', +'ad.uk.doubleclick.net', +'ad.uproar.com', +'ad.us.doubleclick.net', +'ad.usatoday.com', +'ad.userporn.com', +'ad.utop.ir', +'ad.valuecalling.com', +'ad.valuecommerce.ne.jp', +'ad.vcm.jp', +'ad.ve.doubleclick.net', +'ad.videokit.org', +'ad.virtualave.com', +'ad.vonna.com', +'ad.vrvm.com', +'ad.walla.co.il', +'ad.wap4dollars.in', +'ad.way.cz', +'ad.weatherbug.com', +'ad.webm.tbn.ru', +'ad.webm120.tbn.ru', +'ad.where.com', +'ad.winningpartner.com', +'ad.womensforum.com', +'ad.www.net.cn', +'ad.wz.cz', +'ad.xertive.com', +'ad.xplusone.com', +'ad.xtendmedia.com', +'ad.yadro.ru', +'ad.yahoo.com', +'ad.yam.com.tw', +'ad.yieldlab.net', +'ad.yieldmanager.com', +'ad.yieldpartners.com', +'ad.yllix.com', +'ad.yourmedia.com', +'ad.yoyo.pl', +'ad.z5x.net', +'ad.za.doubleclick.net', +'ad.zanox.com', +'ad.zencudo.co.uk', +'ad.zet.net', +'ad.zompmedia.com', +'ad0.adspaces.ero-advertising.com', +'ad0.api.ero-advertising.com', +'ad0.banners.ero-advertising.com', +'ad0.data2.ero-advertising.com', +'ad0.haynet.com', +'ad0.hpg.com.br', +'ad0.paycount.com', +'ad00.hpg.com.br', +'ad00.paycount.com', +'ad01.adonspot.com', +'ad01.advertise.com', +'ad01.focalink.com', +'ad01.hpg.com.br', +'ad01.mediacorpsingapore.com', +'ad01.paycount.com', +'ad02.focalink.com', +'ad03.adam4adam.com', +'ad03.focalink.com', +'ad03.hpg.com.br', +'ad03.paycount.com', +'ad04.focalink.com', +'ad04.hpg.com.br', +'ad04.paycount.com', +'ad05.focalink.com', +'ad05.hpg.com.br', +'ad05.paycount.com', +'ad06.focalink.com', +'ad06.hpg.com.br', +'ad06.paycount.com', +'ad07.focalink.com', +'ad07.hpg.com.br', +'ad07.paycount.com', +'ad08.focalink.com', +'ad08.hpg.com.br', +'ad08.paycount.com', +'ad09.focalink.com', +'ad09.hpg.com.br', +'ad09.paycount.com', +'ad1.adfarm1.adition.com', +'ad1.ads.ero-advertising.com', +'ad1.adspaces.ero-advertising.com', +'ad1.api.ero-advertising.com', +'ad1.bannerbank.ru', +'ad1.banners.ero-advertising.com', +'ad1.bb.ru', +'ad1.dada.it', +'ad1.emediate.dk', +'ad1.ero-advertising.com', +'ad1.gamezone.de', +'ad1.hpg.com.br', +'ad1.icorp.net', +'ad1.kde.cz', +'ad1.nend.net', +'ad1.pamedia.com.au', +'ad1.paycount.com', +'ad1.primorye.ru', +'ad1.radioreti.it', +'ad1.sbs.co.kr', +'ad1.searchmiracle.com', +'ad1.speedbit.com', +'ad1.virtualave.com', +'ad1.yourmedia.com', +'ad10.bannerbank.ru', +'ad10.focalink.com', +'ad10.hpg.com.br', +'ad10.paycount.com', +'ad10.speedbit.com', +'ad100.hpg.com.br', +'ad100.paycount.com', +'ad100m.adk2.co', +'ad101.hpg.com.br', +'ad101.paycount.com', +'ad101m.adk2.co', +'ad102.hpg.com.br', +'ad102.paycount.com', +'ad102m.adk2.co', +'ad103.hpg.com.br', +'ad103.paycount.com', +'ad103m.adk2.co', +'ad104.hpg.com.br', +'ad104.paycount.com', +'ad104m.adk2.co', +'ad105.hpg.com.br', +'ad105.paycount.com', +'ad105m.adk2.co', +'ad106.hpg.com.br', +'ad106.paycount.com', +'ad106m.adk2.co', +'ad107.hpg.com.br', +'ad107.paycount.com', +'ad107m.adk2.co', +'ad108.hpg.com.br', +'ad108.paycount.com', +'ad108m.adk2.co', +'ad109.hpg.com.br', +'ad109.paycount.com', +'ad109m.adk2.co', +'ad10m.adk2.co', +'ad11.bannerbank.ru', +'ad11.focalink.com', +'ad11.hpg.com.br', +'ad11.paycount.com', +'ad110.hpg.com.br', +'ad110.paycount.com', +'ad110m.adk2.co', +'ad111.hpg.com.br', +'ad111.paycount.com', +'ad111m.adk2.co', +'ad112.hpg.com.br', +'ad112.paycount.com', +'ad112m.adk2.co', +'ad113.hpg.com.br', +'ad113.paycount.com', +'ad113m.adk2.co', +'ad114.hpg.com.br', +'ad114.paycount.com', +'ad114m.adk2.co', +'ad115.hpg.com.br', +'ad115.paycount.com', +'ad115m.adk2.co', +'ad116.hpg.com.br', +'ad116.paycount.com', +'ad116m.adk2.co', +'ad117.hpg.com.br', +'ad117.paycount.com', +'ad117m.adk2.co', +'ad118.hpg.com.br', +'ad118.paycount.com', +'ad118m.adk2.co', +'ad119.hpg.com.br', +'ad119.paycount.com', +'ad119m.adk2.co', +'ad11m.adk2.co', +'ad12.bannerbank.ru', +'ad12.focalink.com', +'ad12.hpg.com.br', +'ad12.paycount.com', +'ad120.hpg.com.br', +'ad120.paycount.com', +'ad120m.adk2.co', +'ad121.hpg.com.br', +'ad121.paycount.com', +'ad121m.adk2.co', +'ad122.hpg.com.br', +'ad122.paycount.com', +'ad122m.adk2.co', +'ad123.hpg.com.br', +'ad123.paycount.com', +'ad123m.adk2.co', +'ad124.hpg.com.br', +'ad124.paycount.com', +'ad124m.adk2.co', +'ad125.hpg.com.br', +'ad125.paycount.com', +'ad125m.adk2.co', +'ad126.hpg.com.br', +'ad126.paycount.com', +'ad126m.adk2.co', +'ad127.hpg.com.br', +'ad127.paycount.com', +'ad127m.adk2.co', +'ad128.hpg.com.br', +'ad128.paycount.com', +'ad128m.adk2.co', +'ad129.hpg.com.br', +'ad129.paycount.com', +'ad129m.adk2.co', +'ad12m.adk2.co', +'ad13.bannerbank.ru', +'ad13.focalink.com', +'ad13.hpg.com.br', +'ad13.paycount.com', +'ad130.hpg.com.br', +'ad130.paycount.com', +'ad130m.adk2.co', +'ad131.hpg.com.br', +'ad131.paycount.com', +'ad131m.adk2.co', +'ad132.hpg.com.br', +'ad132.paycount.com', +'ad132m.adk2.co', +'ad133.hpg.com.br', +'ad133.paycount.com', +'ad133m.adk2.co', +'ad134.hpg.com.br', +'ad134.paycount.com', +'ad134m.adk2.co', +'ad135.hpg.com.br', +'ad135.paycount.com', +'ad135m.adk2.co', +'ad136.hpg.com.br', +'ad136.paycount.com', +'ad136m.adk2.co', +'ad137.hpg.com.br', +'ad137.paycount.com', +'ad137m.adk2.co', +'ad138.hpg.com.br', +'ad138.paycount.com', +'ad138m.adk2.co', +'ad139.hpg.com.br', +'ad139.paycount.com', +'ad139m.adk2.co', +'ad13m.adk2.co', +'ad14.bannerbank.ru', +'ad14.focalink.com', +'ad14.hpg.com.br', +'ad14.paycount.com', +'ad140.hpg.com.br', +'ad140.paycount.com', +'ad140m.adk2.co', +'ad141.hpg.com.br', +'ad141.paycount.com', +'ad141m.adk2.co', +'ad142.hpg.com.br', +'ad142.paycount.com', +'ad142m.adk2.co', +'ad143.hpg.com.br', +'ad143.paycount.com', +'ad143m.adk2.co', +'ad144.hpg.com.br', +'ad144.paycount.com', +'ad144m.adk2.co', +'ad145.hpg.com.br', +'ad145.paycount.com', +'ad145m.adk2.co', +'ad146.hpg.com.br', +'ad146.paycount.com', +'ad146m.adk2.co', +'ad147.hpg.com.br', +'ad147.paycount.com', +'ad147m.adk2.co', +'ad148.hpg.com.br', +'ad148.paycount.com', +'ad148m.adk2.co', +'ad149.hpg.com.br', +'ad149.paycount.com', +'ad149m.adk2.co', +'ad14m.adk2.co', +'ad15.bannerbank.ru', +'ad15.focalink.com', +'ad15.hpg.com.br', +'ad15.paycount.com', +'ad150.hpg.com.br', +'ad150.paycount.com', +'ad150m.adk2.co', +'ad151.hpg.com.br', +'ad151.paycount.com', +'ad151m.adk2.co', +'ad152.hpg.com.br', +'ad152.paycount.com', +'ad152m.adk2.co', +'ad153.hpg.com.br', +'ad153.paycount.com', +'ad153m.adk2.co', +'ad154.hpg.com.br', +'ad154.paycount.com', +'ad154m.adk2.co', +'ad155.hpg.com.br', +'ad155.paycount.com', +'ad155m.adk2.co', +'ad156.hpg.com.br', +'ad156.paycount.com', +'ad156m.adk2.co', +'ad157.hpg.com.br', +'ad157.paycount.com', +'ad157m.adk2.co', +'ad158.hpg.com.br', +'ad158.paycount.com', +'ad158m.adk2.co', +'ad159.hpg.com.br', +'ad159.paycount.com', +'ad159m.adk2.co', +'ad15m.adk2.co', +'ad16.bannerbank.ru', +'ad16.focalink.com', +'ad16.hpg.com.br', +'ad16.paycount.com', +'ad160.hpg.com.br', +'ad160.paycount.com', +'ad160m.adk2.co', +'ad161.hpg.com.br', +'ad161.paycount.com', +'ad161m.adk2.co', +'ad162.hpg.com.br', +'ad162.paycount.com', +'ad162m.adk2.co', +'ad163.hpg.com.br', +'ad163.paycount.com', +'ad163m.adk2.co', +'ad164.hpg.com.br', +'ad164.paycount.com', +'ad164m.adk2.co', +'ad165.hpg.com.br', +'ad165.paycount.com', +'ad165m.adk2.co', +'ad166.hpg.com.br', +'ad166.paycount.com', +'ad166m.adk2.co', +'ad167.hpg.com.br', +'ad167.paycount.com', +'ad167m.adk2.co', +'ad168.hpg.com.br', +'ad168.paycount.com', +'ad168m.adk2.co', +'ad169.hpg.com.br', +'ad169.paycount.com', +'ad169m.adk2.co', +'ad16m.adk2.co', +'ad17.bannerbank.ru', +'ad17.focalink.com', +'ad17.hpg.com.br', +'ad17.paycount.com', +'ad170.hpg.com.br', +'ad170.paycount.com', +'ad170m.adk2.co', +'ad171.hpg.com.br', +'ad171.paycount.com', +'ad171m.adk2.co', +'ad172.hpg.com.br', +'ad172.paycount.com', +'ad172m.adk2.co', +'ad173.hpg.com.br', +'ad173.paycount.com', +'ad173m.adk2.co', +'ad174.hpg.com.br', +'ad174.paycount.com', +'ad174m.adk2.co', +'ad175.hpg.com.br', +'ad175.paycount.com', +'ad175m.adk2.co', +'ad176.hpg.com.br', +'ad176.paycount.com', +'ad176m.adk2.co', +'ad177.hpg.com.br', +'ad177.paycount.com', +'ad177m.adk2.co', +'ad178.hpg.com.br', +'ad178.paycount.com', +'ad178m.adk2.co', +'ad179.hpg.com.br', +'ad179.paycount.com', +'ad179m.adk2.co', +'ad17m.adk2.co', +'ad18.bannerbank.ru', +'ad18.focalink.com', +'ad18.hpg.com.br', +'ad18.paycount.com', +'ad180.hpg.com.br', +'ad180.paycount.com', +'ad180m.adk2.co', +'ad181.hpg.com.br', +'ad181.paycount.com', +'ad181m.adk2.co', +'ad182.hpg.com.br', +'ad182.paycount.com', +'ad182m.adk2.co', +'ad183.hpg.com.br', +'ad183.paycount.com', +'ad183m.adk2.co', +'ad184.hpg.com.br', +'ad184.paycount.com', +'ad184m.adk2.co', +'ad185.hpg.com.br', +'ad185.paycount.com', +'ad185m.adk2.co', +'ad186.hpg.com.br', +'ad186.paycount.com', +'ad186m.adk2.co', +'ad187.hpg.com.br', +'ad187.paycount.com', +'ad187m.adk2.co', +'ad188.hpg.com.br', +'ad188.paycount.com', +'ad188m.adk2.co', +'ad189.hpg.com.br', +'ad189.paycount.com', +'ad189m.adk2.co', +'ad18m.adk2.co', +'ad19.bannerbank.ru', +'ad19.focalink.com', +'ad19.hpg.com.br', +'ad19.paycount.com', +'ad190.hpg.com.br', +'ad190.paycount.com', +'ad190m.adk2.co', +'ad191.hpg.com.br', +'ad191.paycount.com', +'ad191m.adk2.co', +'ad192.hpg.com.br', +'ad192.paycount.com', +'ad192m.adk2.co', +'ad193.hpg.com.br', +'ad193.paycount.com', +'ad193m.adk2.co', +'ad194.hpg.com.br', +'ad194.paycount.com', +'ad194m.adk2.co', +'ad195.hpg.com.br', +'ad195.paycount.com', +'ad195m.adk2.co', +'ad196.hpg.com.br', +'ad196.paycount.com', +'ad196m.adk2.co', +'ad197.hpg.com.br', +'ad197.paycount.com', +'ad197m.adk2.co', +'ad198.hpg.com.br', +'ad198.paycount.com', +'ad198m.adk2.co', +'ad199.hpg.com.br', +'ad199.paycount.com', +'ad199m.adk2.co', +'ad19m.adk2.co', +'ad1m.adk2.co', +'ad2.ad.doubleclick.net.77817.9665.302br.net', +'ad2.adfarm1.adition.com', +'ad2.adspaces.ero-advertising.com', +'ad2.adxpansion.com', +'ad2.allbanners.ru', +'ad2.api.ero-advertising.com', +'ad2.bannerbank.ru', +'ad2.banners.ero-advertising.com', +'ad2.bb.ru', +'ad2.doubleclick.net', +'ad2.doublepimp.com', +'ad2.ero-advertising.com', +'ad2.firehousezone.com', +'ad2.fivecdm.com', +'ad2.hpg.com.br', +'ad2.linxcz.cz', +'ad2.lupa.cz', +'ad2.paycount.com', +'ad2.rambler.ru', +'ad2.sbs.co.kr', +'ad2.speedbit.com', +'ad2.thumbs.ero-advertising.com', +'ad2.trafficgate.net', +'ad2.turn.com', +'ad2.yam.com', +'ad2.yam.com.tw', +'ad20.bannerbank.ru', +'ad20.hpg.com.br', +'ad20.net', +'ad20.paycount.com', +'ad200.hpg.com.br', +'ad200.paycount.com', +'ad2000.org', +'ad200m.adk2.co', +'ad201.hpg.com.br', +'ad201.paycount.com', +'ad201m.adk2.co', +'ad202.hpg.com.br', +'ad202.paycount.com', +'ad202m.adk2.co', +'ad203.hpg.com.br', +'ad203.paycount.com', +'ad203m.adk2.co', +'ad204.hpg.com.br', +'ad204.paycount.com', +'ad204m.adk2.co', +'ad205.hpg.com.br', +'ad205.paycount.com', +'ad205m.adk2.co', +'ad206.hpg.com.br', +'ad206.paycount.com', +'ad206m.adk2.co', +'ad207.hpg.com.br', +'ad207.paycount.com', +'ad207m.adk2.co', +'ad208.hpg.com.br', +'ad208.paycount.com', +'ad208m.adk2.co', +'ad209.hpg.com.br', +'ad209.paycount.com', +'ad209m.adk2.co', +'ad20m.adk2.co', +'ad21.hpg.com.br', +'ad21.paycount.com', +'ad210.hpg.com.br', +'ad210.paycount.com', +'ad210m.adk2.co', +'ad211.hpg.com.br', +'ad211.paycount.com', +'ad211m.adk2.co', +'ad212.hpg.com.br', +'ad212.paycount.com', +'ad212m.adk2.co', +'ad213.hpg.com.br', +'ad213.paycount.com', +'ad213m.adk2.co', +'ad214.hpg.com.br', +'ad214.paycount.com', +'ad214m.adk2.co', +'ad215.hpg.com.br', +'ad215.paycount.com', +'ad215m.adk2.co', +'ad216.hpg.com.br', +'ad216.paycount.com', +'ad216m.adk2.co', +'ad217.hpg.com.br', +'ad217.paycount.com', +'ad217m.adk2.co', +'ad218.hpg.com.br', +'ad218.paycount.com', +'ad218m.adk2.co', +'ad219.hpg.com.br', +'ad219.paycount.com', +'ad219m.adk2.co', +'ad21m.adk2.co', +'ad22.hpg.com.br', +'ad22.paycount.com', +'ad220.hpg.com.br', +'ad220.paycount.com', +'ad220m.adk2.co', +'ad221.hpg.com.br', +'ad221.paycount.com', +'ad221m.adk2.co', +'ad222.hpg.com.br', +'ad222.paycount.com', +'ad222m.adk2.co', +'ad223.hpg.com.br', +'ad223.paycount.com', +'ad223m.adk2.co', +'ad224.hpg.com.br', +'ad224.paycount.com', +'ad224m.adk2.co', +'ad225.hpg.com.br', +'ad225.paycount.com', +'ad225m.adk2.co', +'ad226.hpg.com.br', +'ad226.paycount.com', +'ad226m.adk2.co', +'ad227.hpg.com.br', +'ad227.paycount.com', +'ad227m.adk2.co', +'ad228.hpg.com.br', +'ad228.paycount.com', +'ad228m.adk2.co', +'ad229.hpg.com.br', +'ad229.paycount.com', +'ad229m.adk2.co', +'ad22m.adk2.co', +'ad23.hpg.com.br', +'ad23.paycount.com', +'ad230.hpg.com.br', +'ad230.paycount.com', +'ad230m.adk2.co', +'ad231.hpg.com.br', +'ad231.paycount.com', +'ad231m.adk2.co', +'ad232.hpg.com.br', +'ad232.paycount.com', +'ad232m.adk2.co', +'ad233.hpg.com.br', +'ad233.paycount.com', +'ad233m.adk2.co', +'ad234.hpg.com.br', +'ad234.paycount.com', +'ad234m.adk2.co', +'ad235.hpg.com.br', +'ad235.paycount.com', +'ad235m.adk2.co', +'ad236.hpg.com.br', +'ad236.paycount.com', +'ad236m.adk2.co', +'ad237.hpg.com.br', +'ad237.paycount.com', +'ad237m.adk2.co', +'ad238.hpg.com.br', +'ad238.paycount.com', +'ad238m.adk2.co', +'ad239.hpg.com.br', +'ad239.paycount.com', +'ad239m.adk2.co', +'ad23m.adk2.co', +'ad24.hpg.com.br', +'ad24.paycount.com', +'ad240.hpg.com.br', +'ad240.paycount.com', +'ad240m.adk2.co', +'ad241.hpg.com.br', +'ad241.paycount.com', +'ad241m.adk2.co', +'ad242.hpg.com.br', +'ad242.paycount.com', +'ad242m.adk2.co', +'ad243.hpg.com.br', +'ad243.paycount.com', +'ad243m.adk2.co', +'ad244.hpg.com.br', +'ad244.paycount.com', +'ad244m.adk2.co', +'ad245.hpg.com.br', +'ad245.paycount.com', +'ad245m.adk2.co', +'ad246.hpg.com.br', +'ad246.paycount.com', +'ad246m.adk2.co', +'ad247.hpg.com.br', +'ad247.paycount.com', +'ad247m.adk2.co', +'ad248.hpg.com.br', +'ad248.paycount.com', +'ad248m.adk2.co', +'ad249.hpg.com.br', +'ad249.paycount.com', +'ad249m.adk2.co', +'ad24m.adk2.co', +'ad25.hpg.com.br', +'ad25.paycount.com', +'ad250.hpg.com.br', +'ad250.paycount.com', +'ad250m.adk2.co', +'ad251.hpg.com.br', +'ad251.paycount.com', +'ad251m.adk2.co', +'ad252.hpg.com.br', +'ad252.paycount.com', +'ad252m.adk2.co', +'ad253.hpg.com.br', +'ad253.paycount.com', +'ad253m.adk2.co', +'ad254.hpg.com.br', +'ad254.paycount.com', +'ad254m.adk2.co', +'ad255.hpg.com.br', +'ad255.paycount.com', +'ad255m.adk2.co', +'ad256m.adk2.co', +'ad257m.adk2.co', +'ad258m.adk2.co', +'ad259m.adk2.co', +'ad25m.adk2.co', +'ad26.hpg.com.br', +'ad26.paycount.com', +'ad260m.adk2.co', +'ad261m.adk2.co', +'ad262m.adk2.co', +'ad263m.adk2.co', +'ad264m.adk2.co', +'ad265m.adk2.co', +'ad266m.adk2.co', +'ad267m.adk2.co', +'ad268m.adk2.co', +'ad269m.adk2.co', +'ad26m.adk2.co', +'ad27.hpg.com.br', +'ad27.paycount.com', +'ad270m.adk2.co', +'ad271m.adk2.co', +'ad272m.adk2.co', +'ad273m.adk2.co', +'ad274m.adk2.co', +'ad275m.adk2.co', +'ad276m.adk2.co', +'ad277m.adk2.co', +'ad278m.adk2.co', +'ad279m.adk2.co', +'ad27m.adk2.co', +'ad28.hpg.com.br', +'ad28.paycount.com', +'ad280m.adk2.co', +'ad281m.adk2.co', +'ad282m.adk2.co', +'ad283m.adk2.co', +'ad284m.adk2.co', +'ad285m.adk2.co', +'ad286m.adk2.co', +'ad287m.adk2.co', +'ad288m.adk2.co', +'ad289m.adk2.co', +'ad28m.adk2.co', +'ad29.hpg.com.br', +'ad29.paycount.com', +'ad290m.adk2.co', +'ad291m.adk2.co', +'ad292m.adk2.co', +'ad293m.adk2.co', +'ad294m.adk2.co', +'ad295m.adk2.co', +'ad296m.adk2.co', +'ad297m.adk2.co', +'ad298m.adk2.co', +'ad299m.adk2.co', +'ad29m.adk2.co', +'ad2adnetwork.biz', +'ad2click.go2cloud.org', +'ad2games.com', +'ad2m.adk2.co', +'ad2play.ftv-publicite.fr', +'ad2up.com', +'ad3.adfarm1.adition.com', +'ad3.adspaces.ero-advertising.com', +'ad3.allbanners.ru', +'ad3.api.ero-advertising.com', +'ad3.bannerbank.ru', +'ad3.banners.ero-advertising.com', +'ad3.bb.ru', +'ad3.doublepimp.com', +'ad3.fpa.ero-advertising.com', +'ad3.hpg.com.br', +'ad3.pamedia.com.au', +'ad3.paycount.com', +'ad3.sbs.co.kr', +'ad3.sina.com.cn', +'ad3.speedbit.com', +'ad30.hpg.com.br', +'ad30.paycount.com', +'ad300m.adk2.co', +'ad301m.adk2.co', +'ad302m.adk2.co', +'ad303m.adk2.co', +'ad304m.adk2.co', +'ad305m.adk2.co', +'ad306m.adk2.co', +'ad307m.adk2.co', +'ad308m.adk2.co', +'ad309m.adk2.co', +'ad30m.adk2.co', +'ad31.hpg.com.br', +'ad31.paycount.com', +'ad310m.adk2.co', +'ad311m.adk2.co', +'ad312m.adk2.co', +'ad313m.adk2.co', +'ad314m.adk2.co', +'ad315m.adk2.co', +'ad316m.adk2.co', +'ad317m.adk2.co', +'ad318m.adk2.co', +'ad319m.adk2.co', +'ad31m.adk2.co', +'ad32.hpg.com.br', +'ad32.paycount.com', +'ad320m.adk2.co', +'ad321m.adk2.co', +'ad322m.adk2.co', +'ad323m.adk2.co', +'ad324m.adk2.co', +'ad325m.adk2.co', +'ad326m.adk2.co', +'ad327m.adk2.co', +'ad328m.adk2.co', +'ad329m.adk2.co', +'ad32m.adk2.co', +'ad33.hpg.com.br', +'ad33.paycount.com', +'ad330m.adk2.co', +'ad331m.adk2.co', +'ad332m.adk2.co', +'ad333m.adk2.co', +'ad334m.adk2.co', +'ad335m.adk2.co', +'ad336m.adk2.co', +'ad337m.adk2.co', +'ad338m.adk2.co', +'ad339m.adk2.co', +'ad33m.adk2.co', +'ad34.hpg.com.br', +'ad34.paycount.com', +'ad340m.adk2.co', +'ad341m.adk2.co', +'ad342m.adk2.co', +'ad343m.adk2.co', +'ad344m.adk2.co', +'ad345m.adk2.co', +'ad346m.adk2.co', +'ad347m.adk2.co', +'ad348m.adk2.co', +'ad349m.adk2.co', +'ad34m.adk2.co', +'ad35.hpg.com.br', +'ad35.paycount.com', +'ad350m.adk2.co', +'ad351m.adk2.co', +'ad352m.adk2.co', +'ad353m.adk2.co', +'ad354m.adk2.co', +'ad355m.adk2.co', +'ad356m.adk2.co', +'ad357m.adk2.co', +'ad358m.adk2.co', +'ad359m.adk2.co', +'ad35m.adk2.co', +'ad36.hpg.com.br', +'ad36.paycount.com', +'ad360.vn', +'ad360m.adk2.co', +'ad361m.adk2.co', +'ad362m.adk2.co', +'ad363m.adk2.co', +'ad364m.adk2.co', +'ad365m.adk2.co', +'ad366m.adk2.co', +'ad367m.adk2.co', +'ad368m.adk2.co', +'ad369m.adk2.co', +'ad36m.adk2.co', +'ad37.hpg.com.br', +'ad37.paycount.com', +'ad370m.adk2.co', +'ad371m.adk2.co', +'ad372m.adk2.co', +'ad373m.adk2.co', +'ad374m.adk2.co', +'ad375m.adk2.co', +'ad376m.adk2.co', +'ad377m.adk2.co', +'ad378m.adk2.co', +'ad379m.adk2.co', +'ad37m.adk2.co', +'ad38.hpg.com.br', +'ad38.paycount.com', +'ad380m.adk2.co', +'ad381m.adk2.co', +'ad382m.adk2.co', +'ad383m.adk2.co', +'ad384m.adk2.co', +'ad385m.adk2.co', +'ad386m.adk2.co', +'ad387m.adk2.co', +'ad388m.adk2.co', +'ad389m.adk2.co', +'ad38m.adk2.co', +'ad39.hpg.com.br', +'ad39.paycount.com', +'ad390m.adk2.co', +'ad391m.adk2.co', +'ad392m.adk2.co', +'ad393m.adk2.co', +'ad394m.adk2.co', +'ad395m.adk2.co', +'ad396m.adk2.co', +'ad397m.adk2.co', +'ad398m.adk2.co', +'ad399m.adk2.co', +'ad39m.adk2.co', +'ad3m.adk2.co', +'ad4.adfarm1.adition.com', +'ad4.adspaces.ero-advertising.com', +'ad4.api.ero-advertising.com', +'ad4.bannerbank.ru', +'ad4.banners.ero-advertising.com', +'ad4.bb.ru', +'ad4.enet.com.cn', +'ad4.hpg.com.br', +'ad4.layerads.ero-advertising.com', +'ad4.paycount.com', +'ad4.sina.com.cn', +'ad4.speedbit.com', +'ad4.thumbs.ero-advertising.com', +'ad40.hpg.com.br', +'ad40.paycount.com', +'ad400m.adk2.co', +'ad401m.adk2.co', +'ad402m.adk2.co', +'ad403m.adk2.co', +'ad404m.adk2.co', +'ad405m.adk2.co', +'ad406m.adk2.co', +'ad407m.adk2.co', +'ad408m.adk2.co', +'ad409m.adk2.co', +'ad40m.adk2.co', +'ad41.hpg.com.br', +'ad41.paycount.com', +'ad410m.adk2.co', +'ad411m.adk2.co', +'ad412m.adk2.co', +'ad413m.adk2.co', +'ad414m.adk2.co', +'ad415m.adk2.co', +'ad416m.adk2.co', +'ad417m.adk2.co', +'ad418m.adk2.co', +'ad419m.adk2.co', +'ad41m.adk2.co', +'ad42.hpg.com.br', +'ad42.paycount.com', +'ad420m.adk2.co', +'ad421m.adk2.co', +'ad422m.adk2.co', +'ad423m.adk2.co', +'ad424m.adk2.co', +'ad425m.adk2.co', +'ad426m.adk2.co', +'ad427m.adk2.co', +'ad428m.adk2.co', +'ad429m.adk2.co', +'ad42m.adk2.co', +'ad43.hpg.com.br', +'ad43.paycount.com', +'ad430m.adk2.co', +'ad431m.adk2.co', +'ad432m.adk2.co', +'ad433m.adk2.co', +'ad434m.adk2.co', +'ad435m.adk2.co', +'ad436m.adk2.co', +'ad437m.adk2.co', +'ad438m.adk2.co', +'ad439m.adk2.co', +'ad43m.adk2.co', +'ad44.hpg.com.br', +'ad44.paycount.com', +'ad440m.adk2.co', +'ad441m.adk2.co', +'ad442m.adk2.co', +'ad443m.adk2.co', +'ad444m.adk2.co', +'ad445m.adk2.co', +'ad446m.adk2.co', +'ad447m.adk2.co', +'ad448m.adk2.co', +'ad449m.adk2.co', +'ad44m.adk2.co', +'ad45.hpg.com.br', +'ad45.paycount.com', +'ad450m.adk2.co', +'ad451m.adk2.co', +'ad452m.adk2.co', +'ad453m.adk2.co', +'ad454m.adk2.co', +'ad455m.adk2.co', +'ad456m.adk2.co', +'ad457m.adk2.co', +'ad458m.adk2.co', +'ad459m.adk2.co', +'ad45m.adk2.co', +'ad46.hpg.com.br', +'ad46.paycount.com', +'ad460m.adk2.co', +'ad461m.adk2.co', +'ad462m.adk2.co', +'ad463m.adk2.co', +'ad464m.adk2.co', +'ad465m.adk2.co', +'ad466m.adk2.co', +'ad467m.adk2.co', +'ad468m.adk2.co', +'ad469m.adk2.co', +'ad46m.adk2.co', +'ad47.hpg.com.br', +'ad47.paycount.com', +'ad470m.adk2.co', +'ad471m.adk2.co', +'ad472m.adk2.co', +'ad473m.adk2.co', +'ad474m.adk2.co', +'ad475m.adk2.co', +'ad476m.adk2.co', +'ad477m.adk2.co', +'ad478m.adk2.co', +'ad479m.adk2.co', +'ad47m.adk2.co', +'ad48.hpg.com.br', +'ad48.paycount.com', +'ad480m.adk2.co', +'ad481m.adk2.co', +'ad482m.adk2.co', +'ad483m.adk2.co', +'ad484m.adk2.co', +'ad485m.adk2.co', +'ad486m.adk2.co', +'ad487m.adk2.co', +'ad488m.adk2.co', +'ad489m.adk2.co', +'ad48m.adk2.co', +'ad49.hpg.com.br', +'ad49.paycount.com', +'ad490m.adk2.co', +'ad491m.adk2.co', +'ad492m.adk2.co', +'ad493m.adk2.co', +'ad494m.adk2.co', +'ad495m.adk2.co', +'ad496m.adk2.co', +'ad497m.adk2.co', +'ad498m.adk2.co', +'ad499m.adk2.co', +'ad49m.adk2.co', +'ad4game.com', +'ad4games.com', +'ad4m.adk2.co', +'ad4mat.de', +'ad4me.net', +'ad4partners.com', +'ad5.adfarm1.adition.com', +'ad5.adrevolver.com', +'ad5.adspaces.ero-advertising.com', +'ad5.bannerbank.ru', +'ad5.banners.ero-advertising.com', +'ad5.bb.ru', +'ad5.fpa.ero-advertising.com', +'ad5.hpg.com.br', +'ad5.paycount.com', +'ad5.speedbit.com', +'ad50.hpg.com.br', +'ad50.paycount.com', +'ad500m.adk2.co', +'ad50m.adk2.co', +'ad51.hpg.com.br', +'ad51.paycount.com', +'ad51m.adk2.co', +'ad52.hpg.com.br', +'ad52.paycount.com', +'ad52m.adk2.co', +'ad53.hpg.com.br', +'ad53.paycount.com', +'ad53m.adk2.co', +'ad54.hpg.com.br', +'ad54.paycount.com', +'ad54m.adk2.co', +'ad55.hpg.com.br', +'ad55.paycount.com', +'ad55m.adk2.co', +'ad56.hpg.com.br', +'ad56.paycount.com', +'ad56m.adk2.co', +'ad57.hpg.com.br', +'ad57.paycount.com', +'ad57m.adk2.co', +'ad58.hpg.com.br', +'ad58.paycount.com', +'ad58m.adk2.co', +'ad59.hpg.com.br', +'ad59.paycount.com', +'ad59m.adk2.co', +'ad5m.adk2.co', +'ad6.adfarm1.adition.com', +'ad6.adspaces.ero-advertising.com', +'ad6.bannerbank.ru', +'ad6.banners.ero-advertising.com', +'ad6.bb.ru', +'ad6.hpg.com.br', +'ad6.paycount.com', +'ad6.speedbit.com', +'ad60.hpg.com.br', +'ad60.paycount.com', +'ad60m.adk2.co', +'ad61.hpg.com.br', +'ad61.paycount.com', +'ad61m.adk2.co', +'ad62.hpg.com.br', +'ad62.paycount.com', +'ad62m.adk2.co', +'ad63.hpg.com.br', +'ad63.paycount.com', +'ad63m.adk2.co', +'ad64.hpg.com.br', +'ad64.paycount.com', +'ad64m.adk2.co', +'ad65.hpg.com.br', +'ad65.paycount.com', +'ad65m.adk2.co', +'ad66.hpg.com.br', +'ad66.paycount.com', +'ad66m.adk2.co', +'ad67.hpg.com.br', +'ad67.paycount.com', +'ad67m.adk2.co', +'ad68.hpg.com.br', +'ad68.paycount.com', +'ad68m.adk2.co', +'ad69.hpg.com.br', +'ad69.paycount.com', +'ad69m.adk2.co', +'ad6m.adk2.co', +'ad6media.co.uk', +'ad6media.fr', +'ad7.ad.doubleclick.net.32840.9240.302br.net', +'ad7.adspaces.ero-advertising.com', +'ad7.api.ero-advertising.com', +'ad7.bannerbank.ru', +'ad7.banners.ero-advertising.com', +'ad7.bb.ru', +'ad7.hpg.com.br', +'ad7.paycount.com', +'ad7.speedbit.com', +'ad7.thumbs.ero-advertising.com', +'ad70.hpg.com.br', +'ad70.paycount.com', +'ad70m.adk2.co', +'ad71.hpg.com.br', +'ad71.paycount.com', +'ad71m.adk2.co', +'ad72.hpg.com.br', +'ad72.paycount.com', +'ad72m.adk2.co', +'ad73.hpg.com.br', +'ad73.paycount.com', +'ad73m.adk2.co', +'ad74.hpg.com.br', +'ad74.paycount.com', +'ad74m.adk2.co', +'ad75.hpg.com.br', +'ad75.paycount.com', +'ad75m.adk2.co', +'ad76.hpg.com.br', +'ad76.paycount.com', +'ad76m.adk2.co', +'ad77.hpg.com.br', +'ad77.paycount.com', +'ad77m.adk2.co', +'ad78.hpg.com.br', +'ad78.paycount.com', +'ad78m.adk2.co', +'ad79.hpg.com.br', +'ad79.paycount.com', +'ad79m.adk2.co', +'ad7m.adk2.co', +'ad8.adfarm1.adition.com', +'ad8.adspaces.ero-advertising.com', +'ad8.allbanners.ru', +'ad8.api.ero-advertising.com', +'ad8.bannerbank.ru', +'ad8.banners.ero-advertising.com', +'ad8.bb.ru', +'ad8.hpg.com.br', +'ad8.paycount.com', +'ad8.speedbit.com', +'ad80.hpg.com.br', +'ad80.paycount.com', +'ad80m.adk2.co', +'ad81.hpg.com.br', +'ad81.paycount.com', +'ad81m.adk2.co', +'ad82.hpg.com.br', +'ad82.paycount.com', +'ad82m.adk2.co', +'ad83.hpg.com.br', +'ad83.paycount.com', +'ad83m.adk2.co', +'ad84.hpg.com.br', +'ad84.paycount.com', +'ad84m.adk2.co', +'ad85.hpg.com.br', +'ad85.paycount.com', +'ad85m.adk2.co', +'ad86.hpg.com.br', +'ad86.paycount.com', +'ad86m.adk2.co', +'ad87.hpg.com.br', +'ad87.paycount.com', +'ad87m.adk2.co', +'ad88.hpg.com.br', +'ad88.paycount.com', +'ad88m.adk2.co', +'ad89.hpg.com.br', +'ad89.paycount.com', +'ad89m.adk2.co', +'ad8m.adk2.co', +'ad9.adfarm1.adition.com', +'ad9.bannerbank.ru', +'ad9.bb.ru', +'ad9.hpg.com.br', +'ad9.paycount.com', +'ad9.speedbit.com', +'ad90.hpg.com.br', +'ad90.paycount.com', +'ad90m.adk2.co', +'ad91.hpg.com.br', +'ad91.paycount.com', +'ad91m.adk2.co', +'ad92.hpg.com.br', +'ad92.paycount.com', +'ad92m.adk2.co', +'ad93.hpg.com.br', +'ad93.paycount.com', +'ad93m.adk2.co', +'ad94.hpg.com.br', +'ad94.paycount.com', +'ad94m.adk2.co', +'ad95.hpg.com.br', +'ad95.paycount.com', +'ad95m.adk2.co', +'ad96.hpg.com.br', +'ad96.paycount.com', +'ad96m.adk2.co', +'ad97.hpg.com.br', +'ad97.paycount.com', +'ad97m.adk2.co', +'ad98.hpg.com.br', +'ad98.paycount.com', +'ad98m.adk2.co', +'ad99.hpg.com.br', +'ad99.paycount.com', +'ad99m.adk2.co', +'ad9m.adk2.co', +'adac02.webtrekk.net', +'adacado.com', +'adaction.se', +'adactioninteractive.go2cloud.org', +'adadapter.netzathleten-media.de', +'adadvisor.net', +'adamoads.com', +'adan1.xtendmedia.com', +'adaos-ads.net', +'adap.tv', +'adapi.inlcorp.com', +'adaroo.go2cloud.org', +'adart.go2cloud.org', +'adattract.go2cloud.org', +'adb.nikkei.co.jp', +'adbank.go2cloud.org', +'adbanner.cz', +'adbanner.mylinea.com', +'adbanner.ro', +'adbanners.bizland.com', +'adbard.net', +'adbazaar.go2cloud.org', +'adbenefit.go2cloud.org', +'adbest.com', +'adbest.net', +'adbird.go2affise.com', +'adbit.co', +'adbl.spieletipps.de', +'adblade.com', +'adbonus.com', +'adboost.com', +'adboost.serverpower.net', +'adbooth.go2cloud.org', +'adbot.com', +'adbox.beweb.com', +'adbrands.co.il', +'adbrite.com', +'adbucks.brandreachsys.com', +'adbucks.com', +'adbuddiz.com', +'adbull.com', +'adbureau.com', +'adbureau.ru', +'adbutler.com', +'adbuyer.com', +'adbuyer2.lycos.com', +'adbuyer3.lycos.com', +'adc.go2cloud.org', +'adc.people-group.su', +'adc.tripple.at', +'adcache.aftenposten.no', +'adcade.com', +'adcamp.ru', +'adcash.com', +'adcastplus.net', +'adcdnx.com', +'adcel.vrvm.com', +'adcell.de', +'adcenter.mdf.se', +'adcenter.net', +'adcentric.go2cloud.org', +'adchap.com', +'adcheck.about.co.kr', +'adchoices.com.vn', +'adcito.com', +'adclear.adclear.net', +'adclear.net', +'adclick.com', +'adclick.de', +'adclick.g.doubleclick.net', +'adclick.lv', +'adclick.nl', +'adclick.pk', +'adclick.ru', +'adclickafrica.com', +'adclickint.go2cloud.org', +'adclickmedia.com', +'adclickxpress.com', +'adclient-uol.lp.uol.com.br', +'adclient.163.com', +'adclient.detelefoongids.nl', +'adclient.uimserv.net', +'adclient1.tucows.com', +'adclix.com', +'adclix.org', +'adcloud.net', +'adclub.net', +'adcolo.com', +'adcolony.com', +'adcomplete.com', +'adconfig.infolife.mobi', +'adcontent.gamespy.com', +'adcontent.saymedia.com', +'adcount.hollywood.com', +'adcounter.theglobeandmail.com', +'adcrimson.go2cloud.org', +'adcron.com', +'adcycle.com', +'adcycle.everyone.net', +'add3.go2affise.com', +'addapptr.com', +'addash.co', +'addbtest.timesink.com', +'addeppo.com', +'addfreestats.com', +'addltest.timesink.com', +'addoer.com', +'addressingbxmqasxix.download', +'addrev.go2cloud.org', +'addroid.com', +'adds.weatherology.com', +'addspro.go2cloud.org', +'addstats.com', +'addthis.com', +'addtosite.netster.com', +'addupp.com', +'addvaluemedia.go2affise.com', +'addvaluemedia.go2cloud.org', +'addynamics.eu', +'addynamix.com', +'addynamo.net', +'ade.clmbtech.com', +'adecn.adnxs.com', +'adecn.com', +'adedy.com', +'adelement.com', +'adelogs.wip4.adobe.com', +'ademails.com', +'adengage.com', +'adengine.theglobe.net', +'adespresso.com', +'adex.adchakra.net', +'adex.admailtiser.com', +'adexc.net', +'adexce.net', +'adexchangeperformance.com', +'adexcite.com', +'adexit.com', +'adexit.de', +'adexm.com', +'adexperts.com', +'adext.inkclub.com', +'adexten.com', +'adextent.com', +'adf.ero-advertising.com', +'adf.send.microad.jp', +'adfacten.go2cloud.org', +'adfactory88.com', +'adfarm.mediaplex.com', +'adfarm.mediaplex.com.22114.9130.302br.net', +'adfarm.mediaplex.com.22123.9130.302br.net', +'adfarm.mediaplex.com.22124.9130.302br.net', +'adfarm.mediaplex.com.22130.9130.302br.net', +'adfarm.mediaplex.com.22135.9130.302br.net', +'adfarm.mediaplex.com.22141.9130.302br.net', +'adfarm.mediaplex.com.22144.9130.302br.net', +'adfarm.mediaplex.com.22153.9130.302br.net', +'adfarm.mediaplex.com.22154.9130.302br.net', +'adfarm.mediaplex.com.22159.9130.302br.net', +'adfarm.mediaplex.com.22165.9130.302br.net', +'adfarm.mediaplex.com.22168.9130.302br.net', +'adfarm.mediaplex.com.22169.9130.302br.net', +'adfarm.mediaplex.com.22174.9130.302br.net', +'adfarm.mediaplex.com.22183.9130.302br.net', +'adfarm.mediaplex.com.22189.9130.302br.net', +'adfarm.mediaplex.com.22198.9130.302br.net', +'adfarm.mediaplex.com.22201.9130.302br.net', +'adfarm.mediaplex.com.22213.9130.302br.net', +'adfarm.mediaplex.com.22222.9130.302br.net', +'adfarm.mediaplex.com.22223.9130.302br.net', +'adfarm.mediaplex.com.22225.9130.302br.net', +'adfarm.mediaplex.com.22228.9130.302br.net', +'adfarm.mediaplex.com.22229.9130.302br.net', +'adfarm.mediaplex.com.22231.9130.302br.net', +'adfarm.mediaplex.com.22234.9130.302br.net', +'adfarm.mediaplex.com.22237.9130.302br.net', +'adfarm.mediaplex.com.22240.9130.302br.net', +'adfarm.mediaplex.com.22243.9130.302br.net', +'adfarm.mediaplex.com.22246.9130.302br.net', +'adfarm.mediaplex.com.22247.9130.302br.net', +'adfarm.mediaplex.com.22249.9130.302br.net', +'adfarm.mediaplex.com.22252.9130.302br.net', +'adfarm.mediaplex.com.22253.9130.302br.net', +'adfarm.mediaplex.com.22255.9130.302br.net', +'adfarm.mediaplex.com.22258.9130.302br.net', +'adfarm.mediaplex.com.22261.9130.302br.net', +'adfarm.mediaplex.com.22262.9130.302br.net', +'adfarm.mediaplex.com.22267.9130.302br.net', +'adfarm.mediaplex.com.22270.9130.302br.net', +'adfarm.mediaplex.com.22271.9130.302br.net', +'adfarm.mediaplex.com.22276.9130.302br.net', +'adfarm.mediaplex.com.22277.9130.302br.net', +'adfarm.mediaplex.com.22282.9130.302br.net', +'adfarm.mediaplex.com.22283.9130.302br.net', +'adfarm.mediaplex.com.22288.9130.302br.net', +'adfarm.mediaplex.com.22291.9130.302br.net', +'adfarm.mediaplex.com.22294.9130.302br.net', +'adfarm.mediaplex.com.22297.9130.302br.net', +'adfarm.mediaplex.com.22298.9130.302br.net', +'adfarm.mediaplex.com.22303.9130.302br.net', +'adfarm.mediaplex.com.22304.9130.302br.net', +'adfarm.mediaplex.com.22306.9130.302br.net', +'adfarm.mediaplex.com.22309.9130.302br.net', +'adfarm.mediaplex.com.22312.9130.302br.net', +'adfarm.mediaplex.com.22315.9130.302br.net', +'adfarm.mediaplex.com.22316.9130.302br.net', +'adfarm.mediaplex.com.22318.9130.302br.net', +'adfarm.mediaplex.com.22321.9130.302br.net', +'adfarm.mediaplex.com.22324.9130.302br.net', +'adfarm.mediaplex.com.22325.9130.302br.net', +'adfarm.mediaplex.com.22327.9130.302br.net', +'adfarm.mediaplex.com.22328.9130.302br.net', +'adfarm.mediaplex.com.22330.9130.302br.net', +'adfarm.mediaplex.com.22333.9130.302br.net', +'adfarm.mediaplex.com.22334.9130.302br.net', +'adfarm.mediaplex.com.22336.9130.302br.net', +'adfarm.mediaplex.com.22337.9130.302br.net', +'adfarm.mediaplex.com.22339.9130.302br.net', +'adfarm.mediaplex.com.22342.9130.302br.net', +'adfarm.mediaplex.com.22343.9130.302br.net', +'adfarm.mediaplex.com.22345.9130.302br.net', +'adfarm.mediaplex.com.22348.9130.302br.net', +'adfarm.mediaplex.com.22349.9130.302br.net', +'adfarm.mediaplex.com.22351.9130.302br.net', +'adfarm.mediaplex.com.22354.9130.302br.net', +'adfarm.mediaplex.com.22355.9130.302br.net', +'adfarm.mediaplex.com.22360.9130.302br.net', +'adfarm.mediaplex.com.22361.9130.302br.net', +'adfarm.mediaplex.com.22363.9130.302br.net', +'adfarm.mediaplex.com.22366.9130.302br.net', +'adfarm.mediaplex.com.22367.9130.302br.net', +'adfarm.mediaplex.com.22369.9130.302br.net', +'adfarm.mediaplex.com.22370.9130.302br.net', +'adfarm.mediaplex.com.22375.9130.302br.net', +'adfarm.mediaplex.com.22376.9130.302br.net', +'adfarm.mediaplex.com.22378.9130.302br.net', +'adfarm.mediaplex.com.22381.9130.302br.net', +'adfarm.mediaplex.com.22382.9130.302br.net', +'adfarm.mediaplex.com.22384.9130.302br.net', +'adfarm.mediaplex.com.22385.9130.302br.net', +'adfarm.mediaplex.com.22396.9130.302br.net', +'adfarm.mediaplex.com.22483.9130.302br.net', +'adfarm.mediaplex.com.22484.9130.302br.net', +'adfarm.mediaplex.com.22486.9130.302br.net', +'adfarm.mediaplex.com.22487.9130.302br.net', +'adfarm.mediaplex.com.22489.9130.302br.net', +'adfarm.mediaplex.com.22490.9130.302br.net', +'adfarm.mediaplex.com.22492.9130.302br.net', +'adfarm.mediaplex.com.24914.9130.302br.net', +'adfarm.mediaplex.com.76487.9626.302br.net', +'adfarm.mediaplex.com.76488.9626.302br.net', +'adfarm1.adition.com', +'adfavori.go2cloud.org', +'adfest.com', +'adfishmedia.go2cloud.org', +'adflight.com', +'adfluence.net', +'adfoc.us', +'adfootprints.com', +'adforce.adtech.fr', +'adforce.com', +'adforce.ru', +'adforgames.com', +'adfornepal.com', +'adfox.ru', +'adfpaces.ero-advertising.com', +'adframesrc.com', +'adfrontiers.com', +'adfu.slashdot.org', +'adfuel.com', +'adfusion.com', +'adfux.com', +'adg.bzgint.com', +'adgaem.go2cloud.org', +'adgale.com', +'adgardener.com', +'adgatemedia.com', +'adgatemedia.go2cloud.org', +'adgear.com', +'adgebra.co.in', +'adgebra.in', +'adgenie.co.uk', +'adgent007.com', +'adgine.net', +'adgitize.com', +'adglobal.go2cloud.org', +'adgorithms.com', +'adgoto.com', +'adgridwork.com', +'adgroups.com', +'adgroups.net', +'adgrx.moatads.com', +'adhall.com', +'adhese.be', +'adhese.com', +'adhese.net', +'adhitprofits.com', +'adhitzads.com', +'adhood.com', +'adhost.com', +'adhostingsolutions.com', +'adhub.co.nz', +'adhubz.com', +'adialy.go2cloud.org', +'adicate.com', +'adify.com', +'adigniter.org', +'adimage.asia1.com.sg', +'adimages.been.com', +'adimages.go.com', +'adimages.homestore.com', +'adimages.sanomawsoy.fi', +'adimages.sina.com.hk', +'adimages.tmpw.net', +'adimages.whowhere.com', +'adimg.activeadv.net', +'adimg.cnet.com', +'adimg.egroups.com', +'adimg.simmani.com', +'adimg.uimserv.net', +'adimg.virgilio.it', +'adimg.zdnet.com', +'adimg1.chosun.com', +'adimg1.chosun.net', +'adimg3.search.naver.net', +'adimgs.sapo.pt', +'adimise.com', +'adimpact.com', +'adimpression.net', +'adinch.com', +'adindigo.com', +'adinfinity.com.au', +'adinfuse.com', +'adinsight.co.kr', +'adinterax.com', +'adintop.go2cloud.org', +'adipics.com', +'adiqglobal.com', +'adisfy.com', +'adisn.com', +'adistas.go2cloud.org', +'adition.com', +'adition.net', +'aditmedia.go2affise.com', +'aditor.go2cloud.org', +'adjal.com', +'adjal.go2cloud.org', +'adjaws.go2cloud.org', +'adjector.com', +'adjewel.go2cloud.org', +'adjug.com', +'adjuggler.com', +'adjuggler.yourdictionary.com', +'adjump.go2cloud.org', +'adjungle.com', +'adk.go2cloud.org', +'adk2.com', +'adk2cdn.cpmrocket.com', +'adkaramba.go2cloud.org', +'adkernel.com', +'adklik.com.tr', +'adklip.com', +'adklo.com', +'adknowledge.com', +'adkompan.go2cloud.org', +'adland.co.il', +'adland.ru', +'adlatvia.com', +'adlead.com', +'adleague.go2cloud.org', +'adlegend.com', +'adlermode.com', +'adlet.voice2page.com', +'adlev.neodatagroup.com', +'adlibr.com', +'adlink.net', +'adlink.shopsafe.co.nz', +'adloaded.com', +'adlock.in', +'adlog.cbsi.com', +'adlog.com.com', +'adlog.flurry.com', +'adlogix.net', +'adlooxtracking.com', +'adluminious.go2affise.com', +'adm.fwmrm.net', +'adm.leju.sina.com.cn', +'adm.shinobi.jp', +'admagnet.go2cloud.org', +'admagnet.net', +'admailtiser.com', +'adman.gr', +'admanage.com', +'admanagement.ch', +'admanager.btopenworld.com', +'admanager.persianblog.com', +'admantic.ru', +'adman_test.go2cloud.org', +'admarket.entireweb.com', +'admarketplace.com', +'admarketplace.net', +'admarvel.com', +'admarvel.s3.amazonaws.com', +'admaster.com.cn', +'admaster.de', +'admaster.heyos.com', +'admaster.union.ucweb.com', +'admaven.adk2x.com', +'admax.go2cloud.org', +'admax.nexage.com', +'admaya.in', +'admaym.com', +'admazing.adfarm1.adition.com', +'admedia.com', +'admedo.com', +'admeld-match.dotomi.com', +'admeld.adnxs.com', +'admeld.com', +'admeta.com', +'admex.com', +'admez.com', +'admicro1.vcmedia.vn', +'admin.ads.basal.ca', +'admin.appnext.com', +'admin.chartboost.com', +'admin.clicksor.com', +'admin.download-sponsor.de', +'admin.fhserve.com', +'admin.performancerevenues.com', +'admin.rts.doublepimp.com', +'admin.rts.phn.doublepimp.com', +'admin.vserv.mobi', +'admin1.testandtarget.omniture.com', +'admin10.testandtarget.omniture.com', +'admin11.testandtarget.omniture.com', +'admin12.testandtarget.omniture.com', +'admin13.testandtarget.omniture.com', +'admin14.testandtarget.omniture.com', +'admin15.testandtarget.omniture.com', +'admin16.testandtarget.omniture.com', +'admin17.testandtarget.omniture.com', +'admin18.testandtarget.omniture.com', +'admin19.testandtarget.omniture.com', +'admin2.testandtarget.omniture.com', +'admin20.testandtarget.omniture.com', +'admin3.testandtarget.omniture.com', +'admin4.testandtarget.omniture.com', +'admin5.testandtarget.omniture.com', +'admin6.testandtarget.omniture.com', +'admin7.testandtarget.omniture.com', +'admin8.testandtarget.omniture.com', +'admin9.testandtarget.omniture.com', +'adminder.com', +'adminml.go2cloud.org', +'admission.net', +'admitad.com', +'admix.go2cloud.org', +'admixer.co.kr', +'admixer.net', +'admized.com', +'admn.go2cloud.org', +'admngronline.com', +'admob.com', +'admobiclick.go2cloud.org', +'admobile.com', +'admobit.go2cloud.org', +'admobsphere.go2cloud.org', +'admonitor.com', +'admonkey.dapper.net', +'admontest1.2cnt.net', +'admontestbalt.2cnt.net', +'admotion.com.ar', +'admoustache.go2affise.com', +'admp.sanoma.fi', +'admperformance.go2cloud.org', +'admtpmp127.adsk2.co', +'admulti.com', +'admyapp.net', +'adn.fusionads.net', +'adn.meinsol.de', +'adn.polluxnetwork.com', +'adnanny.go2cloud.org', +'adnection.com', +'adnet-media.net', +'adnet.asahi.com', +'adnet.biz', +'adnet.com', +'adnet.com.tr', +'adnet.mediawhiz.com', +'adnet.ru', +'adnet.vn', +'adnet7.go2cloud.org', +'adnetinternational.com', +'adnetmarket.go2cloud.org', +'adnetwork.free-h.fr', +'adnetwork.kataweb.it', +'adnetwork.nextgen.net', +'adnetworkme.com', +'adnetworkperformance.com', +'adnext.fr', +'adnimation.com', +'adnoble.com', +'adnotbad.com', +'adnotch.com', +'adnxs1.com', +'ado.internet.cz', +'ado.pro-market.net', +'adobemcspb.b.sc.omtrdc.net', +'adocean.pl', +'adolent.go2cloud.org', +'adonads.com', +'adonion.com', +'adonis.go2cloud.org', +'adonweb.ru', +'adopt.specificclick.net', +'adoptim.com', +'adorigin.com', +'adorika.net', +'adosia.com', +'adotic.com', +'adotmobanalytics.go2cloud.org', +'adotsolution.com', +'adotube.com', +'adp.cplaza.ne.jp', +'adp.go2cloud.org', +'adpanel.net', +'adparlor.com', +'adpay.com', +'adperf.go2cloud.org', +'adperfdemo.solution.weborama.fr', +'adperfect.com', +'adperium.com', +'adpetizer.go2cloud.org', +'adpile.go2affise.com', +'adpionier.de', +'adplace.adsame.com', +'adplace.i.adsame.com', +'adplans.info', +'adplans.net', +'adplexo.com', +'adplus.co.id', +'adpop.theglobe.net', +'adprimemedia.com', +'adprofessmedia.go2cloud.org', +'adprofs.com', +'adprojekt.pl', +'adprovider.adlure.net', +'adprudence.com', +'adpulse.ads.targetnet.com', +'adq.nextag.com', +'adqa.timesink.com', +'adqadb.timesink.com', +'adqadl.timesink.com', +'adquota.com', +'adr-g3-1.vindicosuite.com', +'adrd.taxuan.net', +'adreactor.com', +'adready.com', +'adreadytractions.com', +'adrent.net', +'adrepo.singlehop.com', +'adreporting.com', +'adres.internet.com', +'adresellers.com', +'adrevmedia.com', +'adrevolver.com', +'adrewards.com', +'adright.go2affise.com', +'adrise.de', +'adriver.ru', +'adroar.com', +'adrocket.com', +'adrolays.de', +'adroll.com', +'adrotator.com', +'adrotator.se', +'adrspain.go2cloud.org', +'adrtrklnk.com', +'adrunner.superstats.com', +'adrunnr.com', +'ads-03.tor.focusin.ads.targetnet.com', +'ads-au.onelouder.com', +'ads-b.focalink.com', +'ads-by.madadsmedia.com', +'ads-c.focalink.com', +'ads-f.focalink.com', +'ads-i.focalink.com', +'ads-instrument.focalink.com', +'ads-links.com', +'ads-static.saymedia.com', +'ads-trk.vidible.tv', +'ads-us.pictela.net', +'ads-ussj1.focalink.com', +'ads-ussnv2.focalink.com', +'ads.1000mercis.com', +'ads.100asians.com', +'ads.100megswebhosting.com', +'ads.118.lv', +'ads.123m.valueclick.net', +'ads.160tracker.com', +'ads.1a-infosysteme.de', +'ads.3d.com', +'ads.51.net', +'ads.5ci.lt', +'ads.8833.com', +'ads.accelerator-media.com', +'ads.acesse.com', +'ads.aceweb.net', +'ads.ad-center.com', +'ads.ad4game.com', +'ads.adamoads.com', +'ads.adaptv.advertising.com', +'ads.addynamix.com', +'ads.adengage.com', +'ads.adflight.com', +'ads.adfox.ru', +'ads.adfuzz.com', +'ads.adgorithms.com', +'ads.adgoto.com', +'ads.adhood.com', +'ads.aditor.com', +'ads.adjalauto.com', +'ads.adjust-net.jp', +'ads.admarvel.com', +'ads.admized.com', +'ads.adnet-plus.com', +'ads.adnet.de', +'ads.adonion.com', +'ads.adpv.com', +'ads.adrdgt.com', +'ads.ads360.com', +'ads.adsconsumer.com', +'ads.adsfirefly.com', +'ads.adshareware.net', +'ads.adsmart.net', +'ads.adsonar.com', +'ads.adsready.com', +'ads.adsrevenue.com', +'ads.adtarget.me', +'ads.adtegrity.net', +'ads.adthrive.com', +'ads.adtiger.de', +'ads.adultfriendfinder.com', +'ads.adultplex.com', +'ads.advance.de', +'ads.advance.net', +'ads.advance.uk.com', +'ads.adverline.com', +'ads.advertise.net', +'ads.adviva.net', +'ads.adworldnetwork.com', +'ads.adxpansion.com', +'ads.adzip.co', +'ads.affbuzzads.com', +'ads.affelix.com', +'ads.affiliates.match.com', +'ads.afixi.com', +'ads.aftama.mobi', +'ads.ahds.ac.uk', +'ads.aim4media.com', +'ads.airpush.com', +'ads.allotraffic.com', +'ads.allrecipes.com', +'ads.allsites.com', +'ads.alt.com', +'ads.amarillo.com', +'ads.amateurmatch.com', +'ads.amdmb.com', +'ads.amusive.com', +'ads.apn.co.nz', +'ads.app-authority.com', +'ads.appia.com', +'ads.applelinks.com', +'ads.appnext.com', +'ads.appsgeyser.com', +'ads.arcuspubblicita.it', +'ads.arrl.org', +'ads.as4x.tmcs.net', +'ads.as4x.tmcs.ticketmaster.com', +'ads.asexstories.com', +'ads.asia1.com.sg', +'ads.asiafriendfinder.com', +'ads.ask.com', +'ads.aspalliance.com', +'ads.aspectgroup.co.uk', +'ads.astroadvice.com', +'ads.auctionads.com', +'ads.auctioncity.co.nz', +'ads.auctions.yahoo.com', +'ads.audience2media.com', +'ads.audiencebank.com', +'ads.automobile.tn', +'ads.autotrader.com', +'ads.avazu.net', +'ads.ayads.co', +'ads.b10f.jp', +'ads.baazee.com', +'ads.babal.net', +'ads.bakersfield.com', +'ads.bangkokpost.co.th', +'ads.banner-link.com.br', +'ads.basal.ca', +'ads.bcsyndication.com', +'ads.befan.it', +'ads.beliefnet.com', +'ads.belointeractive.com', +'ads.berrynet.com', +'ads.best-ads.com', +'ads.betanews.com', +'ads.betweendigital.com', +'ads.bianca.com', +'ads.bianca.net', +'ads.bidclix.com', +'ads.bidvertiser.com', +'ads.bigasia.com', +'ads.bigfoot.com', +'ads.bitservices.no', +'ads.blamads.com', +'ads.blogdrive.com', +'ads.bloomberg.com', +'ads.blueadvertise.com', +'ads.bluefishnetwork.com', +'ads.bluelithium.com', +'ads.bluemongoose.com', +'ads.bluemountain.com', +'ads.bonnint.net', +'ads.bostonmedia.com', +'ads.brazzers.com', +'ads.buddypic.com', +'ads.bugnet.com', +'ads.businessweek.com', +'ads.buysell.com', +'ads.byggahus.se', +'ads.camrecord.com', +'ads.canoe.ca', +'ads.cantonrep.com', +'ads.carltononline.com', +'ads.cars.com', +'ads.cashsurfers.com', +'ads.catholic.org', +'ads.cbc.ca', +'ads.cc-dt.com', +'ads.cdn.rovio.com', +'ads.ce.cn', +'ads.celtra.com', +'ads.centraliprom.com', +'ads.centralmedia.ws', +'ads.cgchannel.com', +'ads.cgnetworks.com', +'ads.ch.adcenter.net', +'ads.champs-elysees.com', +'ads.channel4.com', +'ads.chickclick.com', +'ads.cinamuse.com', +'ads.cineble.com', +'ads.citenkomedia.com', +'ads.clearchannel.com', +'ads.click-now.co', +'ads.click2paid.com', +'ads.clickability.com', +'ads.clickad.com', +'ads.clickad.com.pl', +'ads.clickagents.com', +'ads.clickheal.com', +'ads.clicksor.cn', +'ads.clicksor.com', +'ads.clicmanager.fr', +'ads.clovenetwork.com', +'ads.clubphoto.com', +'ads.clubplanet.com', +'ads.cnbc.com', +'ads.cnet.com', +'ads.cobrad.com', +'ads.columbian.com', +'ads.comeadvertisewithus.com', +'ads.commission365.com', +'ads.communitech.net', +'ads.computer.org', +'ads.consolemul.com', +'ads.contactmusic.com', +'ads.contentabc.com', +'ads.contextweb.com', +'ads.coolmobilegroup.com', +'ads.corky.net', +'ads.cosmosmagazine.com', +'ads.cpxcenter.com', +'ads.crakmedia.com', +'ads.creafi-online-media.com', +'ads.creative-serving.com', +'ads.creativelayers.de', +'ads.ctasnet.com', +'ads.cwcity.de', +'ads.cyberprog.net', +'ads.cybersales.cz', +'ads.dada.it', +'ads.dai.org', +'ads.dailyjolt.com', +'ads.datais.com', +'ads.date.com', +'ads.dealhelper.com', +'ads.delfi.ee', +'ads.deliads.com', +'ads.democratandchronicle.com', +'ads.dennisnet.co.uk', +'ads.denverbroncos.com', +'ads.depositfiles.com', +'ads.depositfiles.org', +'ads.desktopdollars.com', +'ads.desmoinesregister.com', +'ads.detelefoongids.nl', +'ads.deviantart.com', +'ads.devx.com', +'ads.dfiles.eu', +'ads.dfiles.ru', +'ads.dgonn.com', +'ads.dhakatribune.com', +'ads.digital-digest.com', +'ads.digitalmedianet.com', +'ads.digitalpoint.com', +'ads.dinclinx.com', +'ads.dir.bg', +'ads.directionsmag.com', +'ads.displayincloud.com', +'ads.dns-look-up.com', +'ads.doctors.co.il', +'ads.doublemax.net', +'ads.doublepimp.com', +'ads.downloadaccelerator.com', +'ads.downloadmix.de', +'ads.dragonfru.it', +'ads.drf.com', +'ads.dropspam.com', +'ads.drugs.com', +'ads.dvdreview.com', +'ads.e-planning.net', +'ads.e-webtrack.net', +'ads.e9china.com', +'ads.easy-ads.com', +'ads.ebay.com', +'ads.ebihoreanul.ro', +'ads.ecircles.com', +'ads.economist.com', +'ads.egrana.com.br', +'ads.elementodigital.org', +'ads.eltiempo.com', +'ads.emg-network.com', +'ads.emol.com', +'ads.emule-island.ru', +'ads.eniro.com', +'ads.enliven.net', +'ads.epatra.com', +'ads.epom.com', +'ads.ero-advertising.com', +'ads.eromarkt.de', +'ads.erotism.net', +'ads.erotism.nl', +'ads.ethicalads.net', +'ads.etoiledirect.com', +'ads.eu.msn.com', +'ads.eurogrand.com', +'ads.everyplay.com', +'ads.ewebse.com', +'ads.exactdrive.com', +'ads.examiner.net', +'ads.exchange-it.com', +'ads.exdynsrv.com', +'ads.exoclick.com', +'ads.expatinbulgaria.com', +'ads.expedia.com', +'ads.expotv.com', +'ads.ezcybersearch.com', +'ads.facebook.com', +'ads.fairfax.com.au', +'ads.fashionsupreme.co.uk', +'ads.fcnet.de', +'ads.fetnet.net', +'ads.filefront.com', +'ads.filez.com', +'ads.filez.nl', +'ads.filmlush.com', +'ads.filmup.com', +'ads.finance.yahoo.com', +'ads.flashtrack.net', +'ads.flightsim.com', +'ads.flipkart.com', +'ads.flixaddict.com', +'ads.flooble.com', +'ads.flurry.com', +'ads.focalink.com', +'ads.foodieblogroll.com', +'ads.fool.com', +'ads.fool.org', +'ads.footar.com', +'ads.forbes.com', +'ads.forbes.net', +'ads.fortunecity.co.uk', +'ads.fortunecity.com', +'ads.fortunecity.de', +'ads.fortunecity.org', +'ads.fotoable.com', +'ads.fredericksburg.com', +'ads.free-banners.com', +'ads.freearcade.com', +'ads.freecity.de', +'ads.freeze.com', +'ads.freshmeat.net', +'ads.friendfinder.com', +'ads.friendtest.com', +'ads.ft.com', +'ads.fulltraffic.net', +'ads.funfarsi.ir', +'ads.gad-network.com', +'ads.game.net', +'ads.gamecity.net', +'ads.gamecopyworld.no', +'ads.gamershell.com', +'ads.gamesbannernet.com', +'ads.gamespyid.com', +'ads.gamigo.de', +'ads.gawker.com', +'ads.gay.com', +'ads.gemscool.com', +'ads.genericlink.com', +'ads.geoads.net', +'ads.gfy.com', +'ads.glispa.com', +'ads.globaltraffico.com', +'ads.globo.com', +'ads.gltrkk.com', +'ads.gmtracker.com', +'ads.golem.de', +'ads.google.com', +'ads.gorillavid.com', +'ads.goyk.com', +'ads.greatoutdoors.com', +'ads.gree.net', +'ads.grindinggears.com', +'ads.grokads.com', +'ads.grupozeta.es', +'ads.guardian.co.uk', +'ads.guardianunlimited.co.uk', +'ads.gumgum.com', +'ads.guru3d.com', +'ads.haberler.com', +'ads.hamtonroads.com', +'ads.harpercollins.co.uk', +'ads.harpers.org', +'ads.hbv.de', +'ads.hdn.valueclick.net', +'ads.heartlight.org', +'ads.hecklers.org', +'ads.heias.com', +'ads.hexasoft.com.my', +'ads.heyu.net', +'ads.heyzap.com', +'ads.hitbox.com', +'ads.hitcents.com', +'ads.hmn-net.com', +'ads.hnet.valueclick.net', +'ads.hollandsentinel.com', +'ads.hollywood.com', +'ads.home.net', +'ads.hornymatches.com', +'ads.hostingbuy.net', +'ads.howabout.net', +'ads.howtoroot.mobi', +'ads.hpg.com.br', +'ads.hpg.ig.com.br', +'ads.hsoub.com', +'ads.huma.valueclick.net', +'ads.iac-online.de', +'ads.iafrica.com', +'ads.iawsnetwork.com', +'ads.ibtracking.com', +'ads.iconpeak.com', +'ads.icq.com', +'ads.idg.com.pl', +'ads.ign.com', +'ads.iknownetwork.com', +'ads.iknowthatgirl.com', +'ads.imagine-inc.com', +'ads.imailo.nl', +'ads.imdb.nl', +'ads.imdb.org', +'ads.img.co.za', +'ads.immobilienscout24.de', +'ads.inbox.lv', +'ads.incmd03.com', +'ads.incmd09.com', +'ads.indians.com', +'ads.indiatimes.com', +'ads.indystar.com', +'ads.inet.co.th', +'ads.inet1.com', +'ads.inetinteractive.com', +'ads.infi.net', +'ads.ino.com', +'ads.interfacelift.com', +'ads.intergi.com', +'ads.internet-optimizer.com', +'ads.internic.co.il', +'ads.ioam.de', +'ads.iol.co.il', +'ads.ipowerweb.com', +'ads.isat-tech.com', +'ads.isoftmarketing.com', +'ads.itmcash.com', +'ads.itshd.com', +'ads.itv.com', +'ads.iwon.com', +'ads.ixo.com', +'ads.jerk2it.com', +'ads.jimworld.com', +'ads.jinkads.com', +'ads.jobclicks.net', +'ads.jossip.com', +'ads.jp.msn.com', +'ads.jpost.com', +'ads.juicyads.com', +'ads.kentonline.co.uk', +'ads.keywordblocks.com', +'ads.kinobox.cz', +'ads.kinxxx.com', +'ads.kizu.org', +'ads.klixxx.com', +'ads.ksl.com', +'ads.lacoctelera.com', +'ads.lanistaads.com', +'ads.lawnsite.com', +'ads.leovegas.com', +'ads.lfstmedia.com', +'ads.link4ads.com', +'ads.linkbucks.com', +'ads.linkedin.com', +'ads.linksponsor.com', +'ads.linktracking.net', +'ads.linuxjournal.com', +'ads.linuxsecurity.com', +'ads.liteweb.net', +'ads.live365.com', +'ads.livescore.com', +'ads.livesportmedia.eu', +'ads.lokale-internetwerbung.de', +'ads.luno.net', +'ads.lycos.de', +'ads.lycos.fr', +'ads.lzjl.com', +'ads.macdailynews.com', +'ads.mainetoday.com', +'ads.mammanett.no', +'ads.mangomediaads.com', +'ads.mariuana.it', +'ads.matchbin.com', +'ads.mcafee.com', +'ads.mdchoice.com', +'ads.mediacapital.pt', +'ads.mediaodyssey.com', +'ads.mediaon.it', +'ads.mediasoul.net', +'ads.mediawhite.com', +'ads.medscape.com', +'ads.megaproxy.com', +'ads.members.teamskeet.com', +'ads.metromanager.com', +'ads.mgmt.somee.com', +'ads.mgnetwork.com', +'ads.midwayusa.com', +'ads.mixtraffic.com', +'ads.mjoelkbar.net', +'ads.mmania.com', +'ads.mnium.org', +'ads.mobclix.com', +'ads.mobilefuse.net', +'ads.mobilepad.co', +'ads.mobilityware.com', +'ads.mobiteasy.com', +'ads.mobvertising.net', +'ads.mocean.mobi', +'ads.mofos.com', +'ads.mojiva.com', +'ads.mojiva.com.edgesuite.net', +'ads.moneyclicks.com', +'ads.monstermoving.com', +'ads.mopub.com', +'ads.motorhomesforsale.co.uk', +'ads.mouseplanet.com', +'ads.moviease.com', +'ads.movielush.com', +'ads.mp.mydas.mobi', +'ads.mp3.com', +'ads.mplx.valueclick.net', +'ads.msn-ppe.com', +'ads.msn.co.il', +'ads.msn.com', +'ads.multimania.lycos.fr', +'ads.musiccity.com', +'ads.musicfans.com', +'ads.musicmatch.com', +'ads.mustangworks.com', +'ads.mybale.com', +'ads.myopen.vipshop.com', +'ads.mypcwash.com', +'ads.mysimon.com', +'ads.mysupermarket.co.uk', +'ads.mysupermarket.com', +'ads.mytelus.com', +'ads.myx.net', +'ads.narrowline.com', +'ads.netcraft.com', +'ads.netmechanic.com', +'ads.netomia.com', +'ads.netsol.com', +'ads.nettsnakk.no', +'ads.networkplay.in', +'ads.networksolutions.com', +'ads.networkwcs.net', +'ads.newads.com', +'ads.newdb.mtp.pl', +'ads.newdream.net', +'ads.newmedia.cz', +'ads.newsgeek.co.il', +'ads.newsint.co.uk', +'ads.newsland.it', +'ads.newsobserver.com', +'ads.nexage.com', +'ads.nicovideo.jp', +'ads.ninemsn.com.au', +'ads.nj.com', +'ads.nobuffer.info', +'ads.nola.com', +'ads.nordichardware.se', +'ads.norindex.no', +'ads.northjersey.com', +'ads.nwsource.com', +'ads.nyi.net', +'ads.nytimes.com', +'ads.nzcity.co.nz', +'ads.ocolly.com', +'ads.odigo.com', +'ads.off.net.mk', +'ads.offeroptimizer.com', +'ads.ojooo.com', +'ads.okitspace.com', +'ads.ole.com', +'ads.omaha.com', +'ads.one.co.il', +'ads.onecenter.com', +'ads.oneplace.com', +'ads.onlineguiden.com', +'ads.oomz.de', +'ads.opensubtitles.org', +'ads.openx.net', +'ads.opera.com', +'ads.optusnet.com.au', +'ads.orange142.com', +'ads.p-club.net', +'ads.parrysound.com', +'ads.passion.com', +'ads.paxnet.co.kr', +'ads.peel.com', +'ads.pennet.com', +'ads.pennlive.com', +'ads.pennnet.com', +'ads.pervsonpatrol.com', +'ads.photosight.ru', +'ads.phpclasses.org', +'ads.pictela.net', +'ads.piramit.net', +'ads.pirateden.com', +'ads.pittsburghlive.com', +'ads.placester.net', +'ads.planet.nl', +'ads.playnet.nl', +'ads.playukinternet.com', +'ads.pni.com', +'ads.poconorecord.com', +'ads.pointroll.com', +'ads.pointroll.com.13594.9051.302br.net', +'ads.pointroll.com.16586.9051.302br.net', +'ads.pointroll.com.17211.9051.302br.net', +'ads.pointroll.com.25916.9193.302br.net', +'ads.pointroll.com.25917.9193.302br.net', +'ads.pointroll.com.25919.9193.302br.net', +'ads.pointroll.com.25920.9193.302br.net', +'ads.pointroll.com.25921.9193.302br.net', +'ads.pointroll.com.25922.9193.302br.net', +'ads.pointroll.com.25923.9193.302br.net', +'ads.pointroll.com.25924.9193.302br.net', +'ads.pointroll.com.25925.9193.302br.net', +'ads.pointroll.com.25926.9193.302br.net', +'ads.pointroll.com.25927.9193.302br.net', +'ads.pointroll.com.25928.9193.302br.net', +'ads.pointroll.com.25929.9193.302br.net', +'ads.pointroll.com.29141.9229.302br.net', +'ads.pointroll.com.29142.9229.302br.net', +'ads.pointroll.com.29143.9229.302br.net', +'ads.pointroll.com.29144.9229.302br.net', +'ads.pointroll.com.29145.9229.302br.net', +'ads.pointroll.com.29146.9229.302br.net', +'ads.pointroll.com.29148.9229.302br.net', +'ads.pointroll.com.29149.9229.302br.net', +'ads.pointroll.com.29150.9229.302br.net', +'ads.pointroll.com.29151.9229.302br.net', +'ads.pointroll.com.29152.9229.302br.net', +'ads.pointroll.com.29154.9229.302br.net', +'ads.pointroll.com.29155.9229.302br.net', +'ads.pointroll.com.29156.9229.302br.net', +'ads.pointroll.com.29157.9229.302br.net', +'ads.pointroll.com.29158.9229.302br.net', +'ads.pointroll.com.29159.9229.302br.net', +'ads.pointroll.com.29160.9229.302br.net', +'ads.pointroll.com.29161.9229.302br.net', +'ads.pointroll.com.29163.9229.302br.net', +'ads.pointroll.com.29164.9229.302br.net', +'ads.pointroll.com.29166.9229.302br.net', +'ads.pointroll.com.29168.9229.302br.net', +'ads.pointroll.com.29169.9229.302br.net', +'ads.pointroll.com.29170.9229.302br.net', +'ads.pointroll.com.29590.9190.302br.net', +'ads.pointroll.com.29591.9190.302br.net', +'ads.pointroll.com.29592.9190.302br.net', +'ads.pointroll.com.29594.9190.302br.net', +'ads.pointroll.com.29595.9190.302br.net', +'ads.pointroll.com.29596.9190.302br.net', +'ads.pointroll.com.29597.9190.302br.net', +'ads.pointroll.com.34277.88.302br.net', +'ads.pointroll.com.34278.88.302br.net', +'ads.pointroll.com.34279.88.302br.net', +'ads.pointroll.com.35113.9245.302br.net', +'ads.pointroll.com.35114.9245.302br.net', +'ads.pointroll.com.35116.9245.302br.net', +'ads.pointroll.com.35594.9271.302br.net', +'ads.pointroll.com.35595.9271.302br.net', +'ads.pointroll.com.35596.9271.302br.net', +'ads.pointroll.com.35597.9271.302br.net', +'ads.pointroll.com.35598.9271.302br.net', +'ads.pointroll.com.35600.9271.302br.net', +'ads.pointroll.com.35601.9271.302br.net', +'ads.pointroll.com.35602.9271.302br.net', +'ads.pointroll.com.35603.9271.302br.net', +'ads.pointroll.com.35604.9271.302br.net', +'ads.pointroll.com.35605.9271.302br.net', +'ads.pointroll.com.35606.9271.302br.net', +'ads.pointroll.com.35607.9271.302br.net', +'ads.pointroll.com.35609.9271.302br.net', +'ads.pointroll.com.35610.9271.302br.net', +'ads.pointroll.com.35611.9271.302br.net', +'ads.pointroll.com.35612.9271.302br.net', +'ads.pointroll.com.35613.9271.302br.net', +'ads.pointroll.com.35614.9271.302br.net', +'ads.pointroll.com.35615.9271.302br.net', +'ads.pointroll.com.35616.9271.302br.net', +'ads.pointroll.com.35617.9271.302br.net', +'ads.pointroll.com.35618.9271.302br.net', +'ads.pointroll.com.35619.9271.302br.net', +'ads.pointroll.com.35620.9271.302br.net', +'ads.pointroll.com.35621.9271.302br.net', +'ads.pointroll.com.35983.9229.302br.net', +'ads.pointroll.com.35985.9229.302br.net', +'ads.pointroll.com.35986.9229.302br.net', +'ads.pointroll.com.36350.9229.302br.net', +'ads.pointroll.com.40375.9310.302br.net', +'ads.pointroll.com.40376.9310.302br.net', +'ads.pointroll.com.40377.9310.302br.net', +'ads.pointroll.com.40378.9310.302br.net', +'ads.pointroll.com.40379.9310.302br.net', +'ads.pointroll.com.40380.9310.302br.net', +'ads.pointroll.com.40381.9310.302br.net', +'ads.pointroll.com.40382.9310.302br.net', +'ads.pointroll.com.40383.9310.302br.net', +'ads.pointroll.com.40384.9310.302br.net', +'ads.pointroll.com.40385.9310.302br.net', +'ads.pointroll.com.40386.9310.302br.net', +'ads.pointroll.com.40387.9310.302br.net', +'ads.pointroll.com.40388.9310.302br.net', +'ads.pointroll.com.40389.9310.302br.net', +'ads.pointroll.com.40390.9250.302br.net', +'ads.pointroll.com.40391.9250.302br.net', +'ads.pointroll.com.40392.9250.302br.net', +'ads.pointroll.com.40393.9250.302br.net', +'ads.pointroll.com.40394.9250.302br.net', +'ads.pointroll.com.43095.9295.302br.net', +'ads.pointroll.com.43096.9295.302br.net', +'ads.pointroll.com.43097.9295.302br.net', +'ads.pointroll.com.43101.9295.302br.net', +'ads.pointroll.com.43102.9295.302br.net', +'ads.pointroll.com.43103.9295.302br.net', +'ads.pointroll.com.43104.9295.302br.net', +'ads.pointroll.com.43105.9295.302br.net', +'ads.pointroll.com.43106.9295.302br.net', +'ads.pointroll.com.44810.9250.302br.net', +'ads.pointroll.com.44811.9250.302br.net', +'ads.pointroll.com.44812.9250.302br.net', +'ads.pointroll.com.44813.9250.302br.net', +'ads.pointroll.com.44814.9250.302br.net', +'ads.pointroll.com.49080.9360.302br.net', +'ads.pointroll.com.49225.9363.302br.net', +'ads.pointroll.com.49226.9363.302br.net', +'ads.pointroll.com.49227.9363.302br.net', +'ads.pointroll.com.49228.9363.302br.net', +'ads.pointroll.com.49229.9363.302br.net', +'ads.pointroll.com.49230.9363.302br.net', +'ads.pointroll.com.49231.9363.302br.net', +'ads.pointroll.com.49232.9363.302br.net', +'ads.pointroll.com.49233.9363.302br.net', +'ads.pointroll.com.49234.9363.302br.net', +'ads.pointroll.com.49235.9363.302br.net', +'ads.pointroll.com.49236.9363.302br.net', +'ads.pointroll.com.49237.9363.302br.net', +'ads.pointroll.com.49238.9363.302br.net', +'ads.pointroll.com.49239.9363.302br.net', +'ads.pointroll.com.62910.9458.302br.net', +'ads.pointroll.com.62911.9458.302br.net', +'ads.pointroll.com.62912.9458.302br.net', +'ads.pointroll.com.62913.9458.302br.net', +'ads.pointroll.com.62914.9458.302br.net', +'ads.pointroll.com.62915.9458.302br.net', +'ads.pointroll.com.62916.9458.302br.net', +'ads.pointroll.com.62917.9458.302br.net', +'ads.pointroll.com.62918.9458.302br.net', +'ads.pointroll.com.62919.9458.302br.net', +'ads.pointroll.com.62920.9458.302br.net', +'ads.pointroll.com.62921.9458.302br.net', +'ads.pointroll.com.62922.9458.302br.net', +'ads.pointroll.com.62923.9458.302br.net', +'ads.pointroll.com.62924.9458.302br.net', +'ads.pointroll.com.62925.9458.302br.net', +'ads.pointroll.com.62926.9458.302br.net', +'ads.pointroll.com.62927.9458.302br.net', +'ads.pointroll.com.62928.9458.302br.net', +'ads.pointroll.com.62929.9458.302br.net', +'ads.pointroll.com.62930.9458.302br.net', +'ads.pointroll.com.62931.9458.302br.net', +'ads.pointroll.com.62932.9458.302br.net', +'ads.pointroll.com.62933.9458.302br.net', +'ads.pointroll.com.62934.9458.302br.net', +'ads.pointroll.com.75325.9458.302br.net', +'ads.pointroll.com.75326.9458.302br.net', +'ads.pointroll.com.75327.9458.302br.net', +'ads.pointroll.com.75328.9458.302br.net', +'ads.pointroll.com.75329.9458.302br.net', +'ads.pointroll.com.75330.9458.302br.net', +'ads.pointroll.com.75331.9458.302br.net', +'ads.pointroll.com.75332.9458.302br.net', +'ads.pointroll.com.75333.9458.302br.net', +'ads.pointroll.com.75334.9458.302br.net', +'ads.pointroll.com.75345.9458.302br.net', +'ads.pointroll.com.75346.9458.302br.net', +'ads.pointroll.com.75347.9458.302br.net', +'ads.pointroll.com.75348.9458.302br.net', +'ads.pointroll.com.75349.9458.302br.net', +'ads.pojonews.com', +'ads.polluxnetwork.com', +'ads.poppen.de', +'ads.poptarts.me', +'ads.pornad.com', +'ads.pornerbros.com', +'ads.powweb.com', +'ads.predictad.com', +'ads.premium.cz', +'ads.premiumnetwork.net', +'ads.pressdemo.com', +'ads.prisacom.com', +'ads.prnt.sc', +'ads.prntscr.com', +'ads.pro-market.net', +'ads.proboards.com', +'ads.prod.wifog.com', +'ads.program3.com', +'ads.provincianews.ro', +'ads.proxy3.adservr.de', +'ads.pub-fit.com', +'ads.publited.com', +'ads.pubmatic.com', +'ads.pulsetv.com', +'ads.purefuck.com', +'ads.pureleads.com', +'ads.pushtraffic.net', +'ads.qadabra.com', +'ads.qcns.valueclick.net', +'ads.qipu.de', +'ads.quantserve.com', +'ads.quartermedia.de', +'ads.quasaraffiliates.com', +'ads.queendom.com', +'ads.raidrush.org', +'ads.rampidads.com', +'ads.rcgroups.com', +'ads.realitytraffic.com', +'ads.realitytraffic.com.s2.gvirabi.com', +'ads.realitytraffic.com.s3.gvirabi.com', +'ads.realslutparty.com', +'ads.recoletos.es', +'ads.rediff.com', +'ads.redtube.com', +'ads.reelhd.com', +'ads.reelvidz.com', +'ads.reflexcash.com', +'ads.revmob.com', +'ads.revsci.net', +'ads.reward.rakuten.jp', +'ads.rim.co.uk', +'ads.rkads.com', +'ads.roanoke.com', +'ads.roar.com', +'ads.royalmail.com', +'ads.rte.ie', +'ads.rubiconproject.com', +'ads.runningwolf.com', +'ads.s-i-r.de', +'ads.saba-e.com', +'ads.sacbee.com', +'ads.satyamonline.com', +'ads.savannahnow.com', +'ads.scabee.com', +'ads.schnaeppchenjagd.de', +'ads.scifi.com', +'ads.searchignited.com', +'ads.searchingbooth.com', +'ads.searchmobileonline.com', +'ads.seattletimes.com', +'ads.seniorfriendfinder.com', +'ads.servebom.com', +'ads.sex.com', +'ads.sexier.com', +'ads.sexinyourcity.com', +'ads.sexspaces.com', +'ads.sexspaces.net', +'ads.sexspaces.nl', +'ads.sextip.de', +'ads.sf.net', +'ads.shorte.st', +'ads.showmeflix.com', +'ads.showsplash.com', +'ads.sina.com', +'ads.sitemeter.com', +'ads.slnads.com', +'ads.smaato.com', +'ads.smartclick.com', +'ads.smartclicks.com', +'ads.smartfeedads.com', +'ads.smartstream.tv', +'ads.socialbakers.com', +'ads.sockshots.com', +'ads.softure.com', +'ads.sol.no', +'ads.sonobi.com', +'ads.sourceforge.net', +'ads.southbendtribune.com', +'ads.space.com', +'ads.spaceports.com', +'ads.spaceports.net', +'ads.sportingnews.com', +'ads.sprintrade.com', +'ads.sptimes.com', +'ads.spymac.net', +'ads.srax.com', +'ads.sritis.net', +'ads.starbanner.com', +'ads.startext.net', +'ads.statesmanjournal.com', +'ads.stephensmedia.com', +'ads.stepstone.be', +'ads.stepstone.no', +'ads.stickyadstv.com', +'ads.stockbanners.com', +'ads.str8up.com', +'ads.studylight.org', +'ads.sublimedirectory.com', +'ads.sumotorrent.sx', +'ads.sun.com', +'ads.svnt.com', +'ads.syracuse.com', +'ads.tackyworld.com', +'ads.taggify.net', +'ads.tagword.com', +'ads.taiphanmem.org', +'ads.tapit.com', +'ads.taptapnetworks.com', +'ads.techtv.com', +'ads.teixido.co', +'ads.telegraph.co.uk', +'ads.telkomsel.com', +'ads.tennessean.com', +'ads.terra.com.br', +'ads.thecrimson.com', +'ads.thedieselstop.com', +'ads.thehiveworks.com', +'ads.theindependent.com', +'ads.themoneytizer.com', +'ads.theolympian.com', +'ads.theporndb.com', +'ads.thestar.com', +'ads.thewonder.com', +'ads.thrillreel.com', +'ads.thrillsaffiliates.com', +'ads.thumbr.com', +'ads.thzhost.com', +'ads.tibaco.net', +'ads.timesdaily.com', +'ads.timesink.com', +'ads.timesunion.com', +'ads.tinet.ie', +'ads.tmcs.net', +'ads.today.com', +'ads.topcities.com', +'ads.toronto.com', +'ads.torrentco.com', +'ads.torrpedo.net', +'ads.totallyfreestuff.com', +'ads.townhall.com', +'ads.track.net', +'ads.traderonline.com', +'ads.trafficaces.com', +'ads.traffichunt.com', +'ads.trafficjunky.net', +'ads.traffpartners.com', +'ads.tribalfusion.com', +'ads.triongames.com', +'ads.tripod.com', +'ads.tripod.lycos.co.uk', +'ads.tripod.lycos.de', +'ads.tripod.lycos.es', +'ads.tripod.lycos.it', +'ads.tripod.lycos.nl', +'ads.tripod.spray.se', +'ads.tromaville.com', +'ads.truongton.net', +'ads.tubewolf.com', +'ads.ucoz.ru', +'ads.undertone.com', +'ads.unister-gmbh.de', +'ads.uproar.com', +'ads.uptobox.com', +'ads.urli.net', +'ads.us.e-planning.net', +'ads.usatoday.com', +'ads.utopiad.com', +'ads.v3.com', +'ads.v3exchange.com', +'ads.valuead.com', +'ads.vcix.com', +'ads.vegas.com', +'ads.veloxia.com', +'ads.ventivmedia.com', +'ads.videoslots.com', +'ads.vintageporntubenet.com', +'ads.vipmobile.co.za', +'ads.visionads.de', +'ads.vitalix.net', +'ads.vrocks.in', +'ads.vserv.mobi', +'ads.w3hoster.de', +'ads.waiads.com', +'ads.wamba.com', +'ads.wave.si', +'ads.wazooweb.com', +'ads.weather.ca', +'ads.web.aol.com', +'ads.web.compuserve.com', +'ads.web.cs.com', +'ads.web.de', +'ads.web.nl', +'ads.web1tv.de', +'ads.web21.de', +'ads.web3-ads.com', +'ads.webads360.com', +'ads.webcash.net', +'ads.webcash.nl', +'ads.webhosting.info', +'ads.webindia123.com', +'ads.webkicks.de', +'ads.webmastersdirect.com', +'ads.webmd.com', +'ads.webme.com', +'ads.webseoanalytics.com', +'ads.webshots.com', +'ads.website-guru.com', +'ads.whaleads.com', +'ads.whi.co.nz', +'ads.wicked.com', +'ads.williamhill.es', +'ads.williamhill.it', +'ads.win.rs', +'ads.winneronline.com', +'ads.winsite.com', +'ads.wlcnet.com', +'ads.worldstarhiphop.com', +'ads.x10.be', +'ads.xbiz.com', +'ads.xhamster.com', +'ads.xl.co.id', +'ads.xl.pt', +'ads.xlxtra.com', +'ads.xpg.com.br', +'ads.xpics.com', +'ads.xtac.com', +'ads.xtargeting.com', +'ads.xtra.co.nz', +'ads.xxxad.net', +'ads.xxxbunker.com', +'ads.yahoo.com', +'ads.yeshanews.com', +'ads.yimg.com', +'ads.yllix.com', +'ads.ynot.com', +'ads.yourfreedvds.com', +'ads.yumenetworks.com', +'ads.yupimsn.com', +'ads.zamunda.se', +'ads.zchat.no', +'ads.zdnet.com', +'ads.zdnet.de', +'ads.zedo.com', +'ads0.hpg.com.br', +'ads00.hpg.com.br', +'ads01.com', +'ads01.focalink.com', +'ads01.groovinads.com', +'ads01.hpg.com.br', +'ads02.focalink.com', +'ads03.focalink.com', +'ads03.hpg.com.br', +'ads04.focalink.com', +'ads04.hpg.com.br', +'ads05.focalink.com', +'ads05.hpg.com.br', +'ads06.focalink.com', +'ads06.hpg.com.br', +'ads07.focalink.com', +'ads07.hpg.com.br', +'ads08.focalink.com', +'ads08.hpg.com.br', +'ads09.focalink.com', +'ads09.hpg.com.br', +'ads1.advance.de', +'ads1.ami-admin.com', +'ads1.canoe.ca', +'ads1.condenet.com', +'ads1.ero-advertising.com', +'ads1.focalink.com', +'ads1.gccx.com', +'ads1.hpg.com.br', +'ads1.intelliads.com', +'ads1.mb.datingadzone.com', +'ads1.mediacapital.pt', +'ads1.mocean.mobi', +'ads1.mojiva.com', +'ads1.msads.net', +'ads1.msn.com', +'ads1.searchmiracle.com', +'ads1.solocpm.com', +'ads1.speedbit.com', +'ads1.spiderware.com', +'ads1.themobileindian.net', +'ads1.tripod.com', +'ads1.utopiad.com', +'ads10.focalink.com', +'ads10.hpg.com.br', +'ads10.speedbit.com', +'ads100.hpg.com.br', +'ads101.hpg.com.br', +'ads102.hpg.com.br', +'ads103.hpg.com.br', +'ads104.hpg.com.br', +'ads105.hpg.com.br', +'ads106.hpg.com.br', +'ads107.hpg.com.br', +'ads108.hpg.com.br', +'ads109.hpg.com.br', +'ads11.focalink.com', +'ads11.hpg.com.br', +'ads110.hpg.com.br', +'ads111.hpg.com.br', +'ads112.hpg.com.br', +'ads113.hpg.com.br', +'ads114.hpg.com.br', +'ads115.hpg.com.br', +'ads116.hpg.com.br', +'ads117.hpg.com.br', +'ads118.hpg.com.br', +'ads119.hpg.com.br', +'ads12.focalink.com', +'ads12.hpg.com.br', +'ads120.hpg.com.br', +'ads121.hpg.com.br', +'ads122.hpg.com.br', +'ads123.hpg.com.br', +'ads124.hpg.com.br', +'ads125.hpg.com.br', +'ads126.hpg.com.br', +'ads127.hpg.com.br', +'ads128.hpg.com.br', +'ads129.hpg.com.br', +'ads13.focalink.com', +'ads13.hpg.com.br', +'ads130.hpg.com.br', +'ads131.hpg.com.br', +'ads132.hpg.com.br', +'ads133.hpg.com.br', +'ads134.hpg.com.br', +'ads135.hpg.com.br', +'ads136.hpg.com.br', +'ads137.hpg.com.br', +'ads138.hpg.com.br', +'ads139.hpg.com.br', +'ads14.focalink.com', +'ads14.hpg.com.br', +'ads140.hpg.com.br', +'ads141.hpg.com.br', +'ads142.hpg.com.br', +'ads143.hpg.com.br', +'ads144.hpg.com.br', +'ads145.hpg.com.br', +'ads146.hpg.com.br', +'ads147.hpg.com.br', +'ads148.hpg.com.br', +'ads149.hpg.com.br', +'ads15.focalink.com', +'ads15.hpg.com.br', +'ads150.hpg.com.br', +'ads151.hpg.com.br', +'ads152.hpg.com.br', +'ads153.hpg.com.br', +'ads154.hpg.com.br', +'ads155.hpg.com.br', +'ads156.hpg.com.br', +'ads157.hpg.com.br', +'ads158.hpg.com.br', +'ads159.hpg.com.br', +'ads16.focalink.com', +'ads16.hpg.com.br', +'ads160.hpg.com.br', +'ads161.hpg.com.br', +'ads162.hpg.com.br', +'ads163.hpg.com.br', +'ads164.hpg.com.br', +'ads165.hpg.com.br', +'ads166.hpg.com.br', +'ads167.hpg.com.br', +'ads168.hpg.com.br', +'ads16811.hotwords.es', +'ads169.hpg.com.br', +'ads17.focalink.com', +'ads17.hpg.com.br', +'ads170.hpg.com.br', +'ads171.hpg.com.br', +'ads172.hpg.com.br', +'ads173.hpg.com.br', +'ads174.hpg.com.br', +'ads175.hpg.com.br', +'ads176.hpg.com.br', +'ads177.hpg.com.br', +'ads178.hpg.com.br', +'ads179.hpg.com.br', +'ads18.focalink.com', +'ads18.hpg.com.br', +'ads180.hpg.com.br', +'ads181.hpg.com.br', +'ads182.hpg.com.br', +'ads183.hpg.com.br', +'ads184.hpg.com.br', +'ads185.hpg.com.br', +'ads186.hpg.com.br', +'ads187.hpg.com.br', +'ads188.hpg.com.br', +'ads189.hpg.com.br', +'ads19.focalink.com', +'ads19.hpg.com.br', +'ads190.hpg.com.br', +'ads191.hpg.com.br', +'ads192.hpg.com.br', +'ads193.hpg.com.br', +'ads194.hpg.com.br', +'ads195.hpg.com.br', +'ads196.hpg.com.br', +'ads197.hpg.com.br', +'ads198.hpg.com.br', +'ads199.hpg.com.br', +'ads2.advance.de', +'ads2.adverline.com', +'ads2.backads.com', +'ads2.brazzers.com', +'ads2.clearchannel.com', +'ads2.condenet.com', +'ads2.contentabc.com', +'ads2.delfi.ee', +'ads2.ero-advertising.com', +'ads2.exhedra.com', +'ads2.fingersoft.net', +'ads2.focalink.com', +'ads2.gamecity.net', +'ads2.greystripe.com', +'ads2.hpg.com.br', +'ads2.iwon.com', +'ads2.jubii.dk', +'ads2.medianord.de', +'ads2.mocean.mobi', +'ads2.mojiva.com', +'ads2.oneplace.com', +'ads2.opensubtitles.org', +'ads2.rp.pl', +'ads2.searchmiracle.com', +'ads2.speedbit.com', +'ads2.utopiad.com', +'ads2.vortexmediagroup.com', +'ads2.williamhill.com', +'ads2.zeusclicks.com', +'ads20.focalink.com', +'ads20.hpg.com.br', +'ads200.focalink.com', +'ads200.hpg.com.br', +'ads2000.hw.net', +'ads201.hpg.com.br', +'ads202.hpg.com.br', +'ads203.hpg.com.br', +'ads204.hpg.com.br', +'ads205.hpg.com.br', +'ads206.hpg.com.br', +'ads207.focalink.com', +'ads207.hpg.com.br', +'ads208.hpg.com.br', +'ads209.hpg.com.br', +'ads21.focalink.com', +'ads21.hpg.com.br', +'ads210.hpg.com.br', +'ads211.hpg.com.br', +'ads212.hpg.com.br', +'ads213.hpg.com.br', +'ads214.hpg.com.br', +'ads215.hpg.com.br', +'ads216.hpg.com.br', +'ads217.hpg.com.br', +'ads218.hpg.com.br', +'ads219.hpg.com.br', +'ads22.focalink.com', +'ads22.hpg.com.br', +'ads220.hpg.com.br', +'ads221.hpg.com.br', +'ads222.hpg.com.br', +'ads223.hpg.com.br', +'ads224.hpg.com.br', +'ads225.hpg.com.br', +'ads226.hpg.com.br', +'ads227.hpg.com.br', +'ads228.hpg.com.br', +'ads229.hpg.com.br', +'ads23.focalink.com', +'ads23.hpg.com.br', +'ads230.hpg.com.br', +'ads231.hpg.com.br', +'ads232.hpg.com.br', +'ads233.hpg.com.br', +'ads234.hpg.com.br', +'ads235.hpg.com.br', +'ads236.hpg.com.br', +'ads237.hpg.com.br', +'ads238.hpg.com.br', +'ads239.hpg.com.br', +'ads24.focalink.com', +'ads24.hpg.com.br', +'ads240.hpg.com.br', +'ads241.hpg.com.br', +'ads242.hpg.com.br', +'ads243.hpg.com.br', +'ads244.hpg.com.br', +'ads245.hpg.com.br', +'ads246.hpg.com.br', +'ads247.hpg.com.br', +'ads248.hpg.com.br', +'ads249.hpg.com.br', +'ads25.focalink.com', +'ads25.hpg.com.br', +'ads250.hpg.com.br', +'ads251.hpg.com.br', +'ads252.hpg.com.br', +'ads253.hpg.com.br', +'ads254.hpg.com.br', +'ads255.hpg.com.br', +'ads26.focalink.com', +'ads26.hpg.com.br', +'ads27.focalink.com', +'ads27.hpg.com.br', +'ads28.focalink.com', +'ads28.hpg.com.br', +'ads29.focalink.com', +'ads29.hpg.com.br', +'ads2srv.com', +'ads3.advance.de', +'ads3.bigasia.com', +'ads3.condenet.com', +'ads3.focalink.com', +'ads3.gamecity.net', +'ads3.hpg.com.br', +'ads3.mocean.mobi', +'ads3.mojiva.com', +'ads3.qadabra.com', +'ads3.searchmiracle.com', +'ads3.speedbit.com', +'ads3.utopiad.com', +'ads30.focalink.com', +'ads30.hpg.com.br', +'ads303.focalink.com', +'ads304.focalink.com', +'ads305.focalink.com', +'ads31.hpg.com.br', +'ads311.focalink.com', +'ads316.focalink.com', +'ads317.focalink.com', +'ads32.hpg.com.br', +'ads320.focalink.com', +'ads33.hpg.com.br', +'ads34.hpg.com.br', +'ads35.hpg.com.br', +'ads36.hpg.com.br', +'ads37.hpg.com.br', +'ads38.hpg.com.br', +'ads39.hpg.com.br', +'ads4.advance.de', +'ads4.bigasia.com', +'ads4.clearchannel.com', +'ads4.condenet.com', +'ads4.focalink.com', +'ads4.gamecity.net', +'ads4.hpg.com.br', +'ads4.mocean.mobi', +'ads4.mojiva.com', +'ads4.speedbit.com', +'ads4.utopiad.com', +'ads40.hpg.com.br', +'ads41.hpg.com.br', +'ads42.hpg.com.br', +'ads43.hpg.com.br', +'ads44.hpg.com.br', +'ads45.hpg.com.br', +'ads46.hpg.com.br', +'ads47.hpg.com.br', +'ads48.hpg.com.br', +'ads49.hpg.com.br', +'ads4homes.com', +'ads4links.com', +'ads5.bigasia.com', +'ads5.canoe.ca', +'ads5.focalink.com', +'ads5.gamecity.net', +'ads5.hpg.com.br', +'ads5.mocean.mobi', +'ads5.mojiva.com', +'ads5.speedbit.com', +'ads5.utopiad.com', +'ads50.hpg.com.br', +'ads51.hpg.com.br', +'ads52.hpg.com.br', +'ads53.hpg.com.br', +'ads54.hpg.com.br', +'ads55.hpg.com.br', +'ads56.hpg.com.br', +'ads57.hpg.com.br', +'ads58.hpg.com.br', +'ads59.hpg.com.br', +'ads6.focalink.com', +'ads6.gamecity.net', +'ads6.hpg.com.br', +'ads6.mocean.mobi', +'ads6.speedbit.com', +'ads6.utopiad.com', +'ads60.hpg.com.br', +'ads61.hpg.com.br', +'ads61153.hotwords.com', +'ads62.hpg.com.br', +'ads63.hpg.com.br', +'ads64.hpg.com.br', +'ads65.hpg.com.br', +'ads66.hpg.com.br', +'ads67.hpg.com.br', +'ads68.hpg.com.br', +'ads69.hpg.com.br', +'ads7.focalink.com', +'ads7.gamecity.net', +'ads7.hpg.com.br', +'ads7.inet1.com', +'ads7.mocean.mobi', +'ads7.speedbit.com', +'ads70.hpg.com.br', +'ads71.hpg.com.br', +'ads72.hpg.com.br', +'ads73.hpg.com.br', +'ads74.hpg.com.br', +'ads75.hpg.com.br', +'ads76.hpg.com.br', +'ads77.hpg.com.br', +'ads78.hpg.com.br', +'ads79.hpg.com.br', +'ads8.com', +'ads8.focalink.com', +'ads8.hpg.com.br', +'ads8.mocean.mobi', +'ads8.speedbit.com', +'ads8.utopiad.com', +'ads8.utopiad.comcb3.utopiad.com', +'ads80.com', +'ads80.hpg.com.br', +'ads81.hpg.com.br', +'ads82.hpg.com.br', +'ads83.hpg.com.br', +'ads84.hpg.com.br', +'ads85.hpg.com.br', +'ads86.hpg.com.br', +'ads87.hpg.com.br', +'ads88.hpg.com.br', +'ads89.hpg.com.br', +'ads9.focalink.com', +'ads9.hpg.com.br', +'ads9.mocean.mobi', +'ads9.speedbit.com', +'ads90.hpg.com.br', +'ads91.hpg.com.br', +'ads92.hpg.com.br', +'ads93.hpg.com.br', +'ads94.hpg.com.br', +'ads95.hpg.com.br', +'ads96.hpg.com.br', +'ads97.hpg.com.br', +'ads98.hpg.com.br', +'ads99.hpg.com.br', +'adsafeprotected.com', +'adsalvo.com', +'adsances.ero-advertising.com', +'adsatt.abcnews.starwave.com', +'adsatt.disney.starwave.com', +'adsatt.espn.go.com', +'adsatt.espn.starwave.com', +'adsatt.go.starwave.com', +'adsaturation.com', +'adsays.go2cloud.org', +'adsbookie.com', +'adsbrook.com', +'adsby.bidtheatre.com', +'adsby.breezeads.com', +'adscale.de', +'adscampaign.net', +'adscendmedia.com', +'adscontent.indiatimes.com', +'adscoops.com', +'adsdaq.com', +'adsdb.timesink.com', +'adsdelivery1.com', +'adsdk.com', +'adsdl.timesink.com', +'adsdlmaster.timesink.com', +'adsdot.ph', +'adsearch.adkontekst.pl', +'adsee.jp', +'adseller.hop.ru', +'adsender.us', +'adsenger.com', +'adsense-world.de', +'adsensecamp.com', +'adsenzia.solution.weborama.fr', +'adserv.aavalue.com', +'adserv.adbonus.com', +'adserv.arrow.com', +'adserv.brandaffinity.net', +'adserv.bravenet.com', +'adserv.de', +'adserv.exxxit.com', +'adserv.floppybank.com', +'adserv.gamezone.de', +'adserv.happypuppy.com', +'adserv.iafrica.com', +'adserv.legitreviews.com', +'adserv.net', +'adserv.sapo.pt', +'adserv.search-exe.com', +'adserv.searchenhancement.com', +'adserv.usps.com', +'adserv001.adtech.fr', +'adserv002.adtech.fr', +'adserv003.adtech.fr', +'adserv004.adtech.fr', +'adserv005.adtech.fr', +'adserv006.adtech.fr', +'adserv007.adtech.fr', +'adserv008.adtech.fr', +'adserv2.bravenet.com', +'adserv3.bravenet.com', +'adserve-nj.1rx.io', +'adserve.adtoll.com', +'adserve.advertising.com', +'adserve.cpmba.se', +'adserve.gogreece.com', +'adserve.postrelease.com', +'adserver-2.ig.com.br', +'adserver-4.ig.com.br', +'adserver-5.ig.com.br', +'adserver-a-frr.adtech.de', +'adserver.100free.com', +'adserver.71i.de', +'adserver.ad-space.net', +'adserver.adbunker.com', +'adserver.adreactor.com', +'adserver.ads.com.ph', +'adserver.ads360.com', +'adserver.adtech.advertising.com', +'adserver.adtech.de', +'adserver.adtech.de.1754.9018.302br.net', +'adserver.adtech.de.1756.9018.302br.net', +'adserver.adtech.de.1758.9019.302br.net', +'adserver.adtech.de.1760.9019.302br.net', +'adserver.adtech.de.1762.9019.302br.net', +'adserver.adtech.de.62936.9473.302br.net', +'adserver.adtech.de.62937.9473.302br.net', +'adserver.adtech.de.62938.9473.302br.net', +'adserver.adtech.de.62939.9473.302br.net', +'adserver.adtech.de.62943.9473.302br.net', +'adserver.adtech.fr', +'adserver.adtechus.com', +'adserver.adtechus.com.13154.9047.302br.net', +'adserver.adtechus.com.13158.9047.302br.net', +'adserver.adtechus.com.14361.9066.302br.net', +'adserver.adtechus.com.22718.9068.302br.net', +'adserver.adtechus.com.22719.9068.302br.net', +'adserver.adtechus.com.24351.9068.302br.net', +'adserver.adtechus.com.68137.9528.302br.net', +'adserver.adtechus.com.68138.9528.302br.net', +'adserver.adtechus.com.68139.9528.302br.net', +'adserver.adtechus.com.68140.9528.302br.net', +'adserver.adtechus.com.68298.9541.302br.net', +'adserver.adtechus.com.68299.9541.302br.net', +'adserver.adtechus.com.68300.9541.302br.net', +'adserver.adtechus.com.68301.9541.302br.net', +'adserver.adtechus.com.76415.9541.302br.net', +'adserver.adtechus.com.76416.9541.302br.net', +'adserver.adtechus.com.77231.9541.302br.net', +'adserver.adtechus.com.77232.9541.302br.net', +'adserver.adtechus.com.77233.9541.302br.net', +'adserver.adtechus.com.77234.9541.302br.net', +'adserver.adultfriendfinder.com', +'adserver.advertist.com', +'adserver.affiliatemg.com', +'adserver.airmiles.ca', +'adserver.aol.fr', +'adserver.aphrodite.tweakers.net', +'adserver.asiafriendfinder.com', +'adserver.bizland-inc.net', +'adserver.brandilitynetwork.de', +'adserver.buzzfirst.com', +'adserver.cash4webmaster.de', +'adserver.chickclick.com', +'adserver.click4cash.de', +'adserver.co.il', +'adserver.comparatel.fr', +'adserver.coreads.net', +'adserver.creative-asia.com', +'adserver.creativeinspire.com', +'adserver.cxad.cxense.com', +'adserver.cz.cc', +'adserver.dayrates.com', +'adserver.dbusiness.com', +'adserver.digitalpartners.com', +'adserver.dnps.com', +'adserver.dotmusic.com', +'adserver.download3000.com', +'adserver.emulation64.com', +'adserver.filefront.com', +'adserver.freecity.de', +'adserver.friendfinder.com', +'adserver.gameparty.net', +'adserver.gamigo.de', +'adserver.garden.nl', +'adserver.goforandroid.com', +'adserver.gorillanation.com', +'adserver.hardwareanalysis.com', +'adserver.harktheherald.com', +'adserver.hellasnet.gr', +'adserver.idg.de', +'adserver.ilmessaggero.it', +'adserver.infotiger.com', +'adserver.interfree.it', +'adserver.inwind.it', +'adserver.ip-phone-forum.de', +'adserver.ision.de', +'adserver.isonews.com', +'adserver.janes.com', +'adserver.janes.org', +'adserver.juicyads.com', +'adserver.kimia.es', +'adserver.lanacion.com.ar', +'adserver.libero.it', +'adserver.lunarpages.com', +'adserver.matchcraft.com', +'adserver.mindshare.de', +'adserver.mobillex.com', +'adserver.mundo-service.de', +'adserver.mylinea.com', +'adserver.myownemail.com', +'adserver.news.com', +'adserver.news.com.au', +'adserver.ngz-network.de', +'adserver.nydailynews.com', +'adserver.outpersonals.com', +'adserver.penthouse.com', +'adserver.phatmax.net', +'adserver.pl', +'adserver.planet-multiplayer.de', +'adserver.portal.pl', +'adserver.portalofevil.com', +'adserver.portugalmail.net', +'adserver.portugalmail.pt', +'adserver.radio-canada.ca', +'adserver.sandbox.cxad.cxense.com', +'adserver.sanomawsoy.fi', +'adserver.sextracker.com', +'adserver.sharewareonline.com', +'adserver.sitesense.com', +'adserver.skyhookwireless.com', +'adserver.snowball.com', +'adserver.softonic.com', +'adserver.te.pt', +'adserver.terra.com.br', +'adserver.terra.es', +'adserver.theknot.com', +'adserver.theonering.net', +'adserver.thirty4.com', +'adserver.trackstats.info', +'adserver.trader.ca', +'adserver.trafficsyndicate.com', +'adserver.trellian.com', +'adserver.tweakers.net', +'adserver.ubiyoo.com', +'adserver.unityads.unity3d.com', +'adserver.veruta.com', +'adserver.weakgame.com', +'adserver.web.de', +'adserver.webads.nl', +'adserver.x3.hu', +'adserver.xpanama.net', +'adserver.yahoo.com', +'adserver.yanosik.pl', +'adserver.zencudo.co.uk', +'adserver.zylom.com', +'adserver1-images.backbeatmedia.com', +'adserver1.backbeatmedia.com', +'adserver1.harvestadsdepot.com', +'adserver1.hookyouup.com', +'adserver1.ogilvy-interactive.de', +'adserver1.realtracker.com', +'adserver1.shareconnector.com', +'adserver1.sonymusiceurope.com', +'adserver1.wmads.com', +'adserver2.ads-cpm.com', +'adserver2.realtracker.com', +'adserver3.adremedy.com.48002.9358.302br.net', +'adserverplus.com', +'adserverpub.com', +'adserversolutions.com', +'adservi.com', +'adservice.everyone.com', +'adservice.everyone.net', +'adserving.ads.ec', +'adserving.autotrader.com', +'adserving.claxon.com', +'adserving.cpmgo.com', +'adserving.cpminventory.com', +'adserving.greenadvertizing.com', +'adserving.hugecpm.com', +'adserving.localpages.com', +'adserving.mediatrafficreports.com', +'adserving.supreme.clicksor.com', +'adserving.uniquetrafficgroup.com', +'adservinginternational.com', +'adservingnetwork.com', +'adservone.com', +'adservr.net', +'adsexpand.go2cloud.org', +'adsfac.eu', +'adsfac.net', +'adsfac.us', +'adsfac.us.14518.9074.302br.net', +'adsfac.us.14519.9074.302br.net', +'adsfac.us.14521.9074.302br.net', +'adsfac.us.14523.9074.302br.net', +'adsfac.us.21366.9125.302br.net', +'adsfac.us.21367.25.302br.net', +'adsfac.us.21367.9125.302br.net', +'adsfac.us.21367.9125.302br1366.9125.302br.net', +'adsfac.us.24349.9125.302br.net', +'adsfac.us.302br.net', +'adsfast.com', +'adsforindians.com', +'adsfundi.com', +'adsfundi.net', +'adsfuse.com', +'adsgangsta.com', +'adshiftmedia.com', +'adshooter.com', +'adshopping.com', +'adshostnet.com', +'adshot.de', +'adshuffle.com', +'adsignals.com', +'adsinimages.com', +'adsipl.indiatimes.com', +'adsiplytmedia.indiatimes.com', +'adskape.ru', +'adskeeper.co.uk', +'adsl-71-138-149-62.dsl.pltn13.pacbell.net', +'adslidango.com', +'adsmarket.com', +'adsmarket.es', +'adsmarketgroup.com', +'adsmart.com', +'adsmart.de', +'adsmart.net', +'adsmart.ru', +'adsmatters.go2cloud.org', +'adsmeans.com', +'adsmile.go2cloud.org', +'adsmo.ru', +'adsmobil.go2cloud.org', +'adsmoon.com', +'adsnetworksa.go2cloud.org', +'adsniper.ru', +'adsoldier.com', +'adsolutions.nl', +'adsolutions.yp.com', +'adsolvix.go2cloud.org', +'adson.awempire.com', +'adsonar.com', +'adsoogle.com', +'adsopedia.go2cloud.org', +'adsp.ilse.nl', +'adspacds.ero-advertising.com', +'adspace.ro', +'adspaces.ero-ades.ero-advertising.com', +'adspaces.ero-advertising.com', +'adspaces.ero-apaces.ero-advertising.com', +'adspaces2.ero-advertising.com', +'adspade.go2affise.com', +'adspaes.ero-advertising.com', +'adspages.ero-advertising.com', +'adspcces.ero-advertising.com', +'adspdbl.com', +'adspeed.com', +'adsphinx.com', +'adspics.com', +'adspinner.com', +'adspirit.de', +'adsplay.go2cloud.org', +'adsplay.in', +'adsppperv.com', +'adspserving.com', +'adspynet.com', +'adsremote.timesink.com', +'adsrevenue.net', +'adsring.com', +'adsrv.dispatch.com', +'adsrv.ea.com', +'adsrv.hpg.com.br', +'adsrv.iol.co.za', +'adsrv.keycaptcha.com', +'adsrv.travelseller.net', +'adsrv.tuscaloosanews.com', +'adsrv.us', +'adsrv.wilmingtonstar.com', +'adsrv2.theledger.com', +'adsrv2.wilmingtonstar.com', +'adsrvmedia.adk2.co', +'adsrvmedia.adk2x.com', +'adsrvmedia.adsk2.co', +'adsrvmedia.com', +'adsrvr.org', +'adss.comeadvertisewithus.com', +'adss.yahoo.com', +'adssl01.adtech.fr', +'adssl02.adtech.fr', +'adsspaces.ero-advertising.com', +'adstaces.ero-advertising.com', +'adstage-analytics.herokuapp.com', +'adstartmedia.go2affise.com', +'adstats.adviva.net', +'adstil.indiatimes.com', +'adstoclick.com', +'adstrack.co', +'adstracking.s3-website-us-west-1.amazonaws.com', +'adstract.adk2.co', +'adstrategy.go2cloud.org', +'adstream.cardboardfish.com', +'adstrologycpa.go2cloud.org', +'adstrx.com', +'adsup.go2cloud.org', +'adsupermarket.com', +'adsuperstar.com', +'adsupervisor.com', +'adsurve.com', +'adsvert.com', +'adsvids.com', +'adsview.com', +'adsvr.adknowledge.com', +'adsvr.adsparc.net', +'adsvr.taipeilink.net', +'adswakeup.com', +'adswap.com', +'adsweb.tiscali.de', +'adsweb.tiscali.it', +'adswizz.com', +'adsx.greystripe.com', +'adsx.greystripe.com', +'adsxgm.com', +'adsxxxtraff.com', +'adsymptotic.com', +'adsyndication.msn.com', +'adsynergy.com', +'adsys.townnews.com', +'adsyst.biz', +'adsytipl.indiatimes.com', +'ads_ad_center.s3.amazonaws.com', +'adtackmedia.go2cloud.org', +'adtag.msn.ca', +'adtag.sympatico.ca', +'adtagger.com', +'adtaily.com', +'adtank.go2cloud.org', +'adtarget.ro', +'adtds.trackads.net', +'adtecc.com', +'adtech.com', +'adtech.de', +'adtegrity.com', +'adtegrity.net', +'adtegrity.spinbox.net', +'adtendant.weatherforyou.com', +'adteractive.com', +'adtest.theonion.com', +'adtest.timesink.com', +'adtgs.com', +'adtheorent.com', +'adthrive.com', +'adti.me', +'adtiger.de', +'adtilt.com', +'adtimes.nytimes.com', +'adtlgc.com', +'adtoadd.com', +'adtoll.com', +'adtoma.com', +'adtoox.com', +'adtotal.pl', +'adtpix.com', +'adtrack.adleadevent.com', +'adtrack.cimedia.net', +'adtrack.king.com', +'adtrack.pichunter.com', +'adtrack.right-ads.com', +'adtrack.trafficwave.net', +'adtrack1.pl', +'adtracker.inmobi.com', +'adtracking.vinden.nl', +'adtrackone.eu', +'adtrade.net', +'adtrafic.go2cloud.org', +'adtredo.com', +'adtrivacpa.go2cloud.org', +'adtrix.com', +'adtruism.com', +'adtruth.com', +'adtual1.go2cloud.org', +'adtuber.go2cloud.org', +'adtwirl.com', +'aducash.com', +'adult-banner-ads.com', +'adultbannerexchange.de', +'adultcpaoffers-elb.go2cloud.org', +'adultcpaoffers.go2cloud.org', +'adultimate.tubewolf.com', +'adulttubetraffic.com', +'adunblock.com', +'aduncle.go2cloud.org', +'adv-adserver.com', +'adv-banner.iol.it', +'adv-banner.libero.it', +'adv-g009.us.intellitxt.com', +'adv-plus.com', +'adv.abv.bg', +'adv.adr.it', +'adv.adsbwm.com', +'adv.adultrium.com', +'adv.aport.ru', +'adv.bbanner.it', +'adv.blogupp.com', +'adv.calciomercato.com', +'adv.co.il', +'adv.domaindirect.it', +'adv.dot.wp.pl', +'adv.erosnews.it', +'adv.freeonline.it', +'adv.gazeta.pl', +'adv.gpm-digital.com', +'adv.h2porn.com', +'adv.hwupgrade.it', +'adv.ilsole24ore.it', +'adv.imadrep.co.kr', +'adv.isdn.cz', +'adv.linear.it', +'adv.m88sb.com', +'adv.neto.net.il', +'adv.noblepoker.com', +'adv.pconline.com.cn', +'adv.quipo.it', +'adv.sexcounter.com', +'adv.tre.it', +'adv.virgilio.it', +'adv.webmd.com', +'adv.wp.pl', +'adv.yo.cz', +'adv01.interfree.it', +'adv2.absoluteagency.com', +'adv679854.ru', +'adv9.net', +'advancedad.com', +'advancedadapters.com', +'advancedmedia.go2cloud.org', +'advancedsoftwaresupport.com', +'advancedtracker.appspot.com', +'advancemobile.go2affise.com', +'advancets.org', +'advantageglobalmarketing.com', +'advantedges.go2cloud.org', +'advconversion.com', +'adveng.hiasys.com', +'adventize.go2cloud.org', +'adventori.com', +'adventory.com', +'adventuresinnetmarketing.com', +'advenueplatform.com', +'adverity.com', +'adverline.com', +'adverline.fr', +'adversaldisplay.com', +'adversalservers.com', +'advert.bayarea.com', +'advert.e-se.ru', +'advert.estsoft.com', +'advert.exaccess.ru', +'advert.gittigidiyor.com', +'advert.hpg.com.br', +'advert.hu', +'advert.subscribe.ru', +'advert.uloz.to', +'advert.webdifusao-server.com', +'advert0.hpg.com.br', +'advert1.hpg.com.br', +'advert18.hpg.com.br', +'advert19.hpg.com.br', +'advert218.hpg.com.br', +'advert219.hpg.com.br', +'advert220.hpg.com.br', +'advert221.hpg.com.br', +'advert222.hpg.com.br', +'advert223.hpg.com.br', +'advert224.hpg.com.br', +'advert225.hpg.com.br', +'advert226.hpg.com.br', +'advert227.hpg.com.br', +'advert228.hpg.com.br', +'advert229.hpg.com.br', +'advert230.hpg.com.br', +'advert231.hpg.com.br', +'advert232.hpg.com.br', +'advert233.hpg.com.br', +'advert234.hpg.com.br', +'advert235.hpg.com.br', +'advert236.hpg.com.br', +'advert237.hpg.com.br', +'advert238.hpg.com.br', +'advert239.hpg.com.br', +'advert240.hpg.com.br', +'advert241.hpg.com.br', +'advert242.hpg.com.br', +'advert243.hpg.com.br', +'advert244.hpg.com.br', +'advert245.hpg.com.br', +'advert246.hpg.com.br', +'advert247.hpg.com.br', +'advert248.hpg.com.br', +'advert249.hpg.com.br', +'advert250.hpg.com.br', +'advert251.hpg.com.br', +'advert252.hpg.com.br', +'advert253.hpg.com.br', +'advert254.hpg.com.br', +'advert255.hpg.com.br', +'advert3.hpg.com.br', +'advert30.hpg.com.br', +'advert31.hpg.com.br', +'advert33.hpg.com.br', +'advert34.hpg.com.br', +'advert35.hpg.com.br', +'advert36.hpg.com.br', +'advert37.hpg.com.br', +'advert38.hpg.com.br', +'advert39.hpg.com.br', +'advert4.hpg.com.br', +'advert40.hpg.com.br', +'advert41.hpg.com.br', +'advert43.hpg.com.br', +'advert44.hpg.com.br', +'advert45.hpg.com.br', +'advert46.hpg.com.br', +'advert47.hpg.com.br', +'advert48.hpg.com.br', +'advert49.hpg.com.br', +'advert5.hpg.com.br', +'advert50.hpg.com.br', +'advert51.hpg.com.br', +'advert53.hpg.com.br', +'advert54.hpg.com.br', +'advert55.hpg.com.br', +'advert6.hpg.com.br', +'advert7.hpg.com.br', +'advert8.hpg.com.br', +'advert9.hpg.com.br', +'advertarium.com.ua', +'advertbox.us', +'adverteerdirect.nl', +'adverticum.com', +'adverticum.net', +'adverticus.de', +'advertis.go2cloud.org', +'advertise.com', +'advertise.tucows.com', +'advertise.twitpic.com', +'advertisegame.com', +'advertisehealth.go2cloud.org', +'advertiseireland.com', +'advertisementbanners.com', +'advertiser.adknowledge.com', +'advertiser.ads.ec', +'advertiser.cyberghostvpn.com', +'advertiser.fyber.com', +'advertiser.lifestyleadnetwork.com', +'advertiser.net', +'advertiser.superstats.com', +'advertiserconnection.azurewebsites.net', +'advertiserjob.com', +'advertisers.doubleclick.net', +'advertisespace.com', +'advertiseyourgame.com', +'advertising-software.com', +'advertising-world.com', +'advertising.apple.com', +'advertising.christiansunite.com', +'advertising.com', +'advertising.counterpath.com', +'advertising.de', +'advertising.dk', +'advertising.entensity.net', +'advertising.gammae.com', +'advertising.gfxartist.com', +'advertising.hardwarezone.com', +'advertising.hiasys.com', +'advertising.ie', +'advertising.lycos.com', +'advertising.microsoft.com', +'advertising.net', +'advertising.paltalk.com', +'advertising.spreadomat.net', +'advertising.yahoo.com', +'advertising365.com', +'advertisingsex.com', +'advertisingvalue.info', +'advertjunction.com', +'advertlets.com', +'advertmarket.com', +'advertmarketing.com', +'advertmedia.de', +'advertpay.net', +'advertpro.sitepoint.com', +'advertraf.go2affise.com', +'adverts.adam4adam.com', +'adverts.archant.co.uk', +'adverts.creativemark.co.uk', +'adverts.eclypsia.com', +'adverts.freeloader.com', +'advertserve.com', +'advertstats.com', +'advertstream.com', +'advertzer.com', +'advice-ads.s3.amazonaws.com', +'advidi.optimuum.com', +'advido.com', +'adview.ppro.de', +'adviews-sponsor.de', +'adviqo.go2cloud.org', +'advlab.it', +'advm10.com', +'advmania.com', +'advmedia.go2cloud.org', +'advmedialtd.com', +'advnet.xyz', +'advnstrdm541231c0esprod.122.2o7.net', +'advnt01.com', +'advolution.de', +'advombat.ru', +'advrts.s3.amazonaws.com', +'advserver.xyz', +'advspot.com', +'advt.webindia123.com', +'adw.ero-advertising.com', +'adw.sapo.pt', +'adwareremovergold.com', +'adwaver.de', +'adwayskorea.go2cloud.org', +'adwealth.com', +'adweb.hornymatches.com', +'adweb1.hornymatches.com', +'adweb2.hornymatches.com', +'adwolf.eu', +'adword2301.go2cloud.org', +'adwords.immortalnight.com', +'adworkmedia.com', +'adworkmedia.net', +'adworks.rediff.com', +'adworldmedia.com', +'adwpaces.ero-advertising.com', +'adx.adnxs.com', +'adx.allstar.cz', +'adx.atnext.com', +'adx.infomed.co.il', +'adx.kat.ph', +'adx.metanetwork.com', +'adx.panet.co.il', +'adxite.com', +'adxmarket.com', +'adxpansion.com', +'adxpop.com', +'adxpose.com', +'adxpower.com', +'adxserve.net', +'adyoulike.com', +'adz.mobi', +'adz.zwee.ly', +'adzerk-www.s3.amazonaws.com', +'adzerver.com', +'adzly.com', +'adzmedia.com', +'adzmob.com', +'adzmobi.com', +'adzones.com', +'adzonesocial.go2cloud.org', +'adzonk.com', +'adzouk.com', +'ae28-1e4a-ec3b-e9e6.reporo.net', +'aecidiamldalomt.download', +'aeekj.voluumtrk.com', +'aehistory.112.2o7.net', +'aeht9.voluumtrk.com', +'aen.belugaboost.com', +'aeps.112.2o7.net', +'aeropostale.resultspage.com', +'aetv.112.2o7.net', +'aexp.demdex.net', +'af-gb.mgid.com', +'aff-jp.dxlive.com', +'aff-jp.exshot.com', +'aff.adland.co.il', +'aff.attractiontracker.com', +'aff.bstatic.com', +'aff.camplace.com', +'aff.clickon.co.il', +'aff.devicebondage.com', +'aff.eteachergroup.com', +'aff.kinkondemand.com', +'aff.letsbonus.com', +'aff.lmgtfy.com', +'aff.marathonbet.com', +'aff.mclick.mobi', +'aff.nextdating.com', +'aff.nscash.com', +'aff.optionbit.com', +'aff.optionyard.com', +'aff.primaryads.com', +'aff.publicdisgrace.com', +'aff.putncall.com', +'aff.ringtonepartner.com', +'aff.sexandsubmission.com', +'aff.trafficjmp.com', +'aff.utrader.com', +'aff.zoomtrader.com', +'aff12.com', +'affbanners.bizland.com', +'affbeat.com', +'affbuzzads.com', +'affcloud.go2cloud.org', +'affddl.automotive.com', +'affguru.go2cloud.org', +'affilcrtopcolle.112.2o7.net', +'affili.go2cloud.org', +'affili24.com', +'affili24.net', +'affiliate-robot.com', +'affiliate.1800flowers.com', +'affiliate.365adsolutions.com', +'affiliate.abctrcker.com', +'affiliate.adgtracker.com', +'affiliate.adiclicks.com', +'affiliate.admtracker.com', +'affiliate.baazee.com', +'affiliate.c2mclicks.com', +'affiliate.casinorewards.com', +'affiliate.ckmtracker.com', +'affiliate.coral.co.uk', +'affiliate.cpavhits.com', +'affiliate.distrigame.com', +'affiliate.domaindirect.net', +'affiliate.doteasy.com', +'affiliate.doubleyourdating.com', +'affiliate.drivotracker.com', +'affiliate.dtiserv.com', +'affiliate.entireweb.com', +'affiliate.espotting.com', +'affiliate.espotting.fr', +'affiliate.everyone.net', +'affiliate.exploit.net', +'affiliate.fr.espotting.com', +'affiliate.free-banners.com', +'affiliate.friendsearch.com', +'affiliate.gamestop.com', +'affiliate.glbtracker.com', +'affiliate.gmtracker.com', +'affiliate.gwmtracker.com', +'affiliate.hcatracker.com', +'affiliate.hosteurope.de', +'affiliate.iamplify.com', +'affiliate.icdsoft.com', +'affiliate.idownload.com', +'affiliate.idritracker.com', +'affiliate.immobilienscout24.de', +'affiliate.juno.co.uk', +'affiliate.key2link.com', +'affiliate.landsend.com', +'affiliate.mall.cz', +'affiliate.mediaclicktrker.com', +'affiliate.mediatemple.net', +'affiliate.nmbtrack.com', +'affiliate.no.espotting.com', +'affiliate.paidonresults.com', +'affiliate.plugnpay.com', +'affiliate.rakuten.com', +'affiliate.redtubefiles.com', +'affiliate.resellerclub.com', +'affiliate.smsdollar.com', +'affiliate.suntrck.com', +'affiliate.tcnclickpath.com', +'affiliate.techstats.net', +'affiliate.thedatingnetwork.com', +'affiliate.travelnow.com', +'affiliate.trk4.com', +'affiliate.trust.zone', +'affiliate.tvmtracker.com', +'affiliate.viator.com', +'affiliate.wallatrax.com', +'affiliate.yeahmobi.com', +'affiliate.zantracker.com', +'affiliate.zap.co.il', +'affiliate.zap2it.com', +'affiliateads.go2cloud.org', +'affiliatebot.com', +'affiliateclub.go2cloud.org', +'affiliatedpartners.go2cloud.org', +'affiliatefind.com', +'affiliatefuel.com', +'affiliategateways.go2cloud.org', +'affiliategateways.hasoffers.com', +'affiliateharvest.com', +'affiliatehub.skybet.com', +'affiliatekeeper.com', +'affiliatelounge.com', +'affiliatemarketing.directtrack.com', +'affiliatematch.com', +'affiliatemg.com', +'affiliatemunch.go2cloud.org', +'affiliatenetmedia.go2cloud.org', +'affiliatenetwork.com', +'affiliateprogram.keywordspy.com', +'affiliatequality.com', +'affiliates.5dimes.com', +'affiliates.a2hosting.com', +'affiliates.allposters.com', +'affiliates.beaffiliates.com', +'affiliates.beaffiliates.fr', +'affiliates.bfast.com', +'affiliates.bigdoggie.net', +'affiliates.bizarre-mature-sex.com', +'affiliates.bookdepository.co.uk', +'affiliates.bookdepository.com', +'affiliates.chacha.com', +'affiliates.cherryaffiliates.omarsys.com', +'affiliates.cupidplc.com', +'affiliates.de', +'affiliates.deluxepass.com', +'affiliates.eblastengine.com', +'affiliates.esellerate.net', +'affiliates.galapartners.co.uk', +'affiliates.globat.com', +'affiliates.goodvibes.com', +'affiliates.homestead.com', +'affiliates.hostgator.in', +'affiliates.hotelscombined.com', +'affiliates.internationaljock.com', +'affiliates.kingplayer.com', +'affiliates.kissmyads.com', +'affiliates.kliks.net', +'affiliates.kliks.nl', +'affiliates.londonmarketing.com', +'affiliates.lynda.com', +'affiliates.macromedia.com', +'affiliates.market-ace.com', +'affiliates.mature.eu', +'affiliates.mature.nl', +'affiliates.mgmmirage.com', +'affiliates.minglematch.com', +'affiliates.mozy.com', +'affiliates.myfax.com', +'affiliates.net', +'affiliates.nl', +'affiliates.old-and-young-lesbians.com', +'affiliates.onetravel.com', +'affiliates.playboy.com', +'affiliates.playboyplus.com', +'affiliates.powweb.com', +'affiliates.quintura.com', +'affiliates.reunion.com', +'affiliates.spark.net', +'affiliates.thelotter.com', +'affiliates.thrixxx.com', +'affiliates.treasureisland.com', +'affiliates.tyroodr.com', +'affiliates.valuepass.com', +'affiliates.vcommission.com', +'affiliates.wintingo.com', +'affiliates.woodbrass.com', +'affiliates.worldhot.com', +'affiliateshop.com', +'affiliatesuccess.net', +'affiliatetarget.com', +'affiliateteams.go2cloud.org', +'affiliatetracking.com', +'affiliatetracking.net', +'affiliatetrading.go2cloud.org', +'affiliatetrading.net', +'affiliatewire.go2cloud.org', +'affiliatezone.com', +'affiliation-france.com', +'affiliation.planethoster.info', +'affiliation.rueducommerce.fr', +'affiliking.blogspot.com', +'affiliplus.de', +'affiliprint.go2cloud.org', +'affilysis.go2cloud.org', +'affimarket.go2cloud.org', +'affimob.go2cloud.org', +'affina.com', +'affinitytracking.go2cloud.org', +'affirmedzwvnkh.download', +'affise.com', +'affl.sucuri.net', +'affscout.go2cloud.org', +'affsharkoffer.com', +'afftrack.com', +'afftracker.info', +'afftrackinglinks.com', +'afftrackr.com', +'affyield.com', +'afgr2.com', +'afiliati.ro', +'afimg.liveperson.com', +'afin.doublepimp.com', +'aflrm.com', +'afreehome.com', +'africandevelopmentbank.com', +'afs.ero-advertising.com', +'afs.googlesyndication.com', +'afs.googleusercontent.com', +'afs.moatads.com', +'afsanalytics.com', +'afterdawn.us.intellitxt.com', +'afterdownload.com', +'afterview.ru', +'aftp.linksynergy.com', +'aftrk.com', +'afwl8.voluumtrk.com', +'ag.travelocity.com.edgesuite.net', +'agf-test.2cnt.net', +'aggregateknowledge.com', +'agi5y.voluumtrk.com', +'agjdv.voluumtrk.com', +'agmedia.go2cloud.org', +'agmtrk.com', +'agnstaging.com', +'agnvbmaus.112.2o7.net', +'agofm-test-off.2cnt.net', +'agoramedia.com', +'agpaffiliates.go2cloud.org', +'ags.beta.advertising.com', +'ah-ha.com', +'ahhgu.voluumtrk.com', +'ahomedia.zxfactory.nl', +'ahqcr.voluumtrk.com', +'ai.hitbox.com', +'ai.net', +'ai.yimg.jp', +'aideslihks.download', +'aidps.atdmt.com', +'aidqi.voluumtrk.com', +'aim-charts.pf.aol.com', +'aim1.adsoftware.com', +'aim2.adsoftware.com', +'aim3.adsoftware.com', +'aim4.adsoftware.com', +'aim4media.com', +'aim5.adsoftware.com', +'aimtoday.aol.com', +'aio.lp.mydas.mobi', +'airbrake.io', +'airpush.com', +'airpush.go2affise.com', +'airpushmarketing.s3.amazonaws.com', +'ais.abacast.com', +'aj.600z.com', +'aj.adjungle.com', +'aj3zt.voluumtrk.com', +'ajcclassifieds.com', +'ajjtgubginkgoes.review', +'ajkelra.com', +'ajwantjtkrn.download', +'ak-ns.sascdn.com', +'ak.exe.imgfarm.com', +'ak.imgaft.com', +'ak.imgfarm.com', +'ak.linkstorm.net', +'ak.pipoffers.apnpartners.com', +'ak.sail-horizon.com', +'ak.toolbar.mywebsearch.com', +'ak.webfetti.com', +'ak1.abmr.net', +'ak1.imgaft.com', +'ak1s.abmr.net', +'aka-cdn-ns.adtech.de', +'aka-cdn-ns.adtechus.com', +'aka-cdn.adtechus.com', +'aka.p80.net', +'akaads-abc.starwave.com', +'akaads-espn.starwave.com', +'akamai.bizrate.com', +'akamai.smartadserver.com', +'akillimeyveler.reklamagaci.com', +'akm.playnow.guru', +'akmnetwork.com', +'aknoj.voluumtrk.com', +'akqhhiqteunuchise.review', +'aksb-a.akamaihd.net', +'aktrack.pubmatic.com', +'akvoi.voluumtrk.com', +'akz.imgfarm.com', +'alabardak.com', +'albanytimesunion.122.2o7.net', +'albinoblacksheep.us.intellitxt.com', +'alchemynteryield.jmp9.com', +'alea.adam.ad.daum.net', +'alea.adam.daum.net', +'alenty.2cnt.net', +'alfredean.com', +'aliaz.go2cloud.org', +'alienationxjbqjennn.download', +'alijaextort.review', +'all.447.xyz', +'all.eliteserverconnect.xyz', +'alladream.go2cloud.org', +'allatv.justclick.ru', +'allbanners.ru', +'alldcs-distinct.outbrain.com', +'alldcs.outbrain.com', +'alldcs.sphere.com', +'allhiphop.us.intellitxt.com', +'alliancesqcqet.download', +'allosponsor.com', +'alloydigital.com', +'allsolutionsnetwork.com', +'allstarmediagroup.com', +'allstats4u.com', +'alltereg0.ru', +'alltraff.ru', +'allyes.com', +'almonriesdocerjqcc.download', +'alog.umeng.com', +'alpha.bnex.com', +'alphagirlz.mobi', +'alpventures.bravejournal.com', +'alt.bugsense.appspot.com', +'alt.bugsense.com', +'altfarm.mediaplex.com', +'altfarm.mediaplex.com.27517.9211.302br.net', +'altfarm.mediaplex.com.32246.9211.302br.net', +'altfarm.mediaplex.com.32247.9211.302br.net', +'altfarm.mediaplex.com.32249.9211.302br.net', +'altfarm.mediaplex.com.60476.9430.302br.net', +'altfarm.mediaplex.com.60477.9430.302br.net', +'altfarm.mediaplex.com.72266.9605.302br.net', +'altfarm.mediaplex.com.72267.9605.302br.net', +'altfarm.mediaplex.com.77763.9664.302br.net', +'altfarm.mediaplex.com.77765.9664.302br.net', +'altfarm.mediaplex.com.77767.9664.302br.net', +'altfarm.mediaplex.com.77769.9664.302br.net', +'altfarm.mediaplex.com.77770.9664.302br.net', +'altfarm.mediaplex.com.77771.9664.302br.net', +'altfarm.mediaplex.com.77773.9664.302br.net', +'altfarm.mediaplex.com.77775.9664.302br.net', +'altfarm.mediaplex.com.77777.9664.302br.net', +'altfarm.mediaplex.com.77779.9664.302br.net', +'altfarm.mediaplex.com.77781.9664.302br.net', +'altfarm.mediaplex.com.77783.9664.302br.net', +'altfarm.mediaplex.com.77785.9664.302br.net', +'altfarm.mediaplex.com.77787.9664.302br.net', +'altfarm.mediaplex.com.77789.9664.302br.net', +'altfarm.mediaplex.com.77791.9664.302br.net', +'altfarm.mediaplex.com.77792.9664.302br.net', +'altfarm.mediaplex.com.77793.9664.302br.net', +'altfarm.mediaplex.com.77794.9664.302br.net', +'altfarm.mediaplex.com.77795.9664.302br.net', +'altfarm.mediaplex.com.77796.9664.302br.net', +'altfarm.mediaplex.com.77797.9664.302br.net', +'altfarm.mediaplex.com.77798.9664.302br.net', +'altfarm.mediaplex.com.77799.9664.302br.net', +'altfarm.mediaplex.com.77801.9664.302br.net', +'altiris.112.2o7.net', +'alwaysnewsoft.thegoodonesystemforcontentingstable.stream', +'alxsite.com', +'am15.net', +'amanitaswtzshxp.download', +'amateur.amarotic.com', +'amateur.xxxcounter.com', +'amazedmag.digidip.net', +'amazingcounters.com', +'amazinglyjvrucwx.download', +'amclicks.com', +'amidmostewbvqcji.download', +'amkhn.voluumtrk.com', +'amoad.com', +'amobee.com', +'amoffers.go2cloud.org', +'amoffers.hasoffers.com', +'amono.justclick.ru', +'amp.122.2o7.net', +'ampxchange.com', +'ampya01.wt-eu02.net', +'amres.voluumtrk.com', +'ams1.ib.adnxs.com', +'ams1.mobile.adnxs.com', +'ams10.ib.adnxs.com', +'ams11.ib.adnxs.com', +'ams12.ib.adnxs.com', +'ams13.ib.adnxs.com', +'ams14.ib.adnxs.com', +'ams15.ib.adnxs.com', +'ams16.ib.adnxs.com', +'ams17.ib.adnxs.com', +'ams18.ib.adnxs.com', +'ams19.ib.adnxs.com', +'ams2.100tb.heyzap.com', +'ams2.ib.adnxs.com', +'ams2.voxcloud.cedexis.com', +'ams20.ib.adnxs.com', +'ams3.100tb.heyzap.com', +'ams3.ib.adnxs.com', +'ams4.100tb.heyzap.com', +'ams4.ib.adnxs.com', +'ams5.ib.adnxs.com', +'ams6.ib.adnxs.com', +'ams7.ib.adnxs.com', +'ams8.ib.adnxs.com', +'ams9.ib.adnxs.com', +'amtracking.go2cloud.org', +'amuco.voluumtrk.com', +'amusive.com', +'amwqo.voluumtrk.com', +'amylaseyaxvh.download', +'amz.steamprices.com', +'amzn.trendhure.com', +'an-retargeting.awsotherlevels.com', +'an.adhood.com', +'an.blamads.com', +'an.pxl.ace.advertising.com', +'an.tacoda.net', +'an.yandex.ru', +'analy.qq.com', +'analysis.focalprice.com', +'analysis.shinobi.jp', +'analytic.gatewayinterface.com', +'analytic.imlive.com', +'analytic.spamfighter.com', +'analytic.xingcloud.com', +'analytics-api-samples.googlecode.com', +'analytics-prod-ingress.bricknet.com', +'analytics-v2.anvato.com', +'analytics.163.com', +'analytics.1and1.com', +'analytics.1und1.de', +'analytics.abacast.com', +'analytics.ad.daum.net', +'analytics.adnetwork.vn', +'analytics.adspaces.ero-advertising.com', +'analytics.ambient-platform.com', +'analytics.archive.org', +'analytics.arubamediamarketing.it', +'analytics.aweber.com', +'analytics.beeznest.com', +'analytics.belgacom.be', +'analytics.bigcommerce.com', +'analytics.blogspot.com', +'analytics.clickdimensions.com', +'analytics.cmg.net', +'analytics.cnd-motionmedia.de', +'analytics.cocolog-nifty.com', +'analytics.conmio.com', +'analytics.convertlanguage.com', +'analytics.cynapse.com', +'analytics.datahc.com', +'analytics.dev.springboardvideo.com', +'analytics.disneyinternational.com', +'analytics.ero-advertising.com', +'analytics.freedom.com', +'analytics.fusepowered.com', +'analytics.google.com', +'analytics.gorillanation.com', +'analytics.gvim.mobi', +'analytics.industriemagazin.net', +'analytics.informationweek.com', +'analytics.ladmedia.fr', +'analytics.leadlifesolutions.net', +'analytics.localytics.com', +'analytics.loop-cloud.de', +'analytics.matchbin.com', +'analytics.mefeedia.com', +'analytics.mindjolt.com', +'analytics.mobile.yandex.net', +'analytics.moneycontrol.com', +'analytics.moz.com', +'analytics.mozzi.com', +'analytics.mpn.mokonocdn.com', +'analytics.nascar.com', +'analytics.newsinc.com', +'analytics.openload.co', +'analytics.optilead.co.uk', +'analytics.poferries.com', +'analytics.popsci.com', +'analytics.query.yahoo.com', +'analytics.rechtslupe.org', +'analytics.recruitics.com', +'analytics.reyrey.net', +'analytics.sitewit.com', +'analytics.socialbakers.com', +'analytics.solidbau.at', +'analytics.soup.io', +'analytics.spoken-tutorial.org', +'analytics.stg.online.xl.pt', +'analytics.supplyframe.com', +'analytics.teespring.com', +'analytics.themarketiq.com', +'analytics.theminersunion.com', +'analytics.thingx.tv', +'analytics.traidnt.net', +'analytics.traviangames.com', +'analytics.tribeca.vidavee.com', +'analytics.tube8.phncdn.com', +'analytics.twitter.com', +'analytics.upworthy.com', +'analytics.us.archive.org', +'analytics.vodafone.co.uk', +'analytics.wildtangent.com', +'analytics.xl.pt', +'analytics.yahoo.com', +'analytics.yam.com', +'analytics.yola.net', +'analytics.yolacdn.net', +'analytics.youporn.phncdn.com', +'analytics.zhihu.com', +'analyticsengine.s3.amazonaws.com', +'analyze.full-marke.com', +'analyzer.fc2.com', +'analyzer.liveads.no', +'analyzer2.fc2.com', +'analyzer52.fc2.com', +'analyzer55.fc2.com', +'anapaestsgekcc.download', +'anapixel.expansion.com', +'anapixel.telva.com', +'anastasiaaffiliate.go2cloud.org', +'anatomiseddybglcuku.download', +'ancestrymsn.112.2o7.net', +'andpop.us.intellitxt.com', +'andreev.justclick.ru', +'android-hilfe.de.intellitxt.com', +'android-sdk31.transpera.com', +'android.bcfads.com', +'android.heyzap.com', +'android.mobpartner.mobi', +'android.reporo.net', +'android.revmob.com', +'androidads20.adcolony.com', +'androidads21.adcolony.com', +'androidquery.appspot.com', +'androidsdk.ads.mp.mydas.mobi', +'androidsk.ads.mp.mydas.mobi', +'androtify.com', +'anet.apx.appier.net', +'anet.c.appier.net', +'anfyx.voluumtrk.com', +'angiba.112.2o7.net', +'angmar.112.2o7.net', +'angpar.112.2o7.net', +'angtr.112.2o7.net', +'angts.112.2o7.net', +'angvac.112.2o7.net', +'anlt.dnsdynamic.com', +'anm.intelli-direct.com', +'anners.ero-advertising.com', +'annonser.dagbladet.no', +'annuncio.com.do', +'anomicpcwgrml.download', +'anon.doubleclick.speedera.net', +'anonymousads.com', +'anpqt.voluumtrk.com', +'ans1.adsoftware.com', +'ans2.adsoftware.com', +'ans3.adsoftware.com', +'ans4.adsoftware.com', +'answermedia.com', +'answers.us.intellitxt.com', +'antezeta.com', +'anurousxaeazghbz.download', +'any.gs', +'anycast.fw.adsafeprotected.com', +'anycast.pixel.adsafeprotected.com', +'anyday.com', +'anylist.c.appier.net', +'anymanga.com', +'anz.ads.link4ads.com', +'anz.ms.link4ads.com', +'anzeigen.bei-uns.de', +'aobwt.voluumtrk.com', +'aocular.com', +'aojws.voluumtrk.com', +'aok.122.207.net', +'aol.ivwbox.de', +'aol.tt.omtrdc.net', +'aoldmoz.122.2o7.net', +'aolsvc.ivwbox.de', +'aolturnercnnmoney.112.2o7.net', +'aolturnersi.122.2o7.net', +'aolwpmq.112.2o7.net', +'aolwpmqnoban.112.2o7.net', +'aolwpnscom.112.2o7.net', +'aolwpnswhatsnew.112.2o7.net', +'aonx6.voluumtrk.com', +'aoredi.com', +'aos.wall.youmi.net', +'ap.ads.link4ads.com', +'ap.lijit.com', +'ap.ms.link4ads.com', +'ap.rtrgt.com', +'ap1.alphagirlz.mobi', +'ap2.alphagirlz.mobi', +'apachestat.cimedia.net', +'apapi.dc121677.com', +'apapi.rapsio.com', +'aparat.ads.saba-e.com', +'apdigitalorg.112.2o7.net', +'aperture.displaymarketplace.com', +'apex.go.sonobi.com', +'api-public.addthis.com', +'api.140proof.com', +'api.2easydroid.com', +'api.ad-patrick.com', +'api.adip.ly', +'api.adlure.net', +'api.adrta.com', +'api.adsymptotic.com', +'api.adyoulike.com', +'api.airpush.com', +'api.analytics.omgpop.com', +'api.appfireworks.com', +'api.applifier.com', +'api.appoxee.com', +'api.appsflyer.com', +'api.apptap.com', +'api.asiatone.net', +'api.atdmt.com', +'api.autocompleteplus.com', +'api.bee7.com', +'api.bitp.it', +'api.bizographics.com', +'api.celtra.com', +'api.chartboost.com', +'api.citygridmedia.com', +'api.conduit.com', +'api.contextly.com', +'api.crittercism.com', +'api.demandbase.com', +'api.domob.cn', +'api.elasticemail.com', +'api.ero-advertising.com', +'api.flicktweets.com', +'api.flurry.com', +'api.flyertown.ca', +'api.fortumo.com', +'api.fusepowered.com', +'api.fyreball.com', +'api.gameanalytics.com', +'api.getvero.com', +'api.hostip.info', +'api.iflychat.com', +'api.ilius.net', +'api.innomdc.com', +'api.intensifier.de', +'api.ipinfodb.com', +'api.keen.io', +'api.kiip.me', +'api.kissmetrics.com', +'api.lazyswipe.com', +'api.magmamobile.com', +'api.mixpanel.com', +'api.mobileapptracking.com', +'api.mobpartner.mobi', +'api.mobula.sdk.duapps.com', +'api.nanigans.com', +'api.native.ai', +'api.naturaltracking.com', +'api.nrelate.com', +'api.omniata.com', +'api.optimizely.com', +'api.otherlevels.com', +'api.parsely.com', +'api.petametrics.com', +'api.posst.co', +'api.revcontent.com', +'api.revmob.com', +'api.segment.io', +'api.sharedcount.com', +'api.skyhookwireless.com', +'api.sponsorpay.com', +'api.taplytics.com', +'api.taps.io', +'api.target.smi2.net', +'api.testrequest.info', +'api.thetrafficstat.net', +'api.traversedlp.com', +'api.tweetmeme.com', +'api.umbel.com', +'api.umeng.com', +'api.unthem.com', +'api.usersnap.com', +'api.v2.sslsecure1.com', +'api.viglink.com', +'api.vungle.com', +'api.w3i.com', +'api.xdirectx.com', +'api.yeahmobi.com', +'api.yieldkit.com', +'api.yp.com', +'api.zanox.com', +'api.zanox.ws', +'api.zedo.com', +'api1.intellicontact.com', +'api1.thesearchagency.net', +'api15.cmdragracing.com', +'api2.testrequest.info', +'api2.thesearchagency.net', +'api28.thetrafficstat.net', +'api28.webovernet.com', +'api3.testrequest.info', +'api3.thesearchagency.net', +'api31.thetrafficstat.net', +'api4.testrequest.info', +'api4.thesearchagency.net', +'api5.testrequest.info', +'api5.thesearchagency.net', +'api6.thesearchagency.net', +'api7.thesearchagency.net', +'api8.thesearchagency.net', +'api9.thesearchagency.net', +'apiae.hopscore.com', +'apiservices.krxd.net', +'apiskywebbercom-a.akamaihd.net', +'apkquery.ksmobile.net', +'apm.crittercism.com', +'apnx-match.dotomi.com', +'apo.ero-advertising.com', +'apodemjyoqhwc.download', +'apollo.go2cloud.org', +'apophygeneafuk.download', +'app-ab02.marketo.com', +'app-ab03.marketo.com', +'app-ab04.marketo.com', +'app-abj.marketo.com', +'app-abk.marketo.com', +'app-abm.marketo.com', +'app-abq.marketo.com', +'app-authority.com', +'app-creatives.cdn.admobile.me', +'app-promo.com', +'app-ratings.com', +'app-sj01.marketo.com', +'app-sj09.marketo.com', +'app-sjg.marketo.com', +'app-sjn.marketo.com', +'app-sjo.marketo.com', +'app-storage.elicitapp.com', +'app.adjust.io', +'app.app-authority.com', +'app.appsflyer.com', +'app.bronto.com', +'app.cocolog-nifty.com', +'app.compete.com', +'app.cookieassistant.com', +'app.cooleremail.com', +'app.crittercism.com', +'app.crowdscience.com', +'app.desktop.ak-networks.com', +'app.elicitapp.com', +'app.getvero.com', +'app.hubspot.com', +'app.icontact.com', +'app.insightgrit.com', +'app.kissmetrics.com', +'app.lfstmedia.com', +'app.medyanetads.com', +'app.mlcampaignru.com', +'app.mlnewsletterru.com', +'app.mysafeurl.com', +'app.qualaroo.com', +'app.salecycle.com', +'app.sgiz.mobi', +'app.sgizmo.com', +'app.simplycast.com', +'app.t-ad.co.kr', +'app.yieldify.com', +'app4us.info', +'appads.com', +'appapi.inspsearchapi.com', +'apparitorvlipqjiz.download', +'appboy.com', +'appclick.co', +'appclick.net', +'appdog.com', +'appetencyelain.com', +'appflood.com', +'appflood.go2cloud.org', +'appfly.mobi', +'appia.com', +'appintop.com', +'appitate.go2affise.com', +'applab-sdk.amazon.com', +'applebarq.com', +'appledaily.apx.appier.net', +'appleglobal.112.2o7.net', +'applestoreus.112.2o7.net', +'application.bfast.com', +'applicationgrabb.net', +'applications.bfast.com', +'appliedsemantics.com', +'applifier.com', +'applift-a.apptornado.com', +'applift.com', +'appload.ingest.crittercism.com', +'applovin.com', +'appmpire.go2affise.com', +'appodeal.com', +'appolicious.com', +'apposersdamxq.download', +'appraisingemfxg.download', +'apprebates.com', +'appredeem.com', +'approstar.com', +'apps-infor.com', +'apps.bittorrent.com', +'apps.conduit.com', +'apps.crittercism.com', +'apps.fm', +'apps.leadbolt.com', +'apps.livejasmin.com', +'apps.mobilityware.com', +'apps.oetingerverlag.de', +'apps.outfit7.com', +'apps.social.omniture.com', +'apps2.outfit7.com', +'apps4push.com', +'appscion.go2cloud.org', +'appserver-ap.com', +'appserver-cp.com', +'appsfire.com', +'appsflyer.com', +'appsnack.com', +'apptenpro.com', +'apptera.com', +'apptest.2cnt.net', +'apptornado.com', +'apptrafficmedia.go2affise.com', +'apptv.com', +'appular.com', +'appxigo.go2affise.com', +'apqixzxxgoverstayed.review', +'aproegroup.go2cloud.org', +'apromoweb.com', +'aps.hearstnp.com', +'apsalar.com', +'aptrk.com', +'aptrk5.com', +'apture.com', +'apu04c0.audientia.net', +'apu0640.audientia.net', +'apx.avazutracking.net', +'apx.internal-redirect.avazutracking.net', +'apx.irck.avazutracking.net', +'apx.matk.avazutracking.net', +'apx.moatads.com', +'apx.motads.com', +'apx.trck.avazutracking.net', +'aqua.7eer.net', +'aquasoft.us.intellitxt.com', +'aqueduct.com', +'ar.2.cqcounter.com', +'ar.hao123.com', +'ar.tns-counter.ru', +'ar.voicefive.com', +'ar1.atwola.com', +'ar2.atwola.com', +'ar3.atwola.com', +'ar4.atwola.com', +'ar5.atwola.com', +'ar6.atwola.com', +'ar7.atwola.com', +'ar8.atwola.com', +'ar9.atwola.com', +'arabadzhi.justclick.ru', +'arabmistress.s3.amazonaws.com', +'arabyads.go2cloud.org', +'arachne.cz', +'arads.0fees.us', +'aragonadvertising.go2cloud.org', +'arcadebanners.com', +'arcor.de.intellitxt.com', +'ard.ihookup.com', +'ard.ivwbox.de', +'ard.xxxblackbook.com', +'ard.yahoo.co.jp', +'ardrone.swoop.com', +'areasins.com', +'areasnap.com', +'arena.altitude-arena.com', +'ariexinteractive.go2cloud.org', +'arnmp.voluumtrk.com', +'arrestspkqtg.download', +'arrowtec.go2cloud.org', +'arroyomedia.go2cloud.org', +'art-of-forex.justclick.ru', +'article19.com', +'artificecvtogvnt.download', +'artuframe.bfast.com', +'artwork.aim4media.com', +'aru.index.hu', +'as.adfonic.net', +'as.adwave.com', +'as.air2s.com', +'as.casalemedia.com', +'as.chango.com', +'as.ebz.io', +'as.gamebox.com', +'as.gettyservices.com', +'as.gostats.com', +'as.inbox.com', +'as.innity.com', +'as.it.impact-ad.jp', +'as.mv.impact-ad.jp', +'as.sexad.net', +'as.sinahk.net', +'as.wiley.com', +'as.wkcr.cz', +'as5000.com', +'ase.clmbtech.com', +'ashiestsdznwfbsd.download', +'ashwebmail.createsend.com', +'asiarevenue.go2cloud.org', +'askjolene.ero-advertising.com', +'askmen.us.intellitxt.com', +'askmen2.us.intellitxt.com', +'asmedia.adsupplyssl.com', +'asmi-mobile.nuggad.net', +'asn-trk.advolution.de', +'asn.advolution.de', +'asooda.com', +'asotrack1.fluentmobile.com', +'aspair3.fingta.com', +'aspartamerpzyyzyn.download', +'asplayer-ovp.piksel.com', +'asqcr.voluumtrk.com', +'asrv-a.akamaihd.net', +'ass4all.com', +'asset-0.tenderapp.com', +'asset-1.tenderapp.com', +'asset-2.tenderapp.com', +'asset.pagefair.com', +'asset.pagefair.net', +'assets-polarb-com.a.ssl.fastly.net', +'assets.adobedtm.com', +'assets.bravenet.com', +'assets.cntdy.mobi', +'assets.devx.com', +'assets.infinity-tracking.net', +'assets.kampyle.com', +'assets.kuhlmann-software.at', +'assets.matchbin.com', +'assets.olark.com', +'assets.omniture.com', +'assets.oomz.de', +'assets.servedby-buysellads.com', +'assets.tapad.com', +'assistonglobal.com', +'assoc-amazon.co.uk', +'associatedcontent.112.2o7.net', +'associateprograms.com', +'associeta.com', +'associmage.match.com', +'associmg.com', +'assonantsvqqxpr.download', +'ast.adiquity.com', +'astrocash.org', +'astroportal.de.intellitxt.com', +'astrsk.net', +'asuum.com', +'asv.nuggad.net', +'asx13.com', +'at.amgdgt.com', +'at.atwola.com', +'at.netster.com', +'ata.ero-advertising.com', +'atdmt.com', +'atdmt.com.24287.9170.302br.net', +'atdmt.com.24290.9170.302br.net', +'atdmt.com.24293.9170.302br.net', +'atdmt.com.24492.9179.302br.net', +'atdmt.com.24498.9179.302br.net', +'atdmt.com.27329.9201.302br.net', +'atdmt.com.35014.9254.302br.net', +'atdmt.com.35191.9254.302br.net', +'atdmt.com.38007.9304.302br.net', +'atdmt.com.38019.9304.302br.net', +'atdmt.com.38025.9304.302br.net', +'atdmt.com.38373.9304.302br.net', +'atdmt.com.38376.9304.302br.net', +'atdmt.com.38943.9304.302br.net', +'atdmt.com.43345.9332.302br.net', +'atdmt.com.43351.9332.302br.net', +'atdmt.com.43357.9332.302br.net', +'atdmt.com.46618.9304.302br.net', +'atdmt.com.46624.9304.302br.net', +'atdmt.com.46636.9304.302br.net', +'atdmt.com.46663.9304.302br.net', +'atdmt.com.47693.9304.302br.net', +'atdmt.com.52905.9332.302br.net', +'atdmt.com.55788.9391.302br.net', +'atdmt.com.72669.9596.302br.net', +'ate.spritmonitor.de', +'atemda.com', +'athanorjjvdyu.download', +'atinternet.com', +'atkeg.voluumtrk.com', +'atkins.vo.llnwd.net', +'atlas.astrology.com', +'atlasdmt.com', +'atmek.voluumtrk.com', +'atmospherebfrufumzi.download', +'atomicleads.go2cloud.org', +'atrack.allposters.com', +'atrack.art.com', +'atropismlsuttxa.download', +'atsfi.de', +'attadworks.turn.com', +'attrack.ientrynetwork.net', +'attributiontrackingga.googlecode.com', +'attservicesinc.tt.omtrdc.net', +'au-cdn.effectivemeasure.net', +'au-ssl.effectivemeasure.net', +'au.2.cqcounter.com', +'au.ads.link4ads.com', +'au.adserver.yahoo.com', +'au.effectivemeasure.net', +'au.marketo.com', +'au.ms.link4ads.com', +'au.umeng.com', +'au.www.sabela.com', +'au.youmi.net', +'auctionads.com', +'auctionarysrnbyfiqd.download', +'aud.pubmatic.com', +'audi-club.ru', +'audiag.112.2o7.net', +'audience.powerlinks.com', +'audience360.dpmsrv.com', +'audio.digidip.net', +'audio.iad.cimedia.net', +'audiopal.com', +'audit.303br.net', +'audit.303br.net.73165.9465.302br.net', +'audit.303br.net.73185.9381.302br.net', +'audit.303br.net.73186.9602.302br.net', +'audit.303br.net.76823.9517.302br.net', +'audit.median.hu', +'audit.webinform.hu', +'audit1.median.hu', +'audit2.median.hu', +'audit3.median.hu', +'auditonline.hu', +'aufxbejwdnkn.download', +'auihv.voluumtrk.com', +'aulosyhydzitxb.download', +'aureate.com', +'aureolasfdoqu.download', +'aurora.starpartner.com', +'australiapost.122.2o7.net', +'austria1.adverserve.net', +'auth.livejasmin.com', +'auth20120430.getjar.com', +'auto-ping.com', +'auto.ivwbox.de', +'autobytel.112.2o7.net', +'autocontext.begun.ru', +'autoforumuniverse.us.intellitxt.com', +'autohits.dk', +'autolinkmaker.itunes.apple.com', +'automaticsystem.com', +'automrxowsdxm.download', +'autopilothq.com', +'autosurfpro.com', +'autotrader-www.baynote.net', +'autotrader.tt.omtrdc.net', +'autoweb.112.2o7.net', +'av.ageverify.co', +'av.beap.bc.yahoo.com', +'av7df.voluumtrk.com', +'avads.co.uk', +'avatar.truongton.net', +'avatarcash.com', +'avatarresources.com', +'avatraffic.com', +'avazudsp.net', +'avazutracking.net', +'avenuea.com', +'avgtechnologies.112.2o7.net', +'aviderlutcinvv.download', +'avp.innity.com', +'avres.net', +'aw.masterstats.com', +'awaps.yandex.ru', +'award.sitekeuring.net', +'awardspace.de.intellitxt.com', +'awarez.net', +'away.us.intellitxt.com', +'aweber.com', +'awempire.com', +'awin1.com', +'awjul1.radar11ab.co.uk', +'awjul10.radar11ab.co.uk', +'awjul11.radar11ab.co.uk', +'awjul12.radar11ab.co.uk', +'awjul13.radar11ab.co.uk', +'awjul14.radar11ab.co.uk', +'awjul15.radar11ab.co.uk', +'awjul16.radar11ab.co.uk', +'awjul17.radar11ab.co.uk', +'awjul18.radar11ab.co.uk', +'awjul19.radar11ab.co.uk', +'awjul2.radar11ab.co.uk', +'awjul20.radar11ab.co.uk', +'awjul3.radar11ab.co.uk', +'awjul4.radar11ab.co.uk', +'awjul5.radar11ab.co.uk', +'awjul6.radar11ab.co.uk', +'awjul7.radar11ab.co.uk', +'awjul8.radar11ab.co.uk', +'awjul9.radar11ab.co.uk', +'awos8.voluumtrk.com', +'aws-ap-southeast-2a.bench.cedexis.com', +'aws.tracker.squidanalytics.com', +'ax10.a.cocolog-nifty.com', +'axad.shinobi.jp', +'axd.cpapush.com', +'axeds.com', +'axesiiyuqtfa.download', +'axis7.go2cloud.org', +'axislogger.appspot.com', +'axldy.voluumtrk.com', +'axonix.com', +'axp.zedo.com', +'axpraqxjdikes.review', +'axtrhasenegas.review', +'aydne.voluumtrk.com', +'ayrqdtroglodyte.review', +'ayuzu.voluumtrk.com', +'ayx.soundharborredirect.com', +'az413505.vo.msecnd.net', +'az416426.vo.msecnd.net', +'az598575.vo.msecnd.net', +'az708531.vo.msecnd.net', +'az7t8.com', +'azads.net', +'azalead.com', +'aznmedia.go2cloud.org', +'azubi.adition.com', +'b-online.de', +'b.admedia.com', +'b.ads1.msn.com', +'b.ads2.msads.net', +'b.aklamio.com', +'b.aol.com', +'b.aol.de', +'b.baidu.com', +'b.bedop.com', +'b.big7.com', +'b.bm324.com', +'b.c8.net.ua', +'b.camplace.com', +'b.casalemedia.com', +'b.chartboost.com', +'b.dlsite.net', +'b.dpmsrv.com', +'b.esecure-transaction.com', +'b.hidemyass.com', +'b.huffingtonpost.com', +'b.huffingtonpost.de', +'b.ifmnwi.club', +'b.imonomy.com', +'b.inbox.lv', +'b.localpages.com', +'b.netscape.com', +'b.photobucket.com', +'b.portalnet.cl', +'b.positive-technology.co.uk', +'b.rmgserving.com', +'b.sc.omtrdc.net', +'b.scorecardresearch.com', +'b.sell.com', +'b.sli-spark.com', +'b.thanksearch.com', +'b.the-nextlevel.com', +'b.trackcdn.com', +'b.turbo.az', +'b.vghd.com', +'b.vimeocdn.com', +'b.voicefive.com', +'b.xfreeservice.com', +'b.zedo.com', +'b.zeroredirect.com', +'b.zeroredirect1.com', +'b0bsi.voluumtrk.com', +'b1.2cnt.net', +'b1.boards2go.com', +'b1060no8673u5l58vi150ofyri.hop.clickbank.net', +'b12.myspace.com', +'b12.sitemeter.com', +'b17261b2b5010f3c6c93-d77e110c9a6908e75cd02fbd7eb24572.r86.cf2.rackcdn.com', +'b1d6z.voluumtrk.com', +'b2.boards2go.com', +'b2.sitemeter.com', +'b23.ru', +'b243-4eb2-8667-4a30.reporo.net', +'b2c-mlm.marketo.com', +'b2fkj.voluumtrk.com', +'b2wtd.voluumtrk.com', +'b3-uk.mookie1.com', +'b3-uk.mookie1.com.63430.9488.302br.net', +'b3.mookie1.com', +'b3.rivalgaming.com', +'b3.toparcadehits.com', +'b344-7507-e4c2-b742.reporo.net', +'b365.2cnt.net', +'b4.rivalgaming.com', +'b4.toparcadehits.com', +'b4.yahoo.co.jp', +'b4psads.com', +'b5wpo.voluumtrk.com', +'b7.sitemeter.com', +'b99217.r.axf8.net', +'ba.ccm2.net', +'ba.kioskea.net', +'ba2b687.se', +'ba42-c08c-2e10-c6e3.reporo.net', +'ba965.voluumtrk.com', +'babes.go2cloud.org', +'babm.texthelp.com', +'babs.tv2.dk', +'babycentercom.112.2o7.net', +'babylon.netseer.com', +'baccajxzumht.download', +'bacillemiaujtpcij.download', +'baciotti.com', +'backlink.dichthuat.org', +'backoffice.adsender.us', +'backtype.com', +'backups.crittercism.com', +'badge.stumbleupon.com', +'badges.instagram.com', +'badoink.com', +'bafflesitfjtxan.download', +'bahuvrihisjcdqhbfv.download', +'bakler.net', +'bal.ad.dotandad.com', +'baleron.com', +'bam-1.nr-data.net', +'bam-2.nr-data.net', +'bam-3.nr-data.net', +'bam-4.nr-data.net', +'bam-5.nr-data.net', +'ban.krooncasino.com', +'ban.promotools.biz', +'ban3ers.ero-advertising.com', +'ban4ers.ero-advertising.com', +'bandpage.go2cloud.org', +'banex.cz', +'bangmedia.go2cloud.org', +'bango.co.uk', +'bango.com', +'bango.info', +'bango.net', +'bangtuoc.vn', +'banjers.ero-advertising.com', +'bank-01.ads.mp.mydas.mobi', +'bank-02.ads.mp.mydas.mobi', +'bank-03.ads.mp.mydas.mobi', +'bank-04.ads.mp.mydas.mobi', +'bank-05.ads.mp.mydas.mobi', +'bank-06.ads.mp.mydas.mobi', +'bank-07.ads.mp.mydas.mobi', +'bank-08.ads.mp.mydas.mobi', +'bank-09.ads.mp.mydas.mobi', +'bank-10.ads.mp.mydas.mobi', +'bank-11.ads.mp.mydas.mobi', +'bank-12.ads.mp.mydas.mobi', +'bank-13.ads.mp.mydas.mobi', +'bank-14.ads.mp.mydas.mobi', +'bank-15.ads.mp.mydas.mobi', +'bank-16.ads.mp.mydas.mobi', +'bank-17.ads.mp.mydas.mobi', +'bank-171.ads.mp.mydas.mobi', +'bank-172.ads.mp.mydas.mobi', +'bank-173.ads.mp.mydas.mobi', +'bank-174.ads.mp.mydas.mobi', +'bank-175.ads.mp.mydas.mobi', +'bank-176.ads.mp.mydas.mobi', +'bank-177.ads.mp.mydas.mobi', +'bank-178.ads.mp.mydas.mobi', +'bank-179.ads.mp.mydas.mobi', +'bank-18.ads.mp.mydas.mobi', +'bank-180.ads.mp.mydas.mobi', +'bank-181.ads.mp.mydas.mobi', +'bank-182.ads.mp.mydas.mobi', +'bank-183.ads.mp.mydas.mobi', +'bank-184.ads.mp.mydas.mobi', +'bank-185.ads.mp.mydas.mobi', +'bank-186.ads.mp.mydas.mobi', +'bank-187.ads.mp.mydas.mobi', +'bank-188.ads.mp.mydas.mobi', +'bank-189.ads.mp.mydas.mobi', +'bank-19.ads.mp.mydas.mobi', +'bank-190.ads.mp.mydas.mobi', +'bank-191.ads.mp.mydas.mobi', +'bank-192.ads.mp.mydas.mobi', +'bank-193.ads.mp.mydas.mobi', +'bank-194.ads.mp.mydas.mobi', +'bank-195.ads.mp.mydas.mobi', +'bank-196.ads.mp.mydas.mobi', +'bank-197.ads.mp.mydas.mobi', +'bank-198.ads.mp.mydas.mobi', +'bank-199.ads.mp.mydas.mobi', +'bank-2.ads.mp.mydas.mobi', +'bank-20.ads.mp.mydas.mobi', +'bank-200.ads.mp.mydas.mobi', +'bank-21.ads.mp.mydas.mobi', +'bank-22.ads.mp.mydas.mobi', +'bank-23.ads.mp.mydas.mobi', +'bank-24.ads.mp.mydas.mobi', +'bank-25.ads.mp.mydas.mobi', +'bank-26.ads.mp.mydas.mobi', +'bank-27.ads.mp.mydas.mobi', +'bank-28.ads.mp.mydas.mobi', +'bank-29.ads.mp.mydas.mobi', +'bank-3.ads.mp.mydas.mobi', +'bank-30.ads.mp.mydas.mobi', +'bank-31.ads.mp.mydas.mobi', +'bank-32.ads.mp.mydas.mobi', +'bank-33.ads.mp.mydas.mobi', +'bank-34.ads.mp.mydas.mobi', +'bank-35.ads.mp.mydas.mobi', +'bank-36.ads.mp.mydas.mobi', +'bank-37.ads.mp.mydas.mobi', +'bank-38.ads.mp.mydas.mobi', +'bank-39.ads.mp.mydas.mobi', +'bank-4.ads.mp.mydas.mobi', +'bank-40.ads.mp.mydas.mobi', +'bank-41.ads.mp.mydas.mobi', +'bank-42.ads.mp.mydas.mobi', +'bank-43.ads.mp.mydas.mobi', +'bank-44.ads.mp.mydas.mobi', +'bank-45.ads.mp.mydas.mobi', +'bank-46.ads.mp.mydas.mobi', +'bank-47.ads.mp.mydas.mobi', +'bank-48.ads.mp.mydas.mobi', +'bank-49.ads.mp.mydas.mobi', +'bank-5.ads.mp.mydas.mobi', +'bank-50.ads.mp.mydas.mobi', +'bank-51.ads.mp.mydas.mobi', +'bank-52.ads.mp.mydas.mobi', +'bank-53.ads.mp.mydas.mobi', +'bank-54.ads.mp.mydas.mobi', +'bank-55.ads.mp.mydas.mobi', +'bank-56.ads.mp.mydas.mobi', +'bank-57.ads.mp.mydas.mobi', +'bank-58.ads.mp.mydas.mobi', +'bank-59.ads.mp.mydas.mobi', +'bank-6.ads.mp.mydas.mobi', +'bank-60.ads.mp.mydas.mobi', +'bank-61.ads.mp.mydas.mobi', +'bank-62.ads.mp.mydas.mobi', +'bank-63.ads.mp.mydas.mobi', +'bank-64.ads.mp.mydas.mobi', +'bank-65.ads.mp.mydas.mobi', +'bank-66.ads.mp.mydas.mobi', +'bank-67.ads.mp.mydas.mobi', +'bank-68.ads.mp.mydas.mobi', +'bank-69.ads.mp.mydas.mobi', +'bank-7.ads.mp.mydas.mobi', +'bank-70.ads.mp.mydas.mobi', +'bank-71.ads.mp.mydas.mobi', +'bank-72.ads.mp.mydas.mobi', +'bank-73.ads.mp.mydas.mobi', +'bank-74.ads.mp.mydas.mobi', +'bank-75.ads.mp.mydas.mobi', +'bank-76.ads.mp.mydas.mobi', +'bank-77.ads.mp.mydas.mobi', +'bank-78.ads.mp.mydas.mobi', +'bank-79.ads.mp.mydas.mobi', +'bank-8.ads.mp.mydas.mobi', +'bank-80.ads.mp.mydas.mobi', +'bank-81.ads.mp.mydas.mobi', +'bank-82.ads.mp.mydas.mobi', +'bank-83.ads.mp.mydas.mobi', +'bank-84.ads.mp.mydas.mobi', +'bank-85.ads.mp.mydas.mobi', +'bank-86.ads.mp.mydas.mobi', +'bank-87.ads.mp.mydas.mobi', +'bank-88.ads.mp.mydas.mobi', +'bank-89.ads.mp.mydas.mobi', +'bank-9.ads.mp.mydas.mobi', +'bank-90.ads.mp.mydas.mobi', +'bank-91.ads.mp.mydas.mobi', +'bank-92.ads.mp.mydas.mobi', +'bank-93.ads.mp.mydas.mobi', +'bank-94.ads.mp.mydas.mobi', +'bank-95.ads.mp.mydas.mobi', +'bank-96.ads.mp.mydas.mobi', +'bank-97.ads.mp.mydas.mobi', +'bank-98.ads.mp.mydas.mobi', +'bank-99.ads.mp.mydas.mobi', +'bank01.clicks.mp.mydas.mobi', +'bank01.mi.ads.mp.mydas.mobi', +'bank01.mi.clicks.mp.mydas.mobi', +'bank02.clicks.mp.mydas.mobi', +'bank02.mi.ads.mp.mydas.mobi', +'bank03.clicks.mp.mydas.mobi', +'bank03.mi.ads.mp.mydas.mobi', +'bank03.mi.clicks.mp.mydas.mobi', +'bank04.clicks.mp.mydas.mobi', +'bank04.mi.ads.mp.mydas.mobi', +'bank05.clicks.mp.mydas.mobi', +'bank05.mi.ads.mp.mydas.mobi', +'bank06.clicks.mp.mydas.mobi', +'bank06.mi.ads.mp.mydas.mobi', +'bank07.clicks.mp.mydas.mobi', +'bank07.mi.ads.mp.mydas.mobi', +'bank08.clicks.mp.mydas.mobi', +'bank08.mi.ads.mp.mydas.mobi', +'bank09.clicks.mp.mydas.mobi', +'bank09.mi.ads.mp.mydas.mobi', +'bank1.clicks.mp.mydas.mobi', +'bank10.clicks.mp.mydas.mobi', +'bank10.mi.ads.mp.mydas.mobi', +'bank11.clicks.mp.mydas.mobi', +'bank11.mi.ads.mp.mydas.mobi', +'bank12.clicks.mp.mydas.mobi', +'bank12.mi.ads.mp.mydas.mobi', +'bank13.clicks.mp.mydas.mobi', +'bank13.mi.ads.mp.mydas.mobi', +'bank14.clicks.mp.mydas.mobi', +'bank14.mi.ads.mp.mydas.mobi', +'bank15.ads.dt.mydas.mobi', +'bank15.clicks.mp.mydas.mobi', +'bank15.mi.ads.mp.mydas.mobi', +'bank15.mi.clicks.mp.mydas.mobi', +'bank16.clicks.mp.mydas.mobi', +'bank16.mi.ads.mp.mydas.mobi', +'bank17.clicks.mp.mydas.mobi', +'bank17.mi.ads.mp.mydas.mobi', +'bank18.clicks.mp.mydas.mobi', +'bank18.mi.ads.mp.mydas.mobi', +'bank19.clicks.mp.mydas.mobi', +'bank19.mi.ads.mp.mydas.mobi', +'bank20.clicks.mp.mydas.mobi', +'bank20.mi.ads.mp.mydas.mobi', +'bank21.clicks.mp.mydas.mobi', +'bank21.mi.ads.mp.mydas.mobi', +'bank22.clicks.mp.mydas.mobi', +'bank22.mi.ads.mp.mydas.mobi', +'bank23.clicks.mp.mydas.mobi', +'bank23.mi.ads.mp.mydas.mobi', +'bank24.clicks.mp.mydas.mobi', +'bank24.mi.ads.mp.mydas.mobi', +'bank25.clicks.mp.mydas.mobi', +'bank25.mi.ads.mp.mydas.mobi', +'bank26.clicks.mp.mydas.mobi', +'bank26.mi.ads.mp.mydas.mobi', +'bank27.clicks.mp.mydas.mobi', +'bank27.mi.ads.mp.mydas.mobi', +'bank28.clicks.mp.mydas.mobi', +'bank28.mi.ads.mp.mydas.mobi', +'bank29.clicks.mp.mydas.mobi', +'bank29.mi.ads.mp.mydas.mobi', +'bank30.clicks.mp.mydas.mobi', +'bank30.mi.ads.mp.mydas.mobi', +'bank31.clicks.mp.mydas.mobi', +'bank31.mi.ads.mp.mydas.mobi', +'bank32.clicks.mp.mydas.mobi', +'bank32.mi.ads.mp.mydas.mobi', +'bank33.clicks.mp.mydas.mobi', +'bank33.mi.ads.mp.mydas.mobi', +'bank34.mi.ads.mp.mydas.mobi', +'bank35.clicks.mp.mydas.mobi', +'bank35.mi.ads.mp.mydas.mobi', +'bank36.clicks.mp.mydas.mobi', +'bank36.mi.ads.mp.mydas.mobi', +'bank37.ads.mp.mydas.mobi', +'bank37.clicks.mp.mydas.mobi', +'bank37.mi.ads.mp.mydas.mobi', +'bank38.clicks.mp.mydas.mobi', +'bank38.mi.ads.mp.mydas.mobi', +'bank39.clicks.mp.mydas.mobi', +'bank39.mi.ads.mp.mydas.mobi', +'bank40.clicks.mp.mydas.mobi', +'bank40.mi.ads.mp.mydas.mobi', +'bank41.clicks.mp.mydas.mobi', +'bank41.mi.ads.mp.mydas.mobi', +'bank42.clicks.mp.mydas.mobi', +'bank42.mi.ads.mp.mydas.mobi', +'bank43.ads.mp.mydas.mobi', +'bank43.clicks.mp.mydas.mobi', +'bank43.mi.ads.mp.mydas.mobi', +'bank44.ads.mp.mydas.mobi', +'bank44.clicks.mp.mydas.mobi', +'bank44.mi.ads.mp.mydas.mobi', +'bank45.mi.ads.mp.mydas.mobi', +'bank46.mi.ads.mp.mydas.mobi', +'bank47.mi.ads.mp.mydas.mobi', +'bank48.mi.ads.mp.mydas.mobi', +'bank49.mi.ads.mp.mydas.mobi', +'bank50.mi.ads.mp.mydas.mobi', +'bank51.mi.ads.mp.mydas.mobi', +'bank52.mi.ads.mp.mydas.mobi', +'bank53.mi.ads.mp.mydas.mobi', +'bank54.mi.ads.mp.mydas.mobi', +'bank55.mi.ads.mp.mydas.mobi', +'bank56.mi.ads.mp.mydas.mobi', +'bank57.mi.ads.mp.mydas.mobi', +'bank58.mi.ads.mp.mydas.mobi', +'bank59.mi.ads.mp.mydas.mobi', +'bank60.mi.ads.mp.mydas.mobi', +'bank61.mi.ads.mp.mydas.mobi', +'bank62.mi.ads.mp.mydas.mobi', +'bank63.mi.ads.mp.mydas.mobi', +'bank64.mi.ads.mp.mydas.mobi', +'bank65.mi.ads.mp.mydas.mobi', +'bank66.mi.ads.mp.mydas.mobi', +'bank67.mi.ads.mp.mydas.mobi', +'bank68.mi.ads.mp.mydas.mobi', +'bank69.mi.ads.mp.mydas.mobi', +'bank70.mi.ads.mp.mydas.mobi', +'bank71.mi.ads.mp.mydas.mobi', +'bank72.mi.ads.mp.mydas.mobi', +'bank73.mi.ads.mp.mydas.mobi', +'bank74.mi.ads.mp.mydas.mobi', +'bank75.mi.ads.mp.mydas.mobi', +'bank76.mi.ads.mp.mydas.mobi', +'bank77.mi.ads.mp.mydas.mobi', +'bank78.mi.ads.mp.mydas.mobi', +'bank79.mi.ads.mp.mydas.mobi', +'bank80.mi.ads.mp.mydas.mobi', +'bank81.mi.ads.mp.mydas.mobi', +'bank82.mi.ads.mp.mydas.mobi', +'bank83.mi.ads.mp.mydas.mobi', +'bank84.mi.ads.mp.mydas.mobi', +'bank85.mi.ads.mp.mydas.mobi', +'bank86.mi.ads.mp.mydas.mobi', +'bank87.mi.ads.mp.mydas.mobi', +'bank88.mi.ads.mp.mydas.mobi', +'bank89.mi.ads.mp.mydas.mobi', +'bank90.mi.ads.mp.mydas.mobi', +'bank91.mi.ads.mp.mydas.mobi', +'bank92.mi.ads.mp.mydas.mobi', +'bank93.mi.ads.mp.mydas.mobi', +'bank94.mi.ads.mp.mydas.mobi', +'bank95.mi.ads.mp.mydas.mobi', +'bank96.mi.ads.mp.mydas.mobi', +'bank97.mi.ads.mp.mydas.mobi', +'bank98.mi.ads.mp.mydas.mobi', +'bank99.mi.ads.mp.mydas.mobi', +'bankads.com', +'bankdata.112.207.net', +'bankiru.go2cloud.org', +'bankofamerica.tt.omtrdc.net', +'banman.isoftmarketing.com', +'bann12s.ero-advertising.com', +'bann13s.ero-advertising.com', +'bann14s.ero-advertising.com', +'bann1rs.ero-advertising.com', +'banne2s.ero-advertising.com', +'banne3s.ero-advertising.com', +'banne4s.ero-advertising.com', +'banner-exchange.nl', +'banner.0catch.com', +'banner.101xp.com', +'banner.50megs.com', +'banner.69stream.com', +'banner.ad.nu', +'banner.adlive.de', +'banner.ajax.ancestry.co.uk', +'banner.ajax.ancestry.com', +'banner.auction.co.kr', +'banner.avp2000.com', +'banner.blogranking.net', +'banner.bpaserver.net', +'banner.buempliz-online.ch', +'banner.cashinpills.com', +'banner.casino.net', +'banner.casino.paddypower.com', +'banner.casinodelrio.com', +'banner.casinoking.com', +'banner.casinolasvegas.com', +'banner.casinotropez.com', +'banner.cdpoker.com', +'banner.celebrity-fakes.net', +'banner.cityclubcasino.com', +'banner.click-tt.de', +'banner.clickme.com.br', +'banner.clubdicecasino.com', +'banner.com', +'banner.commissionpartner.com', +'banner.congstar.de', +'banner.coral.co.uk', +'banner.coza.com', +'banner.cz', +'banner.dabi.ir', +'banner.dafasportbook.com', +'banner.date.com', +'banner.de', +'banner.dhg-marketing.de', +'banner.dk', +'banner.e2ads.com', +'banner.easyspace.com', +'banner.elisa.fi', +'banner.elisa.net', +'banner.eresmas.com', +'banner.ero-advertising.com', +'banner.euroads.no', +'banner.eurogrand.com', +'banner.europacasino.com', +'banner.everestpoker.com', +'banner.fairpoker.com', +'banner.fotor.com', +'banner.freeservers.com', +'banner.freeservers.net', +'banner.galabingo.com', +'banner.galacasino.com', +'banner.gasuki.com', +'banner.goldenpalace.com', +'banner.grupos.com.br', +'banner.hosteurope.de', +'banner.i-3.de', +'banner.img.co.za', +'banner.immowelt.de', +'banner.indiocasino.com', +'banner.intermega.com.br', +'banner.inyourpocket.com', +'banner.itweb.co.za', +'banner.kiev.ua', +'banner.lasvegasusacasino.com', +'banner.linkexchange.com', +'banner.linkexchange.net', +'banner.linksynergy.com', +'banner.linktech.cn', +'banner.linux.se', +'banner.listinus.de', +'banner.love104.com', +'banner.magicboxcasino.com', +'banner.maido3.com', +'banner.mansioncasino.com', +'banner.maxximum.org', +'banner.media-system.de', +'banner.mindshare.de', +'banner.missbingo.com', +'banner.missingkids.com', +'banner.nasty-cam.de', +'banner.net', +'banner.nixnet.cz', +'banner.nonstoppartner.net', +'banner.northsky.com', +'banner.nttnavi.co.jp', +'banner.oddcast.com', +'banner.ool.ua', +'banner.orizzontescuola.it', +'banner.paodeacucar.com.br', +'banner.penguin.cz', +'banner.pethobbyist.com', +'banner.poker.williamhill.com', +'banner.poker770.com', +'banner.relcom.ru', +'banner.scasino.com', +'banner.sealmedia.de', +'banner.sunpalacecasino.com', +'banner.surfree.com', +'banner.svitonline.com', +'banner.tanto.de', +'banner.technorail.com', +'banner.testberichte.de', +'banner.themediaplanets.com', +'banner.titanpoker.com', +'banner.tripple.at', +'banner.truehits.net', +'banner.upjers.com', +'banner.vbonline.com', +'banner1.50megs.com', +'banner2.casino.com', +'banner2tausch.de', +'banner3.a411.com', +'bannera.kingsoft-office-service.com', +'bannerads.communitech.net', +'bannerads.de', +'bannerads.nl', +'banneradvertising.adclickmedia.com', +'bannerbank.com', +'bannerbank.de', +'bannerbank.ru', +'bannercampaign.com', +'bannercash.com.cz', +'bannercash.de', +'bannercast.com', +'bannercenter.net', +'bannerco-op.com', +'bannercommunity.de', +'bannerconnect.net', +'bannerdoctors.com', +'bannerexchange.cjb.net', +'bannerexchange.com', +'bannerexchange.klikklik.nl', +'bannerexchange.mycomputer.com', +'bannerfarm.ace.advertising.com', +'bannerforge.com', +'bannerignition.co.za', +'bannerimage.com', +'bannerimages.0catch.com', +'bannerlandia.com', +'bannerlandia.com.ar', +'bannermall.com', +'bannermarkt.nl', +'bannermat.com', +'bannermedia.com', +'bannermill.com', +'bannerpoint.ru', +'bannerpower.com', +'bannerpro.tk', +'bannerpromotion.it', +'banners.4d5.net', +'banners.500euro.net', +'banners.adgoto.com', +'banners.adultfriendfinder.com', +'banners.advancewebhosting.com', +'banners.adzones.com', +'banners.affiliatefuel.com', +'banners.affiliatefuture.com', +'banners.aftrk.com', +'banners.alt.com', +'banners.amigos.com', +'banners.anunciweb.pt', +'banners.aris.ge', +'banners.asiafriendfinder.com', +'banners.askmecca.com', +'banners.babetimes.com', +'banners.babylon-x.com', +'banners.babylonbucks.com', +'banners.bebadasousadas.com', +'banners.beevpn.com', +'banners.bigmobileads.com', +'banners.bizportal.co.il', +'banners.blacksexmatch.com', +'banners.bol.com.br', +'banners.bombich.com', +'banners.buscarsexo.com', +'banners.cams.com', +'banners.cashring.com', +'banners.chare.ir', +'banners.chicashumedas.com', +'banners.citygridmedia.com', +'banners.cj.com', +'banners.classmates.com', +'banners.clickthrucash.com', +'banners.clubseventeen.com', +'banners.clubworldgroup.com', +'banners.colegialasdesvirgadas.com', +'banners.com', +'banners.contentfeed.net', +'banners.copyscape.com', +'banners.crack.ru', +'banners.czi.cz', +'banners.deseoasiatico.com', +'banners.directnic.com', +'banners.dogfart.com', +'banners.dollarmachine.com', +'banners.dot.tk', +'banners.e-dologic.co.il', +'banners.easydns.com', +'banners.easydns.nl', +'banners.emol.com', +'banners.empoweredcomms.com.au', +'banners.ero-advertising.com', +'banners.eroadvertising.com', +'banners.espiasadictos.com', +'banners.fastcupid.com', +'banners.flingguru.com', +'banners.freett.com', +'banners.friendfinder.com', +'banners.friendpages.com', +'banners.fuckcuck.com', +'banners.galiciae.com', +'banners.getiton.com', +'banners.guns.ru', +'banners.hpg.com.br', +'banners.images.streamray.com', +'banners.img.uol.com.br', +'banners.impactfive.com', +'banners.ims.nl', +'banners.inetfast.com', +'banners.intergal.com', +'banners.internetextra.com', +'banners.interq.or.jp', +'banners.iop.org', +'banners.iq.pl', +'banners.isoftmarketing.com', +'banners.itweb.co.za', +'banners.ix.se', +'banners.jobwinner.ch', +'banners.kappa.ro', +'banners.knollenstein.com', +'banners.ksl.com', +'banners.largecash.com', +'banners.leadingedgecash.com', +'banners.ligbr.com.br', +'banners.linkbuddies.com', +'banners.lovercloud.com', +'banners.moreniche.com', +'banners.moviegoods.com', +'banners.mydailydigest.com', +'banners.nbcupromotes.com', +'banners.news1.co.il', +'banners.no1free.com', +'banners.nostringsattached.com', +'banners.outster.com', +'banners.oversexe.com', +'banners.passion.com', +'banners.passiondollars.com', +'banners.pickupcloud.com', +'banners.playocio.com', +'banners.resultonline.com', +'banners.searchingbooth.com', +'banners.sexsearch.com', +'banners.sextracker.be', +'banners.sextracker.com', +'banners.sextracker.de', +'banners.sexypartners.net', +'banners.showdeinfieis.com', +'banners.smarttweak.com', +'banners.spread4u.com', +'banners.tibiabr.com', +'banners.toteme.com', +'banners.totesport.com', +'banners.truecash.com', +'banners.twibbers.com', +'banners.unibet.be', +'banners.unibet.co.uk', +'banners.unibet.de', +'banners.unibet.dk', +'banners.unibet.it', +'banners.valuead.com', +'banners.victor.com', +'banners.vivilatina.com', +'banners.voyeurweb.com', +'banners.webmasterplan.com', +'banners.winfire.com', +'banners.wlservices.fr', +'banners.xmatch.com', +'banners.xxxwebhosting.com', +'banners.yatrainc.com', +'banners.zhurnal.ru', +'banners0.hpg.com.br', +'banners00.hpg.com.br', +'banners01.hpg.com.br', +'banners03.hpg.com.br', +'banners04.hpg.com.br', +'banners05.hpg.com.br', +'banners06.hpg.com.br', +'banners07.hpg.com.br', +'banners08.hpg.com.br', +'banners09.hpg.com.br', +'banners1.ero-advertising.com', +'banners1.hpg.com.br', +'banners10.hpg.com.br', +'banners100.hpg.com.br', +'banners101.hpg.com.br', +'banners102.hpg.com.br', +'banners103.hpg.com.br', +'banners104.hpg.com.br', +'banners105.hpg.com.br', +'banners106.hpg.com.br', +'banners107.hpg.com.br', +'banners108.hpg.com.br', +'banners109.hpg.com.br', +'banners11.hpg.com.br', +'banners110.hpg.com.br', +'banners111.hpg.com.br', +'banners112.hpg.com.br', +'banners113.hpg.com.br', +'banners114.hpg.com.br', +'banners115.hpg.com.br', +'banners116.hpg.com.br', +'banners117.hpg.com.br', +'banners118.hpg.com.br', +'banners119.hpg.com.br', +'banners12.hpg.com.br', +'banners120.hpg.com.br', +'banners121.hpg.com.br', +'banners122.hpg.com.br', +'banners123.hpg.com.br', +'banners124.hpg.com.br', +'banners125.hpg.com.br', +'banners126.hpg.com.br', +'banners127.hpg.com.br', +'banners128.hpg.com.br', +'banners129.hpg.com.br', +'banners13.hpg.com.br', +'banners130.hpg.com.br', +'banners131.hpg.com.br', +'banners132.hpg.com.br', +'banners133.hpg.com.br', +'banners134.hpg.com.br', +'banners135.hpg.com.br', +'banners136.hpg.com.br', +'banners137.hpg.com.br', +'banners138.hpg.com.br', +'banners139.hpg.com.br', +'banners14.hpg.com.br', +'banners140.hpg.com.br', +'banners141.hpg.com.br', +'banners142.hpg.com.br', +'banners143.hpg.com.br', +'banners144.hpg.com.br', +'banners145.hpg.com.br', +'banners146.hpg.com.br', +'banners147.hpg.com.br', +'banners148.hpg.com.br', +'banners149.hpg.com.br', +'banners15.hpg.com.br', +'banners150.hpg.com.br', +'banners151.hpg.com.br', +'banners152.hpg.com.br', +'banners153.hpg.com.br', +'banners154.hpg.com.br', +'banners155.hpg.com.br', +'banners156.hpg.com.br', +'banners157.hpg.com.br', +'banners158.hpg.com.br', +'banners159.hpg.com.br', +'banners16.hpg.com.br', +'banners160.hpg.com.br', +'banners161.hpg.com.br', +'banners162.hpg.com.br', +'banners163.hpg.com.br', +'banners164.hpg.com.br', +'banners165.hpg.com.br', +'banners166.hpg.com.br', +'banners167.hpg.com.br', +'banners168.hpg.com.br', +'banners169.hpg.com.br', +'banners17.hpg.com.br', +'banners170.hpg.com.br', +'banners171.hpg.com.br', +'banners172.hpg.com.br', +'banners173.hpg.com.br', +'banners174.hpg.com.br', +'banners175.hpg.com.br', +'banners176.hpg.com.br', +'banners177.hpg.com.br', +'banners178.hpg.com.br', +'banners179.hpg.com.br', +'banners18.hpg.com.br', +'banners180.hpg.com.br', +'banners181.hpg.com.br', +'banners182.hpg.com.br', +'banners183.hpg.com.br', +'banners184.hpg.com.br', +'banners185.hpg.com.br', +'banners186.hpg.com.br', +'banners187.hpg.com.br', +'banners188.hpg.com.br', +'banners189.hpg.com.br', +'banners19.hpg.com.br', +'banners190.hpg.com.br', +'banners191.hpg.com.br', +'banners192.hpg.com.br', +'banners193.hpg.com.br', +'banners194.hpg.com.br', +'banners195.hpg.com.br', +'banners196.hpg.com.br', +'banners197.hpg.com.br', +'banners198.hpg.com.br', +'banners199.hpg.com.br', +'banners2.ero-advertising.com', +'banners2.hpg.com.br', +'banners20.hpg.com.br', +'banners200.hpg.com.br', +'banners201.hpg.com.br', +'banners202.hpg.com.br', +'banners203.hpg.com.br', +'banners204.hpg.com.br', +'banners205.hpg.com.br', +'banners206.hpg.com.br', +'banners207.hpg.com.br', +'banners208.hpg.com.br', +'banners209.hpg.com.br', +'banners21.hpg.com.br', +'banners210.hpg.com.br', +'banners211.hpg.com.br', +'banners212.hpg.com.br', +'banners213.hpg.com.br', +'banners214.hpg.com.br', +'banners215.hpg.com.br', +'banners216.hpg.com.br', +'banners217.hpg.com.br', +'banners218.hpg.com.br', +'banners219.hpg.com.br', +'banners22.hpg.com.br', +'banners220.hpg.com.br', +'banners221.hpg.com.br', +'banners222.hpg.com.br', +'banners223.hpg.com.br', +'banners224.hpg.com.br', +'banners225.hpg.com.br', +'banners226.hpg.com.br', +'banners227.hpg.com.br', +'banners228.hpg.com.br', +'banners229.hpg.com.br', +'banners23.hpg.com.br', +'banners230.hpg.com.br', +'banners231.hpg.com.br', +'banners232.hpg.com.br', +'banners233.hpg.com.br', +'banners234.hpg.com.br', +'banners235.hpg.com.br', +'banners236.hpg.com.br', +'banners237.hpg.com.br', +'banners238.hpg.com.br', +'banners239.hpg.com.br', +'banners24.hpg.com.br', +'banners240.hpg.com.br', +'banners241.hpg.com.br', +'banners242.hpg.com.br', +'banners243.hpg.com.br', +'banners244.hpg.com.br', +'banners245.hpg.com.br', +'banners246.hpg.com.br', +'banners247.hpg.com.br', +'banners248.hpg.com.br', +'banners249.hpg.com.br', +'banners25.hpg.com.br', +'banners250.hpg.com.br', +'banners251.hpg.com.br', +'banners252.hpg.com.br', +'banners253.hpg.com.br', +'banners254.hpg.com.br', +'banners255.hpg.com.br', +'banners26.hpg.com.br', +'banners27.hpg.com.br', +'banners28.hpg.com.br', +'banners29.hpg.com.br', +'banners3.hpg.com.br', +'banners30.hpg.com.br', +'banners31.hpg.com.br', +'banners32.hpg.com.br', +'banners33.hpg.com.br', +'banners34.hpg.com.br', +'banners35.hpg.com.br', +'banners36.hpg.com.br', +'banners37.hpg.com.br', +'banners38.hpg.com.br', +'banners39.hpg.com.br', +'banners4.hpg.com.br', +'banners40.hpg.com.br', +'banners41.hpg.com.br', +'banners42.hpg.com.br', +'banners43.hpg.com.br', +'banners44.hpg.com.br', +'banners45.hpg.com.br', +'banners46.hpg.com.br', +'banners47.hpg.com.br', +'banners48.hpg.com.br', +'banners49.hpg.com.br', +'banners5.hpg.com.br', +'banners50.hpg.com.br', +'banners51.hpg.com.br', +'banners52.hpg.com.br', +'banners53.hpg.com.br', +'banners54.hpg.com.br', +'banners55.hpg.com.br', +'banners56.hpg.com.br', +'banners57.hpg.com.br', +'banners58.hpg.com.br', +'banners59.hpg.com.br', +'banners6.hpg.com.br', +'banners60.hpg.com.br', +'banners61.hpg.com.br', +'banners62.hpg.com.br', +'banners63.hpg.com.br', +'banners64.hpg.com.br', +'banners65.hpg.com.br', +'banners66.hpg.com.br', +'banners67.hpg.com.br', +'banners68.hpg.com.br', +'banners69.hpg.com.br', +'banners7.hpg.com.br', +'banners70.hpg.com.br', +'banners71.hpg.com.br', +'banners72.hpg.com.br', +'banners73.hpg.com.br', +'banners74.hpg.com.br', +'banners75.hpg.com.br', +'banners76.hpg.com.br', +'banners77.hpg.com.br', +'banners78.hpg.com.br', +'banners79.hpg.com.br', +'banners8.hpg.com.br', +'banners80.hpg.com.br', +'banners81.hpg.com.br', +'banners82.hpg.com.br', +'banners83.hpg.com.br', +'banners84.hpg.com.br', +'banners85.hpg.com.br', +'banners86.hpg.com.br', +'banners87.hpg.com.br', +'banners88.hpg.com.br', +'banners89.hpg.com.br', +'banners9.hpg.com.br', +'banners90.hpg.com.br', +'banners91.hpg.com.br', +'banners92.hpg.com.br', +'banners93.hpg.com.br', +'banners94.hpg.com.br', +'banners95.hpg.com.br', +'banners96.hpg.com.br', +'banners97.hpg.com.br', +'banners98.hpg.com.br', +'banners99.hpg.com.br', +'bannerselect.com', +'bannerserver.com', +'bannersgomlm.buildreferrals.com', +'bannersgomlm.com', +'bannersng.yell.com', +'bannersolutions.com', +'bannersolutions.de', +'bannerspace.com', +'bannersponsor.com', +'bannerswap.com', +'bannersworld.com', +'bannervip.web1000.com', +'bannervip.webjump.com', +'bannerware.com', +'bannerweb.com', +'bannerwebservice.zvz.co.il', +'bannevs.ero-advertising.com', +'bans.bride.ru', +'bansrv1.n1media.com', +'bar.hit-counter.udub.com', +'bar.piano-media.com', +'barb-rsync.2cnt.net', +'barb-sftp.2cnt.net', +'barb-test.2cnt.net', +'barb.2cnt.net', +'barbpool01.2cnt.net', +'barbpool02.2cnt.net', +'barbpool03.2cnt.net', +'barbpool04.2cnt.net', +'barbpool05.2cnt.net', +'barbpool06.2cnt.net', +'barbpool07.2cnt.net', +'barbpool08.2cnt.net', +'barbregister.2cnt.net', +'barbvm.2cnt.net', +'bardzomedia.com', +'bargainingayzgdp.download', +'bargainpda.us.intellitxt.com', +'bariebenefit.com', +'barium.cheezdev.com', +'barnyardszjvrvndj.download', +'barrelfulstwhxuuum.download', +'barruletoleehtcz.download', +'bastardlystydflko.download', +'bastionedqpaugac.download', +'bat.adforum.com', +'bat.bing.com', +'bat.r.msn.com', +'bathyliticlkjwh.download', +'bavners2.ero-advertising.com', +'baypops.com', +'bazingandroid.com', +'bb.connextra.com', +'bbb7-bfec-9a0b-58ba.reporo.net', +'bbca.channelfinder.net', +'bbcandroid.2cnt.net', +'bbcandroidtest.2cnt.net', +'bbcdotcom.2cnt.net', +'bbcdotcomtest.2cnt.net', +'bbcios.2cnt.net', +'bbciostest.2cnt.net', +'bbcnewscouk.112.2o7.net', +'bbf7n.voluumtrk.com', +'bbn.img.com.ua', +'bbp.brazzers.com', +'bbpntg3.homestead.com', +'bbs.duba.net', +'bbvj6.voluumtrk.com', +'bc2.fivecdm.com', +'bc84-88b8-96b7-6515.reporo.net', +'bcanalytics.bigcommerce.com', +'bcast.pw', +'bcfads.com', +'bcmediagroup.com', +'bcnmonetize.go2affise.com', +'bcp.crwdcntrl.net', +'bcsrciccspermatic.review', +'bd.moatads.com', +'bdbaffiliates.go2cloud.org', +'bddff.voluumtrk.com', +'bdex.com', +'bdv.bidvertiser.com', +'be.mobsweet.com', +'be.nedstat.net', +'be.sitestat.com', +'be2be2nz.122.2o7.net', +'bea4.v.fwmrm.net', +'beacon-1.newrelic.com', +'beacon-2.newrelic.com', +'beacon-3.newrelic.com', +'beacon-5.newrelic.com', +'beacon-6.newrelic.com', +'beacon.archonia.com', +'beacon.clickequations.net', +'beacon.decryptresearch.co.uk', +'beacon.errorception.com', +'beacon.flipboard.com', +'beacon.guim.co.uk', +'beacon.indieclick.com', +'beacon.indieclicktv.com', +'beacon.kmi-us.com', +'beacon.krxd.net', +'beacon.lycos.com', +'beacon.mtgx.tv', +'beacon.nuskin.com', +'beacon.richrelevance.com', +'beacon.rubiconproject.com', +'beacon.schneidercorp.com', +'beacon.securestudies.com', +'beacon.shazam.com', +'beacon.sina.com.cn', +'beacon.sinauda.com', +'beacon.stage.walmart.com', +'beacon.wikia-services.com', +'beacon2.indieclick.com', +'beacon2.indieclicktv.com', +'beacons.brandads.net', +'beadngmke.download', +'beam.hlserve.com', +'beanstock.com', +'beanstockmedia.com', +'beastasuum.a.ssl.fastly.net', +'bebsz.voluumtrk.com', +'becausebabes.go2cloud.org', +'becontext.com', +'bee-ads.com', +'beead.co.uk', +'beglorena.com', +'begun.ru', +'behacdn.ksmobile.net', +'behance.vo.llnwd.net', +'beiersdorf.122.2o7.net', +'bekissedxpyno.download', +'bekleidet.digidip.net', +'beliesqhmsin.download', +'bellca.112.2o7.net', +'bellca.demdex.net', +'bellserviceeng.112.2o7.net', +'belole.ru', +'belstat.be', +'benchbrands.com', +'benderswaojb.download', +'benefique-shiseido.b.appier.net', +'berater.adition.com', +'bergenstidende.112.2o7.net', +'beseen.com', +'bespatehwxslkoz.download', +'best-ads.com', +'best-deals-products.com', +'bestadbid.com', +'bestaffiliates.go2cloud.org', +'bestfwdservice.com', +'bestmusic.2cnt.net', +'bestwebnutfunblack.biz', +'beta-old.superstats.com', +'beta.adition.com', +'beta.adknowledge.com', +'beta.ads.cc', +'beta.easyhitcounters.com', +'beta.inclk.com', +'beta.superstats.com', +'betaadvertisers.doubleclick.net', +'betaffs.com', +'betanews.us.intellitxt.com', +'betareportcentral.doubleclick.net', +'betatest.adition.com', +'betrad.com', +'better-counter.com', +'betterhg.112.2o7.net', +'bettermail.ca', +'betting.betfair.com', +'bettraf.com', +'bevo.go2cloud.org', +'beyond.go2cloud.org', +'beyourownaffiliate.com', +'bfd.secureintl.com', +'bfe9-0d31-18b3-7493.reporo.net', +'bfiqlohtombic.review', +'bfpildlmcolatitude.review', +'bgn0f.voluumtrk.com', +'bgngq.voluumtrk.com', +'bgsurveys.go2cloud.org', +'bh.ams.contextweb.com', +'bh.contextweb.com', +'bh2y3.voluumtrk.com', +'bhconsulting.go2cloud.org', +'bhgmarketing.112.2o7.net', +'bi-three.wooga.com', +'bi.installcore.com', +'bi.medscape.com', +'bi.softservers.net', +'bi827.voluumtrk.com', +'bibqh.voluumtrk.com', +'bid.contextweb.com', +'bid.pubmatic.com', +'bid.socdm.com', +'bidclix.com', +'bidclix.net', +'bidhere.go2cloud.org', +'bidsystem.adknowledge.com', +'bidvertiser.com', +'big.sddan.com', +'bigamypuabg.download', +'bigasia.com', +'bigbangads.go2cloud.org', +'bigbangmedia.com', +'bigbanners.com', +'bigclicks.com', +'bigfatbaby.com', +'biglinkext.xyz', +'bigmobileads.com', +'bigsoccer.us.intellitxt.com', +'bigstats.net', +'biipe.voluumtrk.com', +'bilbob.com', +'bilbowtunxjujc.download', +'bild.de.intellitxt.com', +'bild01.webtrekk.net', +'bildwl.mobile.de', +'bill-info.com', +'billboard.cz', +'billionpops.com', +'billmscurlrev.com', +'bimlocal.com', +'binarybliss.com', +'binaryoffers.go2cloud.org', +'binaryperform.go2cloud.org', +'bingads.com', +'binglee-com-au.b.appier.net', +'bingocabin.com', +'bingsclspe.download', +'bist.ailsg.com', +'bit.do', +'bit.ehow.com', +'bitable.com', +'bitburg.adtech.fr', +'bitcast-a.bitgravity.com', +'bitcoinadvertisers.com', +'bitsonthewire.com', +'bitterstrawberry.com', +'bitvisitor.com', +'bizad.nikkeibp.co.jp', +'bizsolutions.strands.com', +'bizzclick.com', +'bjvim.voluumtrk.com', +'blabbermouth.us.intellitxt.com', +'blackchek.popunder.ru', +'blacklightimages.com', +'blacksheep.go2cloud.org', +'blamads-assets.s3.amazonaws.com', +'blamads.com', +'blankrefer.com', +'blast4traffic.com', +'blatfee.ero-advertising.com', +'blazedlvlwzwt.download', +'bleepingcomputer.us.intellitxt.com', +'blindferretmedia.go2cloud.org', +'blkget6.com', +'blm.bz', +'blockbuster.112.2o7.net', +'blockbustercom.112.2o7.net', +'blockedf9ojq.voluumtrk.com', +'blocks.ginotrack.com', +'blog-hits.com', +'blog.adspaces.ero-advertising.com', +'blog.chartboost.com', +'blog.duba.net', +'blog.ero-advertising.com', +'blog.intext.ero-advertising.com', +'blog.leadbolt.com', +'blog.mobpartner.com', +'blog.qualaroo.com', +'blog.skyhookwireless.com', +'blog.zedo.com', +'blogads.com', +'bloggannonser.no', +'blogher.org.12469.9030.302br.net', +'blogwerk.wemfbox.ch', +'blueadvertise.com', +'bluecava.com', +'bluechillies.us.intellitxt.com', +'blueconic.net', +'blueflameelite.go2cloud.org', +'bluehavenmedia.com', +'blueheart.org', +'bluelinkmarketing0.go2cloud.org', +'bluemongoose.com', +'bluerazormedia.go2cloud.org', +'blueseek.com', +'bluesq.com', +'bluetrackmedia.com', +'blushing.justclick.ru', +'blutrumpet.com', +'bm.annonce.cz', +'bm.hbtronix.de', +'bm5150.com', +'bm7dc.voluumtrk.com', +'bmcp5.voluumtrk.com', +'bmetrack.com', +'bmg8u.voluumtrk.com', +'bmi.go2cloud.org', +'bmkolkvhunotifies.review', +'bmmetrix.com', +'bmobl.voluumtrk.com', +'bmp.rentboy.com', +'bms.zeptolab.com', +'bn.gewinn24.de', +'bnbaz.eb2a.com', +'bncrf.voluumtrk.com', +'bng3w.voluumtrk.com', +'bnkr8dev.112.2o7.net', +'bnr.sys.lv', +'bo-videos.s3.amazonaws.com', +'bo.jumptap.com', +'boaaabsdcsubtends.review', +'boardreader.us.intellitxt.com', +'boards2go.com', +'bodybuilding-com.112.2o7.net', +'bofa.demdex.net', +'bogeymanpbbgzoi.download', +'boh00.voluumtrk.com', +'boingdragon.com', +'bokilora.com', +'bolch02.webtrekk.net', +'boldcenter.com', +'boldchat.com', +'bolde02.webtrekk.net', +'bolt.us.intellitxt.com', +'bomek.com', +'bon7g.voluumtrk.com', +'bondinra.com', +'bongacash.com', +'bonjikoa.com', +'book-mark.net', +'bookcorps.com', +'boom.ro', +'boomerang.com.au', +'boomingsbzboqfg.download', +'boomottkr.download', +'boostads.net', +'bootstraps.timesink.com', +'bopsgoxon.download', +'borageytjly.download', +'borwgskshrinks.review', +'bos-tapreq01.jumptap.com', +'bos-tapreq02.jumptap.com', +'bos-tapreq03.jumptap.com', +'bos-tapreq04.jumptap.com', +'bos-tapreq05.jumptap.com', +'bos-tapreq06.jumptap.com', +'bos-tapreq07.jumptap.com', +'bos-tapreq08.jumptap.com', +'bos-tapreq09.jumptap.com', +'bos-tapreq10.jumptap.com', +'bos-tapreq11.jumptap.com', +'bos-tapreq12.jumptap.com', +'bos-tapreq13.jumptap.com', +'bos-tapreq14.jumptap.com', +'bos-tapreq15.jumptap.com', +'bos-tapreq16.jumptap.com', +'bos-tapreq17.jumptap.com', +'bos-tapreq18.jumptap.com', +'bos-tapreq19.jumptap.com', +'bos-tapreq20.jumptap.com', +'bosecom.112.2o7.net', +'boss.berlinonline.de', +'bossip.us.intellitxt.com', +'bosslegen.de', +'bounceexchange.com', +'bourgeonujprvxf.download', +'bouygues-care.inq.com', +'box.anchorfree.net', +'box002.2cnt.net', +'box003.2cnt.net', +'box011.2cnt.net', +'box012.2cnt.net', +'box013.2cnt.net', +'box014.2cnt.net', +'box015.2cnt.net', +'box016.2cnt.net', +'box18006.2cnt.net', +'box18007.2cnt.net', +'box18008.2cnt.net', +'box18009.2cnt.net', +'box30101.2cnt.net', +'box30102.2cnt.net', +'box30103.2cnt.net', +'box30107.2cnt.net', +'box30120.2cnt.net', +'box32002.2cnt.net', +'box32003.2cnt.net', +'boxofficeprophets.us.intellitxt.com', +'bp.ads.link4ads.com', +'bp5xs.voluumtrk.com', +'bpath.com', +'bpflx.voluumtrk.com', +'bptracking.com', +'bqukvgnash.review', +'br.blackfling.com', +'br.naked.com', +'br.rk.com', +'br.vghd.com', +'brain.cubi.me', +'braincash.com', +'brainient.com', +'brainteasers.freestats.com', +'branch.io', +'brandedoffersaff.go2cloud.org', +'brandmovers.net', +'branovate.com', +'brashnessgujqtmt.download', +'brataudit-offloader.2cnt.net', +'bratro-a.2cnt.net', +'bratro-s.2cnt.net', +'brattest.2cnt.net', +'brattest1.2cnt.net', +'brattest2.2cnt.net', +'brattest3.2cnt.net', +'brattest4.2cnt.net', +'bratwurstsktrllgfj.download', +'bravenet.com', +'bravo.israelweather.co.il', +'brawnmill.go2cloud.org', +'brcache.madthumbs.com', +'breeksboikac.download', +'brew-u-ex.tekblue.net', +'brickandmobile.com', +'bricklehtezjtjfi.download', +'bride.ru', +'bright.bncnt.com', +'brightshare.com', +'briskads.go2affise.com', +'british-banners.com', +'britishtelecom.112.2o7.net', +'britneyexperts.us.intellitxt.com', +'broadjump.com', +'broker.adobe.com', +'brokertraffic.com', +'bronzingeyes.digidip.net', +'browsertest.web.aol.com', +'brqvld0p.com', +'brusmedia.go2cloud.org', +'bs.serving-sys.com', +'bs.serving-sys.com.10001.9024.302br.net', +'bs.serving-sys.com.10003.9024.302br.net', +'bs.serving-sys.com.10005.9024.302br.net', +'bs.serving-sys.com.10007.9024.302br.net', +'bs.serving-sys.com.10009.9024.302br.net', +'bs.serving-sys.com.10011.9024.302br.net', +'bs.serving-sys.com.10013.9024.302br.net', +'bs.serving-sys.com.10015.9024.302br.net', +'bs.serving-sys.com.10017.9024.302br.net', +'bs.serving-sys.com.10018.9024.302br.net', +'bs.serving-sys.com.10019.9024.302br.net', +'bs.serving-sys.com.10021.9024.302br.net', +'bs.serving-sys.com.10023.9024.302br.net', +'bs.serving-sys.com.10085.9024.302br.net', +'bs.serving-sys.com.10087.9024.302br.net', +'bs.serving-sys.com.10098.9024.302br.net', +'bs.serving-sys.com.10648.9021.302br.net', +'bs.serving-sys.com.10650.9021.302br.net', +'bs.serving-sys.com.10654.9021.302br.net', +'bs.serving-sys.com.10658.9021.302br.net', +'bs.serving-sys.com.11722.9021.302br.net', +'bs.serving-sys.com.11724.9021.302br.net', +'bs.serving-sys.com.11734.9021.302br.net', +'bs.serving-sys.com.11736.9021.302br.net', +'bs.serving-sys.com.11758.9021.302br.net', +'bs.serving-sys.com.11762.9021.302br.net', +'bs.serving-sys.com.11768.9021.302br.net', +'bs.serving-sys.com.12786.9021.302br.net', +'bs.serving-sys.com.12790.9021.302br.net', +'bs.serving-sys.com.1826.9021.302br.net', +'bs.serving-sys.com.1851.9021.302br.net', +'bs.serving-sys.com.1857.9021.302br.net', +'bs.serving-sys.com.1859.9021.302br.net', +'bs.serving-sys.com.1861.9021.302br.net', +'bs.serving-sys.com.1865.9021.302br.net', +'bs.serving-sys.com.1867.9021.302br.net', +'bs.serving-sys.com.1869.9021.302br.net', +'bs.serving-sys.com.1881.9021.302br.net', +'bs.serving-sys.com.1887.9021.302br.net', +'bs.serving-sys.com.1893.9021.302br.net', +'bs.serving-sys.com.1895.9021.302br.net', +'bs.serving-sys.com.1899.9021.302br.net', +'bs.serving-sys.com.1905.9021.302br.net', +'bs.serving-sys.com.1915.9021.302br.net', +'bs.serving-sys.com.1919.9021.302br.net', +'bs.serving-sys.com.1921.9021.302br.net', +'bs.serving-sys.com.19452.9120.302br.net', +'bs.serving-sys.com.19454.9120.302br.net', +'bs.serving-sys.com.19456.9120.302br.net', +'bs.serving-sys.com.19458.9120.302br.net', +'bs.serving-sys.com.19460.9120.302br.net', +'bs.serving-sys.com.19462.9120.302br.net', +'bs.serving-sys.com.19464.9120.302br.net', +'bs.serving-sys.com.19466.9120.302br.net', +'bs.serving-sys.com.19468.9120.302br.net', +'bs.serving-sys.com.19472.9120.302br.net', +'bs.serving-sys.com.19474.9120.302br.net', +'bs.serving-sys.com.19476.9120.302br.net', +'bs.serving-sys.com.19478.9120.302br.net', +'bs.serving-sys.com.19480.9120.302br.net', +'bs.serving-sys.com.19482.9120.302br.net', +'bs.serving-sys.com.19484.9120.302br.net', +'bs.serving-sys.com.19486.9120.302br.net', +'bs.serving-sys.com.19488.9120.302br.net', +'bs.serving-sys.com.19490.9120.302br.net', +'bs.serving-sys.com.19492.9120.302br.net', +'bs.serving-sys.com.19494.9120.302br.net', +'bs.serving-sys.com.19498.9120.302br.net', +'bs.serving-sys.com.19502.9120.302br.net', +'bs.serving-sys.com.19504.9120.302br.net', +'bs.serving-sys.com.19505.9120.302br.net', +'bs.serving-sys.com.19506.9120.302br.net', +'bs.serving-sys.com.19508.9120.302br.net', +'bs.serving-sys.com.19510.9120.302br.net', +'bs.serving-sys.com.19511.9120.302br.net', +'bs.serving-sys.com.19512.9120.302br.net', +'bs.serving-sys.com.19514.9120.302br.net', +'bs.serving-sys.com.19516.9120.302br.net', +'bs.serving-sys.com.19518.9120.302br.net', +'bs.serving-sys.com.19520.9120.302br.net', +'bs.serving-sys.com.19522.9120.302br.net', +'bs.serving-sys.com.19524.9120.302br.net', +'bs.serving-sys.com.19526.9120.302br.net', +'bs.serving-sys.com.19528.9120.302br.net', +'bs.serving-sys.com.20228.9120.302br.net', +'bs.serving-sys.com.20232.9120.302br.net', +'bs.serving-sys.com.20236.9120.302br.net', +'bs.serving-sys.com.20240.9120.302br.net', +'bs.serving-sys.com.20256.9120.302br.net', +'bs.serving-sys.com.20268.9120.302br.net', +'bs.serving-sys.com.20272.9120.302br.net', +'bs.serving-sys.com.20286.9120.302br.net', +'bs.serving-sys.com.20318.9120.302br.net', +'bs.serving-sys.com.20320.9120.302br.net', +'bs.serving-sys.com.20330.9120.302br.net', +'bs.serving-sys.com.20332.9120.302br.net', +'bs.serving-sys.com.20333.9120.302br.net', +'bs.serving-sys.com.20334.9120.302br.net', +'bs.serving-sys.com.20336.9120.302br.net', +'bs.serving-sys.com.20337.9120.302br.net', +'bs.serving-sys.com.20338.9120.302br.net', +'bs.serving-sys.com.20340.9120.302br.net', +'bs.serving-sys.com.20342.9120.302br.net', +'bs.serving-sys.com.20344.9120.302br.net', +'bs.serving-sys.com.20346.9120.302br.net', +'bs.serving-sys.com.20348.9120.302br.net', +'bs.serving-sys.com.20350.9120.302br.net', +'bs.serving-sys.com.20352.9120.302br.net', +'bs.serving-sys.com.20354.9120.302br.net', +'bs.serving-sys.com.20356.9120.302br.net', +'bs.serving-sys.com.20358.9120.302br.net', +'bs.serving-sys.com.20360.9120.302br.net', +'bs.serving-sys.com.20362.9120.302br.net', +'bs.serving-sys.com.20364.9120.302br.net', +'bs.serving-sys.com.20366.9120.302br.net', +'bs.serving-sys.com.20368.9120.302br.net', +'bs.serving-sys.com.20370.9120.302br.net', +'bs.serving-sys.com.20372.9120.302br.net', +'bs.serving-sys.com.20374.9120.302br.net', +'bs.serving-sys.com.20376.9120.302br.net', +'bs.serving-sys.com.20378.9120.302br.net', +'bs.serving-sys.com.20380.9120.302br.net', +'bs.serving-sys.com.20382.9120.302br.net', +'bs.serving-sys.com.20384.9120.302br.net', +'bs.serving-sys.com.20386.9120.302br.net', +'bs.serving-sys.com.20388.9120.302br.net', +'bs.serving-sys.com.20392.9120.302br.net', +'bs.serving-sys.com.20394.9120.302br.net', +'bs.serving-sys.com.20396.9120.302br.net', +'bs.serving-sys.com.20398.9120.302br.net', +'bs.serving-sys.com.20402.9120.302br.net', +'bs.serving-sys.com.20404.9120.302br.net', +'bs.serving-sys.com.20406.9120.302br.net', +'bs.serving-sys.com.20408.9120.302br.net', +'bs.serving-sys.com.20410.9120.302br.net', +'bs.serving-sys.com.20412.9120.302br.net', +'bs.serving-sys.com.20414.9120.302br.net', +'bs.serving-sys.com.20416.9120.302br.net', +'bs.serving-sys.com.20418.9120.302br.net', +'bs.serving-sys.com.20422.9120.302br.net', +'bs.serving-sys.com.20426.9120.302br.net', +'bs.serving-sys.com.20428.9120.302br.net', +'bs.serving-sys.com.20434.9120.302br.net', +'bs.serving-sys.com.20436.9120.302br.net', +'bs.serving-sys.com.20437.9120.302br.net', +'bs.serving-sys.com.20438.9120.302br.net', +'bs.serving-sys.com.20439.9120.302br.net', +'bs.serving-sys.com.20440.9120.302br.net', +'bs.serving-sys.com.20442.9120.302br.net', +'bs.serving-sys.com.20444.9120.302br.net', +'bs.serving-sys.com.20446.9120.302br.net', +'bs.serving-sys.com.20448.9120.302br.net', +'bs.serving-sys.com.20449.9120.302br.net', +'bs.serving-sys.com.20450.9120.302br.net', +'bs.serving-sys.com.20451.9120.302br.net', +'bs.serving-sys.com.20452.9120.302br.net', +'bs.serving-sys.com.20506.9120.302br.net', +'bs.serving-sys.com.20508.9120.302br.net', +'bs.serving-sys.com.20510.9120.302br.net', +'bs.serving-sys.com.20512.9120.302br.net', +'bs.serving-sys.com.20514.9120.302br.net', +'bs.serving-sys.com.20516.9120.302br.net', +'bs.serving-sys.com.20518.9120.302br.net', +'bs.serving-sys.com.20520.9120.302br.net', +'bs.serving-sys.com.20522.9120.302br.net', +'bs.serving-sys.com.20524.9120.302br.net', +'bs.serving-sys.com.20526.9120.302br.net', +'bs.serving-sys.com.20528.9120.302br.net', +'bs.serving-sys.com.20530.9120.302br.net', +'bs.serving-sys.com.20532.9120.302br.net', +'bs.serving-sys.com.20534.9120.302br.net', +'bs.serving-sys.com.20536.9120.302br.net', +'bs.serving-sys.com.20538.9120.302br.net', +'bs.serving-sys.com.20540.9120.302br.net', +'bs.serving-sys.com.20542.9120.302br.net', +'bs.serving-sys.com.20544.9120.302br.net', +'bs.serving-sys.com.20546.9120.302br.net', +'bs.serving-sys.com.20548.9120.302br.net', +'bs.serving-sys.com.20550.9120.302br.net', +'bs.serving-sys.com.20552.9120.302br.net', +'bs.serving-sys.com.20554.9120.302br.net', +'bs.serving-sys.com.20556.9120.302br.net', +'bs.serving-sys.com.20558.9120.302br.net', +'bs.serving-sys.com.20560.9120.302br.net', +'bs.serving-sys.com.20562.9120.302br.net', +'bs.serving-sys.com.20564.9120.302br.net', +'bs.serving-sys.com.20566.9120.302br.net', +'bs.serving-sys.com.20568.9120.302br.net', +'bs.serving-sys.com.20570.9120.302br.net', +'bs.serving-sys.com.20572.9120.302br.net', +'bs.serving-sys.com.20576.9120.302br.net', +'bs.serving-sys.com.20578.9120.302br.net', +'bs.serving-sys.com.20580.9120.302br.net', +'bs.serving-sys.com.20582.9120.302br.net', +'bs.serving-sys.com.20584.9120.302br.net', +'bs.serving-sys.com.20586.9120.302br.net', +'bs.serving-sys.com.20588.9120.302br.net', +'bs.serving-sys.com.20590.9120.302br.net', +'bs.serving-sys.com.20592.9120.302br.net', +'bs.serving-sys.com.20594.9120.302br.net', +'bs.serving-sys.com.20596.9120.302br.net', +'bs.serving-sys.com.20598.9120.302br.net', +'bs.serving-sys.com.20600.9120.302br.net', +'bs.serving-sys.com.20602.9120.302br.net', +'bs.serving-sys.com.20604.9120.302br.net', +'bs.serving-sys.com.20606.9120.302br.net', +'bs.serving-sys.com.20608.9120.302br.net', +'bs.serving-sys.com.20610.9120.302br.net', +'bs.serving-sys.com.20612.9120.302br.net', +'bs.serving-sys.com.20614.9120.302br.net', +'bs.serving-sys.com.20616.9120.302br.net', +'bs.serving-sys.com.20618.9120.302br.net', +'bs.serving-sys.com.20620.9120.302br.net', +'bs.serving-sys.com.20622.9120.302br.net', +'bs.serving-sys.com.20624.9120.302br.net', +'bs.serving-sys.com.20626.9120.302br.net', +'bs.serving-sys.com.20628.9120.302br.net', +'bs.serving-sys.com.20630.9120.302br.net', +'bs.serving-sys.com.20632.9120.302br.net', +'bs.serving-sys.com.20634.9120.302br.net', +'bs.serving-sys.com.20636.9120.302br.net', +'bs.serving-sys.com.20638.9120.302br.net', +'bs.serving-sys.com.20640.9120.302br.net', +'bs.serving-sys.com.20644.9120.302br.net', +'bs.serving-sys.com.20646.9120.302br.net', +'bs.serving-sys.com.20648.9120.302br.net', +'bs.serving-sys.com.24618.9182.302br.net', +'bs.serving-sys.com.24620.9182.302br.net', +'bs.serving-sys.com.24622.9182.302br.net', +'bs.serving-sys.com.24624.9182.302br.net', +'bs.serving-sys.com.24626.9182.302br.net', +'bs.serving-sys.com.24628.9182.302br.net', +'bs.serving-sys.com.24630.9182.302br.net', +'bs.serving-sys.com.24632.9182.302br.net', +'bs.serving-sys.com.24634.9182.302br.net', +'bs.serving-sys.com.24636.9182.302br.net', +'bs.serving-sys.com.24638.9182.302br.net', +'bs.serving-sys.com.24640.9182.302br.net', +'bs.serving-sys.com.24642.9182.302br.net', +'bs.serving-sys.com.24644.9182.302br.net', +'bs.serving-sys.com.24646.9182.302br.net', +'bs.serving-sys.com.24648.9182.302br.net', +'bs.serving-sys.com.24650.9182.302br.net', +'bs.serving-sys.com.24652.9182.302br.net', +'bs.serving-sys.com.24654.9182.302br.net', +'bs.serving-sys.com.24656.9182.302br.net', +'bs.serving-sys.com.24658.9182.302br.net', +'bs.serving-sys.com.24660.9182.302br.net', +'bs.serving-sys.com.24662.9182.302br.net', +'bs.serving-sys.com.24664.9182.302br.net', +'bs.serving-sys.com.24666.9182.302br.net', +'bs.serving-sys.com.24668.9182.302br.net', +'bs.serving-sys.com.24670.9182.302br.net', +'bs.serving-sys.com.24672.9182.302br.net', +'bs.serving-sys.com.24674.9182.302br.net', +'bs.serving-sys.com.24676.9182.302br.net', +'bs.serving-sys.com.24678.9182.302br.net', +'bs.serving-sys.com.24680.9182.302br.net', +'bs.serving-sys.com.24682.9182.302br.net', +'bs.serving-sys.com.24684.9182.302br.net', +'bs.serving-sys.com.24686.9182.302br.net', +'bs.serving-sys.com.24688.9182.302br.net', +'bs.serving-sys.com.24690.9181.302br.net', +'bs.serving-sys.com.24692.9181.302br.net', +'bs.serving-sys.com.24694.9181.302br.net', +'bs.serving-sys.com.24696.9181.302br.net', +'bs.serving-sys.com.24698.9181.302br.net', +'bs.serving-sys.com.24700.9181.302br.net', +'bs.serving-sys.com.24702.9181.302br.net', +'bs.serving-sys.com.24704.9181.302br.net', +'bs.serving-sys.com.24706.9181.302br.net', +'bs.serving-sys.com.24708.9181.302br.net', +'bs.serving-sys.com.24710.9181.302br.net', +'bs.serving-sys.com.24712.9181.302br.net', +'bs.serving-sys.com.24714.9181.302br.net', +'bs.serving-sys.com.24716.9181.302br.net', +'bs.serving-sys.com.24718.9181.302br.net', +'bs.serving-sys.com.24720.9181.302br.net', +'bs.serving-sys.com.24722.9181.302br.net', +'bs.serving-sys.com.24724.9181.302br.net', +'bs.serving-sys.com.24726.9181.302br.net', +'bs.serving-sys.com.24728.9181.302br.net', +'bs.serving-sys.com.24730.9181.302br.net', +'bs.serving-sys.com.24732.9181.302br.net', +'bs.serving-sys.com.24734.9181.302br.net', +'bs.serving-sys.com.24736.9181.302br.net', +'bs.serving-sys.com.24738.9181.302br.net', +'bs.serving-sys.com.24740.9181.302br.net', +'bs.serving-sys.com.24742.9181.302br.net', +'bs.serving-sys.com.24744.9181.302br.net', +'bs.serving-sys.com.24746.9181.302br.net', +'bs.serving-sys.com.24748.9181.302br.net', +'bs.serving-sys.com.24750.9181.302br.net', +'bs.serving-sys.com.24752.9181.302br.net', +'bs.serving-sys.com.24754.9181.302br.net', +'bs.serving-sys.com.24756.9181.302br.net', +'bs.serving-sys.com.24758.9181.302br.net', +'bs.serving-sys.com.24760.9181.302br.net', +'bs.serving-sys.com.25254.9186.302br.net', +'bs.serving-sys.com.25256.9186.302br.net', +'bs.serving-sys.com.25258.9186.302br.net', +'bs.serving-sys.com.25259.9186.302br.net', +'bs.serving-sys.com.25260.9186.302br.net', +'bs.serving-sys.com.25261.9186.302br.net', +'bs.serving-sys.com.25262.9186.302br.net', +'bs.serving-sys.com.25263.9186.302br.net', +'bs.serving-sys.com.25264.9186.302br.net', +'bs.serving-sys.com.25265.9186.302br.net', +'bs.serving-sys.com.25266.9186.302br.net', +'bs.serving-sys.com.25268.9186.302br.net', +'bs.serving-sys.com.25269.9186.302br.net', +'bs.serving-sys.com.25270.9186.302br.net', +'bs.serving-sys.com.25271.9186.302br.net', +'bs.serving-sys.com.25272.9186.302br.net', +'bs.serving-sys.com.25273.9186.302br.net', +'bs.serving-sys.com.25274.9186.302br.net', +'bs.serving-sys.com.25275.9186.302br.net', +'bs.serving-sys.com.25276.9186.302br.net', +'bs.serving-sys.com.25277.9186.302br.net', +'bs.serving-sys.com.25278.9186.302br.net', +'bs.serving-sys.com.25279.9186.302br.net', +'bs.serving-sys.com.25280.9186.302br.net', +'bs.serving-sys.com.25281.9186.302br.net', +'bs.serving-sys.com.25282.9186.302br.net', +'bs.serving-sys.com.25283.9186.302br.net', +'bs.serving-sys.com.25284.9186.302br.net', +'bs.serving-sys.com.25285.9186.302br.net', +'bs.serving-sys.com.25286.9186.302br.net', +'bs.serving-sys.com.25287.9186.302br.net', +'bs.serving-sys.com.25288.9186.302br.net', +'bs.serving-sys.com.25289.9186.302br.net', +'bs.serving-sys.com.25290.9186.302br.net', +'bs.serving-sys.com.25291.9186.302br.net', +'bs.serving-sys.com.25292.9186.302br.net', +'bs.serving-sys.com.25293.9186.302br.net', +'bs.serving-sys.com.25294.9186.302br.net', +'bs.serving-sys.com.25295.9186.302br.net', +'bs.serving-sys.com.25296.9186.302br.net', +'bs.serving-sys.com.25297.9186.302br.net', +'bs.serving-sys.com.25298.9186.302br.net', +'bs.serving-sys.com.25308.9186.302br.net', +'bs.serving-sys.com.25310.9186.302br.net', +'bs.serving-sys.com.25311.9186.302br.net', +'bs.serving-sys.com.25312.9186.302br.net', +'bs.serving-sys.com.25313.9186.302br.net', +'bs.serving-sys.com.25314.9186.302br.net', +'bs.serving-sys.com.25315.9186.302br.net', +'bs.serving-sys.com.25316.9186.302br.net', +'bs.serving-sys.com.25317.9186.302br.net', +'bs.serving-sys.com.25318.9186.302br.net', +'bs.serving-sys.com.25320.9186.302br.net', +'bs.serving-sys.com.25322.9186.302br.net', +'bs.serving-sys.com.25324.9186.302br.net', +'bs.serving-sys.com.25326.9186.302br.net', +'bs.serving-sys.com.25328.9186.302br.net', +'bs.serving-sys.com.25330.9186.302br.net', +'bs.serving-sys.com.25332.9186.302br.net', +'bs.serving-sys.com.25333.9186.302br.net', +'bs.serving-sys.com.25334.9186.302br.net', +'bs.serving-sys.com.25335.9186.302br.net', +'bs.serving-sys.com.25336.9186.302br.net', +'bs.serving-sys.com.25337.9186.302br.net', +'bs.serving-sys.com.25338.9186.302br.net', +'bs.serving-sys.com.25339.9186.302br.net', +'bs.serving-sys.com.25340.9186.302br.net', +'bs.serving-sys.com.25341.9186.302br.net', +'bs.serving-sys.com.25342.9186.302br.net', +'bs.serving-sys.com.25343.9186.302br.net', +'bs.serving-sys.com.25344.9186.302br.net', +'bs.serving-sys.com.25346.9186.302br.net', +'bs.serving-sys.com.25348.9186.302br.net', +'bs.serving-sys.com.25350.9186.302br.net', +'bs.serving-sys.com.25369.9186.302br.net', +'bs.serving-sys.com.25370.9186.302br.net', +'bs.serving-sys.com.25371.9186.302br.net', +'bs.serving-sys.com.25372.9186.302br.net', +'bs.serving-sys.com.25373.9186.302br.net', +'bs.serving-sys.com.25374.9186.302br.net', +'bs.serving-sys.com.25375.9186.302br.net', +'bs.serving-sys.com.25376.9186.302br.net', +'bs.serving-sys.com.25377.9186.302br.net', +'bs.serving-sys.com.25378.9186.302br.net', +'bs.serving-sys.com.25380.9186.302br.net', +'bs.serving-sys.com.33504.9243.302br.net', +'bs.serving-sys.com.33505.9243.302br.net', +'bs.serving-sys.com.33506.9243.302br.net', +'bs.serving-sys.com.33507.9243.302br.net', +'bs.serving-sys.com.33508.9243.302br.net', +'bs.serving-sys.com.33516.9243.302br.net', +'bs.serving-sys.com.33517.9243.302br.net', +'bs.serving-sys.com.33518.9243.302br.net', +'bs.serving-sys.com.33519.9243.302br.net', +'bs.serving-sys.com.33520.9243.302br.net', +'bs.serving-sys.com.33521.9243.302br.net', +'bs.serving-sys.com.33522.9243.302br.net', +'bs.serving-sys.com.33523.9243.302br.net', +'bs.serving-sys.com.33524.9243.302br.net', +'bs.serving-sys.com.33525.9243.302br.net', +'bs.serving-sys.com.33526.9243.302br.net', +'bs.serving-sys.com.35174.9113.302br.net', +'bs.serving-sys.com.35175.9113.302br.net', +'bs.serving-sys.com.35176.9113.302br.net', +'bs.serving-sys.com.35177.9113.302br.net', +'bs.serving-sys.com.36494.9244.302br.net', +'bs.serving-sys.com.36495.9244.302br.net', +'bs.serving-sys.com.36496.9244.302br.net', +'bs.serving-sys.com.36497.9244.302br.net', +'bs.serving-sys.com.36498.9244.302br.net', +'bs.serving-sys.com.36499.9244.302br.net', +'bs.serving-sys.com.36500.9244.302br.net', +'bs.serving-sys.com.36501.9244.302br.net', +'bs.serving-sys.com.36502.9244.302br.net', +'bs.serving-sys.com.36503.9244.302br.net', +'bs.serving-sys.com.36504.9244.302br.net', +'bs.serving-sys.com.36505.9244.302br.net', +'bs.serving-sys.com.36507.9244.302br.net', +'bs.serving-sys.com.36509.9244.302br.net', +'bs.serving-sys.com.36511.9244.302br.net', +'bs.serving-sys.com.36513.9244.302br.net', +'bs.serving-sys.com.36514.9244.302br.net', +'bs.serving-sys.com.36515.9244.302br.net', +'bs.serving-sys.com.36516.9244.302br.net', +'bs.serving-sys.com.36517.9244.302br.net', +'bs.serving-sys.com.36518.9244.302br.net', +'bs.serving-sys.com.36519.9244.302br.net', +'bs.serving-sys.com.36520.9244.302br.net', +'bs.serving-sys.com.36521.9244.302br.net', +'bs.serving-sys.com.36522.9244.302br.net', +'bs.serving-sys.com.36523.9244.302br.net', +'bs.serving-sys.com.36525.9244.302br.net', +'bs.serving-sys.com.36526.9244.302br.net', +'bs.serving-sys.com.36527.9244.302br.net', +'bs.serving-sys.com.36529.9244.302br.net', +'bs.serving-sys.com.36531.9244.302br.net', +'bs.serving-sys.com.36533.9244.302br.net', +'bs.serving-sys.com.36534.9244.302br.net', +'bs.serving-sys.com.36535.9244.302br.net', +'bs.serving-sys.com.36537.9244.302br.net', +'bs.serving-sys.com.36539.9244.302br.net', +'bs.serving-sys.com.36540.9244.302br.net', +'bs.serving-sys.com.36541.9244.302br.net', +'bs.serving-sys.com.36542.9244.302br.net', +'bs.serving-sys.com.36543.9244.302br.net', +'bs.serving-sys.com.36544.9244.302br.net', +'bs.serving-sys.com.36545.9244.302br.net', +'bs.serving-sys.com.36546.9244.302br.net', +'bs.serving-sys.com.36547.9244.302br.net', +'bs.serving-sys.com.36548.9244.302br.net', +'bs.serving-sys.com.36549.9244.302br.net', +'bs.serving-sys.com.36550.9244.302br.net', +'bs.serving-sys.com.36551.9244.302br.net', +'bs.serving-sys.com.36552.9244.302br.net', +'bs.serving-sys.com.36553.9244.302br.net', +'bs.serving-sys.com.36554.9244.302br.net', +'bs.serving-sys.com.36555.9244.302br.net', +'bs.serving-sys.com.36556.9244.302br.net', +'bs.serving-sys.com.36557.9244.302br.net', +'bs.serving-sys.com.36582.9244.302br.net', +'bs.serving-sys.com.36583.9244.302br.net', +'bs.serving-sys.com.36584.9244.302br.net', +'bs.serving-sys.com.36585.9244.302br.net', +'bs.serving-sys.com.36586.9244.302br.net', +'bs.serving-sys.com.36587.9244.302br.net', +'bs.serving-sys.com.36589.9244.302br.net', +'bs.serving-sys.com.36590.9244.302br.net', +'bs.serving-sys.com.36591.9244.302br.net', +'bs.serving-sys.com.36592.9244.302br.net', +'bs.serving-sys.com.36593.9244.302br.net', +'bs.serving-sys.com.36594.9244.302br.net', +'bs.serving-sys.com.36595.9244.302br.net', +'bs.serving-sys.com.36596.9244.302br.net', +'bs.serving-sys.com.36597.9244.302br.net', +'bs.serving-sys.com.36598.9244.302br.net', +'bs.serving-sys.com.36599.9244.302br.net', +'bs.serving-sys.com.36600.9244.302br.net', +'bs.serving-sys.com.36601.9244.302br.net', +'bs.serving-sys.com.36602.9244.302br.net', +'bs.serving-sys.com.36603.9244.302br.net', +'bs.serving-sys.com.36605.9244.302br.net', +'bs.serving-sys.com.36607.9244.302br.net', +'bs.serving-sys.com.36609.9244.302br.net', +'bs.serving-sys.com.36611.9244.302br.net', +'bs.serving-sys.com.36613.9244.302br.net', +'bs.serving-sys.com.36615.9244.302br.net', +'bs.serving-sys.com.36617.9244.302br.net', +'bs.serving-sys.com.36619.9244.302br.net', +'bs.serving-sys.com.36621.9244.302br.net', +'bs.serving-sys.com.36623.9244.302br.net', +'bs.serving-sys.com.36625.9244.302br.net', +'bs.serving-sys.com.36627.9244.302br.net', +'bs.serving-sys.com.36629.9244.302br.net', +'bs.serving-sys.com.36631.9244.302br.net', +'bs.serving-sys.com.36633.9244.302br.net', +'bs.serving-sys.com.36635.9244.302br.net', +'bs.serving-sys.com.36637.9244.302br.net', +'bs.serving-sys.com.36639.9244.302br.net', +'bs.serving-sys.com.36640.9244.302br.net', +'bs.serving-sys.com.36641.9244.302br.net', +'bs.serving-sys.com.36642.9244.302br.net', +'bs.serving-sys.com.36643.9244.302br.net', +'bs.serving-sys.com.36645.9244.302br.net', +'bs.serving-sys.com.36646.9244.302br.net', +'bs.serving-sys.com.36647.9244.302br.net', +'bs.serving-sys.com.36649.9244.302br.net', +'bs.serving-sys.com.36650.9244.302br.net', +'bs.serving-sys.com.36651.9244.302br.net', +'bs.serving-sys.com.36652.9244.302br.net', +'bs.serving-sys.com.36653.9244.302br.net', +'bs.serving-sys.com.36654.9244.302br.net', +'bs.serving-sys.com.36655.9244.302br.net', +'bs.serving-sys.com.36656.9244.302br.net', +'bs.serving-sys.com.36657.9244.302br.net', +'bs.serving-sys.com.36658.9244.302br.net', +'bs.serving-sys.com.36659.9244.302br.net', +'bs.serving-sys.com.36660.9244.302br.net', +'bs.serving-sys.com.36661.9244.302br.net', +'bs.serving-sys.com.36748.9282.302br.net', +'bs.serving-sys.com.36750.9282.302br.net', +'bs.serving-sys.com.36758.9282.302br.net', +'bs.serving-sys.com.36760.9282.302br.net', +'bs.serving-sys.com.36768.9282.302br.net', +'bs.serving-sys.com.36770.9282.302br.net', +'bs.serving-sys.com.36778.9282.302br.net', +'bs.serving-sys.com.36780.9282.302br.net', +'bs.serving-sys.com.36788.9282.302br.net', +'bs.serving-sys.com.36790.9282.302br.net', +'bs.serving-sys.com.36798.9282.302br.net', +'bs.serving-sys.com.36800.9282.302br.net', +'bs.serving-sys.com.36967.9244.302br.net', +'bs.serving-sys.com.36969.9244.302br.net', +'bs.serving-sys.com.36971.9244.302br.net', +'bs.serving-sys.com.36972.9244.302br.net', +'bs.serving-sys.com.36973.9244.302br.net', +'bs.serving-sys.com.36974.9244.302br.net', +'bs.serving-sys.com.36975.9244.302br.net', +'bs.serving-sys.com.36976.9244.302br.net', +'bs.serving-sys.com.36977.9244.302br.net', +'bs.serving-sys.com.36978.9244.302br.net', +'bs.serving-sys.com.36979.9244.302br.net', +'bs.serving-sys.com.36980.9244.302br.net', +'bs.serving-sys.com.36981.9244.302br.net', +'bs.serving-sys.com.37346.9024.302br.net', +'bs.serving-sys.com.37348.9024.302br.net', +'bs.serving-sys.com.37350.9024.302br.net', +'bs.serving-sys.com.42218.9320.302br.net', +'bs.serving-sys.com.42219.9320.302br.net', +'bs.serving-sys.com.42220.9320.302br.net', +'bs.serving-sys.com.42221.9320.302br.net', +'bs.serving-sys.com.42222.9320.302br.net', +'bs.serving-sys.com.42223.9320.302br.net', +'bs.serving-sys.com.42225.9320.302br.net', +'bs.serving-sys.com.42226.9320.302br.net', +'bs.serving-sys.com.42227.9320.302br.net', +'bs.serving-sys.com.42228.9320.302br.net', +'bs.serving-sys.com.42229.9320.302br.net', +'bs.serving-sys.com.42231.9320.302br.net', +'bs.serving-sys.com.42232.9320.302br.net', +'bs.serving-sys.com.42233.9320.302br.net', +'bs.serving-sys.com.42234.9320.302br.net', +'bs.serving-sys.com.42235.9320.302br.net', +'bs.serving-sys.com.42237.9320.302br.net', +'bs.serving-sys.com.42239.9320.302br.net', +'bs.serving-sys.com.42241.9320.302br.net', +'bs.serving-sys.com.42242.9320.302br.net', +'bs.serving-sys.com.42243.9320.302br.net', +'bs.serving-sys.com.42244.9320.302br.net', +'bs.serving-sys.com.42245.9320.302br.net', +'bs.serving-sys.com.42247.9320.302br.net', +'bs.serving-sys.com.42249.9320.302br.net', +'bs.serving-sys.com.42250.9320.302br.net', +'bs.serving-sys.com.42251.9320.302br.net', +'bs.serving-sys.com.42253.9320.302br.net', +'bs.serving-sys.com.46966.9349.302br.net', +'bs.serving-sys.com.46967.9349.302br.net', +'bs.serving-sys.com.46968.9349.302br.net', +'bs.serving-sys.com.46969.9349.302br.net', +'bs.serving-sys.com.46970.9349.302br.net', +'bs.serving-sys.com.46971.9349.302br.net', +'bs.serving-sys.com.46973.9349.302br.net', +'bs.serving-sys.com.46975.9349.302br.net', +'bs.serving-sys.com.46977.9349.302br.net', +'bs.serving-sys.com.46979.9349.302br.net', +'bs.serving-sys.com.46981.9349.302br.net', +'bs.serving-sys.com.46983.9349.302br.net', +'bs.serving-sys.com.46984.9349.302br.net', +'bs.serving-sys.com.46985.9349.302br.net', +'bs.serving-sys.com.46986.9349.302br.net', +'bs.serving-sys.com.46987.9349.302br.net', +'bs.serving-sys.com.46988.9349.302br.net', +'bs.serving-sys.com.46989.9349.302br.net', +'bs.serving-sys.com.46990.9349.302br.net', +'bs.serving-sys.com.46991.9349.302br.net', +'bs.serving-sys.com.46992.9349.302br.net', +'bs.serving-sys.com.46993.9349.302br.net', +'bs.serving-sys.com.46994.9349.302br.net', +'bs.serving-sys.com.46995.9349.302br.net', +'bs.serving-sys.com.46996.9349.302br.net', +'bs.serving-sys.com.46997.9349.302br.net', +'bs.serving-sys.com.46998.9349.302br.net', +'bs.serving-sys.com.46999.9349.302br.net', +'bs.serving-sys.com.47000.9349.302br.net', +'bs.serving-sys.com.47001.9349.302br.net', +'bs.serving-sys.com.47003.9349.302br.net', +'bs.serving-sys.com.47004.9349.302br.net', +'bs.serving-sys.com.47005.9349.302br.net', +'bs.serving-sys.com.47006.9349.302br.net', +'bs.serving-sys.com.47007.9349.302br.net', +'bs.serving-sys.com.47008.9349.302br.net', +'bs.serving-sys.com.47009.9349.302br.net', +'bs.serving-sys.com.47010.9349.302br.net', +'bs.serving-sys.com.47011.9349.302br.net', +'bs.serving-sys.com.47012.9349.302br.net', +'bs.serving-sys.com.47013.9349.302br.net', +'bs.serving-sys.com.47014.9349.302br.net', +'bs.serving-sys.com.47015.9349.302br.net', +'bs.serving-sys.com.47016.9349.302br.net', +'bs.serving-sys.com.47017.9349.302br.net', +'bs.serving-sys.com.47019.9349.302br.net', +'bs.serving-sys.com.47020.9349.302br.net', +'bs.serving-sys.com.47021.9349.302br.net', +'bs.serving-sys.com.47022.9349.302br.net', +'bs.serving-sys.com.47023.9349.302br.net', +'bs.serving-sys.com.47025.9349.302br.net', +'bs.serving-sys.com.47026.9349.302br.net', +'bs.serving-sys.com.47027.9349.302br.net', +'bs.serving-sys.com.47028.9349.302br.net', +'bs.serving-sys.com.47029.9349.302br.net', +'bs.serving-sys.com.47030.9349.302br.net', +'bs.serving-sys.com.47031.9349.302br.net', +'bs.serving-sys.com.47032.9349.302br.net', +'bs.serving-sys.com.47033.9349.302br.net', +'bs.serving-sys.com.47034.9349.302br.net', +'bs.serving-sys.com.47035.9349.302br.net', +'bs.serving-sys.com.47036.9349.302br.net', +'bs.serving-sys.com.47037.9349.302br.net', +'bs.serving-sys.com.47038.9349.302br.net', +'bs.serving-sys.com.47039.9349.302br.net', +'bs.serving-sys.com.47040.9349.302br.net', +'bs.serving-sys.com.47041.9349.302br.net', +'bs.serving-sys.com.47042.9349.302br.net', +'bs.serving-sys.com.47043.9349.302br.net', +'bs.serving-sys.com.47044.9349.302br.net', +'bs.serving-sys.com.47045.9349.302br.net', +'bs.serving-sys.com.47050.9349.302br.net', +'bs.serving-sys.com.47051.9349.302br.net', +'bs.serving-sys.com.47052.9349.302br.net', +'bs.serving-sys.com.47053.9349.302br.net', +'bs.serving-sys.com.47054.9349.302br.net', +'bs.serving-sys.com.47055.9349.302br.net', +'bs.serving-sys.com.47056.9349.302br.net', +'bs.serving-sys.com.47057.9349.302br.net', +'bs.serving-sys.com.47058.9349.302br.net', +'bs.serving-sys.com.47059.9349.302br.net', +'bs.serving-sys.com.47060.9349.302br.net', +'bs.serving-sys.com.47061.9349.302br.net', +'bs.serving-sys.com.47066.9349.302br.net', +'bs.serving-sys.com.47067.9349.302br.net', +'bs.serving-sys.com.47068.9349.302br.net', +'bs.serving-sys.com.47069.9349.302br.net', +'bs.serving-sys.com.47070.9349.302br.net', +'bs.serving-sys.com.47071.9349.302br.net', +'bs.serving-sys.com.47072.9349.302br.net', +'bs.serving-sys.com.47073.9349.302br.net', +'bs.serving-sys.com.47074.9349.302br.net', +'bs.serving-sys.com.47075.9349.302br.net', +'bs.serving-sys.com.47076.9349.302br.net', +'bs.serving-sys.com.47077.9349.302br.net', +'bs.serving-sys.com.47078.9349.302br.net', +'bs.serving-sys.com.47079.9349.302br.net', +'bs.serving-sys.com.47080.9349.302br.net', +'bs.serving-sys.com.47081.9349.302br.net', +'bs.serving-sys.com.47082.9349.302br.net', +'bs.serving-sys.com.47083.9349.302br.net', +'bs.serving-sys.com.47084.9349.302br.net', +'bs.serving-sys.com.47085.9349.302br.net', +'bs.serving-sys.com.47086.9349.302br.net', +'bs.serving-sys.com.47087.9349.302br.net', +'bs.serving-sys.com.47088.9349.302br.net', +'bs.serving-sys.com.47089.9349.302br.net', +'bs.serving-sys.com.47090.9349.302br.net', +'bs.serving-sys.com.47091.9349.302br.net', +'bs.serving-sys.com.47092.9349.302br.net', +'bs.serving-sys.com.47093.9349.302br.net', +'bs.serving-sys.com.47094.9349.302br.net', +'bs.serving-sys.com.47095.9349.302br.net', +'bs.serving-sys.com.47096.9349.302br.net', +'bs.serving-sys.com.47097.9349.302br.net', +'bs.serving-sys.com.47099.9349.302br.net', +'bs.serving-sys.com.47100.9349.302br.net', +'bs.serving-sys.com.47101.9349.302br.net', +'bs.serving-sys.com.47102.9349.302br.net', +'bs.serving-sys.com.47103.9349.302br.net', +'bs.serving-sys.com.47105.9349.302br.net', +'bs.serving-sys.com.47106.9349.302br.net', +'bs.serving-sys.com.47107.9349.302br.net', +'bs.serving-sys.com.47108.9349.302br.net', +'bs.serving-sys.com.47109.9349.302br.net', +'bs.serving-sys.com.47110.9349.302br.net', +'bs.serving-sys.com.47111.9349.302br.net', +'bs.serving-sys.com.47112.9349.302br.net', +'bs.serving-sys.com.47113.9349.302br.net', +'bs.serving-sys.com.47114.9349.302br.net', +'bs.serving-sys.com.47115.9349.302br.net', +'bs.serving-sys.com.47116.9349.302br.net', +'bs.serving-sys.com.47117.9349.302br.net', +'bs.serving-sys.com.47119.9349.302br.net', +'bs.serving-sys.com.47126.9349.302br.net', +'bs.serving-sys.com.47127.9349.302br.net', +'bs.serving-sys.com.47128.9349.302br.net', +'bs.serving-sys.com.47129.9349.302br.net', +'bs.serving-sys.com.47132.9349.302br.net', +'bs.serving-sys.com.47133.9349.302br.net', +'bs.serving-sys.com.47134.9349.302br.net', +'bs.serving-sys.com.47135.9349.302br.net', +'bs.serving-sys.com.47136.9349.302br.net', +'bs.serving-sys.com.47137.9349.302br.net', +'bs.serving-sys.com.47138.9349.302br.net', +'bs.serving-sys.com.47139.9349.302br.net', +'bs.serving-sys.com.47140.9349.302br.net', +'bs.serving-sys.com.47141.9349.302br.net', +'bs.serving-sys.com.47142.9349.302br.net', +'bs.serving-sys.com.47143.9349.302br.net', +'bs.serving-sys.com.47144.9349.302br.net', +'bs.serving-sys.com.47145.9349.302br.net', +'bs.serving-sys.com.47146.9349.302br.net', +'bs.serving-sys.com.47147.9349.302br.net', +'bs.serving-sys.com.47148.9349.302br.net', +'bs.serving-sys.com.47149.9349.302br.net', +'bs.serving-sys.com.47150.9349.302br.net', +'bs.serving-sys.com.47151.9349.302br.net', +'bs.serving-sys.com.47152.9349.302br.net', +'bs.serving-sys.com.47153.9349.302br.net', +'bs.serving-sys.com.47154.9349.302br.net', +'bs.serving-sys.com.47155.9349.302br.net', +'bs.serving-sys.com.47156.9349.302br.net', +'bs.serving-sys.com.47157.9349.302br.net', +'bs.serving-sys.com.47158.9349.302br.net', +'bs.serving-sys.com.47159.9349.302br.net', +'bs.serving-sys.com.47160.9349.302br.net', +'bs.serving-sys.com.47161.9349.302br.net', +'bs.serving-sys.com.47162.9349.302br.net', +'bs.serving-sys.com.47163.9349.302br.net', +'bs.serving-sys.com.47164.9349.302br.net', +'bs.serving-sys.com.47165.9349.302br.net', +'bs.serving-sys.com.47166.9349.302br.net', +'bs.serving-sys.com.47167.9349.302br.net', +'bs.serving-sys.com.47168.9349.302br.net', +'bs.serving-sys.com.47169.9349.302br.net', +'bs.serving-sys.com.47170.9349.302br.net', +'bs.serving-sys.com.47171.9349.302br.net', +'bs.serving-sys.com.47172.9349.302br.net', +'bs.serving-sys.com.47173.9349.302br.net', +'bs.serving-sys.com.47174.9349.302br.net', +'bs.serving-sys.com.47175.9349.302br.net', +'bs.serving-sys.com.47177.9349.302br.net', +'bs.serving-sys.com.47178.9349.302br.net', +'bs.serving-sys.com.47179.9349.302br.net', +'bs.serving-sys.com.47180.9349.302br.net', +'bs.serving-sys.com.47181.9349.302br.net', +'bs.serving-sys.com.47182.9349.302br.net', +'bs.serving-sys.com.47183.9349.302br.net', +'bs.serving-sys.com.47184.9349.302br.net', +'bs.serving-sys.com.47185.9349.302br.net', +'bs.serving-sys.com.47186.9349.302br.net', +'bs.serving-sys.com.47187.9349.302br.net', +'bs.serving-sys.com.47188.9349.302br.net', +'bs.serving-sys.com.47189.9349.302br.net', +'bs.serving-sys.com.47190.9349.302br.net', +'bs.serving-sys.com.47191.9349.302br.net', +'bs.serving-sys.com.47192.9349.302br.net', +'bs.serving-sys.com.47193.9349.302br.net', +'bs.serving-sys.com.47194.9349.302br.net', +'bs.serving-sys.com.47195.9349.302br.net', +'bs.serving-sys.com.47196.9349.302br.net', +'bs.serving-sys.com.47197.9349.302br.net', +'bs.serving-sys.com.47198.9349.302br.net', +'bs.serving-sys.com.47199.9349.302br.net', +'bs.serving-sys.com.47200.9349.302br.net', +'bs.serving-sys.com.47201.9349.302br.net', +'bs.serving-sys.com.47202.9349.302br.net', +'bs.serving-sys.com.47203.9349.302br.net', +'bs.serving-sys.com.47204.9349.302br.net', +'bs.serving-sys.com.47205.9349.302br.net', +'bs.serving-sys.com.47206.9349.302br.net', +'bs.serving-sys.com.47207.9349.302br.net', +'bs.serving-sys.com.47208.9349.302br.net', +'bs.serving-sys.com.47209.9349.302br.net', +'bs.serving-sys.com.47210.9349.302br.net', +'bs.serving-sys.com.47211.9349.302br.net', +'bs.serving-sys.com.47212.9349.302br.net', +'bs.serving-sys.com.47213.9349.302br.net', +'bs.serving-sys.com.47214.9349.302br.net', +'bs.serving-sys.com.47215.9349.302br.net', +'bs.serving-sys.com.47550.9340.302br.net', +'bs.serving-sys.com.47746.9354.302br.net.47770.9354.302br.net', +'bs.serving-sys.com.47770.9354.302br.net', +'bs.serving-sys.com.47814.9355.302br.net', +'bs.serving-sys.com.47816.9355.302br.net', +'bs.serving-sys.com.47818.9355.302br.net', +'bs.serving-sys.com.47861.9352.302br.net', +'bs.serving-sys.com.47862.9352.302br.net', +'bs.serving-sys.com.47863.9352.302br.net', +'bs.serving-sys.com.47864.9352.302br.net', +'bs.serving-sys.com.47865.9352.302br.net', +'bs.serving-sys.com.47866.9352.302br.net', +'bs.serving-sys.com.47909.9354.302br.net', +'bs.serving-sys.com.47910.9354.302br.net', +'bs.serving-sys.com.47911.9354.302br.net', +'bs.serving-sys.com.47912.9354.302br.net', +'bs.serving-sys.com.47913.9354.302br.net', +'bs.serving-sys.com.47914.9354.302br.net', +'bs.serving-sys.com.49272.9352.302br.net', +'bs.serving-sys.com.49273.9352.302br.net', +'bs.serving-sys.com.49274.9352.302br.net', +'bs.serving-sys.com.49275.9352.302br.net', +'bs.serving-sys.com.49277.9352.302br.net', +'bs.serving-sys.com.49279.9352.302br.net', +'bs.serving-sys.com.49281.9352.302br.net', +'bs.serving-sys.com.49283.9352.302br.net', +'bs.serving-sys.com.49285.9352.302br.net', +'bs.serving-sys.com.49287.9352.302br.net', +'bs.serving-sys.com.49293.9352.302br.net', +'bs.serving-sys.com.49295.9352.302br.net', +'bs.serving-sys.com.49297.9352.302br.net', +'bs.serving-sys.com.49298.9352.302br.net', +'bs.serving-sys.com.49299.9352.302br.net', +'bs.serving-sys.com.49300.9352.302br.net', +'bs.serving-sys.com.49301.9352.302br.net', +'bs.serving-sys.com.49302.9352.302br.net', +'bs.serving-sys.com.49303.9352.302br.net', +'bs.serving-sys.com.49304.9352.302br.net', +'bs.serving-sys.com.49305.9352.302br.net', +'bs.serving-sys.com.49307.9352.302br.net', +'bs.serving-sys.com.49309.9352.302br.net', +'bs.serving-sys.com.49311.9352.302br.net', +'bs.serving-sys.com.49312.9352.302br.net', +'bs.serving-sys.com.49313.9352.302br.net', +'bs.serving-sys.com.49314.9355.302br.net', +'bs.serving-sys.com.49315.9355.302br.net', +'bs.serving-sys.com.49325.9355.302br.net', +'bs.serving-sys.com.49343.9355.302br.net', +'bs.serving-sys.com.49345.9355.302br.net', +'bs.serving-sys.com.49347.9355.302br.net', +'bs.serving-sys.com.49349.9355.302br.net', +'bs.serving-sys.com.49351.9355.302br.net', +'bs.serving-sys.com.49353.9355.302br.net', +'bs.serving-sys.com.49359.9355.302br.net', +'bs.serving-sys.com.49360.9354.302br.net', +'bs.serving-sys.com.49361.9354.302br.net', +'bs.serving-sys.com.49363.9354.302br.net', +'bs.serving-sys.com.49365.9354.302br.net', +'bs.serving-sys.com.49366.9354.302br.net', +'bs.serving-sys.com.49367.9354.302br.net', +'bs.serving-sys.com.49369.9354.302br.net', +'bs.serving-sys.com.49371.9354.302br.net', +'bs.serving-sys.com.49373.9354.302br.net', +'bs.serving-sys.com.49379.9354.302br.net', +'bs.serving-sys.com.49381.9354.302br.net', +'bs.serving-sys.com.49383.9354.302br.net', +'bs.serving-sys.com.49384.9354.302br.net', +'bs.serving-sys.com.49385.9354.302br.net', +'bs.serving-sys.com.49386.9354.302br.net', +'bs.serving-sys.com.49387.9354.302br.net', +'bs.serving-sys.com.49388.9354.302br.net', +'bs.serving-sys.com.49389.9354.302br.net', +'bs.serving-sys.com.49390.9354.302br.net', +'bs.serving-sys.com.49391.9354.302br.net', +'bs.serving-sys.com.49392.9354.302br.net', +'bs.serving-sys.com.49393.9354.302br.net', +'bs.serving-sys.com.49395.9354.302br.net', +'bs.serving-sys.com.49397.9354.302br.net', +'bs.serving-sys.com.49399.9354.302br.net', +'bs.serving-sys.com.49401.9356.302br.net', +'bs.serving-sys.com.49403.9356.302br.net', +'bs.serving-sys.com.49405.9356.302br.net', +'bs.serving-sys.com.49406.9356.302br.net', +'bs.serving-sys.com.49407.9356.302br.net', +'bs.serving-sys.com.49409.9356.302br.net', +'bs.serving-sys.com.49411.9356.302br.net', +'bs.serving-sys.com.49413.9356.302br.net', +'bs.serving-sys.com.49415.9356.302br.net', +'bs.serving-sys.com.49417.9356.302br.net', +'bs.serving-sys.com.49434.9354.302br.net', +'bs.serving-sys.com.49435.9354.302br.net', +'bs.serving-sys.com.49436.9352.302br.net', +'bs.serving-sys.com.49437.9352.302br.net', +'bs.serving-sys.com.49462.9354.302br.net', +'bs.serving-sys.com.49463.9354.302br.net', +'bs.serving-sys.com.49464.9354.302br.net', +'bs.serving-sys.com.49465.9354.302br.net', +'bs.serving-sys.com.49466.9354.302br.net', +'bs.serving-sys.com.49467.9354.302br.net', +'bs.serving-sys.com.49731.9355.302br.net', +'bs.serving-sys.com.49732.9355.302br.net', +'bs.serving-sys.com.49733.9354.302br.net', +'bs.serving-sys.com.49734.9354.302br.net', +'bs.serving-sys.com.49735.9352.302br.net', +'bs.serving-sys.com.49736.9352.302br.net', +'bs.serving-sys.com.55649.9244.302br.net', +'bs.serving-sys.com.55650.9244.302br.net', +'bs.serving-sys.com.55651.9244.302br.net', +'bs.serving-sys.com.55652.9244.302br.net', +'bs.serving-sys.com.55653.9244.302br.net', +'bs.serving-sys.com.55654.9244.302br.net', +'bs.serving-sys.com.55656.9244.302br.net', +'bs.serving-sys.com.55884.9244.302br.net', +'bs.serving-sys.com.55885.9244.302br.net', +'bs.serving-sys.com.55886.9244.302br.net', +'bs.serving-sys.com.55887.9244.302br.net', +'bs.serving-sys.com.55888.9244.302br.net', +'bs.serving-sys.com.55889.9244.302br.net', +'bs.serving-sys.com.55891.9244.302br.net', +'bs.serving-sys.com.55900.9244.302br.net', +'bs.serving-sys.com.55901.9244.302br.net', +'bs.serving-sys.com.55902.9244.302br.net', +'bs.serving-sys.com.55903.9244.302br.net', +'bs.serving-sys.com.55904.9244.302br.net', +'bs.serving-sys.com.55905.9244.302br.net', +'bs.serving-sys.com.55907.9244.302br.net', +'bs.serving-sys.com.56812.9349.302br.net', +'bs.serving-sys.com.56813.9349.302br.net', +'bs.serving-sys.com.56814.9349.302br.net', +'bs.serving-sys.com.56815.9349.302br.net', +'bs.serving-sys.com.56816.9349.302br.net', +'bs.serving-sys.com.56817.9349.302br.net', +'bs.serving-sys.com.56818.9349.302br.net', +'bs.serving-sys.com.56819.9349.302br.net', +'bs.serving-sys.com.56820.9349.302br.net', +'bs.serving-sys.com.56821.9349.302br.net', +'bs.serving-sys.com.56822.9349.302br.net', +'bs.serving-sys.com.56823.9349.302br.net', +'bs.serving-sys.com.56824.9349.302br.net', +'bs.serving-sys.com.56825.9349.302br.net', +'bs.serving-sys.com.56826.9349.302br.net', +'bs.serving-sys.com.56827.9349.302br.net', +'bs.serving-sys.com.56828.9349.302br.net', +'bs.serving-sys.com.56829.9349.302br.net', +'bs.serving-sys.com.56830.9349.302br.net', +'bs.serving-sys.com.56831.9349.302br.net', +'bs.serving-sys.com.56832.9349.302br.net', +'bs.serving-sys.com.56833.9349.302br.net', +'bs.serving-sys.com.56838.9349.302br.net', +'bs.serving-sys.com.56839.9349.302br.net', +'bs.serving-sys.com.56844.9349.302br.net', +'bs.serving-sys.com.56845.9349.302br.net', +'bs.serving-sys.com.56846.9349.302br.net', +'bs.serving-sys.com.56847.9349.302br.net', +'bs.serving-sys.com.56848.9349.302br.net', +'bs.serving-sys.com.56849.9349.302br.net', +'bs.serving-sys.com.56850.9349.302br.net', +'bs.serving-sys.com.56851.9349.302br.net', +'bs.serving-sys.com.56852.9349.302br.net', +'bs.serving-sys.com.56853.9349.302br.net', +'bs.serving-sys.com.56854.9349.302br.net', +'bs.serving-sys.com.56855.9349.302br.net', +'bs.serving-sys.com.56872.9349.302br.net', +'bs.serving-sys.com.56873.9349.302br.net', +'bs.serving-sys.com.56874.9349.302br.net', +'bs.serving-sys.com.56875.9349.302br.net', +'bs.serving-sys.com.56876.9349.302br.net', +'bs.serving-sys.com.56877.9349.302br.net', +'bs.serving-sys.com.56879.9349.302br.net', +'bs.serving-sys.com.56883.9349.302br.net', +'bs.serving-sys.com.56884.9349.302br.net', +'bs.serving-sys.com.56885.9349.302br.net', +'bs.serving-sys.com.56886.9349.302br.net', +'bs.serving-sys.com.56887.9349.302br.net', +'bs.serving-sys.com.56889.9349.302br.net', +'bs.serving-sys.com.56890.9400.302br.net', +'bs.serving-sys.com.56891.9400.302br.net', +'bs.serving-sys.com.56892.9400.302br.net', +'bs.serving-sys.com.56893.9400.302br.net', +'bs.serving-sys.com.56894.9400.302br.net', +'bs.serving-sys.com.56895.9400.302br.net', +'bs.serving-sys.com.57841.9414.302br.net', +'bs.serving-sys.com.57842.9414.302br.net', +'bs.serving-sys.com.57843.9414.302br.net', +'bs.serving-sys.com.57844.9414.302br.net', +'bs.serving-sys.com.57845.9414.302br.net', +'bs.serving-sys.com.57846.9414.302br.net', +'bs.serving-sys.com.57847.9414.302br.net', +'bs.serving-sys.com.57848.9414.302br.net', +'bs.serving-sys.com.57849.9414.302br.net', +'bs.serving-sys.com.57850.9414.302br.net', +'bs.serving-sys.com.57851.9414.302br.net', +'bs.serving-sys.com.57852.9414.302br.net', +'bs.serving-sys.com.57853.9414.302br.net', +'bs.serving-sys.com.57854.9414.302br.net', +'bs.serving-sys.com.57855.9414.302br.net', +'bs.serving-sys.com.57856.9414.302br.net', +'bs.serving-sys.com.57857.9414.302br.net', +'bs.serving-sys.com.57858.9414.302br.net', +'bs.serving-sys.com.57859.9414.302br.net', +'bs.serving-sys.com.57860.9414.302br.net', +'bs.serving-sys.com.57861.9414.302br.net', +'bs.serving-sys.com.57862.9414.302br.net', +'bs.serving-sys.com.57863.9414.302br.net', +'bs.serving-sys.com.57864.9414.302br.net', +'bs.serving-sys.com.57865.9414.302br.net', +'bs.serving-sys.com.57866.9414.302br.net', +'bs.serving-sys.com.57867.9414.302br.net', +'bs.serving-sys.com.57868.9414.302br.net', +'bs.serving-sys.com.57869.9414.302br.net', +'bs.serving-sys.com.57870.9414.302br.net', +'bs.serving-sys.com.57871.9414.302br.net', +'bs.serving-sys.com.57872.9414.302br.net', +'bs.serving-sys.com.57873.9414.302br.net', +'bs.serving-sys.com.57874.9414.302br.net', +'bs.serving-sys.com.57875.9414.302br.net', +'bs.serving-sys.com.57876.9414.302br.net', +'bs.serving-sys.com.57878.9414.302br.net', +'bs.serving-sys.com.57880.9414.302br.net', +'bs.serving-sys.com.57882.9414.302br.net', +'bs.serving-sys.com.57884.9414.302br.net', +'bs.serving-sys.com.57886.9414.302br.net', +'bs.serving-sys.com.57888.9414.302br.net', +'bs.serving-sys.com.57889.9414.302br.net', +'bs.serving-sys.com.57890.9414.302br.net', +'bs.serving-sys.com.57892.9414.302br.net', +'bs.serving-sys.com.57893.9414.302br.net', +'bs.serving-sys.com.57894.9414.302br.net', +'bs.serving-sys.com.57895.9414.302br.net', +'bs.serving-sys.com.57896.9414.302br.net', +'bs.serving-sys.com.57897.9414.302br.net', +'bs.serving-sys.com.57898.9414.302br.net', +'bs.serving-sys.com.57899.9414.302br.net', +'bs.serving-sys.com.57900.9414.302br.net', +'bs.serving-sys.com.60478.9349.302br.net', +'bs.serving-sys.com.60479.9349.302br.net', +'bs.serving-sys.com.71531.9356.302br.net', +'bs.serving-sys.com.71533.9356.302br.net', +'bs.serving-sys.com.71534.9356.302br.net', +'bs.serving-sys.com.71535.9356.302br.net', +'bs.serving-sys.com.71537.9356.302br.net', +'bs.serving-sys.com.71538.9356.302br.net', +'bs.serving-sys.com.71539.9356.302br.net', +'bs.serving-sys.com.71540.9356.302br.net', +'bs.serving-sys.com.71541.9356.302br.net', +'bs.serving-sys.com.71548.9356.302br.net', +'bs.serving-sys.com.71549.9356.302br.net', +'bs.serving-sys.com.71550.9356.302br.net', +'bs.serving-sys.com.71551.9356.302br.net', +'bs.serving-sys.com.71552.9356.302br.net', +'bs.serving-sys.com.71553.9356.302br.net', +'bs.serving-sys.com.71554.9356.302br.net', +'bs.serving-sys.com.71555.9356.302br.net', +'bs.serving-sys.com.71556.9356.302br.net', +'bs.serving-sys.com.71557.9356.302br.net', +'bs.serving-sys.com.71558.9356.302br.net', +'bs.serving-sys.com.71559.9356.302br.net', +'bs.serving-sys.com.71560.9356.302br.net', +'bs.serving-sys.com.71561.9356.302br.net', +'bs.serving-sys.com.71562.9356.302br.net', +'bs.serving-sys.com.71563.9356.302br.net', +'bs.serving-sys.com.71564.9356.302br.net', +'bs.serving-sys.com.71565.9356.302br.net', +'bs.serving-sys.com.71567.9356.302br.net', +'bs.serving-sys.com.71575.9356.302br.net', +'bs.serving-sys.com.71576.9356.302br.net', +'bs.serving-sys.com.71577.9356.302br.net', +'bs.serving-sys.com.71578.9356.302br.net', +'bs.serving-sys.com.71579.9356.302br.net', +'bs.serving-sys.com.71581.9356.302br.net', +'bs.serving-sys.com.71582.9356.302br.net', +'bs.serving-sys.com.71583.9356.302br.net', +'bs.serving-sys.com.72249.9400.302br.net', +'bs.serving-sys.com.72250.9400.302br.net', +'bs.serving-sys.com.72251.9400.302br.net', +'bs.serving-sys.com.72252.9400.302br.net', +'bs.serving-sys.com.72253.9400.302br.net', +'bs.serving-sys.com.72255.9400.302br.net', +'bs.serving-sys.com.72257.9400.302br.net', +'bs.serving-sys.com.72259.9400.302br.net', +'bs.serving-sys.com.72261.9400.302br.net', +'bs.serving-sys.com.72263.9400.302br.net', +'bs.serving-sys.com.72264.9400.302br.net', +'bs.serving-sys.com.72265.9400.302br.net', +'bs.serving-sys.com.76235.9639.302br.net', +'bs.serving-sys.com.76236.9639.302br.net', +'bs.serving-sys.com.76237.9639.302br.net', +'bs.serving-sys.com.76238.9639.302br.net', +'bs.serving-sys.com.76239.9639.302br.net', +'bs.serving-sys.com.76240.9639.302br.net', +'bs.serving-sys.com.76243.9639.302br.net', +'bs.serving-sys.com.76244.9639.302br.net', +'bs.serving-sys.com.76245.9639.302br.net', +'bs.serving-sys.com.76246.9639.302br.net', +'bs.serving-sys.com.76247.9639.302br.net', +'bs.serving-sys.com.76248.9639.302br.net', +'bs.serving-sys.com.76249.9639.302br.net', +'bs.serving-sys.com.76250.9639.302br.net', +'bs.serving-sys.com.76251.9639.302br.net', +'bs.serving-sys.com.76252.9639.302br.net', +'bs.serving-sys.com.76253.9639.302br.net', +'bs.serving-sys.com.76254.9639.302br.net', +'bs.serving-sys.com.76255.9639.302br.net', +'bs.serving-sys.com.76256.9639.302br.net', +'bs.serving-sys.com.76257.9639.302br.net', +'bs.serving-sys.com.76258.9639.302br.net', +'bs.serving-sys.com.76259.9639.302br.net', +'bs.serving-sys.com.76260.9639.302br.net', +'bs.serving-sys.com.76261.9639.302br.net', +'bs.serving-sys.com.76262.9639.302br.net', +'bs.serving-sys.com.76263.9639.302br.net', +'bs.serving-sys.com.76264.9639.302br.net', +'bs.serving-sys.com.76265.9639.302br.net', +'bs.serving-sys.com.76266.9639.302br.net', +'bs.serving-sys.com.76267.9639.302br.net', +'bs.serving-sys.com.76268.9639.302br.net', +'bs.serving-sys.com.76269.9639.302br.net', +'bs.serving-sys.com.76270.9639.302br.net', +'bs.serving-sys.com.76271.9639.302br.net', +'bs.serving-sys.com.76272.9639.302br.net', +'bs.serving-sys.com.76273.9639.302br.net', +'bs.serving-sys.com.76274.9639.302br.net', +'bs.serving-sys.com.76275.9639.302br.net', +'bs.serving-sys.com.76276.9639.302br.net', +'bs.serving-sys.com.76277.9639.302br.net', +'bs.serving-sys.com.76278.9639.302br.net', +'bs.serving-sys.com.76279.9639.302br.net', +'bs.serving-sys.com.76280.9639.302br.net', +'bs.serving-sys.com.76281.9639.302br.net', +'bs.serving-sys.com.76282.9639.302br.net', +'bs.serving-sys.com.76283.9639.302br.net', +'bs.serving-sys.com.76284.9639.302br.net', +'bs.serving-sys.com.76285.9639.302br.net', +'bs.serving-sys.com.76286.9639.302br.net', +'bs.serving-sys.com.76288.9639.302br.net', +'bs.serving-sys.com.76290.9639.302br.net', +'bs.serving-sys.com.76291.9639.302br.net', +'bs.serving-sys.com.76292.9639.302br.net', +'bs.serving-sys.com.76293.9639.302br.net', +'bs.serving-sys.com.76294.9639.302br.net', +'bs.serving-sys.com.76296.9638.302br.net', +'bs.serving-sys.com.76298.9638.302br.net', +'bs.serving-sys.com.76300.9638.302br.net', +'bs.serving-sys.com.76302.9638.302br.net', +'bs.serving-sys.com.76304.9638.302br.net', +'bs.serving-sys.com.76306.9638.302br.net', +'bs.serving-sys.com.76308.9638.302br.net', +'bs.serving-sys.com.76310.9638.302br.net', +'bs.serving-sys.com.76312.9638.302br.net', +'bs.serving-sys.com.76314.9638.302br.net', +'bs.serving-sys.com.76316.9638.302br.net', +'bs.serving-sys.com.76318.9638.302br.net', +'bs.serving-sys.com.76320.9638.302br.net', +'bs.serving-sys.com.76322.9638.302br.net', +'bs.serving-sys.com.76324.9638.302br.net', +'bs.serving-sys.com.76326.9638.302br.net', +'bs.serving-sys.com.76328.9638.302br.net', +'bs.serving-sys.com.76330.9638.302br.net', +'bs.serving-sys.com.76332.9638.302br.net', +'bs.serving-sys.com.76334.9638.302br.net', +'bs.serving-sys.com.76336.9638.302br.net', +'bs.serving-sys.com.76338.9638.302br.net', +'bs.serving-sys.com.76340.9638.302br.net', +'bs.serving-sys.com.76342.9638.302br.net', +'bs.serving-sys.com.76344.9638.302br.net', +'bs.serving-sys.com.76346.9638.302br.net', +'bs.serving-sys.com.76348.9638.302br.net', +'bs.serving-sys.com.76350.9638.302br.net', +'bs.serving-sys.com.76352.9638.302br.net', +'bs.serving-sys.com.76354.9638.302br.net', +'bs.serving-sys.com.76356.9638.302br.net', +'bs.serving-sys.com.76358.9638.302br.net', +'bs.serving-sys.com.76360.9638.302br.net', +'bs.serving-sys.com.76362.9638.302br.net', +'bs.serving-sys.com.76364.9638.302br.net', +'bs.serving-sys.com.76366.9638.302br.net', +'bs.serving-sys.com.76368.9638.302br.net', +'bs.serving-sys.com.76370.9638.302br.net', +'bs.serving-sys.com.76372.9638.302br.net', +'bs.serving-sys.com.76374.9638.302br.net', +'bs.serving-sys.com.76376.9638.302br.net', +'bs.serving-sys.com.76378.9638.302br.net', +'bs.serving-sys.com.76380.9638.302br.net', +'bs.serving-sys.com.76382.9638.302br.net', +'bs.serving-sys.com.76384.9638.302br.net', +'bs.serving-sys.com.76386.9638.302br.net', +'bs.serving-sys.com.76388.9638.302br.net', +'bs.serving-sys.com.76390.9638.302br.net', +'bs.serving-sys.com.76392.9638.302br.net', +'bs.serving-sys.com.76396.9638.302br.net', +'bs.serving-sys.com.76398.9638.302br.net', +'bs.serving-sys.com.76400.9638.302br.net', +'bs.serving-sys.com.76402.9638.302br.net', +'bs.serving-sys.com.76404.9638.302br.net', +'bs.serving-sys.com.76406.9638.302br.net', +'bs.serving-sys.com.76408.9638.302br.net', +'bs.serving-sys.com.76410.9638.302br.net', +'bs.serving-sys.com.76412.9638.302br.net', +'bs.serving-sys.com.76414.9638.302br.net', +'bs.serving-sys.com.76511.9643.302br.net', +'bs.serving-sys.com.76512.9643.302br.net', +'bs.serving-sys.com.76513.9643.302br.net', +'bs.serving-sys.com.76514.9643.302br.net', +'bs.serving-sys.com.76515.9643.302br.net', +'bs.serving-sys.com.76516.9643.302br.net', +'bs.serving-sys.com.76517.9643.302br.net', +'bs.serving-sys.com.76518.9643.302br.net', +'bs.serving-sys.com.76519.9643.302br.net', +'bs.serving-sys.com.76520.9643.302br.net', +'bs.serving-sys.com.76521.9643.302br.net', +'bs.serving-sys.com.76522.9643.302br.net', +'bs.serving-sys.com.76523.9643.302br.net', +'bs.serving-sys.com.76524.9643.302br.net', +'bs.serving-sys.com.76525.9643.302br.net', +'bs.serving-sys.com.76526.9643.302br.net', +'bs.serving-sys.com.76528.9643.302br.net', +'bs.serving-sys.com.76826.9639.302br.net', +'bs.serving-sys.com.77422.9656.302br.net', +'bs.serving-sys.com.77423.9656.302br.net', +'bs.serving-sys.com.77424.9656.302br.net', +'bs.serving-sys.com.77425.9656.302br.net', +'bs.serving-sys.com.77426.9656.302br.net', +'bs.serving-sys.com.77427.9656.302br.net', +'bs.serving-sys.com.77428.9656.302br.net', +'bs.serving-sys.com.77429.9656.302br.net', +'bs.serving-sys.com.77430.9656.302br.net', +'bs.serving-sys.com.77431.9656.302br.net', +'bs.serving-sys.com.77432.9656.302br.net', +'bs.serving-sys.com.77433.9656.302br.net', +'bs.serving-sys.com.77437.9657.302br.net', +'bs.serving-sys.com.77523.9639.302br.net', +'bs.serving-sys.com.77524.9639.302br.net', +'bs.serving-sys.com.77525.9639.302br.net', +'bs.serving-sys.com.77526.9639.302br.net', +'bs.serving-sys.com.77562.9244.302br.net', +'bs.serving-sys.com.77563.9244.302br.net', +'bs.serving-sys.com.77564.9244.302br.net', +'bs.serving-sys.com.77565.9244.302br.net', +'bs.serving-sys.com.77566.9244.302br.net', +'bs.serving-sys.com.77567.9244.302br.net', +'bs.serving-sys.com.77569.9244.302br.net', +'bs.serving-sys.com.77574.9244.302br.net', +'bs.serving-sys.com.77575.9244.302br.net', +'bs.serving-sys.com.77576.9244.302br.net', +'bs.serving-sys.com.77577.9244.302br.net', +'bs.serving-sys.com.77578.9244.302br.net', +'bs.serving-sys.com.77579.9244.302br.net', +'bs.serving-sys.com.78482.9639.302br.net', +'bs.serving-sys.com.78483.9639.302br.net', +'bs.serving-sys.com.78484.9639.302br.net', +'bs.serving-sys.com.78485.9639.302br.net', +'bs.serving-sys.com.78486.9639.302br.net', +'bs.serving-sys.com.78487.9639.302br.net', +'bs.serving-sys.com.78488.9639.302br.net', +'bs.serving-sys.com.78489.9639.302br.net', +'bs.serving-sys.com.78491.9638.302br.net', +'bs.serving-sys.com.78493.9638.302br.net', +'bs.serving-sys.com.78495.9638.302br.net', +'bs.serving-sys.com.78497.9638.302br.net', +'bs.serving-sys.com.78499.9655.302br.net', +'bs.serving-sys.com.78501.9655.302br.net', +'bs.serving-sys.com.78503.9655.302br.net', +'bs.serving-sys.com.78505.9655.302br.net', +'bs.yandex.ru', +'bs50tds.com', +'bsaig.voluumtrk.com', +'bsch.serving-sys.com', +'bshha.voluumtrk.com', +'bsitm3.com', +'bsrv.adohana.com', +'bt.rcs.it', +'bt.tt.omtrdc.net', +'btdirectnav.com', +'bte5z.voluumtrk.com', +'btg.mtvnservices.com', +'btnativedirect.com', +'btnativenav.com', +'btprmnav.com', +'btr.domywife.com', +'btrace.qq.com', +'btsportandroid.2cnt.net', +'btsportdotcom.2cnt.net', +'btsportios.2cnt.net', +'btstats.devtribu.fr', +'bttrack.com', +'btttag.com', +'btvkojstaenioid.review', +'btw.ero-advertising.com', +'btwwu.voluumtrk.com', +'btz9j.voluumtrk.com', +'bucataras.2cnt.net', +'buchch02.webtrekk.net', +'buchde02.webtrekk.net', +'bucketsofbanners.com', +'bucksense.go2cloud.org', +'budgetedbauer.com', +'budsinc.com', +'bugsense.appspot.com', +'bugsense.com', +'bugstest.adition.com', +'builder.com', +'builder.extensionfactory.com', +'buildtraffic.com', +'buildtrafficx.com', +'builfico.de', +'bujrc.voluumtrk.com', +'bukalapak-com.b.appier.net', +'buket7.justclick.ru', +'buldog-stats.com', +'bullseye-media.net', +'bullseye-network.com', +'bullseye-network.net', +'bumerang.hurriyet.com.tr', +'bunchofads.com', +'bungeysswkhiug.download', +'bunitd.com', +'bunnyaqsuze.download', +'bunte.de.intellitxt.com', +'buongiorno.go2cloud.org', +'burbledchxtg.download', +'burns.adtech.fr', +'burrowmkoylvrnd.download', +'burweednxakod.download', +'business.opera.com', +'business.realtracker.com', +'business.sharedcount.com', +'businessweekpoc.112.2o7.net', +'buttcandy.com', +'button.clickability.com', +'buxflow.com', +'buy.com', +'buy.thetrackr.com', +'buy2.go2cloud.org', +'buyhitscheap.com', +'buystream.com', +'buysub.com', +'buytraf.ru', +'buzz.igg.com', +'buzzadnetwork.com', +'buzzfeed.d1.sc.omtrdc.net', +'buzzreferrals.go2cloud.org', +'bvalit.justclick.ru', +'bvgszzfifing.review', +'bvoau.voluumtrk.com', +'bvsrv.adk2x.com', +'bwhcj.voluumtrk.com', +'bwin90.com', +'bwlwtdevilings.review', +'bwp.download.com', +'bwp.theinsider.com.com', +'bwzqltlcfprimacies.review', +'bx.clickmedia.ro', +'bxsql.clickmedia.ro', +'bxtop.voluumtrk.com', +'by.advertising.com', +'bytecenter.com', +'byxng.voluumtrk.com', +'bzpibgazalternant.review', +'bzpkv.voluumtrk.com', +'c-col.com', +'c-evt.moatads.com', +'c-on-text.com', +'c.9388.com', +'c.a2g-secure.com', +'c.actiondesk.com', +'c.ad.ru', +'c.ad6media.fr', +'c.admaster.com.cn', +'c.admob.com', +'c.ads.com', +'c.afftrx.com', +'c.algovid.com', +'c.am11.ru', +'c.am15.net', +'c.amazon-adsystem.com', +'c.aol.com', +'c.apple.com', +'c.atdmt.com', +'c.ato.mx', +'c.betrad.com', +'c.bigmir.net', +'c.bing.com', +'c.bizjournals.com', +'c.c.appier.net', +'c.casalemedia.com', +'c.cblevt.com', +'c.chango.com', +'c.chartboost.com', +'c.cldlr.com', +'c.cnzz.com', +'c.cocacola.co.jp', +'c.computerbild.de', +'c.coolshader.com', +'c.cpa6.ru', +'c.cpl2.ru', +'c.domob.cn', +'c.gdt.qq.com', +'c.go-mpulse.net', +'c.greystripe.com', +'c.gumgum.com', +'c.hit.ua', +'c.kakaku.com', +'c.l.qq.com', +'c.la1w1.salesforceliveagent.com', +'c.live.com', +'c.medialytics.com', +'c.microsoft.com', +'c.mobhubrdrms.com', +'c.mobpartner.mobi', +'c.mscimg.com', +'c.msn.com', +'c.msnbc.com', +'c.munmedtrflow.com', +'c.netu.tv', +'c.newsinc.com', +'c.ns.inbox.lv', +'c.orange.fr', +'c.p-advg.com', +'c.pebblemedia.be', +'c.perlentaucher.de', +'c.popunderz.com', +'c.rhapsody.com', +'c.rmgserving.com', +'c.sahcdn.com', +'c.securepaths.com', +'c.smartclick.net', +'c.spiegel.de', +'c.statcounter.com', +'c.t4ft.de', +'c.teromil.com', +'c.thanksearch.com', +'c.us1.dyntrk.com', +'c.viewsecure.net', +'c.vindicosuite.com', +'c.vrvm.com', +'c.vserv.mobi', +'c.w.inmobi.com', +'c.webengage.com', +'c.woopic.com', +'c.wrating.com', +'c.x.oanda.com', +'c.xbox.com', +'c.zeroredirect1.com', +'c01.brickoffers.com', +'c02qds.2cnt.net', +'c0u8w.voluumtrk.com', +'c1.adform.net', +'c1.amazingcounters.com', +'c1.gostats.com', +'c1.gostats.de', +'c1.gostats.ir', +'c1.gostats.pl', +'c1.gostats.ro', +'c1.gostats.ru', +'c1.gostats.vn', +'c1.microsoft.com', +'c1.nowlinux.com', +'c1.onedmp.com', +'c1.outster.com', +'c1.popads.net', +'c1.rfihub.net', +'c1.smartclick.net', +'c1.statcounter.com', +'c1.xxxcounter.com', +'c1.zedo.com', +'c10.statcounter.com', +'c11.statcounter.com', +'c12.statcounter.com', +'c124830.conv.btrll.com', +'c13.statcounter.com', +'c13.zedo.com', +'c14.statcounter.com', +'c14.zedo.com', +'c15.statcounter.com', +'c16.statcounter.com', +'c17.statcounter.com', +'c18.statcounter.com', +'c2.amazingcounters.com', +'c2.campartner.com', +'c2.clickprotects.com', +'c2.gostats.com', +'c2.gostats.de', +'c2.gostats.ir', +'c2.gostats.pl', +'c2.gostats.ro', +'c2.gostats.ru', +'c2.gostats.vn', +'c2.outster.com', +'c2.popads.net', +'c2.rfihub.net', +'c2.statcounter.com', +'c2.taboola.com', +'c2.xxxcounter.com', +'c2.zedo.com', +'c22i.categoria.hpg.com.br', +'c28.statcounter.com', +'c2mtrack01.track.c2m00b.net', +'c2path.com', +'c2x4s.voluumtrk.com', +'c3.amazingcounters.com', +'c3.gostats.com', +'c3.gostats.de', +'c3.gostats.pl', +'c3.gostats.ro', +'c3.gostats.ru', +'c3.gostats.vn', +'c3.outster.com', +'c3.statcounter.com', +'c3.xxxcounter.com', +'c3.zedo.com', +'c32.statcounter.com', +'c3ad7.voluumtrk.com', +'c3onlinemarketing.com', +'c4.amazingcounters.com', +'c4.gostats.com', +'c4.gostats.de', +'c4.gostats.ir', +'c4.gostats.pl', +'c4.gostats.ro', +'c4.gostats.vn', +'c4.statcounter.com', +'c4.zedo.com', +'c41.statcounter.com', +'c44.statcounter.com', +'c479636.r36.cf2.rackcdn.com', +'c479842.r42.cf2.rackcdn.com', +'c4android.2cnt.net', +'c4androidtest.2cnt.net', +'c4dk1.voluumtrk.com', +'c4dotcom.2cnt.net', +'c4dotcomtest.2cnt.net', +'c4fbb.voluumtrk.com', +'c4ios.2cnt.net', +'c4iostest.2cnt.net', +'c4tracking01.com', +'c5.amazingcounters.com', +'c5.gostats.com', +'c5.gostats.de', +'c5.gostats.ir', +'c5.gostats.pl', +'c5.gostats.ro', +'c5.gostats.ru', +'c5.gostats.vn', +'c5.statcounter.com', +'c5.zedo.com', +'c52c-10ac-3ffc-3a18.reporo.net', +'c5android.2cnt.net', +'c5androidtest.2cnt.net', +'c5dotcom.2cnt.net', +'c5dotcomtest.2cnt.net', +'c5ios.2cnt.net', +'c5iostest.2cnt.net', +'c5k.site', +'c5vup.voluumtrk.com', +'c6.amazingcounters.com', +'c6.statcounter.com', +'c6.zedo.com', +'c60.smaato.net', +'c7.amazingcounters.com', +'c7.statcounter.com', +'c7.zedo.com', +'c74vr.voluumtrk.com', +'c753738.r38.cf2.rackcdn.com', +'c8.amazingcounters.com', +'c8.net.ua', +'c8.statcounter.com', +'c8.zedo.com', +'c829aeaf4090c1289783-9ad4110c8011547ec25e241b917b5aab.r35.cf2.rackcdn.com', +'c8j4u.voluumtrk.com', +'c9.amazingcounters.com', +'c97a-b910-eb5b-b0b8.reporo.net', +'c9k4p.voluumtrk.com', +'ca.2.cqcounter.com', +'ca.akamai.startappservice.com', +'ca.clickinc.com', +'ca.cqcounter.com', +'ca.livestat.com', +'ca305656.luckyorange.com', +'caartoonnetwork.com', +'caasco.go2cloud.org', +'cabernetdzzafeak.download', +'cabgdhscnubbier.review', +'cache-ssl.celtra.com', +'cache.addthiscdn.com', +'cache.adfeedstrk.com', +'cache.adviva.net', +'cache.betweendigital.com', +'cache.brandreachsys.com', +'cache.btrll.com', +'cache.celtra.com', +'cache.enic.cc', +'cache.imagehost123.com', +'cache.microad.jp', +'cache.osttirol-online.at', +'cache.scbih.com', +'cache.ssend.microad.jp', +'cache.unicast.com.edgesuite.net', +'cache.usabilla.com', +'cache.worldfriends.tv', +'cache2.delvenetworks.com', +'cachebanners.toteme.com', +'cade.clmbtech.com', +'cadreon.s3.amazonaws.com', +'cads.ch', +'cadvv.heraldm.com', +'cadvv.koreaherald.com', +'cafarducqhonk.download', +'cagilycgkwt.download', +'calendar.adition.com', +'calendar.apptornado.com', +'calendar.chartboost.com', +'calendar.kissmetrics.com', +'calendar.performancerevenues.com', +'calendar.zedo.com', +'calfxvpqle.download', +'call-tracking.co.uk', +'callfire.com', +'callloop.com', +'calltoadagency.go2affise.com', +'cameraboys.com', +'camisekwqhbehs.download', +'campaign-tapad.s3.amazonaws.com', +'campaignheroes.go2cloud.org', +'campaignmonitor.com', +'campaigns.f2.com.au', +'campaigns.rioseo.com', +'campaigntracking01.com', +'campf.voluumtrk.com', +'camsiteonline.wiredcircular.com', +'camz.tintel.nl', +'can.you.shut.the.fuck.up.at.bnex.com', +'candidclicks.com', +'candlingbploxcq.download', +'candyadz.go2affise.com', +'cantatricekrwutrlj.download', +'cantedmxcndjhm.download', +'canvas-advert.ru', +'canvaspl-a.akamaihd.net', +'canwest.112.207.net', +'canwest.112.2o7.net', +'canwestdose.112.2o7.net', +'capquestglobal.com', +'caprewards.go2cloud.org', +'capsizalsoxdxke.download', +'captivau.go2affise.com', +'capture.trackjs.com', +'carambo.la', +'carbonads.com', +'careers.112.2o7.net', +'carhopyewiqzlmz.download', +'carleton.com', +'carmunity.de', +'carrierapptraffic.go2affise.com', +'cars.ign.us.intellitxt.com', +'cartonetwork.com', +'cartoonnrtwork.com', +'cas.criteo.com', +'cas.criteo.com.68099.9533.302br.net', +'cas.pxl.ace.advertising.com', +'casalemedia.com', +'casalmedia.com', +'cascade.madmimi.com', +'case.clmbtech.com', +'cash.atkcash.com', +'cash.femjoy.com', +'cash.neweramediaworks.com', +'cash4banner.de', +'cash4files.com', +'cash4popup.de', +'cash4views.de', +'cash4webmaster.de', +'cashadsllc.go2cloud.org', +'cashassociate.com', +'cashcashpinoy-com.b.appier.net', +'cashcount.com', +'cashcount.de', +'cashcrate.com', +'cashengines.com', +'cashfiesta.com', +'cashforclicks.com', +'cashforsurveys.com', +'cashforsurveys.net', +'cashlayer.com', +'cashmylinks.com', +'cashpartner.com', +'cashpartner.net', +'cashprom.ru', +'cashspace.com', +'cashtrafic.com', +'cashuniversity.go2cloud.org', +'casinogames.com', +'casinorewards.com', +'casinotraffic.com', +'casinotreasure.com', +'casof.voluumtrk.com', +'cast.ra.icast.cn', +'cat.fr.eu.criteo.com', +'cata.ero-advertising.com', +'catalogizeagvztfrmt.download', +'catharon.com', +'catheterpokfwbwp.download', +'catoonetwork.com', +'cavalcadesvmrkjv.download', +'cb.adprofile.net', +'cb.amazingcounters.com', +'cb1.counterbot.com', +'cbanners.virtuagirlhd.com', +'cbaol.112.2o7.net', +'cbeckads.com', +'cben1.net', +'cbgoto.com', +'cbird.sextracker.com', +'cbird4.sextracker.com', +'cbird6.sextracker.com', +'cbjs.baidu.com', +'cblevt.com', +'cbm02.webtrekk.net', +'cbmsn.112.2o7.net', +'cbn.tbn.ru', +'cbs.wondershare.com', +'cbsi.demdex.net', +'cbsmarket.com', +'cbsncaasports.112.2o7.net', +'cbsnfl.112.2o7.net', +'cbspgatour.112.2o7.net', +'cbsspln.112.2o7.net', +'cbvtest.2cnt.net', +'cbx.net', +'cc.amazingcounters.com', +'cc.chango.com', +'cc.connextra.com', +'cc.zeit.de', +'cc03-41cf-c2ea-3a84.reporo.net', +'cc54-ed21-fc7f-e519.reporo.net', +'ccamholdings.go2cloud.org', +'ccas.clearchannel.com', +'ccc01.opinionlab.com', +'cclfx.voluumtrk.com', +'cclrn.voluumtrk.com', +'ccn2n.voluumtrk.com', +'ccran.com', +'ccs.infospace.com', +'ccstatic.highwebmedia.com', +'cd-ladsp-com.s3.amazonaws.com', +'cdate.122.2o7.net', +'cdlqzpenearer.review', +'cdmagurus.us.intellitxt.com', +'cdn-0.pics.dvdcdn.com', +'cdn-akamai.mookie1.com', +'cdn-ci34.actonsoftware.com', +'cdn-gl.imrworldwide.com', +'cdn-highwinds.unityads.unity3d.com', +'cdn-i.dmdentertainment.com', +'cdn-tags.mmondi.com', +'cdn-www.madblast.com', +'cdn-wx.rainbowtgx.com', +'cdn.2app.lk', +'cdn.2xbpub.com', +'cdn.ad-maven.com', +'cdn.ad.maist.jp', +'cdn.adbrau.com', +'cdn.addnow.com', +'cdn.adengine.org', +'cdn.adfoc.us', +'cdn.adikteev.com', +'cdn.adk2.com', +'cdn.adkreator.com', +'cdn.adnxs.com', +'cdn.adnxs.com.44946.9340.302br.net', +'cdn.adonads.com', +'cdn.adorikacontentportal.com', +'cdn.adplxmd.com', +'cdn.adrolays.de', +'cdn.adrta.com', +'cdn.adscpm.net', +'cdn.adshexa.com', +'cdn.adspirit.de', +'cdn.adsrvmedia.net', +'cdn.adultforce.com', +'cdn.advanseads.com', +'cdn.adworkmedia.com', +'cdn.allegedmedia.com', +'cdn.ap.bittorrent.com', +'cdn.applifier.com', +'cdn.apptv.com', +'cdn.assets.craveonline.com', +'cdn.assets.gorillanation.com', +'cdn.at.atwola.com', +'cdn.badoink.com', +'cdn.behavioralengine.com', +'cdn.bidvertiser.com', +'cdn.boomtrain.com', +'cdn.brcdn.com', +'cdn.broadstreetads.com', +'cdn.bttrack.com', +'cdn.buysellads.com', +'cdn.c.try9.com', +'cdn.callrail.com', +'cdn.capturly.com', +'cdn.cdnco.us', +'cdn.cdncomputer.com', +'cdn.cdntraffic.com', +'cdn.celtra.com', +'cdn.chargeplatform.com', +'cdn.chuknu.sokrati.com', +'cdn.clickfuse.com', +'cdn.clicktale.net', +'cdn.cms.neatcontent.com', +'cdn.complexmedianetwork.com', +'cdn.connatix.com', +'cdn.contentadserver.com', +'cdn.cpiera.com', +'cdn.cpmstar.com', +'cdn.cpnscdn.com', +'cdn.creative.medialytics.com', +'cdn.cxense.com', +'cdn.derlatas.com', +'cdn.devolapgt.com', +'cdn.digitalcity.com', +'cdn.directrev.com', +'cdn.directtrk.com', +'cdn.dirjournal.com', +'cdn.doubleverify.com', +'cdn.downloaddabs.com', +'cdn.dsultra.com', +'cdn.dynamicyield.com', +'cdn.ebocornac.com', +'cdn.effectivemeasure.net', +'cdn.elasticad.net', +'cdn.engine.4dsply.com', +'cdn.engine.adsupply.com', +'cdn.engine.avid.doublepimp.com', +'cdn.engine.bang.doublepimp.com', +'cdn.engine.doublepimp.com', +'cdn.engine.fling.doublepimp.com', +'cdn.engine.manwin.doublepimp.com', +'cdn.engine.phn.doublepimp.com', +'cdn.engine.rk.doublepimp.com', +'cdn.engine.streamate.doublepimp.com', +'cdn.engine.trklnks.com', +'cdn.epom.com', +'cdn.escalatenetwork.com', +'cdn.eveitoki.com', +'cdn.exactag.com', +'cdn.exogripper.com', +'cdn.exoticads.com', +'cdn.exovueplatform.com', +'cdn.eyewonder.com.12812.9047.302br.net', +'cdn.eyewonder.com.12842.9047.302br.net', +'cdn.eyewonder.com.21863.9047.302br.net', +'cdn.eyewonder.com.21889.9047.302br.net', +'cdn.eyewonder.com.21891.9047.302br.net', +'cdn.eyewonder.com.21893.9047.302br.net', +'cdn.eyewonder.com.21895.9068.302br.net', +'cdn.eyewonder.com.21897.9068.302br.net', +'cdn.eyewonder.com.21899.9068.302br.net', +'cdn.eyewonder.com.22790.9068.302br.net', +'cdn.eyewonder.com.22792.9068.302br.net', +'cdn.eyewonder.com.22794.9068.302br.net', +'cdn.eyewonder.com.22796.9068.302br.net', +'cdn.eyewonder.com.22798.9068.302br.net', +'cdn.eyewonder.com.22800.9068.302br.net', +'cdn.eyewonder.com.22802.9068.302br.net', +'cdn.eyewonder.com.22804.9068.302br.net', +'cdn.eyewonder.com.22806.9068.302br.net', +'cdn.eyewonder.com.22808.9068.302br.net', +'cdn.eyewonder.com.22810.9068.302br.net', +'cdn.eyewonder.com.22812.9068.302br.net', +'cdn.eyewonder.com.24239.9068.302br.net', +'cdn.eyewonder.com.24241.9068.302br.net', +'cdn.eyewonder.com.24243.9068.302br.net', +'cdn.eyewonder.com.24251.9068.302br.net', +'cdn.eyewonder.com.24253.9068.302br.net', +'cdn.eyewonder.com.24265.9068.302br.net', +'cdn.eyewonder.com.70430.9538.302br.net', +'cdn.eyewonder.com.70431.9538.302br.net', +'cdn.eyewonder.com.70432.9538.302br.net', +'cdn.eyewonder.com.70433.9538.302br.net', +'cdn.fancybar.net', +'cdn.fastclick.net', +'cdn.fastclick.net.956.9006.302br.net', +'cdn.fastclick.net.958.9006.302br.net', +'cdn.feeds.videosz.com', +'cdn.firstimpression.io', +'cdn.flashtalking.com', +'cdn.flurry.com', +'cdn.frestacero.com', +'cdn.ftdownloader.net', +'cdn.funnel.naturaltracking.com', +'cdn.gameadvert.com', +'cdn.hanaprop.com', +'cdn.herezera.com', +'cdn.hgdat.com', +'cdn.hiido.cn', +'cdn.hyperpromote.com', +'cdn.iasrv.com', +'cdn.imonomy.com', +'cdn.inentasky.com', +'cdn.innity.com', +'cdn.inspectlet.com', +'cdn.interactivemedia.net', +'cdn.intergi.com', +'cdn.justonecookbook.com', +'cdn.krxd.net', +'cdn.lfstmedia.com', +'cdn.listrakbi.com', +'cdn.livechatinc.com', +'cdn.mbp91.com', +'cdn.mcextjmp.com', +'cdn.mdotm.com', +'cdn.media.net', +'cdn.millennialmedia.com', +'cdn.mobicow.com', +'cdn.mobidea.com', +'cdn.mouseflow.com', +'cdn.mplxtms.com', +'cdn.mxpnl.com', +'cdn.nativendo.de', +'cdn.nearbyad.com', +'cdn.neblotech.com', +'cdn.niche.videosz.com', +'cdn.o333o.com', +'cdn.onescreen.net', +'cdn.onlinecountdowns.com', +'cdn.optimatic.com', +'cdn.optimizely.com', +'cdn.pardot.com', +'cdn.petametrics.com', +'cdn.popcash.net', +'cdn.popmyads.com', +'cdn.psdvault.com', +'cdn.pubexchange.com', +'cdn.ramctrlgate.com', +'cdn.reporo.net', +'cdn.revcontent.com', +'cdn.rooktemplate.com', +'cdn.royale.spongecell.com.18367.9113.302br.net', +'cdn.royale.spongecell.com.18473.9113.302br.net', +'cdn.sailthru.com', +'cdn.scootloor.com', +'cdn.search.aol.com', +'cdn.segment.com', +'cdn.segment.io', +'cdn.shorte.st', +'cdn.siftscience.com', +'cdn.slopeaota.com', +'cdn.snapsitemap.com', +'cdn.socialtwist.com', +'cdn.spotxchange.com', +'cdn.spoutable.com', +'cdn.static.zdbb.net', +'cdn.stroeerdigitalmedia.de', +'cdn.taboola.com', +'cdn.taboolasyndication.com', +'cdn.tanx.com', +'cdn.teads.tv', +'cdn.technoratimedia.com', +'cdn.thetorntv.com', +'cdn.theturboforums.com', +'cdn.tinypass.com', +'cdn.tomekas.com', +'cdn.trafficexchangelist.com', +'cdn.trafficforce.com', +'cdn.trafficposse.com', +'cdn.trafficstars.com', +'cdn.triggertag.gorillanation.com', +'cdn.trkclk.net', +'cdn.turn.com', +'cdn.tynt.com', +'cdn.ui.phn.doublepimp.com', +'cdn.undertone.com', +'cdn.vaguntrader.com', +'cdn.valueclick.net', +'cdn.vdopia.com', +'cdn.viglink.com', +'cdn.vipboxoc.co', +'cdn.viralmint.com', +'cdn.vlexokrako.com', +'cdn.voscast.com', +'cdn.w55c.net', +'cdn.widgets.webengage.com', +'cdn.wigetmedia.com', +'cdn.wonderfulengineering.com', +'cdn.www1.oratosaeron.com', +'cdn.yb0t.com', +'cdn.yldbt.com', +'cdn.yourtopoffers.info', +'cdn.ywxi.net', +'cdn.zeusclicks.com', +'cdn.ziffstatic.com', +'cdn.zopim.com', +'cdn0.mobmore.com', +'cdn0.puata.info', +'cdn1-ref.landing.comcontent.net', +'cdn1.ad-center.com', +'cdn1.ads.contentabc.com', +'cdn1.appia.com', +'cdn1.bad-credit-cdn.com', +'cdn1.bnmla.com', +'cdn1.clkbid.com', +'cdn1.clkrev.com', +'cdn1.crispadvertising.com', +'cdn1.deals-discounts-codes.com', +'cdn1.e5.mydirtyhobby.com', +'cdn1.flash.shareadult.com', +'cdn1.inner-active.mobi', +'cdn1.kovla.com', +'cdn1.psdvault.com', +'cdn1.reporo.net', +'cdn1.rhtag.com', +'cdn1.skinected.com', +'cdn1.smartadserver.com', +'cdn1.srv.revdepo.com', +'cdn1.tags1.revdepo.com', +'cdn1.traffichaus.com', +'cdn1.tribalfusion.com', +'cdn11.00zasdf.pw', +'cdn11.abbp1.pw', +'cdn11.contentabc.com', +'cdn11.plmokn.pw', +'cdn11.routehero.com', +'cdn15.acloudimages.com', +'cdn1b.adspace.porntube.com', +'cdn1ht.traffichaus.com', +'cdn2-ref.landing.comcontent.net', +'cdn2.ad-center.com', +'cdn2.adbrau.com', +'cdn2.adsdk.com', +'cdn2.bad-credit-cdn.com', +'cdn2.cpmstar.com', +'cdn2.crispadvertising.com', +'cdn2.deals-discounts-codes.com', +'cdn2.lockerdome.com', +'cdn2.maxiget.com', +'cdn2.mobile.contentdef.com', +'cdn2.optimizely.com', +'cdn2.reporo.net', +'cdn3-ref.landing.comcontent.net', +'cdn3.kovla.com', +'cdn3.mobile.contentdef.com', +'cdn3.optimizely.com', +'cdn3.userzoom.com', +'cdn4-ref.landing.comcontent.net', +'cdn4.bad-credit-cdn.com', +'cdn4.deals-discounts-codes.com', +'cdn4.psdvault.com', +'cdn4.userzoom.com', +'cdn5-ref.landing.comcontent.net', +'cdn5.bad-credit-cdn.com', +'cdn5.deals-discounts-codes.com', +'cdn5.psdvault.com', +'cdn5.tribalfusion.com', +'cdn6.bad-credit-cdn.com', +'cdn6.deals-discounts-codes.com', +'cdn6.psdvault.com', +'cdn7.bad-credit-cdn.com', +'cdn7.deals-discounts-codes.com', +'cdna.tremormedia.com', +'cdnads.cam4.com', +'cdncache2-a.akamaihd.net', +'cdneu.alcoholsoftcdn.com', +'cdneu.filefactscdn.com', +'cdnke.voluumtrk.com', +'cdns.brsrvr.com', +'cdnstats-a.akamaihd.net', +'cdnus.alcoholsoftcdn.com', +'cdnus.filefactscdn.com', +'cdnx.tribalfusion.com', +'cdr0b.voluumtrk.com', +'cds.g8j8b9g6.hwcdn.net', +'cds2.freenet.de', +'cdx.cedexis.com', +'ce.lijit.com', +'ce2-dev-trk.s3.amazonaws.com', +'ce2-dev.s3.amazonaws.com', +'ce5iz.voluumtrk.com', +'cebj8.voluumtrk.com', +'cecash.com', +'ced.sascdn.com', +'cedexis-dsa-eu.gccdn.net', +'cedexis-test01.insnw.net', +'cedexis.cdn.mediactive-network.net', +'cedexis.leasewebcdn.com', +'cedexiscom.btttag.com', +'cedexispub.cdnetworks.net', +'celeb-ads.com', +'celebrities.searchwho.com', +'celebrity-image.com', +'celebrityhack.us.intellitxt.com', +'celebscentral.us.intellitxt.com', +'cellstats.mako.co.il', +'celltick.com', +'cellularphones.com', +'celtra.com', +'centerpoint.hitbox.com', +'centik.justclick.ru', +'centinela.sofistic.net', +'centralad.com', +'centricaplc.tt.omtrdc.net', +'centrport.net', +'certified-email.com', +'cetrk.com', +'cf.addthis.com', +'cf.ads.kontextua.com', +'cf.cdn.inmobi.com', +'cf33b.voluumtrk.com', +'cfcdn.fhserve.com', +'cfifsfsbsower.review', +'cfpbg.voluumtrk.com', +'cfrfa.112.2o7.net', +'cfs.u-ad.info', +'cfyav.voluumtrk.com', +'cfzp1.voluumtrk.com', +'cg27e.voluumtrk.com', +'cgi.hotstat.nl', +'cgi.netscape.com', +'cgi.zdnet.com', +'cgicounter.oneandone.co.uk', +'cgicounter.onlinehome.de', +'cgicounter.puretec.de', +'cgovj.voluumtrk.com', +'cgzudintercom.review', +'ch.questionmarket.com', +'ch2lb.checkm8.com', +'chainmychonga.com', +'chalkpitqqjpwis.download', +'chanalytics.merchantadvantage.com', +'chango.com', +'channel4.com.112.2o7.net', +'channeltraffic.net', +'chapdyn.bidsystem.com', +'charmour.club', +'chart.superstats.com', +'chartaca.com.s3.amazonaws.com', +'chartboost.com', +'chat.adspaces.ero-advertising.com', +'chat.ero-advertising.com', +'chat.zedo.com', +'chathu.apkmania.co', +'chatserver.comm100.cn', +'chayaoyaui.download', +'cheaperia.digidip.net', +'cheatcc.us.intellitxt.com', +'cheatingdome.us.intellitxt.com', +'checker.admitad.com', +'checker.cityads.com', +'checker.cityads.com.br', +'checker.cityads.ru', +'checker.cityadspix.com', +'checker.cityredirect.com', +'checker.cityviplink.com', +'checker.dumedia.ru', +'checker.gameleads.ru', +'checkm8.com', +'checkstat.com', +'checkstat.net', +'checkstat.nl', +'chefkoch01.webtrekk.net', +'cherryaffiliates.omarsys.com', +'chessmob.go2affise.com', +'chestionar.ro', +'chgqm.voluumtrk.com', +'chi-only.outbrain.com', +'chi2only.outbrain.com', +'chillinessfjnvbh.download', +'chillout.real.com', +'china.inmobi.com', +'chinacache.cedexis.com', +'chip.de.intellitxt.com', +'chip.digidip.net', +'chip.ivwbox.de', +'chip.met.vgwort.de', +'chip.pl.intellitxt.com', +'chippingswbhhaxf.download', +'choice.demdex.net', +'choice.microsoft.com', +'choices.trustarc.com', +'choices.truste.com', +'chokoladsrv.net', +'chope-co.b.appier.net', +'chronicads.com', +'chronicleddxsilskp.download', +'chtatic.appspot.com', +'chukalapopi.com', +'chutneysrkcmkwrqb.download', +'ci.categoria.hpg.com.br', +'ci22.actonsoftware.com', +'ci23.actonsoftware.com', +'ci29.actonsoftware.com', +'ci33.actonsoftware.com', +'ci35.actonsoftware.com', +'ci43.actonsoftware.com', +'ci44.actonsoftware.com', +'ci45.actonsoftware.com', +'ci46.actonsoftware.com', +'ci50.actonsoftware.com', +'ci51.actonsoftware.com', +'ci52.actonsoftware.com', +'ci53.actonsoftware.com', +'cia2853.actonsoftware.com', +'ciao.de.intellitxt.com', +'ciao.ivwbox.de', +'ciaoshopde.122.2o7.net', +'cidemo.actonsoftware.com', +'ciktv.voluumtrk.com', +'ciliolateefgntk.download', +'ciscosystemsinc.tt.omtrdc.net', +'cistycsoyceif.download', +'citi.bridgetrack.com', +'citi.bridgetrack.com.21936.9128.302br.net', +'citi.bridgetrack.com.21937.9128.302br.net', +'citi.bridgetrack.com.21939.9128.302br.net', +'citi.bridgetrack.com.21940.9128.302br.net', +'citi.bridgetrack.com.21942.9128.302br.net', +'citi.bridgetrack.com.21943.9128.302br.net', +'citi.bridgetrack.com.21945.9128.302br.net', +'citi.bridgetrack.com.21946.9128.302br.net', +'citi.bridgetrack.com.21948.9128.302br.net', +'citi.bridgetrack.com.21949.9128.302br.net', +'citi.bridgetrack.com.21950.9128.302br.net', +'citi.bridgetrack.com.21951.9128.302br.net', +'citi.bridgetrack.com.21952.9128.302br.net', +'citi.bridgetrack.com.21953.9128.302br.net', +'citi.bridgetrack.com.21954.9128.302br.net', +'citi.bridgetrack.com.21955.9128.302br.net', +'citi.bridgetrack.com.21956.9128.302br.net', +'citi.bridgetrack.com.21957.9128.302br.net', +'citi.bridgetrack.com.21958.9128.302br.net', +'citi.bridgetrack.com.21960.9128.302br.net', +'citi.bridgetrack.com.21961.9128.302br.net', +'citi.bridgetrack.com.21963.9128.302br.net', +'citi.bridgetrack.com.21964.9128.302br.net', +'citi.bridgetrack.com.21966.9128.302br.net', +'citi.bridgetrack.com.21967.9128.302br.net', +'citi.bridgetrack.com.21969.9128.302br.net', +'citi.bridgetrack.com.21970.9128.302br.net', +'citi.bridgetrack.com.21971.9128.302br.net', +'citi.bridgetrack.com.21972.9128.302br.net', +'citi.bridgetrack.com.21973.9128.302br.net', +'citi.bridgetrack.com.21974.9128.302br.net', +'citi.bridgetrack.com.21975.9128.302br.net', +'citi.bridgetrack.com.21976.9128.302br.net', +'citi.bridgetrack.com.21977.9128.302br.net', +'citi.bridgetrack.com.21978.9128.302br.net', +'citi.bridgetrack.com.21979.9128.302br.net', +'citi.bridgetrack.com.21981.9128.302br.net', +'citi.bridgetrack.com.21982.9128.302br.net', +'citi.netmng.com', +'citizens.inq.com', +'citrix.tradedoubler.com', +'city-ads.de', +'cityads.com', +'cityads.com.br', +'cityads.ru', +'cityads.telus.net', +'cityadslink.com', +'cityadspix.com', +'citygrid.com', +'cityredirect.com', +'cityviplink.com', +'civitik.com', +'cj.com', +'cj.dotomi.com', +'cj.net', +'ck.jp.ap.valuecommerce.com', +'ck.juicyads.com', +'ck.solocpm.com', +'cke1i.voluumtrk.com', +'cklu4.voluumtrk.com', +'ckm-m.xp1.ru4.com', +'cknsoyunwrought.review', +'cksocial.hitpointstudios.com', +'ckstatic.com', +'cl.cnn.com', +'cl.exct.net', +'cl2.webterren.com', +'clarinetsfulrjwphb.download', +'clarity.abacast.com', +'clashmobile.com', +'claspedhjkyehhf.download', +'classifieds.atspace.com', +'classifieds1000.com', +'classifiedscanada.112.2o7.net', +'classmates.com', +'classmatescom.112.2o7.net', +'classroomchvpagg.download', +'clck.webteaser.ru', +'clck.yandex.by', +'clck.yandex.com', +'clck.yandex.com.tr', +'clck.yandex.kz', +'clck.yandex.ru', +'clck.yandex.ua', +'clckme.com', +'cld.edg.startappservice.com', +'clddt.com', +'cldsecure.info', +'cleangamemedia.go2cloud.org', +'clear-reports.com', +'clearlinkmedia.go2cloud.org', +'clearspring.com', +'clearwebstats.com', +'cli.linksynergy.com', +'clic-exchange.com', +'clic.reussissonsensemble.fr', +'click-123.com', +'click-here-to-listen.com', +'click-ice.com', +'click.a-ads.com', +'click.absoluteagency.com', +'click.ad.nu-face.jp', +'click.adknowledge.com', +'click.alibaba.com', +'click.aristotle.net', +'click.atdmt.com', +'click.atdmt.net', +'click.bokecc.com', +'click.cashengines.com', +'click.clickcommander.com', +'click.dagbladet.no', +'click.dtiserv2.com', +'click.engage.xbox.com', +'click.ewebse.com', +'click.eyk.net', +'click.fastlinkfinder.com', +'click.findthewebsiteyouneed.com', +'click.fool.com', +'click.holland-billing.com', +'click.hotlog.ru', +'click.hubspotanalytics.com', +'click.icetraffic.com', +'click.icptrack.com', +'click.igg.com', +'click.ipc.ru', +'click.kataweb.it', +'click.kidslivesafe.com', +'click.kmindex.ru', +'click.linkstattrack.com', +'click.linkstorm.net', +'click.linksynergy.com', +'click.livedoor.com', +'click.livejasmin.com', +'click.loudgames.com', +'click.mmosite.com', +'click.mobtimizer.com', +'click.monstracking.com', +'click.mz.simba.taobao.com', +'click.news2.v3.email-publisher.com', +'click.oxcash.com', +'click.pandaapp.com', +'click.payserve.com', +'click.pdl1tracking.com', +'click.plista.com', +'click.readme.ru', +'click.rontraffic.com', +'click.rssfwd.com', +'click.safe-sender.co.uk', +'click.scour.com', +'click.silvercash.com', +'click.simba.taobao.com', +'click.solocpm.com', +'click.startappexchange.com', +'click.tanx.com', +'click.topica.com', +'click.trklinklog.com', +'click.tv.repubblica.it', +'click.tz.simba.taobao.com', +'click.union.ucweb.com', +'click.vgnett.no', +'click.wrating.com', +'click1.performance-zone.com', +'click168.com', +'click2.cafepress.com', +'click2.scour.com', +'click202.com', +'click2boost.com', +'click2net.nl', +'click2paid.com', +'click2site.co', +'click4assistance.co.uk', +'click4cash.de', +'click4click.com', +'click4free.info', +'clickability.com', +'clickability.net', +'clickability.org', +'clickable.com', +'clickad.com.pl', +'clickad.pl', +'clickadin.com', +'clickadscounter.com', +'clickadu.com', +'clickagents.com', +'clickagy.com', +'clickater.com', +'clickauditor.net', +'clickbangpop.com', +'clickbank.net', +'clickbet88.com', +'clickbooth.com', +'clickboothlnk.com', +'clickbroker.com', +'clickbrokers.com', +'clickbug.com', +'clickcash.com', +'clickcash.webpower.com', +'clickcashmoney.com', +'clickcdn.xda-developers.com', +'clickcertain.com', +'clickchecker.co.uk', +'clickdealer.go2cloud.org', +'clickdensity.com', +'clickdough.com', +'clickedyclick.com', +'clickeight.com', +'clickequations.net', +'clickeu.admailtiser.com', +'clickeu.tractionize.com', +'clickexperts.net', +'clickey.com', +'clickfirms.go2cloud.org', +'clickflow.com', +'clickforwebmasters.com', +'clickfuse.com', +'clickheretofind.com', +'clickhouse.com', +'clickice.com', +'clicking.com.tw', +'clickintext.com', +'clickit.com', +'clickkingdom.net', +'clickkwala.go2cloud.org', +'clickmarks.com', +'clickmedia.ro', +'clickmonsters.com', +'clickon.co.il', +'clickosmedia.com', +'clickpapa.com', +'clickppcbuzz.com', +'clickquick.com', +'clickriver.com', +'clicks.about.com', +'clicks.ads.netlog.com', +'clicks.aweber.com', +'clicks.babylon-x.com', +'clicks.bannerboxes.com', +'clicks.beap.bc.yahoo.com', +'clicks.equantum.com', +'clicks.igg.com', +'clicks.net', +'clicks.oxcash.com', +'clicks.stripsaver.com', +'clicks.toteme.com', +'clicks.virtuagirl.com', +'clicks.walla.co.il', +'clicks.whatifoffers.com', +'clicks2.oxcash.com', +'clicks2count.com', +'clicks2install.go2affise.com', +'clicksaddiction.go2cloud.org', +'clicksales.com', +'clicksandclients.go2cloud.org', +'clickserv.sitescout.com', +'clickserv2.sitescout.com', +'clickserve.cc-dt.com', +'clickserve.dartsearch.net', +'clickshare.com', +'clickshield.net', +'clicksite.com', +'clicksor.net', +'clicksrvr.co', +'clickstotrack.com', +'clickstream.co.za', +'clicksurecpa.com', +'clicksvenue.com', +'clicktaxi.com', +'clickthrough.com', +'clickthru.lefbc.com', +'clickthrucash.com', +'clickthruhost.com', +'clickthruserver.com', +'clickthrutraffic.com', +'clicktrace.info', +'clicktrack.wnu.com', +'clicktracks.com', +'clicktrade.linkexchange.net', +'clicktrade.net', +'clicktraffix.com', +'clicktraq.mtree.com', +'clicktripz.com', +'clicktv.com', +'clickus.admailtiser.com', +'clickus.reimsrvcm.com', +'clickus.tractionize.com', +'clickv.com', +'clickwinks.com', +'clickxchange.com', +'clickz.lonelycheatingwives.com', +'clicshop.com', +'clictrafic.com', +'clicz.com', +'client.cobrowser.net', +'client.download-sponsor.de', +'client.everlinks.net', +'client.tahono.com', +'clients.adventmedia.net', +'clients.advertising.com', +'clients.bluecava.com', +'clients.rootsecure.org', +'clixgalore.co.uk', +'clixgalore.com', +'cliximages.com', +'clixsense.com', +'clixtrac.com', +'clixzen1.go2cloud.org', +'clk.77978.xn--q9jyb4c', +'clk.8mm.shiksha', +'clk.adgatemedia.com', +'clk.atdmt.com', +'clk.boulanger.fr', +'clk.directrev.com', +'clk.flmsecure.com', +'clk.im', +'clk.jmp9.com', +'clk.members.fling.com', +'clk.ml-links.com', +'clk.nanigans.com', +'clk.optaim.com', +'clk.recreativ.ru', +'clk.relestar.com', +'clk.solocpm.com', +'clk.voyages-sncf.com', +'clkax.tradedoubler.com', +'clkde.tradedoubler.com', +'clkdeals.com', +'clkerr.com', +'clkmg.com', +'clkmon.com', +'clkmr.com', +'clkrev.com', +'clksite.com', +'clkstat.qihoo.com', +'clktag.com', +'clkuk.tradedoubler.com', +'clmbtrk.com', +'clnk.me', +'clobucks.com', +'clog.go.com', +'clottingsuoxiz.download', +'cloud-q.duba.net', +'cloud.cashtrafic.info', +'cloud.insightera.com', +'cloud.video.unrulymedia.com', +'cloudfront-dsa-eu.cedexis.com', +'cloudfront-labs.amazonaws.com', +'cloudfront.cedexis.com', +'cloudhostbanner.com', +'cloudixconnection.com', +'cloveads.go2cloud.org', +'clpremdo.com', +'cls.vrvm.com', +'clubbebe.2cnt.net', +'cluster-03.topbucks.com', +'cluster.adultadworld.com', +'cluster.performanceanalyser.net', +'cluster0.2cnt.net', +'cluster002.2cnt.net', +'cluster003.2cnt.net', +'cluster1.2cnt.net', +'cluster10.2cnt.net', +'cluster11.2cnt.net', +'cluster1805.2cnt.net', +'cluster29002.2cnt.net', +'cluster29003.2cnt.net', +'clvrtrkr.go2cloud.org', +'clz3.net', +'cm-cl35.fresheye.com', +'cm.ac3.msn.com', +'cm.adgrx.com', +'cm.adkmob.com', +'cm.dpclk.com', +'cm.emarbox.com', +'cm.g.doubleclick.net', +'cm.gcm.ksmobile.com', +'cm.l.qq.com', +'cm8og.voluumtrk.com', +'cma.zdnet.com', +'cma60.voluumtrk.com', +'cmail1.com', +'cmail2.com', +'cmail5.com', +'cmap.uac.ace.advertising.com', +'cmdts.ksmobile.com', +'cmfads.com', +'cmllk1.info', +'cmn1lsm2.beliefnet.com', +'cmn1lsm3.beliefnet.com', +'cmn1lsm4.beliefnet.com', +'cmp.entertainmentcrave.com', +'cmp.us.intellitxt.com', +'cmpdotnetjunkiescom.112.2o7.net', +'cmpglobalvista.112.2o7.net', +'cms-pixel.crowdreport.com', +'cms-skin.com', +'cms.abmr.net', +'cms.analytics.yahoo.com', +'cms.grandcloud.cn', +'cms.quantserve.com', +'cms2.net', +'cmstrendslog.indiatimes.com', +'cmstrendslog.timesnow.tv', +'cn.adserver.yahoo.com', +'cn.clickable.net', +'cn01.dwstat.cn', +'cnb.cnews.ru', +'cncdn.9966.org', +'cnetnews.112.2o7.net', +'cnettech.112.2o7.net', +'cnetwidget.creativemark.co.uk', +'cnetzdnet.112.2o7.net', +'cnheagletribune.112.2o7.net', +'cnhsq.voluumtrk.com', +'cnn.122.2o7.net', +'cnn.dyn.cnn.com', +'cnn.entertainment.printthis.clickability.com', +'cnn.looksmart.com', +'cnnfn.emailthis.clickability.com', +'cnnfn.printthis.clickability.com', +'cnnfn.savethis.clickability.com', +'cnnglobal.122.2o7.net', +'cnstats.cdev.eu', +'cnt.in.bookmyshow.com', +'cnt.likealaugh.org', +'cnt.logoslovo.ru', +'cnt.my', +'cnt.nicemix.com', +'cnt.nov.ru', +'cnt.nuvid.com', +'cnt.one.ru', +'cnt.promodj.com', +'cnt.rambler.ru', +'cnt.rate.ru', +'cnt.threewave.jp', +'cnt.tmefekt.pl', +'cnt.tokyo-porn-tube.com', +'cnt.tokyo-tube.com', +'cnt.tyxo.bg', +'cnt.winkal.com', +'cnt.zhaopin.com', +'cnt1.pocitadlo.cz', +'cnt1.xhamster.com', +'cnt2.xhamster.com', +'cntdy.mobi', +'cnteryield.jmp9.com', +'cntrck.com', +'cntv.wrating.com', +'cntwr.voluumtrk.com', +'cnzz.com', +'cnzz.mmstat.com', +'coachingminceur.go2cloud.org', +'coadvertise.com', +'coaft.voluumtrk.com', +'cobrands.mailermailer.com', +'coconuts.boy.jp', +'code.37cs.com', +'code.adengage.com', +'code.directadvert.ru', +'code.fastclick.net', +'code.iwadserver.com', +'code.kissmetrics.com', +'code.rtbsystem.com', +'code.snapengage.com', +'code.superstats.com', +'code.taggify.net', +'code.theads.me', +'code.xidx.org', +'codead.dajusepe.com', +'codice.shinystat.com', +'codice.shinystat.it', +'codiceisp.shinystat.it', +'codicepro.shinystat.it', +'codilladtqjizvrh.download', +'cogtree.com', +'coheredqdsurfq.download', +'cohortdigital.go2cloud.org', +'coiffedvsyitd.download', +'coinurl.com', +'coinvisitor.com', +'coke.nuggad.net', +'coldfusion.affiliateshop.com', +'collect.igodigital.com', +'collect.m-pathy.com', +'collection.acromas.com', +'collective-media.net.49479.9362.302br.net', +'collector-cdn.github.com', +'collector-test.staging.mb-internal.com', +'collector.deepmetrix.com', +'collector.ksax.com', +'collector.kstptv5.com', +'collector.statowl.com', +'collector.tescocompare.com', +'collector.viki.io', +'collegerqdieq.download', +'collidingsgmwsx.download', +'colligatepygpdqk.download', +'colonize.com', +'colorfoto.digidip.net', +'com-magazin.de.intellitxt.com', +'com-symantec.netmng.com', +'com-wkejf32ljd23409system.net', +'com.24290.9170.302br.net', +'com.24293.9170.302br.net', +'com.33526.9243.302br.net', +'com.36659.9244.302br.net', +'com.47129.9349.302br.net', +'com.47550.9340.302br.net', +'com.55788.9391.302br.net', +'com.72669.9596.302br.net', +'com.djinnworks.sdm.s3.amazonaws.com', +'com.econa.com', +'comagic.ru', +'comcast.112.2o7.net', +'comcast.demdex.net', +'comclick.com', +'comclick.net', +'comet.ibsrv.net', +'comics.ign.us.intellitxt.com', +'commerce.cimedia.net', +'commercedjbppce.download', +'commissionmonster.com', +'commonname.com', +'commonssearch.com', +'commonwealth.riddler.com', +'companiedhhplrdpp.download', +'companydeep.go2affise.com', +'compareyourclicks.com', +'compatdb.us.intellitxt.com', +'compete.com', +'compete.evergage.com', +'competeinc.com', +'completecarrd.com', +'compnet.us.intellitxt.com', +'components.adsender.us', +'compteur.com', +'compteur.francite.com', +'compu3.com', +'computerbild-forum.digidip.net', +'computershopper.uk.intellitxt.com', +'computershopper.zdnet.com', +'computerwoche.de.intellitxt.com', +'computingcentral.com', +'comscore.com', +'comunidad.lasexta.com', +'con.thetrafficstat.net', +'concealedffvqfx.download', +'concinnousaepwnh.download', +'concours.fr', +'concours.hit-parade.com', +'condenast.demdex.net', +'condenast.tt.omtrdc.net', +'condonenawphf.download', +'conduit-banners.com', +'conf.xpanama.net', +'config-ltvp.inmobi.com', +'config.ioam.de', +'config.mobile.wxbug.com', +'configusa.veinteractive.com', +'confirm-referer.glrsales.com', +'confluence.kissmetrics.com', +'conforama.commander1.com', +'conforama.ugc.bazaarvoice.com', +'connect.247media.ads.link4ads.com', +'connect.appflood.com', +'connect.de.intellitxt.com', +'connect.digidip.net', +'connect.ekomi.de', +'connect.ok.ru', +'connect.quoka.de', +'connect.tapjoy.com', +'connect001.com', +'connectbot.org', +'connectedhome.digidip.net', +'connectlinking1.com', +'connectlinking10.com', +'connectlinking12.com', +'connectlinking2.com', +'connectlinking3.com', +'connectlinking4.com', +'connectlinking5.com', +'connectlinking6.com', +'connectlinking7.com', +'connectlinking8.com', +'connectlinking9.com', +'connexionsafe.com', +'connexionsecure.com', +'connextra.com', +'connotenrrvlxq.download', +'connxtionads.go2cloud.org', +'consent-st.truste.com', +'consent.truste.com', +'consent.webmasterplan.com', +'console.revmob.com', +'consonancetkumk.download', +'consors.ivwbox.de', +'consumerinfo.com', +'consumerreview.us.intellitxt.com', +'consumesldpmue.download', +'contador-de-visitas.com', +'contadores.miarroba.com', +'contadores.miarroba.es', +'contadorgratis.web-kit.org', +'contendersuudvsxwq.download', +'content-ad.com', +'content-ads.impactengine.com', +'content-cooperation.com', +'content.acc-hd.de', +'content.ad', +'content.adprofile.net', +'content.adriver.ru', +'content.adscension.com', +'content.aimatch.com', +'content.app-authority.com', +'content.applift.com', +'content.bannerconnect.net', +'content.bitsontherun.com', +'content.complex.com', +'content.cpxinteractive.com', +'content.directadvert.ru', +'content.livesportmedia.eu', +'content.liveuniverse.com', +'content.pop6.com', +'content.quantcount.com', +'content.rbc.medialand.ru', +'content.surpax.net', +'content.tucows.com', +'content.uclick.com', +'content.untd.com', +'content.videoclick.ru', +'content.yieldmanager.com', +'content.yieldmanager.edgesuite.net', +'content.zemanta.com', +'contentcache-a.akamaihd.net', +'contentclick.akamaized.net', +'contentlockingnetworks.com', +'contentserv.brandaffinity.net', +'contextlinks.netseer.com', +'contextuads.com', +'contextual.media.net', +'contextweb.pixel.invitemedia.com', +'control.123banners.com', +'control.cityofcairns.com', +'control.kochava.com', +'controlcenter.superstats.com', +'controller.4seeresults.com', +'controller2.foreseeresults.com', +'controlroom.netmining.com', +'contxmedia.go2cloud.org', +'conv.adengage.com', +'conversion.7search.com', +'conversionruler.com', +'conversions.rts.doublepimp.com', +'convertglobal.s3.amazonaws.com', +'convoad.technoratimedia.com.21929.9047.302br.net', +'convoad.technoratimedia.com.22787.9068.302br.net', +'convoad.technoratimedia.com.22788.9068.302br.net', +'convoad.technoratimedia.com.24234.9068.302br.net', +'convoad.technoratimedia.com.24235.9068.302br.net', +'convoad.technoratimedia.com.24236.9068.302br.net', +'cookie.disneylandparis.com', +'cookie.fdih.dk', +'cookie.monster.com', +'cookieanalyze.info', +'cookies.cmpnet.com', +'cookies.reedbusiness.nl', +'cookiex.ngd.yahoo.com', +'coolertracks.emailroi.com', +'coolpaysite.com', +'coolshader.com', +'coop.crwdcntrl.net', +'copesetticxobdnn.download', +'copilul.2cnt.net', +'corba.adtech.fr', +'core.adproxy2.com', +'core.adservingfactory.com', +'core.asuum.com', +'core.banner.t-online.de', +'core.naturalmotion.com', +'core.yorkvillemarketing.com', +'core2digital.go2affise.com', +'coreads.net', +'coreclickhoo.com', +'coreg-feed.fr', +'coretalk.co', +'cornhuskerypyvjzplr.download', +'corpext.msitadfs.glbdns2.microsoft.com', +'correctiongnarfj.download', +'cortezz.justclick.ru', +'cortoonnetwork.com', +'cosmos01ssl.webtrekk.net', +'cossette.com', +'cossiesnkycsr.download', +'cotidianul.2cnt.net', +'cotylebijnutawn.download', +'coull.com', +'coull.go2cloud.org', +'count.51yes.com', +'count.asnetworks.de', +'count.atm.youku.com', +'count.be', +'count.carrierzone.com', +'count.chanet.com.cn', +'count.channeladvisor.com', +'count.cncrk.com', +'count.crsky.com', +'count.ddooo.com', +'count.de', +'count.freeyellow.com', +'count.im', +'count.infoemail.gamexp.ru', +'count.iwbank.it', +'count.joy.cn', +'count.ly', +'count.mail.163.com', +'count.me.uk', +'count.paycounter.com', +'count.portail.free.fr', +'count.prx.org', +'count.qiannao.com', +'count.rbc.ru', +'count.rin.ru', +'count.rtl.de', +'count.rubylane.com', +'count.shopping.t-online.de', +'count.tbcdn.cn', +'count.timedg.com', +'count.video.sina.com.cn', +'count.windows9download.net', +'count1.51yes.com', +'count10.51yes.com', +'count100.51yes.com', +'count1000.51yes.com', +'count101.51yes.com', +'count102.51yes.com', +'count103.51yes.com', +'count104.51yes.com', +'count105.51yes.com', +'count106.51yes.com', +'count107.51yes.com', +'count108.51yes.com', +'count109.51yes.com', +'count11.51yes.com', +'count110.51yes.com', +'count111.51yes.com', +'count112.51yes.com', +'count113.51yes.com', +'count114.51yes.com', +'count115.51yes.com', +'count116.51yes.com', +'count117.51yes.com', +'count118.51yes.com', +'count119.51yes.com', +'count12.51yes.com', +'count120.51yes.com', +'count121.51yes.com', +'count122.51yes.com', +'count123.51yes.com', +'count124.51yes.com', +'count125.51yes.com', +'count126.51yes.com', +'count127.51yes.com', +'count128.51yes.com', +'count129.51yes.com', +'count13.51yes.com', +'count130.51yes.com', +'count131.51yes.com', +'count132.51yes.com', +'count133.51yes.com', +'count134.51yes.com', +'count135.51yes.com', +'count136.51yes.com', +'count137.51yes.com', +'count138.51yes.com', +'count139.51yes.com', +'count14.51yes.com', +'count140.51yes.com', +'count141.51yes.com', +'count142.51yes.com', +'count143.51yes.com', +'count144.51yes.com', +'count145.51yes.com', +'count146.51yes.com', +'count147.51yes.com', +'count148.51yes.com', +'count149.51yes.com', +'count15.51yes.com', +'count150.51yes.com', +'count151.51yes.com', +'count152.51yes.com', +'count153.51yes.com', +'count154.51yes.com', +'count155.51yes.com', +'count156.51yes.com', +'count157.51yes.com', +'count158.51yes.com', +'count159.51yes.com', +'count16.51yes.com', +'count160.51yes.com', +'count161.51yes.com', +'count162.51yes.com', +'count163.51yes.com', +'count164.51yes.com', +'count165.51yes.com', +'count166.51yes.com', +'count167.51yes.com', +'count168.51yes.com', +'count169.51yes.com', +'count17.51yes.com', +'count170.51yes.com', +'count171.51yes.com', +'count172.51yes.com', +'count173.51yes.com', +'count174.51yes.com', +'count175.51yes.com', +'count176.51yes.com', +'count177.51yes.com', +'count178.51yes.com', +'count179.51yes.com', +'count18.51yes.com', +'count180.51yes.com', +'count181.51yes.com', +'count182.51yes.com', +'count183.51yes.com', +'count184.51yes.com', +'count185.51yes.com', +'count186.51yes.com', +'count187.51yes.com', +'count188.51yes.com', +'count189.51yes.com', +'count19.51yes.com', +'count190.51yes.com', +'count191.51yes.com', +'count192.51yes.com', +'count193.51yes.com', +'count194.51yes.com', +'count195.51yes.com', +'count196.51yes.com', +'count197.51yes.com', +'count198.51yes.com', +'count199.51yes.com', +'count2.51yes.com', +'count20.51yes.com', +'count200.51yes.com', +'count201.51yes.com', +'count202.51yes.com', +'count203.51yes.com', +'count204.51yes.com', +'count205.51yes.com', +'count206.51yes.com', +'count207.51yes.com', +'count208.51yes.com', +'count209.51yes.com', +'count21.51yes.com', +'count210.51yes.com', +'count211.51yes.com', +'count212.51yes.com', +'count213.51yes.com', +'count214.51yes.com', +'count215.51yes.com', +'count216.51yes.com', +'count217.51yes.com', +'count218.51yes.com', +'count219.51yes.com', +'count22.51yes.com', +'count220.51yes.com', +'count221.51yes.com', +'count222.51yes.com', +'count223.51yes.com', +'count224.51yes.com', +'count225.51yes.com', +'count226.51yes.com', +'count227.51yes.com', +'count228.51yes.com', +'count229.51yes.com', +'count23.51yes.com', +'count230.51yes.com', +'count231.51yes.com', +'count232.51yes.com', +'count233.51yes.com', +'count234.51yes.com', +'count235.51yes.com', +'count236.51yes.com', +'count237.51yes.com', +'count238.51yes.com', +'count239.51yes.com', +'count24.51yes.com', +'count240.51yes.com', +'count241.51yes.com', +'count242.51yes.com', +'count243.51yes.com', +'count244.51yes.com', +'count245.51yes.com', +'count246.51yes.com', +'count247.51yes.com', +'count248.51yes.com', +'count249.51yes.com', +'count25.51yes.com', +'count250.51yes.com', +'count251.51yes.com', +'count252.51yes.com', +'count253.51yes.com', +'count254.51yes.com', +'count255.51yes.com', +'count256.51yes.com', +'count257.51yes.com', +'count258.51yes.com', +'count259.51yes.com', +'count26.51yes.com', +'count260.51yes.com', +'count261.51yes.com', +'count262.51yes.com', +'count263.51yes.com', +'count264.51yes.com', +'count265.51yes.com', +'count266.51yes.com', +'count267.51yes.com', +'count268.51yes.com', +'count269.51yes.com', +'count27.51yes.com', +'count270.51yes.com', +'count271.51yes.com', +'count272.51yes.com', +'count273.51yes.com', +'count274.51yes.com', +'count275.51yes.com', +'count276.51yes.com', +'count277.51yes.com', +'count278.51yes.com', +'count279.51yes.com', +'count28.51yes.com', +'count280.51yes.com', +'count281.51yes.com', +'count282.51yes.com', +'count283.51yes.com', +'count284.51yes.com', +'count285.51yes.com', +'count286.51yes.com', +'count287.51yes.com', +'count288.51yes.com', +'count289.51yes.com', +'count29.51yes.com', +'count290.51yes.com', +'count291.51yes.com', +'count292.51yes.com', +'count293.51yes.com', +'count294.51yes.com', +'count295.51yes.com', +'count296.51yes.com', +'count297.51yes.com', +'count298.51yes.com', +'count299.51yes.com', +'count3.51yes.com', +'count30.51yes.com', +'count300.51yes.com', +'count301.51yes.com', +'count302.51yes.com', +'count303.51yes.com', +'count304.51yes.com', +'count305.51yes.com', +'count306.51yes.com', +'count307.51yes.com', +'count308.51yes.com', +'count309.51yes.com', +'count31.51yes.com', +'count310.51yes.com', +'count311.51yes.com', +'count312.51yes.com', +'count313.51yes.com', +'count314.51yes.com', +'count315.51yes.com', +'count316.51yes.com', +'count317.51yes.com', +'count318.51yes.com', +'count319.51yes.com', +'count32.51yes.com', +'count320.51yes.com', +'count321.51yes.com', +'count322.51yes.com', +'count323.51yes.com', +'count324.51yes.com', +'count325.51yes.com', +'count326.51yes.com', +'count327.51yes.com', +'count328.51yes.com', +'count329.51yes.com', +'count33.51yes.com', +'count330.51yes.com', +'count331.51yes.com', +'count332.51yes.com', +'count333.51yes.com', +'count334.51yes.com', +'count335.51yes.com', +'count336.51yes.com', +'count337.51yes.com', +'count338.51yes.com', +'count339.51yes.com', +'count34.51yes.com', +'count340.51yes.com', +'count341.51yes.com', +'count342.51yes.com', +'count343.51yes.com', +'count344.51yes.com', +'count345.51yes.com', +'count346.51yes.com', +'count347.51yes.com', +'count348.51yes.com', +'count349.51yes.com', +'count35.51yes.com', +'count350.51yes.com', +'count351.51yes.com', +'count352.51yes.com', +'count353.51yes.com', +'count354.51yes.com', +'count355.51yes.com', +'count356.51yes.com', +'count357.51yes.com', +'count358.51yes.com', +'count359.51yes.com', +'count36.51yes.com', +'count360.51yes.com', +'count361.51yes.com', +'count362.51yes.com', +'count363.51yes.com', +'count364.51yes.com', +'count365.51yes.com', +'count366.51yes.com', +'count367.51yes.com', +'count368.51yes.com', +'count369.51yes.com', +'count37.51yes.com', +'count370.51yes.com', +'count371.51yes.com', +'count372.51yes.com', +'count373.51yes.com', +'count374.51yes.com', +'count375.51yes.com', +'count376.51yes.com', +'count377.51yes.com', +'count378.51yes.com', +'count379.51yes.com', +'count38.51yes.com', +'count380.51yes.com', +'count381.51yes.com', +'count382.51yes.com', +'count383.51yes.com', +'count384.51yes.com', +'count385.51yes.com', +'count386.51yes.com', +'count387.51yes.com', +'count388.51yes.com', +'count389.51yes.com', +'count39.51yes.com', +'count390.51yes.com', +'count391.51yes.com', +'count392.51yes.com', +'count393.51yes.com', +'count394.51yes.com', +'count395.51yes.com', +'count396.51yes.com', +'count397.51yes.com', +'count398.51yes.com', +'count399.51yes.com', +'count4.51yes.com', +'count40.51yes.com', +'count400.51yes.com', +'count401.51yes.com', +'count402.51yes.com', +'count403.51yes.com', +'count404.51yes.com', +'count405.51yes.com', +'count406.51yes.com', +'count407.51yes.com', +'count408.51yes.com', +'count409.51yes.com', +'count41.51yes.com', +'count410.51yes.com', +'count411.51yes.com', +'count412.51yes.com', +'count413.51yes.com', +'count414.51yes.com', +'count415.51yes.com', +'count416.51yes.com', +'count417.51yes.com', +'count418.51yes.com', +'count419.51yes.com', +'count42.51yes.com', +'count420.51yes.com', +'count421.51yes.com', +'count422.51yes.com', +'count423.51yes.com', +'count424.51yes.com', +'count425.51yes.com', +'count426.51yes.com', +'count427.51yes.com', +'count428.51yes.com', +'count429.51yes.com', +'count43.51yes.com', +'count430.51yes.com', +'count431.51yes.com', +'count432.51yes.com', +'count433.51yes.com', +'count434.51yes.com', +'count435.51yes.com', +'count436.51yes.com', +'count437.51yes.com', +'count438.51yes.com', +'count439.51yes.com', +'count44.51yes.com', +'count440.51yes.com', +'count441.51yes.com', +'count442.51yes.com', +'count443.51yes.com', +'count444.51yes.com', +'count445.51yes.com', +'count446.51yes.com', +'count447.51yes.com', +'count448.51yes.com', +'count449.51yes.com', +'count45.51yes.com', +'count450.51yes.com', +'count451.51yes.com', +'count452.51yes.com', +'count453.51yes.com', +'count454.51yes.com', +'count455.51yes.com', +'count456.51yes.com', +'count457.51yes.com', +'count458.51yes.com', +'count459.51yes.com', +'count46.51yes.com', +'count460.51yes.com', +'count461.51yes.com', +'count462.51yes.com', +'count463.51yes.com', +'count464.51yes.com', +'count465.51yes.com', +'count466.51yes.com', +'count467.51yes.com', +'count468.51yes.com', +'count469.51yes.com', +'count47.51yes.com', +'count470.51yes.com', +'count471.51yes.com', +'count472.51yes.com', +'count473.51yes.com', +'count474.51yes.com', +'count475.51yes.com', +'count476.51yes.com', +'count477.51yes.com', +'count478.51yes.com', +'count479.51yes.com', +'count48.51yes.com', +'count480.51yes.com', +'count481.51yes.com', +'count482.51yes.com', +'count483.51yes.com', +'count484.51yes.com', +'count485.51yes.com', +'count486.51yes.com', +'count487.51yes.com', +'count488.51yes.com', +'count489.51yes.com', +'count49.51yes.com', +'count490.51yes.com', +'count491.51yes.com', +'count492.51yes.com', +'count493.51yes.com', +'count494.51yes.com', +'count495.51yes.com', +'count496.51yes.com', +'count497.51yes.com', +'count498.51yes.com', +'count499.51yes.com', +'count4all.com', +'count5.51yes.com', +'count5.pconline.com.cn', +'count50.51yes.com', +'count500.51yes.com', +'count501.51yes.com', +'count502.51yes.com', +'count503.51yes.com', +'count504.51yes.com', +'count505.51yes.com', +'count506.51yes.com', +'count507.51yes.com', +'count508.51yes.com', +'count509.51yes.com', +'count51.51yes.com', +'count510.51yes.com', +'count511.51yes.com', +'count512.51yes.com', +'count513.51yes.com', +'count514.51yes.com', +'count515.51yes.com', +'count516.51yes.com', +'count517.51yes.com', +'count518.51yes.com', +'count519.51yes.com', +'count52.51yes.com', +'count520.51yes.com', +'count521.51yes.com', +'count522.51yes.com', +'count523.51yes.com', +'count524.51yes.com', +'count525.51yes.com', +'count526.51yes.com', +'count527.51yes.com', +'count528.51yes.com', +'count529.51yes.com', +'count53.51yes.com', +'count530.51yes.com', +'count531.51yes.com', +'count532.51yes.com', +'count533.51yes.com', +'count534.51yes.com', +'count535.51yes.com', +'count536.51yes.com', +'count537.51yes.com', +'count538.51yes.com', +'count539.51yes.com', +'count54.51yes.com', +'count540.51yes.com', +'count541.51yes.com', +'count542.51yes.com', +'count543.51yes.com', +'count544.51yes.com', +'count545.51yes.com', +'count546.51yes.com', +'count547.51yes.com', +'count548.51yes.com', +'count549.51yes.com', +'count55.51yes.com', +'count550.51yes.com', +'count551.51yes.com', +'count552.51yes.com', +'count553.51yes.com', +'count554.51yes.com', +'count555.51yes.com', +'count556.51yes.com', +'count557.51yes.com', +'count558.51yes.com', +'count559.51yes.com', +'count56.51yes.com', +'count560.51yes.com', +'count561.51yes.com', +'count562.51yes.com', +'count563.51yes.com', +'count564.51yes.com', +'count565.51yes.com', +'count566.51yes.com', +'count567.51yes.com', +'count568.51yes.com', +'count569.51yes.com', +'count57.51yes.com', +'count570.51yes.com', +'count571.51yes.com', +'count572.51yes.com', +'count573.51yes.com', +'count574.51yes.com', +'count575.51yes.com', +'count576.51yes.com', +'count577.51yes.com', +'count578.51yes.com', +'count579.51yes.com', +'count58.51yes.com', +'count580.51yes.com', +'count581.51yes.com', +'count582.51yes.com', +'count583.51yes.com', +'count584.51yes.com', +'count585.51yes.com', +'count586.51yes.com', +'count587.51yes.com', +'count588.51yes.com', +'count589.51yes.com', +'count59.51yes.com', +'count590.51yes.com', +'count591.51yes.com', +'count592.51yes.com', +'count593.51yes.com', +'count594.51yes.com', +'count595.51yes.com', +'count596.51yes.com', +'count597.51yes.com', +'count598.51yes.com', +'count599.51yes.com', +'count6.51yes.com', +'count60.51yes.com', +'count600.51yes.com', +'count601.51yes.com', +'count602.51yes.com', +'count603.51yes.com', +'count604.51yes.com', +'count605.51yes.com', +'count606.51yes.com', +'count607.51yes.com', +'count608.51yes.com', +'count609.51yes.com', +'count61.51yes.com', +'count610.51yes.com', +'count611.51yes.com', +'count612.51yes.com', +'count613.51yes.com', +'count614.51yes.com', +'count615.51yes.com', +'count616.51yes.com', +'count617.51yes.com', +'count618.51yes.com', +'count619.51yes.com', +'count62.51yes.com', +'count620.51yes.com', +'count621.51yes.com', +'count622.51yes.com', +'count623.51yes.com', +'count624.51yes.com', +'count625.51yes.com', +'count626.51yes.com', +'count627.51yes.com', +'count628.51yes.com', +'count629.51yes.com', +'count63.51yes.com', +'count630.51yes.com', +'count631.51yes.com', +'count632.51yes.com', +'count633.51yes.com', +'count634.51yes.com', +'count635.51yes.com', +'count636.51yes.com', +'count637.51yes.com', +'count638.51yes.com', +'count639.51yes.com', +'count64.51yes.com', +'count640.51yes.com', +'count641.51yes.com', +'count642.51yes.com', +'count643.51yes.com', +'count644.51yes.com', +'count645.51yes.com', +'count646.51yes.com', +'count647.51yes.com', +'count648.51yes.com', +'count649.51yes.com', +'count65.51yes.com', +'count650.51yes.com', +'count651.51yes.com', +'count652.51yes.com', +'count653.51yes.com', +'count654.51yes.com', +'count655.51yes.com', +'count656.51yes.com', +'count657.51yes.com', +'count658.51yes.com', +'count659.51yes.com', +'count66.51yes.com', +'count660.51yes.com', +'count661.51yes.com', +'count662.51yes.com', +'count663.51yes.com', +'count664.51yes.com', +'count665.51yes.com', +'count666.51yes.com', +'count667.51yes.com', +'count668.51yes.com', +'count669.51yes.com', +'count67.51yes.com', +'count670.51yes.com', +'count671.51yes.com', +'count672.51yes.com', +'count673.51yes.com', +'count674.51yes.com', +'count675.51yes.com', +'count676.51yes.com', +'count677.51yes.com', +'count678.51yes.com', +'count679.51yes.com', +'count68.51yes.com', +'count680.51yes.com', +'count681.51yes.com', +'count682.51yes.com', +'count683.51yes.com', +'count684.51yes.com', +'count685.51yes.com', +'count686.51yes.com', +'count687.51yes.com', +'count688.51yes.com', +'count689.51yes.com', +'count69.51yes.com', +'count690.51yes.com', +'count691.51yes.com', +'count692.51yes.com', +'count693.51yes.com', +'count694.51yes.com', +'count695.51yes.com', +'count696.51yes.com', +'count697.51yes.com', +'count698.51yes.com', +'count699.51yes.com', +'count7.51yes.com', +'count70.51yes.com', +'count700.51yes.com', +'count701.51yes.com', +'count702.51yes.com', +'count703.51yes.com', +'count704.51yes.com', +'count705.51yes.com', +'count706.51yes.com', +'count707.51yes.com', +'count708.51yes.com', +'count709.51yes.com', +'count71.51yes.com', +'count710.51yes.com', +'count711.51yes.com', +'count712.51yes.com', +'count713.51yes.com', +'count714.51yes.com', +'count715.51yes.com', +'count716.51yes.com', +'count717.51yes.com', +'count718.51yes.com', +'count719.51yes.com', +'count72.51yes.com', +'count720.51yes.com', +'count721.51yes.com', +'count722.51yes.com', +'count723.51yes.com', +'count724.51yes.com', +'count725.51yes.com', +'count726.51yes.com', +'count727.51yes.com', +'count728.51yes.com', +'count729.51yes.com', +'count73.51yes.com', +'count730.51yes.com', +'count731.51yes.com', +'count732.51yes.com', +'count733.51yes.com', +'count734.51yes.com', +'count735.51yes.com', +'count736.51yes.com', +'count737.51yes.com', +'count738.51yes.com', +'count739.51yes.com', +'count74.51yes.com', +'count740.51yes.com', +'count741.51yes.com', +'count742.51yes.com', +'count743.51yes.com', +'count744.51yes.com', +'count745.51yes.com', +'count746.51yes.com', +'count747.51yes.com', +'count748.51yes.com', +'count749.51yes.com', +'count75.51yes.com', +'count750.51yes.com', +'count751.51yes.com', +'count752.51yes.com', +'count753.51yes.com', +'count754.51yes.com', +'count755.51yes.com', +'count756.51yes.com', +'count757.51yes.com', +'count758.51yes.com', +'count759.51yes.com', +'count76.51yes.com', +'count760.51yes.com', +'count761.51yes.com', +'count762.51yes.com', +'count763.51yes.com', +'count764.51yes.com', +'count765.51yes.com', +'count766.51yes.com', +'count767.51yes.com', +'count768.51yes.com', +'count769.51yes.com', +'count77.51yes.com', +'count770.51yes.com', +'count771.51yes.com', +'count772.51yes.com', +'count773.51yes.com', +'count774.51yes.com', +'count775.51yes.com', +'count776.51yes.com', +'count777.51yes.com', +'count778.51yes.com', +'count779.51yes.com', +'count78.51yes.com', +'count780.51yes.com', +'count781.51yes.com', +'count782.51yes.com', +'count783.51yes.com', +'count784.51yes.com', +'count785.51yes.com', +'count786.51yes.com', +'count787.51yes.com', +'count788.51yes.com', +'count789.51yes.com', +'count79.51yes.com', +'count790.51yes.com', +'count791.51yes.com', +'count792.51yes.com', +'count793.51yes.com', +'count794.51yes.com', +'count795.51yes.com', +'count796.51yes.com', +'count797.51yes.com', +'count798.51yes.com', +'count799.51yes.com', +'count8.51yes.com', +'count80.51yes.com', +'count800.51yes.com', +'count801.51yes.com', +'count802.51yes.com', +'count803.51yes.com', +'count804.51yes.com', +'count805.51yes.com', +'count806.51yes.com', +'count807.51yes.com', +'count808.51yes.com', +'count809.51yes.com', +'count81.51yes.com', +'count810.51yes.com', +'count811.51yes.com', +'count812.51yes.com', +'count813.51yes.com', +'count814.51yes.com', +'count815.51yes.com', +'count816.51yes.com', +'count817.51yes.com', +'count818.51yes.com', +'count819.51yes.com', +'count82.51yes.com', +'count820.51yes.com', +'count821.51yes.com', +'count822.51yes.com', +'count823.51yes.com', +'count824.51yes.com', +'count825.51yes.com', +'count826.51yes.com', +'count827.51yes.com', +'count828.51yes.com', +'count829.51yes.com', +'count83.51yes.com', +'count830.51yes.com', +'count831.51yes.com', +'count832.51yes.com', +'count833.51yes.com', +'count834.51yes.com', +'count835.51yes.com', +'count836.51yes.com', +'count837.51yes.com', +'count838.51yes.com', +'count839.51yes.com', +'count84.51yes.com', +'count840.51yes.com', +'count841.51yes.com', +'count842.51yes.com', +'count843.51yes.com', +'count844.51yes.com', +'count845.51yes.com', +'count846.51yes.com', +'count847.51yes.com', +'count848.51yes.com', +'count849.51yes.com', +'count85.51yes.com', +'count850.51yes.com', +'count851.51yes.com', +'count852.51yes.com', +'count853.51yes.com', +'count854.51yes.com', +'count855.51yes.com', +'count856.51yes.com', +'count857.51yes.com', +'count858.51yes.com', +'count859.51yes.com', +'count86.51yes.com', +'count860.51yes.com', +'count861.51yes.com', +'count862.51yes.com', +'count863.51yes.com', +'count864.51yes.com', +'count865.51yes.com', +'count866.51yes.com', +'count867.51yes.com', +'count868.51yes.com', +'count869.51yes.com', +'count87.51yes.com', +'count870.51yes.com', +'count871.51yes.com', +'count872.51yes.com', +'count873.51yes.com', +'count874.51yes.com', +'count875.51yes.com', +'count876.51yes.com', +'count877.51yes.com', +'count878.51yes.com', +'count879.51yes.com', +'count88.51yes.com', +'count880.51yes.com', +'count881.51yes.com', +'count882.51yes.com', +'count883.51yes.com', +'count884.51yes.com', +'count885.51yes.com', +'count886.51yes.com', +'count887.51yes.com', +'count888.51yes.com', +'count889.51yes.com', +'count89.51yes.com', +'count890.51yes.com', +'count891.51yes.com', +'count892.51yes.com', +'count893.51yes.com', +'count894.51yes.com', +'count895.51yes.com', +'count896.51yes.com', +'count897.51yes.com', +'count898.51yes.com', +'count899.51yes.com', +'count9.51yes.com', +'count90.51yes.com', +'count900.51yes.com', +'count901.51yes.com', +'count902.51yes.com', +'count903.51yes.com', +'count904.51yes.com', +'count905.51yes.com', +'count906.51yes.com', +'count907.51yes.com', +'count908.51yes.com', +'count909.51yes.com', +'count91.51yes.com', +'count910.51yes.com', +'count911.51yes.com', +'count912.51yes.com', +'count913.51yes.com', +'count914.51yes.com', +'count915.51yes.com', +'count916.51yes.com', +'count917.51yes.com', +'count918.51yes.com', +'count919.51yes.com', +'count92.51yes.com', +'count920.51yes.com', +'count921.51yes.com', +'count922.51yes.com', +'count923.51yes.com', +'count924.51yes.com', +'count925.51yes.com', +'count926.51yes.com', +'count927.51yes.com', +'count928.51yes.com', +'count929.51yes.com', +'count93.51yes.com', +'count930.51yes.com', +'count931.51yes.com', +'count932.51yes.com', +'count933.51yes.com', +'count934.51yes.com', +'count935.51yes.com', +'count936.51yes.com', +'count937.51yes.com', +'count938.51yes.com', +'count939.51yes.com', +'count94.51yes.com', +'count940.51yes.com', +'count941.51yes.com', +'count942.51yes.com', +'count943.51yes.com', +'count944.51yes.com', +'count945.51yes.com', +'count946.51yes.com', +'count947.51yes.com', +'count948.51yes.com', +'count949.51yes.com', +'count95.51yes.com', +'count950.51yes.com', +'count951.51yes.com', +'count952.51yes.com', +'count953.51yes.com', +'count954.51yes.com', +'count955.51yes.com', +'count956.51yes.com', +'count957.51yes.com', +'count958.51yes.com', +'count959.51yes.com', +'count96.51yes.com', +'count960.51yes.com', +'count961.51yes.com', +'count962.51yes.com', +'count963.51yes.com', +'count964.51yes.com', +'count965.51yes.com', +'count966.51yes.com', +'count967.51yes.com', +'count968.51yes.com', +'count969.51yes.com', +'count97.51yes.com', +'count970.51yes.com', +'count971.51yes.com', +'count972.51yes.com', +'count973.51yes.com', +'count974.51yes.com', +'count975.51yes.com', +'count976.51yes.com', +'count977.51yes.com', +'count978.51yes.com', +'count979.51yes.com', +'count98.51yes.com', +'count980.51yes.com', +'count981.51yes.com', +'count982.51yes.com', +'count983.51yes.com', +'count984.51yes.com', +'count985.51yes.com', +'count986.51yes.com', +'count987.51yes.com', +'count988.51yes.com', +'count989.51yes.com', +'count99.51yes.com', +'count990.51yes.com', +'count991.51yes.com', +'count992.51yes.com', +'count993.51yes.com', +'count994.51yes.com', +'count995.51yes.com', +'count996.51yes.com', +'count997.51yes.com', +'count998.51yes.com', +'count999.51yes.com', +'counted.com', +'counted.de', +'counter.1i.kz', +'counter.adultrevenueservice.com', +'counter.aport.ru', +'counter.awempire.com', +'counter.bizland.com', +'counter.blogoscoop.net', +'counter.bloke.com', +'counter.bravenet.com', +'counter.caliro.de', +'counter.cnw.cz', +'counter.cyberschnuffi.de', +'counter.cz', +'counter.dreamhost.com', +'counter.execpc.com', +'counter.fatcow.com', +'counter.fateback.com', +'counter.fc2.com', +'counter.gamespy.com', +'counter.goingup.com', +'counter.gorodmsk.ru', +'counter.hackers.lv', +'counter.hitbox.com', +'counter.hitslink.com', +'counter.hitslinks.com', +'counter.htmlvalidator.com', +'counter.hyipexplorer.com', +'counter.inetusa.com', +'counter.kmindex.ru', +'counter.ksm.it', +'counter.li.org', +'counter.maases.com', +'counter.megaindex.ru', +'counter.monkeybanana3.com', +'counter.mtree.com', +'counter.mycomputer.com', +'counter.nn.ru', +'counter.nope.dk', +'counter.nowlinux.com', +'counter.opensuse.org', +'counter.opinion.com.ua', +'counter.pagesview.com', +'counter.photopulse.ru', +'counter.powweb.com', +'counter.pr-cy.ru', +'counter.promodeejay.net', +'counter.rambler.ru', +'counter.rapidcounter.com', +'counter.relmaxtop.com', +'counter.rian.ru', +'counter.rootsweb.com', +'counter.russiansubmitter.com', +'counter.scribblelive.com', +'counter.search.bg', +'counter.sexsuche.tv', +'counter.sparklit.com', +'counter.spylog.com', +'counter.superstats.com', +'counter.theconversation.edu.au', +'counter.top.dkd.it', +'counter.top.ge', +'counter.top.kg', +'counter.topping.com.ua', +'counter.tripod.com', +'counter.ukr.net', +'counter.w3open.com', +'counter.wapstart.ru', +'counter.wbtiger.mmska.ru', +'counter.webmart.de', +'counter.webmedia.pl', +'counter.xeanon.com', +'counter.yadro.ru', +'counter.zeit.de', +'counter.zone.ee', +'counter.ztgame.com', +'counter1.bravenet.com', +'counter1.sextracker.be', +'counter1.sextracker.com', +'counter10.bravenet.com', +'counter10.sextracker.be', +'counter10.sextracker.com', +'counter11.bravenet.com', +'counter11.sextracker.be', +'counter11.sextracker.com', +'counter12.bravenet.com', +'counter12.sextracker.be', +'counter12.sextracker.com', +'counter13.bravenet.com', +'counter13.sextracker.be', +'counter13.sextracker.com', +'counter14.bravenet.com', +'counter14.sextracker.be', +'counter14.sextracker.com', +'counter15.bravenet.com', +'counter15.sextracker.be', +'counter15.sextracker.com', +'counter16.bravenet.com', +'counter16.sextracker.be', +'counter16.sextracker.com', +'counter160.com', +'counter17.bravenet.com', +'counter18.bravenet.com', +'counter19.bravenet.com', +'counter2.bravenet.com', +'counter2.freeware.de', +'counter2.hitbox.com', +'counter2.hitslink.com', +'counter2.sextracker.be', +'counter2.sextracker.com', +'counter20.bravenet.com', +'counter21.bravenet.com', +'counter22.bravenet.com', +'counter23.bravenet.com', +'counter24.bravenet.com', +'counter25.bravenet.com', +'counter26.bravenet.com', +'counter27.bravenet.com', +'counter28.bravenet.com', +'counter29.bravenet.com', +'counter3.bravenet.com', +'counter3.sextracker.be', +'counter3.sextracker.com', +'counter30.bravenet.com', +'counter31.bravenet.com', +'counter32.bravenet.com', +'counter33.bravenet.com', +'counter34.bravenet.com', +'counter35.bravenet.com', +'counter36.bravenet.com', +'counter37.bravenet.com', +'counter38.bravenet.com', +'counter39.bravenet.com', +'counter4.bravenet.com', +'counter4.sextracker.be', +'counter4.sextracker.com', +'counter40.bravenet.com', +'counter41.bravenet.com', +'counter42.bravenet.com', +'counter43.bravenet.com', +'counter44.bravenet.com', +'counter45.bravenet.com', +'counter46.bravenet.com', +'counter47.bravenet.com', +'counter48.bravenet.com', +'counter49.bravenet.com', +'counter5.bravenet.com', +'counter5.sextracker.be', +'counter5.sextracker.com', +'counter50.bravenet.com', +'counter6.bravenet.com', +'counter6.sextracker.be', +'counter6.sextracker.com', +'counter7.bravenet.com', +'counter7.sextracker.be', +'counter7.sextracker.com', +'counter8.bravenet.com', +'counter8.sextracker.be', +'counter8.sextracker.com', +'counter9.bravenet.com', +'counter9.sextracker.be', +'counter9.sextracker.com', +'counterattack.com', +'counterbot.com', +'counters.auctionwatch.com', +'counters.auctiva.com', +'counters.honesty.com', +'counters4u.com', +'counterservis.com', +'countess.twitch.tv', +'counting4free.com', +'countit.ch', +'countmaster.com', +'countmaster.superstats.com', +'countomat.com', +'countonline3.de', +'counts.tucows.com', +'countt.51yes.com', +'countus.editeurjavascript.com', +'countus1.editeurjavascript.com', +'countus2.editeurjavascript.com', +'countus3.editeurjavascript.com', +'countus4.editeurjavascript.com', +'countz.com', +'couponcp-a.akamaihd.net', +'couponcraze.com', +'coupondiscounts.com', +'coupondunia.go2cloud.org', +'coupons-inc.com', +'coupons4humanity.go2cloud.org', +'coverletsnmqnylq.download', +'covetkqoex.download', +'covusaffiliates.go2cloud.org', +'coxds.com', +'coxnetmasterglobal.112.2o7.net', +'coxpalmbeachpost.112.2o7.net', +'cp.abbp1.pw', +'cp.doublepimp.com', +'cp.intl.match.com', +'cp.pushwoosh.com', +'cp.routehero.com', +'cp.surf-town.net', +'cp1dk.voluumtrk.com', +'cpa.ly', +'cpaaltima.go2cloud.org', +'cpabrasil.go2cloud.org', +'cpadna1.com', +'cpadoc.com', +'cpafull.go2cloud.org', +'cpagrip.com', +'cpajizz.go2cloud.org', +'cpalead.com', +'cpanel.nativeads.com', +'cpapointer.com', +'cpaprohits.com', +'cparevenue.go2cloud.org', +'cparussia.go2cloud.org', +'cpasaw.go2cloud.org', +'cpaswag.go2cloud.org', +'cpatrac.com', +'cpatrackr.com', +'cpaway.afftrack.com', +'cpayard.com', +'cpays.com', +'cpcadnet.com', +'cpd8.net', +'cpfclassifieds.com', +'cpfvtest.2cnt.net', +'cplpro.go2cloud.org', +'cpm-plus.com', +'cpm.amateurcommunity.com', +'cpm.amateurcommunity.de', +'cpm.bazoto.com', +'cpm.biz', +'cpm.live6.com', +'cpm.tz4.com', +'cpm.wargaming.net', +'cpm.worldofwarplanes.com', +'cpm10.com', +'cpmcity.com', +'cpmfun.com', +'cpmland.com', +'cpmleader.com', +'cpmlove.com', +'cpmmaster.com', +'cpmstatsart.com', +'cpmtips.com', +'cpmtown.com', +'cpolixyndenisles.review', +'cpro.baidu.com', +'cpro.baidustatic.com', +'cpv2tracking.com', +'cpvads.com', +'cpx.acloudweb.com', +'cpx.go2cloud.org', +'cpx.golem.de', +'cpxcenter.com', +'cpxl.golem.de', +'cpxmobile.go2cloud.org', +'cqcounter.com', +'cqyoj.voluumtrk.com', +'cr.tractionize.com', +'crabbierfnffe.download', +'crackberry.us.intellitxt.com', +'crakmedia.com', +'craveandlamb.com', +'crd1.bannerbank.ru', +'creafi.com', +'create.leadid.com', +'createsend.com', +'createsend1.com', +'createsend3.com', +'createsend4.com', +'createsend5.com', +'creative-mobile.com', +'creative.360yield.com', +'creative.abestservers.com', +'creative.ad120m.com', +'creative.ad121m.com', +'creative.ad123m.com', +'creative.ad124m.com', +'creative.ad125m.com', +'creative.ad127m.com', +'creative.ad129m.com', +'creative.ad131m.com', +'creative.ad135m.com', +'creative.ad7m.com', +'creative.admtpmp127.com', +'creative.adonion.com', +'creative.apn.co.nz', +'creative.clicksor.com', +'creative.cpxcenter.com', +'creative.digitaltargetmarketing.com', +'creative.hatid.com', +'creative.m2pub.com', +'creative.metalyzer.com', +'creative.rev2pub.com', +'creative.speednetwork6.com', +'creative.whi.co.nz', +'creative.wwwpromoter.com', +'creative.xtendmedia.com', +'creative1cdn.mobfox.com', +'creativeby1.unicast.com', +'creativeby1.unicast.com.17578.9103.302br.net', +'creativeby1.unicast.com.17580.9103.302br.net', +'creativeby1.unicast.com.17582.9103.302br.net', +'creatives.as4x.tmcs.net', +'creatives.doubleclick.net', +'creatives.inmotionhosting.com', +'creatives.livejasmin.com', +'creatives.pichunter.com', +'creativestuff.com', +'creativos.ads.uigc.net', +'creativshik.justclick.ru', +'credit-cards.com', +'credit-cards.de', +'credit-cards.nl', +'credit-cards.org', +'creoads.com', +'cringersredtdw.download', +'crispads.com', +'crispadvertising.com', +'crispmedia.com', +'crispwireless.com', +'crittercism.com', +'crkld.voluumtrk.com', +'croondezztg.download', +'crossbeamstnmjmmh.download', +'crosspromotion.ubi.com', +'crowdcontrol.lotame.com', +'crowdscience.com', +'crtl.aimatch.com', +'crtracklink.com', +'crucial.com.112.207.net', +'crummockskubhke.download', +'crunchroll.com', +'crushads.com', +'crwdcntrl.net', +'crx92.voluumtrk.com', +'crxbh.voluumtrk.com', +'cs.adingo.jp', +'cs.adxpansion.com', +'cs.atdmt.com', +'cs.celebbusters.com', +'cs.exposedontape.com', +'cs.go.affec.tv', +'cs.ns1p.net', +'cs.sexcounter.com', +'cs1.livetex.ru', +'cs10.livetex.ru', +'cs11.livetex.ru', +'cs12.livetex.ru', +'cs13.livetex.ru', +'cs14.livetex.ru', +'cs15.livetex.ru', +'cs16.livetex.ru', +'cs17.livetex.ru', +'cs18.livetex.ru', +'cs19.livetex.ru', +'cs2.livetex.ru', +'cs20.livetex.ru', +'cs3.livetex.ru', +'cs4.livetex.ru', +'cs5.livetex.ru', +'cs6.livetex.ru', +'cs600.wpc.alphacdn.net', +'cs7.livetex.ru', +'cs8.livetex.ru', +'cs9.livetex.ru', +'csc.beap.bc.yahoo.com', +'cshoppingbox.partner.leguide.com', +'csi.gstatic.com', +'csnation.us.intellitxt.com', +'cso6i.voluumtrk.com', +'csstatic.com', +'cstrk.net', +'ct.adcenter.net', +'ct.cnet-ssa.cnet.com', +'ct.eid.co.nz', +'ct.itbusinessedge.com', +'ct.needlive.com', +'ct.sddan.com', +'ct.thegear-box.com', +'ct1.addthis.com', +'ct1.xrea.com', +'ct2.comclick.com', +'ct3.addthis.com', +'ct5.addthis.com', +'ct6z.addthis.com', +'ctn.go2cloud.org', +'ctnetwork.hu', +'ctr-iwb.nmg.de', +'ctr-opc.nmg.de', +'ctr.nmg.de', +'ctrack.trafficjunky.net', +'cts.businesswire.com', +'cts.snmmd.nl', +'cts.tradepub.com', +'cts.vresp.com', +'cttracking11.com', +'ctvsmokinggun.112.2o7.net', +'cu.genesismedia.com', +'cube.ign.us.intellitxt.com', +'cubegroup.go2cloud.org', +'cubismfdzqnurt.download', +'cuccu.me', +'cucdn.genesismedia.com', +'cujaz.voluumtrk.com', +'cullenderzsqemhqfz.download', +'culturaltpnxpr.download', +'cunda.122.2o7.net', +'cupidplc.go2cloud.org', +'cur.lv', +'curate.nestedmedia.com', +'curbstonexxteskqxv.download', +'custom.mobpartner.mobi', +'custom.serving-sys.com', +'customad.cnn.com', +'customds.serving-sys.com', +'customer.bnex.com', +'customer.heartinternet.co.uk', +'customize.netster.com', +'custommediainc.go2cloud.org', +'cutestuf.com', +'cutterbuck.com', +'cuty.doublepimp.com', +'cv26u.voluumtrk.com', +'cvbgjnunslain.review', +'cvt.mydas.mobi', +'cw1k9.voluumtrk.com', +'cw5jp.voluumtrk.com', +'cwdvm.voluumtrk.com', +'cwdwb.voluumtrk.com', +'cws.psccint.com', +'cwsitetrack.com', +'cx.atdmt.com', +'cxad.cxense.com', +'cxdigitalmedia.com', +'cxw73.voluumtrk.com', +'cya2.net', +'cyberbounty.com', +'cyberclick.net', +'cyberclickagent.go2cloud.org', +'cyberwavemedia.com', +'cyclops.prod.untd.com', +'cyclops.untd.com', +'cyclothymewlheoh.download', +'cyhners.ero-advertising.com', +'cyk0d.voluumtrk.com', +'cyonix.to', +'cypcxeqocolluvies.review', +'cz8.clickzzs.nl', +'czrqs.voluumtrk.com', +'d.adcash.com', +'d.addelive.com', +'d.adroll.com', +'d.adx.io', +'d.adxcore.com', +'d.afftrx.com', +'d.agkn.com', +'d.annarbor.com', +'d.applovin.com', +'d.appsdt.com', +'d.audienceiq.com', +'d.billyaffcontent.com', +'d.btttag.com', +'d.chango.com', +'d.delivery45.com', +'d.delivery47.com', +'d.delivery49.com', +'d.delivery51.com', +'d.financenewsalert.com', +'d.foxadd.com', +'d.gettvwizard.com', +'d.ghostery.com', +'d.jazzedcdn.com', +'d.ligatus.com', +'d.mobpartner.mobi', +'d.moreover.com', +'d.p-td.com', +'d.plugrush.com', +'d.rapsio.com', +'d.recomendedsite.com', +'d.refinedads.com', +'d.rmgserving.com', +'d.skimresources.com', +'d.socdm.com', +'d.tds.adlabs.ru', +'d.thanksearch.com', +'d.turn.com', +'d.xp1.ru4.com', +'d.yimg.com', +'d.zeroredirect.com', +'d.zeroredirect1.com', +'d00.sina.com.cn', +'d06915f22873285e84a9-9954fed71f1f51f77e6d1b38cb5af421.r69.cf2.rackcdn.com', +'d07c-7e2c-3ef0-1b99.reporo.net', +'d1.c6.b3.a0.top.list.ru', +'d1.sc.omtrdc.net', +'d1.zedo.com', +'d1110e4.se', +'d12ulf131zb0yj.cloudfront.net', +'d13.zedo.com', +'d136-d24d-4fd4-38d1.reporo.net', +'d13czkep7ax7nj.cloudfront.net', +'d13im3ek7neeqp.cloudfront.net', +'d1447tq2m68ekg.cloudfront.net', +'d15gt9gwxw5wu0.cloudfront.net', +'d16.net', +'d173vqb05g6hza.cloudfront.net', +'d17f2fxw547952.cloudfront.net', +'d19972r8wdpby8.cloudfront.net', +'d1af033869koo7.cloudfront.net', +'d1byvlfiet2h9q.cloudfront.net', +'d1cdnlzf6usiff.cloudfront.net', +'d1cerpgff739r9.cloudfront.net', +'d1cl1sqtf3o420.cloudfront.net', +'d1clfvuu2240eh.cloudfront.net', +'d1dnmhdhg9vg1d.cloudfront.net', +'d1eoo1tco6rr5e.cloudfront.net', +'d1ey3fksimezm4.cloudfront.net', +'d1fc8wv8zag5ca.cloudfront.net', +'d1fo96xm8fci0r.cloudfront.net', +'d1gojtoka5qi10.cloudfront.net', +'d1gp8joe0evc8s.cloudfront.net', +'d1ivexoxmp59q7.cloudfront.net', +'d1ksyxj9xozc2j.cloudfront.net', +'d1l6p2sc9645hc.cloudfront.net', +'d1lm7kd3bd3yo9.cloudfront.net', +'d1nkcqm1nusqof.cloudfront.net', +'d1noellhv8fksc.cloudfront.net', +'d1pcttwib15k25.cloudfront.net', +'d1pdpbxj733bb1.cloudfront.net', +'d1qpxk1wfeh8v1.cloudfront.net', +'d1rdh3xxuqlqfo.cloudfront.net', +'d1rgnfh960lz2b.cloudfront.net', +'d1tprjo2w7krrh.cloudfront.net', +'d1uwd25yvxu96k.cloudfront.net', +'d1z2jf7jlzjs58.cloudfront.net', +'d1zgderxoe1a.cloudfront.net', +'d2.zedo.com', +'d21aw2xov4zz0i.cloudfront.net', +'d21o24qxwf7uku.cloudfront.net', +'d23guct4biwna6.cloudfront.net', +'d23nyyb6dc29z6.cloudfront.net', +'d23p9gffjvre9v.cloudfront.net', +'d25ruj6ht8bs1.cloudfront.net', +'d26dzd2k67we08.cloudfront.net', +'d26j9bp9bq4uhd.cloudfront.net', +'d26wy0pxd3qqpv.cloudfront.net', +'d27jt7xr4fq3e8.cloudfront.net', +'d28ethi6slcjbm.cloudfront.net', +'d29gqcij.com', +'d29p64779x43zo.cloudfront.net', +'d29r6igjpnoykg.cloudfront.net', +'d2b2x1ywompm1b.cloudfront.net', +'d2b65ihpmocv7w.cloudfront.net', +'d2bgg7rjywcwsy.cloudfront.net', +'d2d2lbvq8xirbs.cloudfront.net', +'d2dq2ahtl5zl1z.cloudfront.net', +'d2gfdmu30u15x7.cloudfront.net', +'d2gi7ultltnc2u.cloudfront.net', +'d2gpgaupalra1d.cloudfront.net', +'d2gt9oovykfp1z.cloudfront.net', +'d2gtlljtkeiyzd.cloudfront.net', +'d2gz6iop9uxobu.cloudfront.net', +'d2hap2bsh1k9lw.cloudfront.net', +'d2mic0r0bo3i6z.cloudfront.net', +'d2mq0uzafv8ytp.cloudfront.net', +'d2nlytvx51ywh9.cloudfront.net', +'d2nq0f8d9ofdwv.cloudfront.net', +'d2o307dm5mqftz.cloudfront.net', +'d2oallm7wrqvmi.cloudfront.net', +'d2oh4tlt9mrke9.cloudfront.net', +'d2pgy8h4i30on1.cloudfront.net', +'d2plxos94peuwp.cloudfront.net', +'d2r359adnh3sfn.cloudfront.net', +'d2ry9vue95px0b.cloudfront.net', +'d2so4705rl485y.cloudfront.net', +'d2tgev5wuprbqq.cloudfront.net', +'d2tnimpzlb191i.cloudfront.net', +'d2ubicnllnnszy.cloudfront.net', +'d2uevgmgh16uk4.cloudfront.net', +'d2uzdrx7k4koxz.cloudfront.net', +'d2v9ajh2eysdau.cloudfront.net', +'d2vig74li2resi.cloudfront.net', +'d2vt6q0n0iy66w.cloudfront.net', +'d2wy8f7a9ursnm.cloudfront.net', +'d2xkqxdy6ewr93.cloudfront.net', +'d2yhukq7vldf1u.cloudfront.net', +'d2z1smm3i01tnr.cloudfront.net', +'d2zah9y47r7bi2.cloudfront.net', +'d3.condenast.servedbyopenx.com', +'d3.demo.servedbyopenx.com', +'d3.sc.omtrdc.net', +'d3.sina.com.cn', +'d3.zedo.com', +'d31bfnnwekbny6.cloudfront.net', +'d31qbv1cthcecs.cloudfront.net', +'d32pxqbknuxsuy.cloudfront.net', +'d33f10u0pfpplc.cloudfront.net', +'d34ko97cxuv4p7.cloudfront.net', +'d34obr29voew8l.cloudfront.net', +'d36lvucg9kzous.cloudfront.net', +'d37h3y471q0lt2.cloudfront.net', +'d37kzqe5knnh6t.cloudfront.net', +'d38pxm3dmrdu6d.cloudfront.net', +'d38r21vtgndgb1.cloudfront.net', +'d39xqloz8t5a6x.cloudfront.net', +'d3a2okcloueqyx.cloudfront.net', +'d3aa0ztdn3oibi.cloudfront.net', +'d3aq14vri881or.cloudfront.net', +'d3cxv97fi8q177.cloudfront.net', +'d3dc2aopftfkeo.cloudfront.net', +'d3dphmosjk9rot.cloudfront.net', +'d3emsmln8xfj03.cloudfront.net', +'d3ezl4ajpp2zy8.cloudfront.net', +'d3f9mcik999dte.cloudfront.net', +'d3fzrm6pcer44x.cloudfront.net', +'d3hlizmpi4g3v9.cloudfront.net', +'d3hmb5h5qngs7g.cloudfront.net', +'d3l3lkinz3f56t.cloudfront.net', +'d3lvr7yuk4uaui.cloudfront.net', +'d3lzezfa753mqu.cloudfront.net', +'d3m41swuqq4sv5.cloudfront.net', +'d3m83gvgzupli.cloudfront.net', +'d3mj0pkbugdjcn.cloudfront.net', +'d3mvnvhjmkxpjz.cloudfront.net', +'d3nslu0hdya83q.cloudfront.net', +'d3ojzyhbolvoi5.cloudfront.net', +'d3oltyb66oj2v8.cloudfront.net', +'d3pkae9owd2lcf.cloudfront.net', +'d3pkntwtp2ukl5.cloudfront.net', +'d3pkrll6is44dx.cloudfront.net', +'d3q2dpprdsteo.cloudfront.net', +'d3q6px0y2suh5n.cloudfront.net', +'d3qszud4qdthr8.cloudfront.net', +'d3qxef4rp70elm.cloudfront.net', +'d3rmnwi2tssrfx.cloudfront.net', +'d3s7ggfq1s6jlj.cloudfront.net', +'d3tdefw8pwfkbk.cloudfront.net', +'d3ujids68p6xmq.cloudfront.net', +'d3v1lb83psg9di.cloudfront.net', +'d3v27wwd40f0xu.cloudfront.net', +'d3vc1nm9xbncz5.cloudfront.net', +'d4.zedo.com', +'d5.zedo.com', +'d5e1ef2qzo-8108dl9wk1l8m59.hop.clickbank.net', +'d5grz.voluumtrk.com', +'d5nxst8fruw4z.cloudfront.net', +'d5pvnbpawsaav.cloudfront.net', +'d6.zedo.com', +'d6bdy3eto8fyu.cloudfront.net', +'d6hzz.survey7.adsservingtwig.xyz', +'d6y1.ads.pof.com', +'d6y2.ads.pof.com', +'d6y3.ads.pof.com', +'d7.zedo.com', +'d8.zedo.com', +'d81mfvml8p5ml.cloudfront.net', +'d844g.voluumtrk.com', +'d8qy7md4cj3gz.cloudfront.net', +'d8rk54i4mohrb.cloudfront.net', +'d9.zedo.com', +'d9ae99824.se', +'d9b05-pgfb01xj76ljh8o4sg3f.hop.clickbank.net', +'d9iwc.voluumtrk.com', +'d9uqd.voluumtrk.com', +'da.feedsportal.com', +'da.virginmedia.com', +'da5c8.voluumtrk.com', +'daaa.ero-advertising.com', +'dacgb.voluumtrk.com', +'daea.ero-advertising.com', +'dagasaka.com', +'dagek.voluumtrk.com', +'daggr.adsxgm.com', +'daghashmal.com', +'daia.ero-advertising.com', +'daidalos.twyn.com', +'daikoku.ebis.ne.jp', +'daily-traffic.com', +'dailydeals.amarillo.com', +'dailydeals.augustachronicle.com', +'dailydeals.brainerddispatch.com', +'dailydeals.lubbockonline.com', +'dailydeals.onlineathens.com', +'dailydeals.savannahnow.com', +'dailymotion-ams.gravityrd-services.com', +'dailyradar.ads.imaginemedia.net', +'dailyslut.net', +'dailyvideo.securejoin.com', +'dairyingsmorbjo.download', +'dal2.voxcloud.cedexis.com', +'dal9hkyfi0m0n.cloudfront.net', +'dampnesscoczbh.download', +'danieltan.evplayer.com', +'daniweb.us.intellitxt.com', +'danskebank.122.207.net', +'darriens.go2affise.com', +'dart.l.doubleclick.net', +'das5ku9q.com', +'dash.scorpiointeractive.com', +'dashboard.chartboost.com', +'dashboard.gumgum.com', +'dashboard.qubitproducts.com', +'dashboard.trafficforce.com', +'dat2.ero-advertising.com', +'data-ero-advertising.com', +'data-eroadvertising.com', +'data.adaptiveaudience.com', +'data.adexda.com', +'data.alexa.com', +'data.appflood.com', +'data.captifymedia.com', +'data.coremetrics.com', +'data.econa.com', +'data.ero-advertising.com', +'data.flurry.com', +'data.gametree.tw', +'data.gosquared.com', +'data.imakenews.com', +'data.initialcontroledge.info', +'data.kamcord.com', +'data.lockscalecompare.com', +'data.logentries.com', +'data.marketgid.com', +'data.mobclix.com', +'data.neuroxmedia.com', +'data.ninemsn.com.au', +'data.perion.com', +'data.permittingnorthlandseamen.info', +'data.ppn-ad-cdn.populis.com', +'data.publishflow.com', +'data.redhelper.ru', +'data.replacingobservedlose.info', +'data2.ero-advertising.com', +'data2.gosquared.com', +'data3.perf.overture.com', +'data9.econa.com', +'database.revmob.com', +'datais.ads.targetnet.com', +'datais.com', +'datalabusa.com', +'datamaster.com.cn', +'datametrical.com', +'datashreddergold.com', +'dataxu.com', +'date.ero-advertising.com', +'dating-banners.com', +'dating-exchange.com', +'dating.atraf.co.il', +'dating.ezstatic.com', +'datingadnetwork.com', +'datingnow.mobi', +'datingoffersmedia.go2cloud.org', +'datingsinglesfree.net', +'dats.ero-advertising.com', +'datt.ero-advertising.com', +'daua.ero-advertising.com', +'daudc.voluumtrk.com', +'dava.ero-advertising.com', +'daversion4.digitalbrandsinc.netdna-cdn.com', +'dawa.ero-advertising.com', +'daylogs.com', +'dayms.voluumtrk.com', +'daz.com', +'dazeurbht.download', +'db.bnex.com', +'db.c7.b3.a1.top.list.ru', +'db.hosting.doublepimp.com', +'db.hosting.rts.doublepimp.com', +'db.hosting.rts.fling.doublepimp.com', +'db.hosting.rts.lj.doublepimp.com', +'db.hosting.rts.phn.doublepimp.com', +'db.hosting.streamate.doublepimp.com', +'db0.net-filter.com', +'db0.sitestats.com', +'db1.sitestats.com', +'db2.hosting.doublepimp.com', +'db2.hosting.rts.doublepimp.com', +'db2.hosting.rts.fling.doublepimp.com', +'db2.hosting.rts.lj.doublepimp.com', +'db2.hosting.rts.phn.doublepimp.com', +'db2.hosting.streamate.doublepimp.com', +'db2.net-filter.com', +'db2.sitestats.com', +'db3.net-filter.com', +'db3.sitestats.com', +'db4.net-filter.com', +'db4.sitestats.com', +'db5.net-filter.com', +'db5.sitestats.com', +'db6.net-filter.com', +'db6.sitestats.com', +'db6fz.voluumtrk.com', +'db7.net-filter.com', +'db7.sitestats.com', +'db8.net-filter.com', +'db8.sitestats.com', +'db9.sitestats.com', +'dbam.dashbida.com', +'dbbru.voluumtrk.com', +'dbbsrv.com', +'dbi1.surf-town.net', +'dbs-com-sg.b.appier.net', +'dbs.112.207.net', +'dbs.advertising.com', +'dbs.bitterstrawberry.org', +'dbt.adition.com', +'dbta.ero-advertising.com', +'dc.letv.com', +'dc.plussizetech.com', +'dc.services.visualstudio.com', +'dc.tremormedia.com', +'dc4d4996bc86498d8959-7dc0216bc6cc2f4ed239035dfc17235b.r83.cf3.rackcdn.com', +'dc84.s290.meetrics.net', +'dc8na2hxrj29i.cloudfront.net', +'dc8xl0ndzn2cb.cloudfront.net', +'dcad.watersoul.com', +'dcdd29eaa743c493e732-7dc0216bc6cc2f4ed239035dfc17235b.ssl.cf3.rackcdn.com', +'dcisw.voluumtrk.com', +'dclk.net', +'dcs.netbiscuits.net', +'dcs.plussizetech.com', +'dcs.wtlive.com', +'dcvnupudgiest.review', +'dcw.1592878.com', +'dd.connextra.com', +'dd.myapp.com', +'ddefvibhjwoolfat.review', +'ddfnmo6ev4fd.cloudfront.net', +'ddgmb.voluumtrk.com', +'ddi2.com', +'ddnk.advertur.ru', +'ddqhn.voluumtrk.com', +'ddwht76d9jvfl.cloudfront.net', +'de-ipd.cdn.videoplaza.tv', +'de.2.cqcounter.com', +'de.adition.com', +'de.adserver.yahoo.com', +'de.cb.b0.a1.top.mail.ru', +'de.ioam.de', +'de.nedstat.net', +'de.sensic.net', +'de.sitestat.com', +'de.tynt.com', +'de.web.planet49.com', +'de2.ipinkvisualpass.com', +'de8of677fyt0b.cloudfront.net', +'dealcatcher.com', +'dealchicken.go2cloud.org', +'dealhelper.com', +'dealmedia.utsandiego.com', +'deals.buxr.net', +'deals.macupdate.com', +'dealsaust.go2cloud.org', +'dealsfor.me', +'dean.doublepimp.com', +'deanmediagroup.com', +'debadu.com', +'debenturessqpwls.download', +'debsfunpages.com', +'debug.adfarm1.adition.com', +'debug.adition.com', +'debugger.zedo.com', +'decide.mixpanel.com', +'declip.crakmedia.snaxxx.tv', +'dedicatedads.go2cloud.org', +'deepcom.com', +'deepervbjacffg.download', +'deerberrynveztw.download', +'defeatismbmakiplm.download', +'defshop01.webtrekk.net', +'degivuladles.review', +'dehaj.voluumtrk.com', +'deignsgcngub.download', +'dejavu.mercadolivre.com.br', +'dejavu.mlapps.com', +'delfinproject.go2cloud.org', +'deliciousbrains.go2cloud.org', +'delishows.com', +'delivere.com', +'delivery-asia-northeast-1.servedbyopenx.com', +'delivery-europe-west-1.servedbyopenx.com', +'delivery-us-east-1.servedbyopenx.com', +'delivery-us-west-1.servedbyopenx.com', +'delivery.a.switchadhub.com', +'delivery.adscension.com', +'delivery.adstheaa.com', +'delivery.advanseads.com', +'delivery.advert-layer.de', +'delivery.anchorfree.us', +'delivery.broker.to', +'delivery.brokerbabe.com', +'delivery.first-impression.com', +'delivery.hornyspots.com', +'delivery.optimatic.com', +'delivery.preprod.trafficjunky.net', +'delivery.swid.switchads.com', +'delivery.switchadhub.com', +'delivery.trafficbroker.com', +'delivery.trafficforce.com', +'delivery.trafficjunky.net', +'delivery.uauniverse.com', +'delivery.us.myswitchads.com', +'delivery.yieldoptimisers.net', +'delivery04.dhe.ibm.com', +'delivery1.trafficjunky.net', +'delivery2.trafficjunky.net', +'delivery3.trafficjunky.net', +'delivery4.trafficjunky.net', +'delivery5.trafficjunky.net', +'delivery6.trafficjunky.net', +'delivery9.trafficjunky.net', +'deliverymailsysytem.co.uk', +'deloo.de', +'deloton.com', +'delta210.rtb.appier.net', +'delta223.homestead.com', +'delta244.rtb.appier.net', +'deltaairlines.tt.omtrdc.net', +'demandbase.com', +'demandmedia.s3.amazonaws.com', +'demarketing.go2cloud.org', +'demo.adsender.us', +'demo.advertising.com', +'demo.cj.com', +'demo.idg.com.au', +'demo.kissmetrics.com', +'demo.yeahmobi.com', +'demo.zedo.com', +'demos.zedo.com', +'demotionstjjrntd.download', +'denofgeek.uk.intellitxt.com', +'dentaliumseeldbz.download', +'denver.cbslocal.us.intellitxt.com', +'denverpost.112.2o7.net', +'depesche01.webtrekk.net', +'depici.2cnt.net', +'depositphotos.go2cloud.org', +'derigina.justclick.ru', +'deriversal.com', +'derlatas.com', +'dermadoctoraffiliates.com', +'derstand.oewabox.at', +'derstandard.nuggad.net', +'des.smartclip.net', +'desalinateorixnpf.download', +'designweekly.co.cc', +'desistancetslsdgppv.download', +'desk.cmix.org', +'deskwww.s3.amazonaws.com', +'desmoidqqzopi.download', +'destricso.com', +'deta.ero-advertising.com', +'detect.ergebnis-dienst.de', +'detector.apptornado.com', +'detik.serving-sys.com', +'deucodialytic.review', +'dev.adsender.us', +'dev.ajc.cimedia.com', +'dev.alphagirlz.mobi', +'dev.ap1.alphagirlz.mobi', +'dev.ap2.alphagirlz.mobi', +'dev.bnex.com', +'dev.demdex.net', +'dev.flurry.com', +'dev.mundomediainc.com', +'dev.skyhookwireless.com', +'dev.springboardplatform.com', +'dev.visualwebsiteoptimizer.com', +'devadmin.cimedia.com', +'developer.anscamobile.com', +'device-metrics-us-2.amazon.com', +'device.4seeresults.com', +'device.maxmind.com', +'device.zhiliaoapp.com', +'devil.go2cloud.org', +'devolapgt.com', +'devsalliemaecom.112.2o7.net', +'devshed.us.intellitxt.com', +'dezaz.voluumtrk.com', +'df.telemetry.microsoft.com', +'dfccgatkeoverworks.review', +'dfd8-789c-33b8-f419.reporo.net', +'dfdbz2tdq3k01.cloudfront.net', +'dff7tx5c2qbxc.cloudfront.net', +'dfp.doubleclick.net', +'dfpreports.doubleclick.net', +'dgird.voluumtrk.com', +'dh956.com', +'dhmonitor.dinaserver.com', +'dhsmarthouse.122.2o7.net', +'di1.shopping.com', +'di63.shoppingshadow.com', +'dialerporn.com', +'dianomioffers.co.uk', +'dibmarketing.go2cloud.org', +'dickssgmobile.btttag.com', +'dicl9.voluumtrk.com', +'dictyqijwr.download', +'dicynodonttglahbvl.download', +'didit.com', +'didtal.com', +'didtheyreadit.com', +'dieting.searchwho.com', +'diff.smartadserver.com', +'diff2.smartadserver.com', +'diff3.smartadserver.com', +'digdug.divxnetworks.com', +'digiaffiliate.go2cloud.org', +'digibrand.go2cloud.org', +'digital.datalabusa.com', +'digitaladvisor.go2cloud.org', +'digitaldsp.com', +'digitalfernsehen.de.intellitxt.com', +'digitalngo.com', +'digitalone.go2cloud.org', +'digitalsalesmedia.go2cloud.org', +'digitrack.go2cloud.org', +'digits.com', +'digiwebmarketing.go2cloud.org', +'digiwebtracking.go2cloud.org', +'dihgq.voluumtrk.com', +'dihitt.com', +'dilhd.voluumtrk.com', +'dimorphicbwwjmwvh.download', +'dingecraitos.download', +'diplozoonhswtvx.download', +'direct-revenue.com', +'direct-stats.com', +'direct-xxx-access.com', +'direct.apptornado.com', +'direct.reporo.net', +'direct.tekblue.net', +'direct.travelocity.com', +'directads.epom.com', +'directads.mcafee.com', +'directadvert.ru', +'directbrand.com', +'directfreebies.com', +'directleads.com', +'directleads.net', +'directory.linkshare.com', +'directory.snapshot.toolbar.conduit-services.com', +'directrev.blob.core.windows.net', +'directrev.cloudapp.net', +'directstuff.com', +'directvalue.nl', +'dirli.voluumtrk.com', +'dis.criteo.com', +'dis.eu.criteo.com', +'dis.us.criteo.com', +'dischannel.112.2o7.net', +'discloserwdojtmjb.download', +'discountclick.com', +'discoverapps.appia.com', +'discoverexactly.com', +'diseaseless.com', +'disgustingsjnhmuv.download', +'disjoiningjfdxyogp.download', +'dismalitydbjmfaux.download', +'disney.2cnt.net', +'dispatch.admixer.co.kr', +'dispatcher.oewabox.at', +'displacedijnnd.download', +'display.adsender.us', +'display.online-adnetwork.com', +'display.provenpixel.com', +'displayad.layer-ad.org', +'displayadserv.adsimilate.com', +'displayadsmedia.com', +'displayincloud.adk2.co', +'disqusads.com', +'dist.belnk.com', +'distillery.wistia.com', +'distortiveecynxpidy.download', +'distrelec-02.webtrekk.net', +'disy2s34euyqm.cloudfront.net', +'diversifymarketing.go2cloud.org', +'dj.renren.com', +'dj1.baidu.com', +'djlf5xdlz7m8m.cloudfront.net', +'dk.adserver.yahoo.com', +'dk49j.voluumtrk.com', +'dk8u3.voluumtrk.com', +'dkd69bwkvrht1.cloudfront.net', +'dkdwv3lcby5zi.cloudfront.net', +'dkj2m377b0yzw.cloudfront.net', +'dl.adshooter.com', +'dl.alphagirlz.mobi', +'dl.clicktraffix.com', +'dl1d2m8ri9v3j.cloudfront.net', +'dl392qndlveq0.cloudfront.net', +'dlapf.voluumtrk.com', +'dlixv.voluumtrk.com', +'dlsear.com', +'dltags.com', +'dltrk.com', +'dlupv9uqtjlie.cloudfront.net', +'dlvr.adne.tv', +'dlvr.readserver.net', +'dlvr.t-online.de', +'dm-online.de', +'dm.travelocity.com', +'dm0acvguygm9h.cloudfront.net', +'dm8srf206hien.cloudfront.net', +'dmdrogerie01.webtrekk.net', +'dmeserv.newsinc.com', +'dmexco.adition.com', +'dmg.digitaltarget.ru', +'dmgt.grapeshot.co.uk', +'dmm.tt.omtrdc.net', +'dmp.springserve.com', +'dmp.theadex.com', +'dmpnetwork.go2cloud.org', +'dmros.ysm.yahoo.com', +'dmtracker.com', +'dn.adzerver.com', +'dn3y71tq7jf07.cloudfront.net', +'dna2.mookie1.com', +'dnads.directnic.com', +'dnb.doubleclick.net', +'dneprliga.justclick.ru', +'dnhgz729v27ca.cloudfront.net', +'dnn506yrbagrg.cloudfront.net', +'dns-01.ns.aol.com', +'dns1.schoffstall.com', +'dnssec-nd.gexperiments1.com', +'dnssec-vd.gexperiments2.com', +'dnsstat.com', +'dntx.com', +'dnxek.voluumtrk.com', +'do.you.uh.yahoo.at.bnex.com', +'docs.adition.com', +'docs.applifier.com', +'docs.apptornado.com', +'docs.chartbeat.com', +'docs.chartboost.com', +'docs.demdex.net', +'docs.openx.com', +'docs.performancerevenues.com', +'docs.zedo.com', +'doctortrusted.org', +'dodderssbsczsaao.download', +'dodkinlsautvfo.download', +'dogcustom-works.com', +'dogpile.112.2o7.net', +'dohillright.com', +'dohod-inet.justclick.ru', +'doldrumspijyzkdx.download', +'doll.home.ro', +'dolphinsfootball.com', +'domain.gabia.com', +'domainoptions.engine.adglare.net', +'domains.googlesyndication.com', +'domainsponsor.com', +'domainsteam.de', +'domanialtmiqjsrc.download', +'domdex.com', +'dominoad.com', +'dompark.dadapro.com', +'domseo.com.edgesuite.net', +'done.witchcraftcash.com', +'donkeymails.com', +'dontblockme.modaco.com', +'donval.112.2o7.net', +'doozymob.go2affise.com', +'doqby.voluumtrk.com', +'dorapodorasham.com', +'dorsiflexzobyojlh.download', +'dot.eporner.com', +'dot.wp.pl', +'dot2.eporner.com', +'dotcom-monitor.com', +'dotcommedia.de', +'dotlight.2cnt.net', +'doubleclic.com', +'doubleclick-analytics.com', +'doubleclick.com', +'doubleclick.d4p.net', +'doubleclick.de', +'doubleclick.ne.jp', +'doubleclick.net', +'doubleclick.net.24489.9178.302br.net', +'doubleclick.net.25665.9190.302br.net', +'doubleclick.net.29193.9215.302br.net', +'doubleclick.net.30961.9240.302br.net', +'doubleclick.net.34561.9252.302br.net', +'doubleclick.net.40316.9309.302br.net', +'doubleclick.net.40928.9313.302br.net', +'doubleclick.net.42485.9322.302br.net', +'doubleclick.net.44821.9338.302br.net', +'doubleclick.net.44824.9338.302br.net', +'doubleclick.net.44902.9339.302br.net', +'doubleclick.net.45577.9279.302br.net', +'doubleclick.net.47979.9357.302br.net', +'doubleclick.net.47985.9357.302br.net', +'doubleclick.net.48907.9318.302br.net', +'doubleclick.net.49072.9361.302br.net', +'doubleclick.net.50391.9279.302br.net', +'doubleclick.net.51232.9318.302br.net', +'doubleclick.net.51253.9318.302br.net', +'doubleclick.net.51271.9318.302br.net', +'doubleclick.net.57222.9406.302br.net', +'doubleclick.net.57240.9406.302br.net', +'doubleclick.net.57371.9231.302br.net', +'doubleclick.net.57407.9166.302br.net', +'doubleclick.net.60984.9336.302br.net', +'doubleclick.net.62908.9347.302br.net', +'doubleclick.net.63870.9465.302br.net', +'doubleclick.net.65115.9496.302br.net', +'doubleclick.net.67026.9521.302br.net', +'doubleclick.net.67029.9521.302br.net', +'doubleclick.net.67569.9336.302br.net', +'doubleclick.net.68330.9418.302br.net', +'doubleclick.net.68348.9418.302br.net', +'doubleclick.net.69538.9566.302br.net', +'doubleclick.net.69565.9569.302br.net', +'doubleclick.net.69658.9575.302br.net', +'doubleclick.net.69664.9575.302br.net', +'doubleclick.net.70298.9589.302br.net', +'doubleclick.net.73104.9616.302br.net', +'doubleclick.net.73728.9620.302br.net', +'doubleclick.net.76168.9635.302br.net', +'doubleclick.net.77648.9663.302br.net', +'doubleclick.net.77654.9663.302br.net', +'doubleclick.net.80252.9336.302br.net', +'doubleclick.shockwave.com', +'doubledeepclick.com', +'doug1izaerwt3.cloudfront.net', +'dowlatow.justclick.ru', +'downbursteefxriuvb.download', +'download.akamaitools.com.edgesuite.net', +'download.hitbox.com', +'download.pchubs.com', +'download.scorecardresearch.com', +'download.timesink.com', +'downloadandsave-a.akamaihd.net', +'downloadcounter.de', +'downloads.default-homepage-network.com', +'downloads.kissmetrics.com', +'dp.g.doubleclick.net', +'dp51h10v6ggpa.cloudfront.net', +'dpdds.voluumtrk.com', +'dpfyq.voluumtrk.com', +'dpgoo.voluumtrk.com', +'dpjxu.voluumtrk.com', +'dpm.bluray-disc.de', +'dpm.demdex.net', +'dpm.zebestof.com', +'dpmno.voluumtrk.com', +'dpmsrv.com', +'dpp750yjcl65g.cloudfront.net', +'dprtb.com', +'dps.bing.com', +'dq2tgxnc2knif.cloudfront.net', +'dqs001.adtech.fr', +'dr8pk6ovub897.cloudfront.net', +'drabbersgpauijt.download', +'dragon1.visits.lt', +'dragon145.visits.lt', +'dragonballzhomeland.com', +'dramafever.go2cloud.org', +'drawbrid.ge', +'drb34.voluumtrk.com', +'drd.hauchi.com.tw', +'dreammates.112.2o7.net', +'dreamsearch.or.kr', +'drinkmy.com', +'drippler.helpshift.com', +'drive.richbanner.ru', +'drive.videoclick.ru', +'driver.skyhookwireless.com', +'drivotracker.com', +'drogomet.com', +'droguevnmkkti.download', +'drosstik.com', +'drp60gfj3y9kn.cloudfront.net', +'drrey.voluumtrk.com', +'drtserver.com', +'drugscom.us.intellitxt.com', +'drumcash.com', +'ds-aksb-a.akamaihd.net', +'ds-cc.serving-sys.com', +'ds-vn.serving-sys.com', +'ds.eyeblaster.com', +'ds.ign.us.intellitxt.com', +'ds.serving-sys.com', +'ds1.nl', +'dsct1.com', +'dsgretaillimited.tt.omtrdc.net', +'dsjuu.voluumtrk.com', +'dsm.doubleclick.net', +'dsmmadvantage.com', +'dsmreports.doubleclick.net', +'dsms0mj1bbhn4.cloudfront.net', +'dsnr.net', +'dsnrmg.com', +'dsnrmg.go2affise.com', +'dsosvbpuhw.download', +'dsp.adfarm1.adition.com', +'dsp.adkernel.com', +'dsp.bnmla.com', +'dspcluster.adfarm1.adition.com', +'dsply.com', +'dssja7qsifeak.cloudfront.net', +'dsum.casalemedia.com', +'dsyxv.voluumtrk.com', +'dt.302br.net', +'dt.adsafeprotected.com', +'dt.doubleclick.net.12016.9038.302br.net', +'dt.doubleclick.net.12022.9038.302br.net', +'dt.scanscout.com', +'dt.sellpoint.net', +'dt.videohub2.tv', +'dtf.goyavelab.com', +'dtkm4pd19nw6z.cloudfront.net', +'dtlilztwypawv.cloudfront.net', +'dtm.advertising.com', +'dtrck.xyz', +'dts.akamai.startappexchange.com', +'dtta.ero-advertising.com', +'dtym7iokkjlif.cloudfront.net', +'du8783wkf05yr.cloudfront.net', +'dualstack.cloudinary.com', +'duba.net', +'dubich91119.justclick.ru', +'dufue2m4sondk.cloudfront.net', +'dumbfoundrurjldk.download', +'dumedia.ru', +'dupue.voluumtrk.com', +'duramenswaxsjhmqt.download', +'durre.freestats.com', +'dust.ipfingerprint.com', +'duv3c.voluumtrk.com', +'dv.bitterstrawberry.com', +'dv1970.freestats.com', +'dv1ih.voluumtrk.com', +'dv4uxy777adjt.cloudfront.net', +'dvdbeats.com', +'dvnzx.voluumtrk.com', +'dw-eu.com.com', +'dw.cnet.com', +'dw.com.com', +'dwb54.voluumtrk.com', +'dwn.pushtraffic.net', +'dwxmyiyf7jg6.cloudfront.net', +'dx.steelhousemedia.com', +'dx5qvhwg92mjd.cloudfront.net', +'dxq6c0tx3v6mm.cloudfront.net', +'dxqd86uz345mg.cloudfront.net', +'dy21q.voluumtrk.com', +'dy48bnzanqw0v.cloudfront.net', +'dycpc40hvg4ki.cloudfront.net', +'dyhju.voluumtrk.com', +'dyl3p6so5yozo.cloudfront.net', +'dynamic.aol.com', +'dynamic.fmpub.net', +'dynamic.mediaadserver.com', +'dynamic.woolik.com', +'dynamyn.go2affise.com', +'dync.c.appier.net', +'dyntraq.mtree.com', +'dypbo.voluumtrk.com', +'dzccl.voluumtrk.com', +'e-2dj6wfk4ggdzkbo.stats.esomniture.com', +'e-2dj6wfkikjd5glq.stats.esomniture.com', +'e-2dj6wfkiokc5odp.stats.esomniture.com', +'e-2dj6wflicocjklo.stats.esomniture.com', +'e-2dj6wflikgdpodo.stats.esomniture.com', +'e-2dj6wfloenczmkq.stats.esomniture.com', +'e-2dj6wjk4amd5mfp.stats.esomniture.com', +'e-2dj6wjkooid5scq.stats.esomniture.com', +'e-2dj6wjkowjajcbo.stats.esomniture.com', +'e-2dj6wjkyandpogq.stats.esomniture.com', +'e-2dj6wjkycpdzckp.stats.esomniture.com', +'e-2dj6wjkyqmdzcgo.stats.esomniture.com', +'e-2dj6wjkysndzigp.stats.esomniture.com', +'e-2dj6wjl4qhd5kdo.stats.esomniture.com', +'e-2dj6wjliehcjglp.stats.esomniture.com', +'e-2dj6wjlignajgaq.stats.esomniture.com', +'e-2dj6wjlyamdpogo.stats.esomniture.com', +'e-2dj6wjnyagcpkko.stats.esomniture.com', +'e-2dj6wjnyeocpcdo.stats.esomniture.com', +'e-2dj6wjnygidjskq.stats.esomniture.com', +'e-2dj6wjnyqkajabp.stats.esomniture.com', +'e-bannerx.com', +'e-communications.insidebandwidth.com', +'e-hpaces.ero-advertising.com', +'e-ltvp.inmobi.com', +'e-n.y-1shz2prbmdj6wvny-1sez2pra2dj6wjmyepdzadpwudj6x9ny-1seq-2-2.stats.esomniture.com', +'e-ny.a-1shz2prbmdj6wvny-1sez2pra2dj6wjny-1jcpgbowsdj6x9ny-1seq-2-2.stats.esomniture.com', +'e-tracker.de', +'e-zeeinternet.com', +'e.admob.com', +'e.ai.inmobi.com', +'e.digitalnectar.co.uk', +'e.domob.cn', +'e.ligatus.com', +'e.monetate.net', +'e.nexac.com', +'e.ofuda.cc', +'e.performancerevenues.com', +'e.qq.com', +'e.rmgserving.com', +'e.tdmagroup.com', +'e.thanksearch.com', +'e.yeahmobi.com', +'e.yieldmanager.net', +'e.zedo.com', +'e.zeroredirect.com', +'e.zeroredirect1.com', +'e0.extreme-dm.com', +'e0c8a237dc02264dcf1d3df6c7c0cfa6.adk2.co', +'e1.extreme-dm.com', +'e1.static.hoptopboy.com', +'e1.zedo.com', +'e14f-a9f5-54dd-d269.reporo.net', +'e2.emediate.se', +'e2.extreme-dm.com', +'e2.static.hoptopboy.com', +'e250a.track4.com', +'e32e0c3c972d179cd1d0-1847ac4c91d55b307d162b6d5ad07fe3.r71.cf2.rackcdn.com', +'e46fa8d94b17745ac277-ae524ab82d83e9108c081b44b53c4ff2.r94.cf2.rackcdn.com', +'e4sa0.voluumtrk.com', +'e64cf.voluumtrk.com', +'e85440ec98f04725.com', +'e89.friendfinder.com', +'e8obj.voluumtrk.com', +'e97527f0.se', +'e9mlrvy1.com', +'ea.fleurancenature.fr', +'ea.rueducommerce.fr', +'eadexchange.com', +'eads-com01.webtrekk.net', +'eads.com', +'eads.nl', +'eads.org', +'eafl3.voluumtrk.com', +'earntosurf.com', +'earthlinkcom.122.2o7.net', +'earthlnkcom.122.2o7.net', +'eas4.emediate.eu', +'easilyask.com', +'easilytrack.com', +'east.ads.simpli.fi', +'easyhitcounters.com', +'easyhits4u.com', +'easypoll.superstats.com', +'easypolls.superstats.com', +'easyscopes.net', +'easyspace.com', +'eat-travel.apx.appier.net', +'eatthis.com', +'eb0ej.voluumtrk.com', +'ebao.duba.net', +'ebay.northernhost.com', +'ebay4u.justclick.ru', +'ebayadvertising.com', +'ebayobjects.com.au', +'ebayrelevancead.webmasterplan.com', +'ebe3-ad9d-992b-3990.reporo.net', +'ebocornac.com', +'ebonyhead.com', +'ebtmarketing.com', +'ebvjw.voluumtrk.com', +'ec-ns.sascdn.com', +'ec.atdmt.com', +'ec.tynt.com', +'ec01c392919812c4f818-79afe539d963810002081e6e2a51e67e.ssl.cf2.rackcdn.com', +'ec1.hitbox.com', +'ec2-54-171-97-32.eu-west-1.compute.amazonaws.com', +'ec2-54-225-149-4.compute-1.amazonaws.com', +'ec2-54-235-183-132.compute-1.amazonaws.com', +'ec90-e3eb-7fb8-2a1c.reporo.net', +'ecdn.firstimpression.io', +'echo.teasernet.com', +'echo4.bluehornet.com', +'echofonads.appspot.com', +'eclick.baidu.com', +'eclkmpbn.com', +'eclkmpsa.com', +'ecnxsufmoshing.review', +'ecomcon.go2cloud.org', +'ecommerce.go2cloud.org', +'ecommercetimes.us.intellitxt.com', +'econa.met.vgwort.de', +'econda.web.de', +'economica.2cnt.net', +'economizerfmtwfqxv.download', +'ecoupons.com', +'ecoverage.go2cloud.org', +'ecpm.adbooth.com', +'ecpmrocks.com', +'ectestlampsplus1.112.2o7.net', +'ectropionqybhnovh.download', +'ed.koeln.de', +'edge.aperture.displaymarketplace.com', +'edge.ayboll.com', +'edge.bredg.com', +'edge.jeetyetmedia.com', +'edge.mb.gammae.com', +'edge.quantserve.com', +'edge.reporo.net', +'edge.sharethis.com', +'edgy.demo.sproutinc.com', +'edidomus01.webtrekk.net', +'editorial.outbrain.com', +'edk5y.voluumtrk.com', +'edmundscom.112.2o7.net', +'edomz.com', +'edsa.122.2o7.net', +'edskes.com.site-id.nl', +'edusearch.go2cloud.org', +'edusuccessdev.122.2o7.net', +'edw.edmunds.com', +'edwlifes.vo.llnwd.net', +'ee01gws.advertising.com', +'ee01hmq.advertising.com', +'ee01job.advertising.com', +'ee02gws.advertising.com', +'ee02hmq.advertising.com', +'ee12gp4.advertising.com', +'ee74ff81b44.se', +'ee8f928b71ed0dc6033231fa0943d9f5.adsk2.co', +'eeb06878.qqc.co', +'eeczfihelicopter.review', +'eedclicks.ero-advertising.com', +'eezy.plxserve.com', +'efanguide.us.intellitxt.com', +'effeminatejfghoxdji.download', +'efoods.go2cloud.org', +'efront.com', +'egnfa.voluumtrk.com', +'egolina.com', +'ehc-e-healthlinks.122.2o7.net', +'ehc-justepilepsy.122.2o7.net', +'ehealthcaresolutions.com', +'ehealthforum.us.intellitxt.com', +'ehg-acdsystems.hitbox.com', +'ehg-adeptscience.hitbox.com', +'ehg-adobe1p.hitbox.com', +'ehg-aha.hitbox.com', +'ehg-akagourmet.hitbox.com', +'ehg-amerix.hitbox.com', +'ehg-ati.hitbox.com', +'ehg-att2.hitbox.com', +'ehg-attenza.hitbox.com', +'ehg-attworldnet.hitbox.com', +'ehg-autodesk.hitbox.com', +'ehg-autotrader.hitbox.com', +'ehg-backweb.hitbox.com', +'ehg-bareweb.hitbox.com', +'ehg-bbc.hitbox.com', +'ehg-bestbuy.hitbox.com', +'ehg-bizjournals.hitbox.com', +'ehg-bmwna.hitbox.com', +'ehg-bskyb.hitbox.com', +'ehg-cafepress.hitbox.com', +'ehg-careerbuilder.hitbox.com', +'ehg-cbs.hitbox.com', +'ehg-chrysler.hitbox.com', +'ehg-cisco.hitbox.com', +'ehg-citrixonline.hitbox.com', +'ehg-clearchannel.hitbox.com', +'ehg-closetmaid.hitbox.com', +'ehg-comcast.hitbox.com', +'ehg-cometsystems.hitbox.com', +'ehg-commjun.hitbox.com', +'ehg-communityconnect.hitbox.com', +'ehg-comscore.hitbox.com', +'ehg-crain.hitbox.com', +'ehg-cygnusbm.hitbox.com', +'ehg-datamonitor.hitbox.com', +'ehg-dig.hitbox.com', +'ehg-eckounlimited.hitbox.com', +'ehg-espn.hitbox.com', +'ehg-exoteric.hitbox.com', +'ehg-findlaw.hitbox.com', +'ehg-foundation.hitbox.com', +'ehg-foxmovies.hitbox.com', +'ehg-foxsports.hitbox.com', +'ehg-fredericks.hitbox.com', +'ehg-groceryworks.hitbox.com', +'ehg-guardian.hitbox.com', +'ehg-hasbro.hitbox.com', +'ehg-himedia.hitbox.com', +'ehg-hitent.hitbox.com', +'ehg-hollywood.hitbox.com', +'ehg-idg.hitbox.com', +'ehg-idgentertainment.hitbox.com', +'ehg-ignitemedia.hitbox.com', +'ehg-imedia.hitbox.com', +'ehg-intel.hitbox.com', +'ehg-ittoolbox.hitbox.com', +'ehg-itworldcanada.hitbox.com', +'ehg-jaygroup.hitbox.com', +'ehg-knightridder.hitbox.com', +'ehg-learningco.hitbox.com', +'ehg-legonewyorkinc.hitbox.com', +'ehg-lexmark.hitbox.com', +'ehg-liveperson.hitbox.com', +'ehg-lowermybills.hitbox.com', +'ehg-macpublishingllc.hitbox.com', +'ehg-macromedia.hitbox.com', +'ehg-majorbaseball.hitbox.com', +'ehg-maplesoft.hitbox.com', +'ehg-mccormick.hitbox.com', +'ehg-mh.hitbox.com', +'ehg-micron.hitbox.com', +'ehg-mindshare.hitbox.com', +'ehg-mtv.hitbox.com', +'ehg-mybc.hitbox.com', +'ehg-nestlepurinapetcare.hitbox.com', +'ehg-nestleusainc.hitbox.com', +'ehg-netapparel.hitbox.com', +'ehg-newegg.hitbox.com', +'ehg-newscientist.hitbox.com', +'ehg-nike.hitbox.com', +'ehg-nokiafin.hitbox.com', +'ehg-northjerseymediagroup.hitbox.com', +'ehg-novell.hitbox.com', +'ehg-oreilly.hitbox.com', +'ehg-pacifictheatres.hitbox.com', +'ehg-pcsecurityshield.hitbox.com', +'ehg-pennwell.hitbox.com', +'ehg-peoplesoft.hitbox.com', +'ehg-pharmacia.hitbox.com', +'ehg-playboy.hitbox.com', +'ehg-proflowers.hitbox.com', +'ehg-qualcomm.hitbox.com', +'ehg-quantumcorp.hitbox.com', +'ehg-redherring.hitbox.com', +'ehg-register.hitbox.com', +'ehg-rfa.hitbox.com', +'ehg-salonmedia.hitbox.com', +'ehg-samsungusa.hitbox.com', +'ehg-schwannssales.hitbox.com', +'ehg-silverpop.hitbox.com', +'ehg-sonybssc.hitbox.com', +'ehg-sonyelec.hitbox.com', +'ehg-sonyesolutions.hitbox.com', +'ehg-sonymusic.hitbox.com', +'ehg-sonyny.hitbox.com', +'ehg-space.hitbox.com', +'ehg-stampsdotcom.hitbox.com', +'ehg-studentuniverse.hitbox.com', +'ehg-superwarehouse.hitbox.com', +'ehg-systemax.hitbox.com', +'ehg-techtarget.hitbox.com', +'ehg-telecomitalia.hitbox.com', +'ehg-thomas.hitbox.com', +'ehg-tigerdirect.hitbox.com', +'ehg-tigerdirect2.hitbox.com', +'ehg-tmgolf.hitbox.com', +'ehg-topps.hitbox.com', +'ehg-tumbleweed.hitbox.com', +'ehg-ubisoft.hitbox.com', +'ehg-uniontrib.hitbox.com', +'ehg-verizoncommunications.hitbox.com', +'ehg-viacom.hitbox.com', +'ehg-vonage.hitbox.com', +'ehg-wachovia.hitbox.com', +'ehg-warnerbrothers.hitbox.com', +'ehg-wetseal.hitbox.com', +'ehg-win2000mag.hitbox.com', +'ehg-wizardsofthecoast.hitbox.com', +'ehg-womanswallstreet.hitbox.com', +'ehg-wss.hitbox.com', +'ehg-yakpak.hitbox.com', +'ehg-yellowpages.hitbox.com', +'ehg-zentropypartners.hitbox.com', +'ehg.hitbox.com', +'ehh7w.voluumtrk.com', +'ei.cnzz.com', +'eightfoldlogic.com', +'einets.com', +'einsfestivalliveaccount01.wt-eu02.net', +'ejbgr.voluumtrk.com', +'ejs.hitbox.com', +'ejs.moatads.com', +'eju10.voluumtrk.com', +'ejyav.voluumtrk.com', +'ek4de.voluumtrk.com', +'ekingkrmxzfpml.download', +'ekmpinpoint.co.uk', +'el.woolik.com', +'eld.jmp9.com', +'ele.2cnt.net', +'electorelyjs.download', +'elflockskmewxdzsq.download', +'elicitapp.com', +'elitecpamountain.go2cloud.org', +'elitepartner.msn.de', +'elitepartners.ru', +'elmo.crsspxl.com', +'eloqua.com', +'eltiempocitytv.112.2o7.net', +'eltiempocom.112.2o7.net', +'eltrafiko.com', +'em.offerx.co.uk', +'email-newsletters.com', +'email.advertising.com', +'email.crittercism.com', +'email.livejasmin.com', +'email.performancerevenues.com', +'email.yeahmobi.com', +'email666.com', +'emailcash.com.au', +'emailserving.com', +'emailworks.go2cloud.org', +'emap.admedia.net', +'emarketer.com', +'emarketing.ljhooker.com', +'emarketing.rmauctions.com', +'embarkingsztwot.download', +'embed.spokenlayer.com', +'embloomedobjqwpc.download', +'emc-emccom.122.2o7.net', +'emc-southafrica.122.2o7.net', +'emd10.medianext.com', +'emea-bidder.mathtag.com', +'emea-ukash.netmng.com', +'emediate.se', +'emeza-ch01.webtrekk.net', +'emeza-com01.webtrekk.net', +'emeza-de01.webtrekk.net', +'emng.libero.it', +'empathizewjrclcsh.download', +'empg.go2cloud.org', +'employ22.112.2o7.net', +'employ26.112.2o7.net', +'employeestnmsy.download', +'employment.112.2o7.net', +'emptinesslzajbffo.download', +'emsdirect.go2cloud.org', +'emsvr.com', +'emwsz.voluumtrk.com', +'en.adition.com', +'en.adtech.info', +'en.mywebzines.com', +'encomiumsenttlzhwt.download', +'encrypted.reporo.net', +'endow.com', +'enetwork.ncbuy.com', +'enews.bfast.com', +'enewsletters.ziffdavisinternet.com', +'enfintrouver.com', +'enforcertiuvhklj.download', +'engage.morespeck.com', +'engagebdr.com', +'engine.4dsply.com', +'engine.a.redditmedia.com', +'engine.adbooth.com', +'engine.adverserve.net', +'engine.adzerk.net', +'engine.airtransat.co.uk', +'engine.ap.bittorrent.com', +'engine.aviasales.ru', +'engine.avid.doublepimp.com', +'engine.bang.doublepimp.com', +'engine.billetmoinscher.com', +'engine.bingocams.com', +'engine.bitmedianetwork.com', +'engine.carbonads.com', +'engine.century.edocbuilder.com', +'engine.cpmwarez.com', +'engine.doublepimp.com', +'engine.edocbuilder.com', +'engine.espace.netavenir.com', +'engine.fl-ads.com', +'engine.fling.doublepimp.com', +'engine.manwin.doublepimp.com', +'engine.mobileapptracking.com', +'engine.multiview.com', +'engine.netanday.it', +'engine.partygaming.doublepimp.com', +'engine.pgmediaserve.com', +'engine.phn.doublepimp.com', +'engine.phptrader.com', +'engine.pianomedia.sk', +'engine.rk.doublepimp.com', +'engine.smartbn.ru', +'engine.statcount.com', +'engine.streamate.doublepimp.com', +'engine.trklnks.com', +'engine.webgozar.ir', +'engine.widespace.com', +'englobingoopmzqu.download', +'enhance.com', +'enigma.kissmetrics.com', +'enio.justclick.ru', +'eniro.d3.sc.omtrdc.net', +'enlacedpwcuphe.download', +'enlarget.com', +'enlightenment.secureshoppingbasket.com', +'enliven.org', +'enlnks.com', +'enpdx.voluumtrk.com', +'enrichment.moportals.com', +'enscl.com', +'ensyp.voluumtrk.com', +'entercasino.com', +'enterprise.hitbox.com', +'enterprisemediagroup.112.2o7.net', +'enterprisenewsmedia.122.2o7.net', +'entrepreneur.us.intellitxt.com', +'entrepreneurpoc.122.2o7.net', +'environment.searchwho.com', +'envy.2cnt.net', +'enzjptkr.com', +'enzxpkist.review', +'eo0c1.voluumtrk.com', +'eoleb.voluumtrk.com', +'eoredi.com', +'eosesd.org', +'ep73e.voluumtrk.com', +'epicgameads.com', +'epidm.edgesuite.net', +'epitaphistnyemzvxw.download', +'eplayer.clipsyndicate.com', +'epomads2.4shared.com', +'epotjriebeckite.review', +'epowernetworktrackerimages.s3.amazonaws.com', +'epxkb8zz4ssdv7b.global.ssl.fastly.net', +'eqads.com', +'eqgdx.voluumtrk.com', +'eqlhpcyzarosolios.review', +'eqs-redserver.appspot.com', +'equantum.com', +'equitymarketingsolutions.com', +'eqx.smartadserver.com', +'eratrf.com', +'ercva.com', +'erendri.com', +'erjbe.voluumtrk.com', +'ero-advertising.biz', +'ero-advertising.co.uk', +'ero-advertising.com', +'ero-advertising.de', +'ero-advertising.eu', +'ero-advertising.info', +'ero-advertising.nl', +'ero-advertising.org', +'eroadvertising.biz', +'eroadvertising.com', +'eroadvertising.eu', +'eroadvertising.info', +'eroadvertising.net', +'eroadvertising.nl', +'eroadvertising.org', +'eroanalysis.com', +'erogaliv.com', +'erotic.masterstats.com', +'error.2cnt.net', +'error.mobpartner.mobi', +'error.reporo.com', +'ers.ero-advertising.com', +'eruno.voluumtrk.com', +'eryield.jmp9.com', +'es.adserver.yahoo.com', +'es.cj.com', +'es.ero-advertising.com', +'es.nedstat.net', +'es.puritan.com', +'es.statcounter.com', +'escalatenetwork.com', +'escati.hypermart.net', +'escati.linkopp.net', +'esg.hitbox.com', +'esg5l.voluumtrk.com', +'eskimokay.bravejournal.com', +'esomniture.com', +'espolupracecz.go2cloud.org', +'espotting.com', +'espousershcota.download', +'esprit-at01.webtrekk.net', +'esprit-de01.webtrekk.net', +'esprit-fi01.webtrekk.net', +'esprit-fr01.webtrekk.net', +'esprit-nl01.webtrekk.net', +'esprit-uk01.webtrekk.net', +'esprit01.webtrekk.net', +'espritatssl.webtrekk.net', +'espritbessl.webtrekk.net', +'espritcoukssl.webtrekk.net', +'espritdessl.webtrekk.net', +'espritdkssl.webtrekk.net', +'espriteussl.webtrekk.net', +'espritfissl.webtrekk.net', +'espritfrssl.webtrekk.net', +'espritnlssl.webtrekk.net', +'espritshopchssl.webtrekk.net', +'esquare.go2cloud.org', +'essen-und-trinken.de.intellitxt.com', +'estadisticas.lanacion.com.ar', +'estadonline.publiguias.cl', +'estat.chez.com', +'estat.com', +'esylx.voluumtrk.com', +'et-code.ru', +'et.grabnetworks.com', +'et.nytimes.com', +'et.twyn-group.com', +'et.w.inmobi.com', +'etahub.com', +'eternalmobi.go2affise.com', +'ethicalads.net', +'ethn.io', +'etl.tindersparks.com', +'etlpa.voluumtrk.com', +'etonovosti.biz', +'etonovosti.net', +'etoys.bfast.com', +'etracker.com', +'etracker.de', +'etrader.kalahari.com', +'etrader.kalahari.net', +'etui.fs.ml.com', +'etvsg.voluumtrk.com', +'eu-adcenter.net', +'eu-gmtdmp.gd1.mookie1.com', +'eu-pn1.adserver.yahoo.com', +'eu-pn2.adserver.yahoo.com', +'eu-pn3.adserver.yahoo.com', +'eu-pn4.adserver.yahoo.com', +'eu-px.steelhousemedia.com', +'eu-u.openx.net', +'eu.a.volvelle.tech', +'eu.link.decideinteractive.com', +'eu.webprodcdn.com', +'eu.winninganswers.net', +'eu0.content-serve.net', +'eu1.madsone.com', +'eu1.snoobi.com', +'eu2.madsone.com', +'eu3.madsone.com', +'eucainemkjwgw.download', +'eulogiumalezquc.download', +'eurekacentral.go2cloud.org', +'euroathleticgreens.go2cloud.org', +'europe.adserver.yahoo.com', +'euros4click.de', +'eurosponsor.de', +'euus7.voluumtrk.com', +'euwidget.imshopping.com', +'ev.ib-ibi.com', +'evbeacon.godaddy.com', +'eveitoki.com', +'event-dev.adotsolution.com', +'event.adotsolution.com', +'event.adxpose.com', +'event.scorecardresearch.com', +'event.yoochoose.net', +'eventi.co.il', +'eventlog.inspsearchapi.com', +'eventlogger.soundcloud.com', +'events-us-east-1.ipredictive.com', +'events.foreseeresults.com', +'events.jotform.com', +'events.olark.com', +'events.realgravity.com', +'events.redditmedia.com', +'events.tremorhub.com', +'events.walla.co.il', +'everstring.com', +'everydayhealth.demdex.net', +'everyfreegift.com', +'everyscape.com', +'everythingbts.com', +'everythinghsrpple.download', +'evidencecleanergold.com', +'evisit.exeter.ac.uk', +'evita.ivwbox.de', +'evklj.voluumtrk.com', +'evo5-com-netmining.netmining.com', +'evs-hosted-14facd241e1c08.s3.amazonaws.com', +'evt.moatads.com', +'evtsl.voluumtrk.com', +'evwr.hitbox.com', +'ewordofmouth.com', +'ex.joyjasp.com', +'ex.mobmore.com', +'ex.puata.info', +'ex.umengcloud.com', +'exactinstall.com', +'exactseek.com', +'exacttarget.com', +'exad.mmo1vn.com', +'exadwese.us', +'exakj.voluumtrk.com', +'examnotes.us.intellitxt.com', +'excelpractic.justclick.ru', +'excelqjmtypxbd.download', +'exch-e.atdmt.com', +'exch-eu.atdmt.com', +'exch-w.atdmt.com', +'exch.quantcount.com', +'exch.quantserve.com', +'exchange-it.com', +'exchange.admailtiser.com', +'exchange.bg', +'exchange.tractionize.com', +'exchangead.com', +'exchangebanner.com', +'exchangeyb.admailtiser.com', +'exclaimsmwdgsle.download', +'exct.net', +'execulink.112.2o7.net', +'exfgumodulated.review', +'exit.doublepimp.com', +'exit.oxcash2.com', +'exit.xpays.com', +'exitdevil.com', +'exitexchange.com', +'exitfuel.com', +'exitingihrjdmytt.download', +'exitmoney.com', +'exmapro.go2cloud.org', +'exodusesnkkvycngt.download', +'exogamichkstnksb.download', +'exp.platform.glispa.com', +'expandsearchanswers.com', +'expansilehsnpjlpb.download', +'expbl2ro.xbox.com', +'expedia.ca.112.2o7.net', +'expert-offers.com', +'experts.us.intellitxt.com', +'expertvillage.us.intellitxt.com', +'export.newscube.de', +'exporterfpkvxr.download', +'ext.affaire.com', +'ext.host-tracker.com', +'ext.platinnetz.de', +'ext1.engageya.com', +'ext4.price.ru', +'external-lhr0-1.xx.fbcdn.net', +'external-lhr1-1.xx.fbcdn.net', +'external-lhr10-1.xx.fbcdn.net', +'external-lhr2-1.xx.fbcdn.net', +'external-lhr4-1.xx.fbcdn.net', +'external-lhr5-1.xx.fbcdn.net', +'external-lhr6-1.xx.fbcdn.net', +'external-lhr7-1.xx.fbcdn.net', +'external-lhr8-1.xx.fbcdn.net', +'external-lhr9-1.xx.fbcdn.net', +'externaldb.switchadhub.com', +'extntechnologies.us.intellitxt.com', +'extolmentstsxocupq.download', +'extra.wavecdn.net', +'extra33.com', +'extranet.ilius.net', +'extreme-dm.com', +'extremetracking.com', +'extremetracking.net', +'extzbxocracknels.review', +'ey.c.appier.net', +'ey4uh.voluumtrk.com', +'eyaxf.voluumtrk.com', +'eyeglassesmlldb.download', +'eyescream-com-tw.b.appier.net', +'ez-poll.superstats.com', +'ez-polls.superstats.com', +'ezbng.voluumtrk.com', +'ezcybersearch.com', +'ezec.co.uk', +'ezpoll.superstats.com', +'ezpolls.superstats.com', +'ezrsd.voluumtrk.com', +'eztexting.com', +'ezw0z.voluumtrk.com', +'f-js1.spotsniper.ru', +'f.aduwant.com', +'f.blogads.com', +'f.mol.im', +'f.pinid.com', +'f.rmgserving.com', +'f.securelinkcorp.com', +'f.staticlp.com', +'f.thanksearch.com', +'f.tracking.goodgamestudios.com', +'f.zeroredirect.com', +'f.zeroredirect1.com', +'f0nuq.voluumtrk.com', +'f1.ilivlite.com', +'f1bwg.voluumtrk.com', +'f2f2-e0e3-6b11-5f39.reporo.net', +'f2ncracker.112.2o7.net', +'f2nsmh.112.2o7.net', +'f2ntheage.112.2o7.net', +'f54d6bf2b1.se', +'f5da-aa36-cfa9-346f.reporo.net', +'f6xzw.voluumtrk.com', +'f72a-d3a4-0314-7b97.reporo.net', +'f74zc.voluumtrk.com', +'f8350e7c1.se', +'f9ojq.voluumtrk.com', +'fablingsmmidmlm.download', +'faceculture.justclick.ru', +'faceoff.112.2o7.net', +'fad-1104.nyc1.targetnet.com', +'fad-1111.nyc1.targetnet.com', +'fad-1113.nyc1.targetnet.com', +'fad-1114.nyc1.targetnet.com', +'fad-1115.nyc1.targetnet.com', +'fad-408.mtl4.targetnet.com', +'fad-411.mtl4.targetnet.com', +'fad-413.mtl4.targetnet.com', +'faeuz.voluumtrk.com', +'fairfax.cxsearch.cxense.com', +'faldagehvvbwm.download', +'falk.speedera.net', +'fan.twitch.tv', +'fandango.gcrd.co', +'fandangostore.wgiftcard.com', +'fangcffsne.download', +'fanners.ero-advertising.com', +'fanpop.tags.crwdcntrl.net', +'fansign.streamray.com', +'faradsfmbrdiejz.download', +'farfarida.com', +'farm.plista.com', +'farmer.wego.com', +'farmville2.visits.lt', +'fashiontrafficdemo.go2cloud.org', +'fast-route.com', +'fast.anz.demdex.net', +'fast.cam.demdex.net', +'fast.choice.demdex.net', +'fast.fedex.demdex.net', +'fast.finn.demdex.net', +'fast.forbes.com', +'fast.foxnews.demdex.net', +'fast.globo.demdex.net', +'fast.lenovo.demdex.net', +'fast.monster.demdex.net', +'fast.px.demdex.net', +'fast.qantas.demdex.net', +'fast.rbi.demdex.net', +'fast.rogers.demdex.net', +'fast.scripps.demdex.net', +'fastad.beepworld.de', +'fastads.swiftnews.com', +'fastadvert.com', +'fastclick.com', +'fastclick.com.edgesuite.net', +'fastcounter.com', +'fastcounter.linkexchange.net', +'fasteasytraffic.com', +'fastlinkfinder.com', +'fastonlinefinder.com', +'fastpopclick.com', +'fastpopunder.com', +'fasttrack.nu', +'fata.ero-advertising.com', +'fatads.toldya.com', +'faunus.go2affise.com', +'favoritismkwaqmz.download', +'faz.ivwbox.de', +'faz.met.vgwort.de', +'fb-nym.adnxs.com', +'fbgdc.com', +'fbkmnr.112.2o7.net', +'fbokvk.com.justclick.ru', +'fbtrack.webtrekk.net', +'fc.webmasterpro.de', +'fc4c-b275-b59b-7a32.reporo.net', +'fccl5.voluumtrk.com', +'fcd3-8570-6529-d8b7.reporo.net', +'fcds.affiliatetracking.net', +'fcgadgets.blogspot.com', +'fcged.voluumtrk.com', +'fcmads.go2affise.com', +'fcstats.altervista.org', +'fctdi.voluumtrk.com', +'fcvjhuzdcached.review', +'fdimages.fairfax.com.au', +'fdp5y.voluumtrk.com', +'fe-au.imrworldwide.com', +'fe.lea.lycos.es', +'fe1-au.imrworldwide.com', +'fe2-au.imrworldwide.com', +'fe3-au.imrworldwide.com', +'featousvzgzfinst.download', +'febadu.com', +'feclo.voluumtrk.com', +'fedex.demdex.net', +'fedex.tt.omtrdc.net', +'fedsit.com', +'feed.2makeyourday.press', +'feed.bizzclick.com', +'feed.peakclick.com', +'feed.snap.do', +'feedblitz.com', +'feedfetch.c.appier.net', +'feedjit.com', +'feeds.global-intermedia.com', +'feeds.logicbuy.com', +'feeds.mofos.com', +'feeds.tubecontext.com', +'feeds.webtrekk.com', +'feedshare.flipora.com', +'fegariesupzxx.download', +'felicityofxmgzq.download', +'felitb.rightinthebox.com', +'felliesgrlzafjb.download', +'femi9.voluumtrk.com', +'fenix-translation.com.ua', +'ferdy.org', +'fermakontenta.justclick.ru', +'ferrago.uk.intellitxt.com', +'fessr.voluumtrk.com', +'festeryfjejya.download', +'festologyqueudknaa.download', +'festoonedkyskjtmxv.download', +'ff.connextra.com', +'ffbqk.voluumtrk.com', +'fff.dailymail.co.uk', +'ffhvtest.2cnt.net', +'fftf-ips.heroku.com', +'ffxcam.fairfax.com.au', +'fg5aa.voluumtrk.com', +'fghmt.voluumtrk.com', +'fh1tz.voluumtrk.com', +'fh2ex.voluumtrk.com', +'fhatfee.ero-advertising.com', +'fhb9n.trackvoluum.com', +'fhg.iknowthatgirl.com', +'fhg.mofos.com', +'fhg.pervsonpatrol.com', +'fhg.realslutparty.com', +'fhlyo.voluumtrk.com', +'fhserve.com', +'fiacardservicesgroup.tt.omtrdc.net', +'fiafii.org', +'fideismmbertleo.download', +'fiesta-game.com', +'fifa.d2.sc.omtrdc.net', +'fiksu.com', +'filament-stats.herokuapp.com', +'filecm.net', +'files.adspdbl.com', +'files.chartboost.com', +'files.download-sponsor.de', +'fileserver.glam.com', +'filestore.adition.com', +'filetarget.net', +'fillymedia.go2affise.com', +'filmboxlive.go2cloud.org', +'filmforcedvd.ign.us.intellitxt.com', +'filter.adexchangemedia.xyz', +'filter.online-adnetwork.com', +'filter.onwardclick.com', +'filtertest.2cnt.net', +'fim.adnxs.com', +'fimserve.ign.com', +'finalizehmnzdo.download', +'finatime.ivwbox.de', +'findalternate.com', +'findanopportunity.com', +'findcommerce.com', +'findepended.com', +'findlisted.com', +'findnsave.idahostatesman.com', +'finduses.com', +'fineclicks.com', +'finen.voluumtrk.com', +'fingerhut.track4.com', +'finickingzepkzyw.download', +'finn.demdex.net', +'fips.uimserv.net', +'firecash.org', +'firecpa.com', +'firehunt.com', +'firetrck.com', +'firewall.timesink.com', +'firingsquad.us.intellitxt.com', +'firmingqubvlnepw.download', +'first.nova.cz', +'firstadnetwork.go2cloud.org', +'firstload.com', +'firstlook.com', +'firstname.com', +'firstsnfmlmlohq.download', +'fitness.searchwho.com', +'fitwoman.justclick.ru', +'fizzix.com', +'fjhtp.voluumtrk.com', +'fjlhf.voluumtrk.com', +'fjm0v.voluumtrk.com', +'fjz3c.voluumtrk.com', +'fjzwn.voluumtrk.com', +'fkm.go2cloud.org', +'fkref.com', +'fkyno.voluumtrk.com', +'fl.milesplit.com', +'fl01.ct2.comclick.com', +'flaconi02.webtrekk.net', +'flagship.asp-host.co.uk', +'flagstickidiambxee.download', +'flash-counter.com', +'flash.doubleclick-analytics.com', +'flash.quantserve.com', +'flashbanners.static.ard.xxxblackbook.com', +'flashstats.libsyn.com', +'flashtest.ero-advertising.com', +'flashvortex.com', +'flatdee.ero-advertising.com', +'flatex-at01.webtrekk.net', +'flatex-de01.webtrekk.net', +'flatfae.ero-advertising.com', +'flatfea.ero-advertising.com', +'flatfee.ero-advertising.com', +'fledn.voluumtrk.com', +'flensingiyflh.download', +'flex.msn.com', +'flexbanner.com', +'flexbeta.us.intellitxt.com', +'flexoffers.com', +'fliegen-sparen.de.intellitxt.com', +'flippermedia.go2cloud.org', +'flippermedia.hasoffers.com', +'flirt.youjizz.com', +'flixfacts.co.uk', +'floctwuupgrowing.review', +'flom.net', +'floppybank.com', +'floridasmb.go2cloud.org', +'flowgo.com', +'flowleadsmedia.go2cloud.org', +'fls-eu.amazon-adsystem.com', +'fls-eu.amazon.com', +'fls-eu.amazon.de', +'fls-fe.amazon-adsystem.com', +'fls-fe.amazon.co.jp', +'fls-na.amazon-adsystem.com', +'fls.doubleclick.net', +'flu.secureintl.com', +'fluentmobile.com', +'flurry.com', +'flvmoviesdownloader.com', +'flvyh.voluumtrk.com', +'flw.ero-advertising.com', +'flygo.ru', +'flyinads.com', +'fmaster.webtrekk.net', +'fmmlk.voluumtrk.com', +'fmpub.net', +'fmtv.go2cloud.org', +'fmydk.voluumtrk.com', +'fn.hgin.com', +'fnatfee.ero-advertising.com', +'focalink.com', +'focusin.com', +'focusworks.com', +'fodderingcuyrwzrwq.download', +'foditgoz.com', +'foi8q.voluumtrk.com', +'folksierkfxqlpc.download', +'followup.adlandpro.com', +'folloyu.com', +'fomentingbuutbsdi.download', +'foo.freelogs.com', +'forbes.us.intellitxt.com', +'forbescom.112.2o7.net', +'forcemovement.go2cloud.org', +'ford.demdex.net', +'forefeetwsjgg.download', +'foreign.marketgid.com', +'forelook.com', +'foreseeresults.com', +'forestvieweu.go2cloud.org', +'forex-expert.justclick.ru', +'forexac.justclick.ru', +'forexforecast.co.cc', +'forkitz.com', +'form-cdn.pardot.com', +'forms.ontraport.com', +'forskning.tns-cs.net', +'fortpush.com', +'forum-fok.digidip.net', +'forum.adspaces.ero-advertising.com', +'forum.ero-advertising.com', +'forum.livejasmin.com', +'forum.yeahmobi.com', +'forums.adspaces.ero-advertising.com', +'forums.data2.ero-advertising.com', +'forums.ero-advertising.com', +'forumwarz.s3.amazonaws.com', +'forwardleo.justclick.ru', +'fossilisedboxbkshj.download', +'fossilisesgcjrfazlr.download', +'fotocommunity.digidip.net', +'fourthgearmedia.go2cloud.org', +'foxarmedia.com', +'foxcom.112.2o7.net', +'foxgloveslyukq.download', +'foxnet.demdex.net', +'foxnews.tt.omtrdc.net', +'foxsimpsons.112.2o7.net', +'foxy.track4.com', +'foy4a.trackvoluum.com', +'foy4a.voluumtrk.com', +'fozdw.voluumtrk.com', +'fp.buy.com', +'fp.fraudmetrix.cn', +'fp.gad-network.com', +'fp108.digitaloptout.com', +'fpa.ero-advertising.com', +'fpctraffic.com', +'fpctraffic2.com', +'fpfts.voluumtrk.com', +'fpxrl.voluumtrk.com', +'fpzee.voluumtrk.com', +'fr-himedia.cdn.videoplaza.tv', +'fr.2.cqcounter.com', +'fr.adserver.yahoo.com', +'fr.nedstat.net', +'fr.sitestat.com', +'fra1.ib.adnxs.com', +'fra1.mobile.adnxs.com', +'fra10.ib.adnxs.com', +'fra100.ib.adnxs.com', +'fra101.ib.adnxs.com', +'fra102.ib.adnxs.com', +'fra103.ib.adnxs.com', +'fra104.ib.adnxs.com', +'fra105.ib.adnxs.com', +'fra106.ib.adnxs.com', +'fra107.ib.adnxs.com', +'fra108.ib.adnxs.com', +'fra109.ib.adnxs.com', +'fra11.ib.adnxs.com', +'fra110.ib.adnxs.com', +'fra111.ib.adnxs.com', +'fra112.ib.adnxs.com', +'fra113.ib.adnxs.com', +'fra114.ib.adnxs.com', +'fra115.ib.adnxs.com', +'fra116.ib.adnxs.com', +'fra117.ib.adnxs.com', +'fra118.ib.adnxs.com', +'fra119.ib.adnxs.com', +'fra12.ib.adnxs.com', +'fra120.ib.adnxs.com', +'fra121.ib.adnxs.com', +'fra122.ib.adnxs.com', +'fra123.ib.adnxs.com', +'fra124.ib.adnxs.com', +'fra125.ib.adnxs.com', +'fra126.ib.adnxs.com', +'fra127.ib.adnxs.com', +'fra128.ib.adnxs.com', +'fra129.ib.adnxs.com', +'fra13.ib.adnxs.com', +'fra130.ib.adnxs.com', +'fra131.ib.adnxs.com', +'fra132.ib.adnxs.com', +'fra133.ib.adnxs.com', +'fra134.ib.adnxs.com', +'fra135.ib.adnxs.com', +'fra136.ib.adnxs.com', +'fra137.ib.adnxs.com', +'fra138.ib.adnxs.com', +'fra139.ib.adnxs.com', +'fra14.ib.adnxs.com', +'fra140.ib.adnxs.com', +'fra141.ib.adnxs.com', +'fra142.ib.adnxs.com', +'fra143.ib.adnxs.com', +'fra144.ib.adnxs.com', +'fra145.ib.adnxs.com', +'fra146.ib.adnxs.com', +'fra147.ib.adnxs.com', +'fra148.ib.adnxs.com', +'fra149.ib.adnxs.com', +'fra15.ib.adnxs.com', +'fra150.ib.adnxs.com', +'fra151.ib.adnxs.com', +'fra152.ib.adnxs.com', +'fra153.ib.adnxs.com', +'fra154.ib.adnxs.com', +'fra155.ib.adnxs.com', +'fra156.ib.adnxs.com', +'fra157.ib.adnxs.com', +'fra158.ib.adnxs.com', +'fra159.ib.adnxs.com', +'fra16.ib.adnxs.com', +'fra160.ib.adnxs.com', +'fra161.ib.adnxs.com', +'fra162.ib.adnxs.com', +'fra163.ib.adnxs.com', +'fra164.ib.adnxs.com', +'fra165.ib.adnxs.com', +'fra166.ib.adnxs.com', +'fra167.ib.adnxs.com', +'fra168.ib.adnxs.com', +'fra169.ib.adnxs.com', +'fra17.ib.adnxs.com', +'fra170.ib.adnxs.com', +'fra171.ib.adnxs.com', +'fra172.ib.adnxs.com', +'fra173.ib.adnxs.com', +'fra174.ib.adnxs.com', +'fra175.ib.adnxs.com', +'fra176.ib.adnxs.com', +'fra177.ib.adnxs.com', +'fra178.ib.adnxs.com', +'fra179.ib.adnxs.com', +'fra18.ib.adnxs.com', +'fra180.ib.adnxs.com', +'fra181.ib.adnxs.com', +'fra182.ib.adnxs.com', +'fra183.ib.adnxs.com', +'fra184.ib.adnxs.com', +'fra185.ib.adnxs.com', +'fra186.ib.adnxs.com', +'fra187.ib.adnxs.com', +'fra188.ib.adnxs.com', +'fra189.ib.adnxs.com', +'fra19.ib.adnxs.com', +'fra190.ib.adnxs.com', +'fra191.ib.adnxs.com', +'fra192.ib.adnxs.com', +'fra193.ib.adnxs.com', +'fra194.ib.adnxs.com', +'fra195.ib.adnxs.com', +'fra196.ib.adnxs.com', +'fra197.ib.adnxs.com', +'fra198.ib.adnxs.com', +'fra199.ib.adnxs.com', +'fra2.ib.adnxs.com', +'fra20.ib.adnxs.com', +'fra200.ib.adnxs.com', +'fra201.ib.adnxs.com', +'fra202.ib.adnxs.com', +'fra203.ib.adnxs.com', +'fra204.ib.adnxs.com', +'fra205.ib.adnxs.com', +'fra206.ib.adnxs.com', +'fra207.ib.adnxs.com', +'fra208.ib.adnxs.com', +'fra209.ib.adnxs.com', +'fra21.ib.adnxs.com', +'fra210.ib.adnxs.com', +'fra211.ib.adnxs.com', +'fra212.ib.adnxs.com', +'fra213.ib.adnxs.com', +'fra214.ib.adnxs.com', +'fra215.ib.adnxs.com', +'fra216.ib.adnxs.com', +'fra217.ib.adnxs.com', +'fra218.ib.adnxs.com', +'fra219.ib.adnxs.com', +'fra22.ib.adnxs.com', +'fra220.ib.adnxs.com', +'fra221.ib.adnxs.com', +'fra222.ib.adnxs.com', +'fra223.ib.adnxs.com', +'fra224.ib.adnxs.com', +'fra225.ib.adnxs.com', +'fra226.ib.adnxs.com', +'fra227.ib.adnxs.com', +'fra228.ib.adnxs.com', +'fra229.ib.adnxs.com', +'fra23.ib.adnxs.com', +'fra230.ib.adnxs.com', +'fra231.ib.adnxs.com', +'fra232.ib.adnxs.com', +'fra233.ib.adnxs.com', +'fra234.ib.adnxs.com', +'fra235.ib.adnxs.com', +'fra236.ib.adnxs.com', +'fra237.ib.adnxs.com', +'fra238.ib.adnxs.com', +'fra239.ib.adnxs.com', +'fra24.ib.adnxs.com', +'fra240.ib.adnxs.com', +'fra241.ib.adnxs.com', +'fra242.ib.adnxs.com', +'fra243.ib.adnxs.com', +'fra244.ib.adnxs.com', +'fra245.ib.adnxs.com', +'fra246.ib.adnxs.com', +'fra247.ib.adnxs.com', +'fra248.ib.adnxs.com', +'fra249.ib.adnxs.com', +'fra25.ib.adnxs.com', +'fra250.ib.adnxs.com', +'fra251.ib.adnxs.com', +'fra252.ib.adnxs.com', +'fra253.ib.adnxs.com', +'fra254.ib.adnxs.com', +'fra255.ib.adnxs.com', +'fra256.ib.adnxs.com', +'fra257.ib.adnxs.com', +'fra258.ib.adnxs.com', +'fra259.ib.adnxs.com', +'fra26.ib.adnxs.com', +'fra260.ib.adnxs.com', +'fra261.ib.adnxs.com', +'fra262.ib.adnxs.com', +'fra263.ib.adnxs.com', +'fra264.ib.adnxs.com', +'fra265.ib.adnxs.com', +'fra266.ib.adnxs.com', +'fra267.ib.adnxs.com', +'fra268.ib.adnxs.com', +'fra269.ib.adnxs.com', +'fra27.ib.adnxs.com', +'fra270.ib.adnxs.com', +'fra271.ib.adnxs.com', +'fra272.ib.adnxs.com', +'fra273.ib.adnxs.com', +'fra274.ib.adnxs.com', +'fra275.ib.adnxs.com', +'fra276.ib.adnxs.com', +'fra277.ib.adnxs.com', +'fra278.ib.adnxs.com', +'fra279.ib.adnxs.com', +'fra28.ib.adnxs.com', +'fra280.ib.adnxs.com', +'fra281.ib.adnxs.com', +'fra282.ib.adnxs.com', +'fra283.ib.adnxs.com', +'fra284.ib.adnxs.com', +'fra285.ib.adnxs.com', +'fra286.ib.adnxs.com', +'fra287.ib.adnxs.com', +'fra288.ib.adnxs.com', +'fra289.ib.adnxs.com', +'fra29.ib.adnxs.com', +'fra290.ib.adnxs.com', +'fra291.ib.adnxs.com', +'fra292.ib.adnxs.com', +'fra293.ib.adnxs.com', +'fra294.ib.adnxs.com', +'fra295.ib.adnxs.com', +'fra296.ib.adnxs.com', +'fra297.ib.adnxs.com', +'fra298.ib.adnxs.com', +'fra299.ib.adnxs.com', +'fra3.ib.adnxs.com', +'fra30.ib.adnxs.com', +'fra300.ib.adnxs.com', +'fra301.ib.adnxs.com', +'fra302.ib.adnxs.com', +'fra303.ib.adnxs.com', +'fra304.ib.adnxs.com', +'fra305.ib.adnxs.com', +'fra306.ib.adnxs.com', +'fra307.ib.adnxs.com', +'fra308.ib.adnxs.com', +'fra309.ib.adnxs.com', +'fra31.ib.adnxs.com', +'fra310.ib.adnxs.com', +'fra311.ib.adnxs.com', +'fra312.ib.adnxs.com', +'fra313.ib.adnxs.com', +'fra314.ib.adnxs.com', +'fra315.ib.adnxs.com', +'fra316.ib.adnxs.com', +'fra317.ib.adnxs.com', +'fra318.ib.adnxs.com', +'fra319.ib.adnxs.com', +'fra32.ib.adnxs.com', +'fra320.ib.adnxs.com', +'fra321.ib.adnxs.com', +'fra322.ib.adnxs.com', +'fra323.ib.adnxs.com', +'fra324.ib.adnxs.com', +'fra325.ib.adnxs.com', +'fra326.ib.adnxs.com', +'fra327.ib.adnxs.com', +'fra328.ib.adnxs.com', +'fra329.ib.adnxs.com', +'fra33.ib.adnxs.com', +'fra330.ib.adnxs.com', +'fra331.ib.adnxs.com', +'fra332.ib.adnxs.com', +'fra333.ib.adnxs.com', +'fra334.ib.adnxs.com', +'fra335.ib.adnxs.com', +'fra336.ib.adnxs.com', +'fra337.ib.adnxs.com', +'fra338.ib.adnxs.com', +'fra339.ib.adnxs.com', +'fra34.ib.adnxs.com', +'fra340.ib.adnxs.com', +'fra341.ib.adnxs.com', +'fra342.ib.adnxs.com', +'fra343.ib.adnxs.com', +'fra344.ib.adnxs.com', +'fra345.ib.adnxs.com', +'fra346.ib.adnxs.com', +'fra347.ib.adnxs.com', +'fra348.ib.adnxs.com', +'fra349.ib.adnxs.com', +'fra35.ib.adnxs.com', +'fra350.ib.adnxs.com', +'fra351.ib.adnxs.com', +'fra352.ib.adnxs.com', +'fra353.ib.adnxs.com', +'fra354.ib.adnxs.com', +'fra355.ib.adnxs.com', +'fra356.ib.adnxs.com', +'fra357.ib.adnxs.com', +'fra358.ib.adnxs.com', +'fra359.ib.adnxs.com', +'fra36.ib.adnxs.com', +'fra360.ib.adnxs.com', +'fra361.ib.adnxs.com', +'fra362.ib.adnxs.com', +'fra363.ib.adnxs.com', +'fra364.ib.adnxs.com', +'fra365.ib.adnxs.com', +'fra366.ib.adnxs.com', +'fra367.ib.adnxs.com', +'fra368.ib.adnxs.com', +'fra369.ib.adnxs.com', +'fra37.ib.adnxs.com', +'fra370.ib.adnxs.com', +'fra371.ib.adnxs.com', +'fra372.ib.adnxs.com', +'fra373.ib.adnxs.com', +'fra374.ib.adnxs.com', +'fra375.ib.adnxs.com', +'fra376.ib.adnxs.com', +'fra377.ib.adnxs.com', +'fra378.ib.adnxs.com', +'fra379.ib.adnxs.com', +'fra38.ib.adnxs.com', +'fra380.ib.adnxs.com', +'fra381.ib.adnxs.com', +'fra382.ib.adnxs.com', +'fra383.ib.adnxs.com', +'fra384.ib.adnxs.com', +'fra385.ib.adnxs.com', +'fra386.ib.adnxs.com', +'fra387.ib.adnxs.com', +'fra388.ib.adnxs.com', +'fra389.ib.adnxs.com', +'fra39.ib.adnxs.com', +'fra390.ib.adnxs.com', +'fra391.ib.adnxs.com', +'fra392.ib.adnxs.com', +'fra393.ib.adnxs.com', +'fra394.ib.adnxs.com', +'fra395.ib.adnxs.com', +'fra396.ib.adnxs.com', +'fra397.ib.adnxs.com', +'fra398.ib.adnxs.com', +'fra399.ib.adnxs.com', +'fra4.ib.adnxs.com', +'fra40.ib.adnxs.com', +'fra400.ib.adnxs.com', +'fra401.ib.adnxs.com', +'fra402.ib.adnxs.com', +'fra403.ib.adnxs.com', +'fra404.ib.adnxs.com', +'fra405.ib.adnxs.com', +'fra406.ib.adnxs.com', +'fra407.ib.adnxs.com', +'fra408.ib.adnxs.com', +'fra409.ib.adnxs.com', +'fra41.ib.adnxs.com', +'fra410.ib.adnxs.com', +'fra411.ib.adnxs.com', +'fra412.ib.adnxs.com', +'fra413.ib.adnxs.com', +'fra414.ib.adnxs.com', +'fra415.ib.adnxs.com', +'fra416.ib.adnxs.com', +'fra417.ib.adnxs.com', +'fra418.ib.adnxs.com', +'fra419.ib.adnxs.com', +'fra42.ib.adnxs.com', +'fra420.ib.adnxs.com', +'fra421.ib.adnxs.com', +'fra422.ib.adnxs.com', +'fra423.ib.adnxs.com', +'fra424.ib.adnxs.com', +'fra425.ib.adnxs.com', +'fra426.ib.adnxs.com', +'fra427.ib.adnxs.com', +'fra428.ib.adnxs.com', +'fra429.ib.adnxs.com', +'fra43.ib.adnxs.com', +'fra430.ib.adnxs.com', +'fra431.ib.adnxs.com', +'fra432.ib.adnxs.com', +'fra433.ib.adnxs.com', +'fra434.ib.adnxs.com', +'fra435.ib.adnxs.com', +'fra436.ib.adnxs.com', +'fra437.ib.adnxs.com', +'fra438.ib.adnxs.com', +'fra439.ib.adnxs.com', +'fra44.ib.adnxs.com', +'fra440.ib.adnxs.com', +'fra441.ib.adnxs.com', +'fra442.ib.adnxs.com', +'fra443.ib.adnxs.com', +'fra444.ib.adnxs.com', +'fra445.ib.adnxs.com', +'fra446.ib.adnxs.com', +'fra447.ib.adnxs.com', +'fra448.ib.adnxs.com', +'fra449.ib.adnxs.com', +'fra45.ib.adnxs.com', +'fra450.ib.adnxs.com', +'fra451.ib.adnxs.com', +'fra452.ib.adnxs.com', +'fra453.ib.adnxs.com', +'fra454.ib.adnxs.com', +'fra455.ib.adnxs.com', +'fra456.ib.adnxs.com', +'fra457.ib.adnxs.com', +'fra458.ib.adnxs.com', +'fra459.ib.adnxs.com', +'fra46.ib.adnxs.com', +'fra460.ib.adnxs.com', +'fra461.ib.adnxs.com', +'fra462.ib.adnxs.com', +'fra463.ib.adnxs.com', +'fra464.ib.adnxs.com', +'fra465.ib.adnxs.com', +'fra466.ib.adnxs.com', +'fra467.ib.adnxs.com', +'fra468.ib.adnxs.com', +'fra469.ib.adnxs.com', +'fra47.ib.adnxs.com', +'fra470.ib.adnxs.com', +'fra471.ib.adnxs.com', +'fra472.ib.adnxs.com', +'fra473.ib.adnxs.com', +'fra474.ib.adnxs.com', +'fra475.ib.adnxs.com', +'fra476.ib.adnxs.com', +'fra477.ib.adnxs.com', +'fra478.ib.adnxs.com', +'fra479.ib.adnxs.com', +'fra48.ib.adnxs.com', +'fra480.ib.adnxs.com', +'fra481.ib.adnxs.com', +'fra482.ib.adnxs.com', +'fra483.ib.adnxs.com', +'fra484.ib.adnxs.com', +'fra485.ib.adnxs.com', +'fra486.ib.adnxs.com', +'fra487.ib.adnxs.com', +'fra488.ib.adnxs.com', +'fra489.ib.adnxs.com', +'fra49.ib.adnxs.com', +'fra490.ib.adnxs.com', +'fra491.ib.adnxs.com', +'fra492.ib.adnxs.com', +'fra493.ib.adnxs.com', +'fra494.ib.adnxs.com', +'fra495.ib.adnxs.com', +'fra496.ib.adnxs.com', +'fra497.ib.adnxs.com', +'fra498.ib.adnxs.com', +'fra499.ib.adnxs.com', +'fra5.ib.adnxs.com', +'fra50.ib.adnxs.com', +'fra500.ib.adnxs.com', +'fra51.ib.adnxs.com', +'fra52.ib.adnxs.com', +'fra53.ib.adnxs.com', +'fra54.ib.adnxs.com', +'fra55.ib.adnxs.com', +'fra56.ib.adnxs.com', +'fra57.ib.adnxs.com', +'fra58.ib.adnxs.com', +'fra59.ib.adnxs.com', +'fra6.ib.adnxs.com', +'fra60.ib.adnxs.com', +'fra61.ib.adnxs.com', +'fra62.ib.adnxs.com', +'fra63.ib.adnxs.com', +'fra64.ib.adnxs.com', +'fra65.ib.adnxs.com', +'fra66.ib.adnxs.com', +'fra67.ib.adnxs.com', +'fra68.ib.adnxs.com', +'fra69.ib.adnxs.com', +'fra7.ib.adnxs.com', +'fra70.ib.adnxs.com', +'fra71.ib.adnxs.com', +'fra72.ib.adnxs.com', +'fra73.ib.adnxs.com', +'fra74.ib.adnxs.com', +'fra75.ib.adnxs.com', +'fra76.ib.adnxs.com', +'fra77.ib.adnxs.com', +'fra78.ib.adnxs.com', +'fra79.ib.adnxs.com', +'fra8.ib.adnxs.com', +'fra80.ib.adnxs.com', +'fra81.ib.adnxs.com', +'fra82.ib.adnxs.com', +'fra83.ib.adnxs.com', +'fra84.ib.adnxs.com', +'fra85.ib.adnxs.com', +'fra86.ib.adnxs.com', +'fra87.ib.adnxs.com', +'fra88.ib.adnxs.com', +'fra89.ib.adnxs.com', +'fra9.ib.adnxs.com', +'fra90.ib.adnxs.com', +'fra91.ib.adnxs.com', +'fra92.ib.adnxs.com', +'fra93.ib.adnxs.com', +'fra94.ib.adnxs.com', +'fra95.ib.adnxs.com', +'fra96.ib.adnxs.com', +'fra97.ib.adnxs.com', +'fra98.ib.adnxs.com', +'fra99.ib.adnxs.com', +'fragmentserv.iac-online.de', +'fraisenyvno.download', +'france.bpath.com', +'frantic.com', +'frantro.de', +'frdupsdittays.review', +'freakingdwobhfh.download', +'freddyman.com', +'free-banners.com', +'free-counter.co.uk', +'free-counters.co.uk', +'free-stats.com', +'free-stats.i8.com', +'free.atdmt.com', +'free.livejasmin.com', +'free.realtracker.com', +'free.xxxcounter.com', +'free1.usa.realtracker.com', +'free2try.com', +'freebanner.com', +'freebe221.homestead.com', +'freebieclub.com', +'freebiesfrenzy.go2cloud.org', +'freecelebvideo.net', +'freecodecs.us.intellitxt.com', +'freecountersnow.com', +'freelogs.com', +'freemyapps.com', +'freepay.com', +'freepush.com', +'freeresultsguide.com', +'freerotator.com', +'freestat.pl', +'freestats.com', +'freevisits.com', +'freewarefiles.us.intellitxt.com', +'freewebcounter.com', +'freewha.com', +'freewrinklecream.com', +'freexxxvideoclip.aebn.net', +'fremescentptwvzl.download', +'fresh.doublepimp.com', +'fresh.techdirt.com', +'frestacero.com', +'freundin.ivwbox.de', +'frg.go2cloud.org', +'fricasseeidjcd.download', +'friendfindercash.com', +'friendlyduck.com', +'fritz.asnetworks.de', +'frivol-ads.com', +'frizzingaqrpioyby.download', +'frl.c.appier.net', +'frog.wix.com', +'frogsthemes.go2cloud.org', +'front.facetz.net', +'frontingfjwpsvis.download', +'frontletsvuesv.download', +'frontwardsxizrhchs.download', +'frtya.com', +'frtyb.com', +'frtye.com', +'fs.moatads.com', +'fsecfsecdev2.122.2o7.net', +'fsfsfsfsfsf.112.207.net', +'fsimedia.go2cloud.org', +'fsitel.com', +'fspsm.voluumtrk.com', +'fsvbh.voluumtrk.com', +'fsvxdwaggeries.review', +'fsvzj.voluumtrk.com', +'fswvj.voluumtrk.com', +'ft-snappy-02-debate.herokuapp.com', +'ftebd.voluumtrk.com', +'ftp.123banners.com', +'ftp.admex.com', +'ftp.control.123banners.com', +'ftp.kissmetrics.com', +'ftp.leadbolt.com', +'ftp.linksynergy.com', +'ftp.performancerevenues.com', +'ftp.skyhookwireless.com', +'ftp.track4.com', +'ftp.yeahmobi.com', +'ftp.zedo.com', +'ftr2.external.xerox.com', +'fu7fb.voluumtrk.com', +'fuauq.voluumtrk.com', +'fucktubenetwork.com', +'fugger.ipage.com', +'fulhudhoo.com', +'fun-town.com', +'fun.searchwho.com', +'fungamesmobile.com', +'funklicks.com', +'funkyd.2cnt.net', +'funniesslvqb.download', +'funny-postcards10.home.ro', +'funnygreetings.com', +'funstun.com', +'furthermobi.go2cloud.org', +'fusdc.voluumtrk.com', +'fuse.go2cloud.org', +'fusion.adtoma.com', +'fusionpmg.go2cloud.org', +'futurebazaar.go2cloud.org', +'futurenet.com', +'futurepay.globway.eu', +'futurex.go2affise.com', +'fvglt.voluumtrk.com', +'fw.adsafeprotected.com', +'fw.moatads.com', +'fw2zy.voluumtrk.com', +'fwdservice.com', +'fwocy.voluumtrk.com', +'fwpgw1.surf-town.net', +'fxj.realsecuredredirect.com', +'fxnvsyupprovender.review', +'fxox3.voluumtrk.com', +'fxstyle.net', +'fxt.go2cloud.org', +'fyber.com', +'fyhjs.voluumtrk.com', +'fyvzz.survey7.adsservingtwig.xyz', +'fywwy.voluumtrk.com', +'fz6wh.voluumtrk.com', +'fzab1.voluumtrk.com', +'fzgmq.voluumtrk.com', +'g-i2.com', +'g-pixel.invitemedia.com', +'g.3gl.net', +'g.adnxs.com', +'g.adspeed.net', +'g.atdmt.com', +'g.brothersoft.com', +'g.c.appier.net', +'g.delivery.net', +'g.msn.com', +'g.seoparts.net', +'g.websponsors.com', +'g.zedo.com', +'g.zeroredirect.com', +'g.zeroredirect1.com', +'g.zeroredirect2.com', +'g0ffs.voluumtrk.com', +'g11em.voluumtrk.com', +'g1vzn.voluumtrk.com', +'g2.gumgum.com', +'g3.us.intellitxt.com', +'g39yz.voluumtrk.com', +'g5.us.intellitxt.com', +'g9xzz.voluumtrk.com', +'ga.canoe.ca', +'ga.webdigi.co.uk', +'gabia.com', +'gadcreatives.glam.com', +'gads.ru', +'gae.caspion.com', +'gag.admulti.com', +'gail.hit.gemius.pl', +'galeriaseroticas.xpg.com.br', +'galleries1.justcreampie.com', +'gallery.apptornado.com', +'galleryoftheabsurd.us.intellitxt.com', +'gallsrpvzalfr.download', +'gallup.2cnt.net', +'galttech.com', +'gambleup.com', +'gamblingbanner.com', +'game-advertising-online.com', +'game4mobile.hayday.mobi', +'gameads-admin.applifier.com', +'gameads.digyourowngrave.com', +'gamefuse.go2cloud.org', +'gamehouse.com', +'gameleads.ru', +'gamescpc.com', +'gamingblast.com', +'gamingclub.com', +'gamingrealms.go2cloud.org', +'gamrfeed.vgchartz.com.9.302br.net', +'gan.doubleclick.net', +'gan.wavecdn.net', +'gannett.gcion.com', +'ganoinihrjk.download', +'gao.go2cloud.org', +'garbo.2cnt.net', +'garlanca.com', +'garnishersqcltox.download', +'garrigueatcuw.download', +'garristo.com', +'gata.ero-advertising.com', +'gateway-banner.eravage.com', +'gateway.adgatemedia.com', +'gateway.blamads.com', +'gateway.fortunelounge.com', +'gateways.s3.amazonaws.com', +'gatewaytracker.com', +'gather.hankyung.com', +'gator.com', +'gaxsumshicksa.review', +'gay.xxxcounter.com', +'gayadnetwork.com', +'gazzz.survey7.adsservingtwig.xyz', +'gb0qw.voluumtrk.com', +'gbotvisit.com', +'gbpeq.voluumtrk.com', +'gbtqw.voluumtrk.com', +'gc128.infusionsoft.com', +'gcamb.voluumtrk.com', +'gcounter.hosting4u.net', +'gcsbr.voluumtrk.com', +'gcumuobqjbullfight.review', +'gd.geobytes.com', +'gdc.indeed.com', +'ge1.ca', +'gear.ign.us.intellitxt.com', +'geegawmpuvidd.download', +'geekstogo.us.intellitxt.com', +'gelidlycupaq.download', +'gelzg.voluumtrk.com', +'gemgx.voluumtrk.com', +'geneme.go2cloud.org', +'generator.zdnet.com', +'genhit.com', +'genorithm.com', +'gentleygupqmdpm.download', +'geo.api.qualaroo.com', +'geo.cliphunter.com', +'geo.crtracklink.com', +'geo.deepmetrix.com', +'geo.hyperlinksecure.com', +'geo.metronews.ca', +'geo.mtvnn.com', +'geo.offermatica.com', +'geo.q5media.net', +'geo.query.yahoo.com', +'geo.safelinktracker.com', +'geo.startappservice.com', +'geo.yahoo.com', +'geo.ziffdavis.com', +'geo2.adobe.com', +'geobanner.adultfriendfinder.com', +'geobanner.alt.com', +'geobanner.blacksexmatch.com', +'geobanner.fuckbookhookups.com', +'geobanner.germanfriendfinder.com', +'geobanner.getiton.com', +'geobanner.sexfinder.com', +'geobanner.socialflirt.com', +'geobar.ziffdavisinternational.com', +'geobytes.com', +'geocities.bfast.com', +'geoip.al.com', +'geoip.infra-team.com', +'geoip.syracuse.com', +'geoip.taskforce.is', +'geoip.viamichelin.com', +'geoloc.appscion.com', +'geoloc1.geovisite.com', +'geoloc10.geovisite.com', +'geoloc100.geovisite.com', +'geoloc11.geovisite.com', +'geoloc12.geovisite.com', +'geoloc13.geovisite.com', +'geoloc14.geovisite.com', +'geoloc15.geovisite.com', +'geoloc16.geovisite.com', +'geoloc17.geovisite.com', +'geoloc18.geovisite.com', +'geoloc19.geovisite.com', +'geoloc2.geovisite.com', +'geoloc20.geovisite.com', +'geoloc21.geovisite.com', +'geoloc22.geovisite.com', +'geoloc23.geovisite.com', +'geoloc24.geovisite.com', +'geoloc25.geovisite.com', +'geoloc26.geovisite.com', +'geoloc27.geovisite.com', +'geoloc28.geovisite.com', +'geoloc29.geovisite.com', +'geoloc3.geovisite.com', +'geoloc30.geovisite.com', +'geoloc31.geovisite.com', +'geoloc32.geovisite.com', +'geoloc33.geovisite.com', +'geoloc34.geovisite.com', +'geoloc35.geovisite.com', +'geoloc36.geovisite.com', +'geoloc37.geovisite.com', +'geoloc38.geovisite.com', +'geoloc39.geovisite.com', +'geoloc4.geovisite.com', +'geoloc40.geovisite.com', +'geoloc41.geovisite.com', +'geoloc42.geovisite.com', +'geoloc43.geovisite.com', +'geoloc44.geovisite.com', +'geoloc45.geovisite.com', +'geoloc46.geovisite.com', +'geoloc47.geovisite.com', +'geoloc48.geovisite.com', +'geoloc49.geovisite.com', +'geoloc5.geovisite.com', +'geoloc50.geovisite.com', +'geoloc51.geovisite.com', +'geoloc52.geovisite.com', +'geoloc53.geovisite.com', +'geoloc54.geovisite.com', +'geoloc55.geovisite.com', +'geoloc56.geovisite.com', +'geoloc57.geovisite.com', +'geoloc58.geovisite.com', +'geoloc59.geovisite.com', +'geoloc6.geovisite.com', +'geoloc60.geovisite.com', +'geoloc61.geovisite.com', +'geoloc62.geovisite.com', +'geoloc63.geovisite.com', +'geoloc64.geovisite.com', +'geoloc65.geovisite.com', +'geoloc66.geovisite.com', +'geoloc67.geovisite.com', +'geoloc68.geovisite.com', +'geoloc69.geovisite.com', +'geoloc7.geovisite.com', +'geoloc70.geovisite.com', +'geoloc71.geovisite.com', +'geoloc72.geovisite.com', +'geoloc73.geovisite.com', +'geoloc74.geovisite.com', +'geoloc75.geovisite.com', +'geoloc76.geovisite.com', +'geoloc77.geovisite.com', +'geoloc78.geovisite.com', +'geoloc79.geovisite.com', +'geoloc8.geovisite.com', +'geoloc80.geovisite.com', +'geoloc81.geovisite.com', +'geoloc82.geovisite.com', +'geoloc83.geovisite.com', +'geoloc84.geovisite.com', +'geoloc85.geovisite.com', +'geoloc86.geovisite.com', +'geoloc87.geovisite.com', +'geoloc88.geovisite.com', +'geoloc89.geovisite.com', +'geoloc9.geovisite.com', +'geoloc90.geovisite.com', +'geoloc91.geovisite.com', +'geoloc92.geovisite.com', +'geoloc93.geovisite.com', +'geoloc94.geovisite.com', +'geoloc95.geovisite.com', +'geoloc96.geovisite.com', +'geoloc97.geovisite.com', +'geoloc98.geovisite.com', +'geoloc99.geovisite.com', +'geoplugin.net', +'georgewbush.112.2o7.net', +'georgewbushcom.112.2o7.net', +'geoservice.curse.com', +'geoshopping.nzherald.co.nz', +'geoup.com', +'geovisites.com', +'get-answers-fast.com', +'get-information.com', +'get.hitbox.com', +'get.mirando.de', +'get.netscape.com', +'get.qualaroo.com', +'get.replacingobservedlose.info', +'get.rubyroyal.com', +'get.slotocash.com', +'get.superstats.com', +'get2buynow.com', +'getabadmate.com', +'getbarometer.s3.amazonaws.com', +'getdirect.ru', +'getexceptional.com', +'getfreebl.com', +'getglasses-com-au.b.appier.net', +'getlinksinaseconds.com', +'getmetrical.com', +'getmycell.com', +'getoffersdirect.go2cloud.org', +'getpaidtosurfthenetmoney.homestead.com', +'gets.faz.net', +'gets.lockscalecompare.com', +'getsidecar.s3.amazonaws.com', +'geverons.justclick.ru', +'gevfh.voluumtrk2.com', +'gfaf-banners.s3.amazonaws.com', +'gfk-de.sensic.net', +'gfrsz.voluumtrk.com', +'gft2.de', +'gfx.infomine.com', +'gfx3.avn.com', +'gfxa.sheetmusicplus.com', +'gg.google.com', +'gg.mob.vendimob.pl', +'ggean.voluumtrk.com', +'ggi.go2cloud.org', +'ggo.directrev.com', +'gh.ffshrine.org', +'ghost.in.the.shell.at.bnex.com', +'gi.sfr.fr', +'giantsavings-a.akamaihd.net', +'giddyupmedia.go2cloud.org', +'gifthulk.go2cloud.org', +'giftjap.justclick.ru', +'gifttracker.com', +'gifttree.track4.com', +'gigletcirjy.download', +'gili-lankanfushi-com.b.appier.net', +'gimmickedofpkjfxln.download', +'gipigbzfortes.review', +'girafa.com', +'girdinguyqfqwehf.download', +'girlscoutsoftheusa.sc.omtrdc.net', +'girlsofvs.com', +'girthingbeypvmxb.download', +'giveaboost.go2cloud.org', +'givemefreestuff.com', +'gj.mmstat.com', +'gj7py.voluumtrk.com', +'gjana.voluumtrk.com', +'gjerrigknark.no.intellitxt.com', +'gjr7r.voluumtrk.com', +'gk.rts.doublepimp.com', +'gk.streamate.doublepimp.com', +'gkugzxfmjargonised.review', +'glassesonline-com-ph.b.appier.net', +'glassesonline-com-sg.b.appier.net', +'glassesonline-com-tw.b.appier.net', +'glauconitexwgsr.download', +'glbad.adtech.de', +'glean.pop6.com', +'glffogrmnpareses.review', +'glieo.voluumtrk.com', +'glitternetwork.go2cloud.org', +'global-adsrv.com', +'global.adserver.yahoo.com', +'global.ib-ibi.com', +'global.justclick.ru', +'global.msads.net', +'global.reporo.net', +'global.ymtrack.com', +'global.ymtracking.com', +'globaltargets.go2cloud.org', +'globaltrack.com', +'globaltrack123.go2cloud.org', +'globe7.com', +'globel.co.uk', +'globirank.com', +'globo.demdex.net', +'glomsflablwiv.download', +'glopro.com', +'glugjbygh.download', +'gluma.voluumtrk.com', +'gm.mmstat.com', +'gm7ru.voluumtrk.com', +'gmads.mookie1.com', +'gmads.net', +'gmkxougopsonin.review', +'gmonitor.aliimg.com', +'gmoxn.voluumtrk.com', +'gmtdmp.mookie1.com', +'gmtracker.com', +'gmx-ssl.wemfbox.ch', +'gmx.oewabox.at', +'gnaea.voluumtrk.com', +'gnaur.voluumtrk.com', +'gnftr.voluumtrk.com', +'gniho.voluumtrk.com', +'go-rilla.go2affise.com', +'go.activengage.com', +'go.ad2up.com', +'go.ad2upapp.com', +'go.adify.com', +'go.adversal.com', +'go.affec.tv', +'go.by', +'go.clickhoptk.com', +'go.clicktrackopt.com', +'go.coxds.com', +'go.deliverymodo.com', +'go.doupat.xyz', +'go.feedxfeed.com', +'go.goroost.com', +'go.hd-3.com', +'go.herdailyvideos.com', +'go.hunkwebcam.com', +'go.jetswap.hs5.ru', +'go.kissmetrics.com', +'go.ll.net.co', +'go.madmimi.com', +'go.mobilix.eu', +'go.mobilix.mobi', +'go.mobisla.com', +'go.mobpartner.mobi', +'go.mobtrks.com', +'go.mobytrks.com', +'go.myimgt.com', +'go.oclaserver.com', +'go.oclasrv.com', +'go.onclasrv.com', +'go.openx.com', +'go.padsdelivery.com', +'go.padstm.com', +'go.pardot.com', +'go.playmmogames.com', +'go.promojet.ru', +'go.pub2srv.com', +'go.qb.by', +'go.quantcast.com', +'go.redirectingat.com', +'go.securelinktrack.com', +'go.shareaholic.com', +'go.sonobi.com', +'go.tendatta.com', +'go.theadsnet.com', +'go.toutapp.com', +'go.trackgold.net', +'go.trafficshop.com', +'go.underclick.ru', +'go.voice2page.com', +'go.vrvm.com', +'go.wastedpushdevelop.info', +'go.wbsadsdel.com', +'go.wellhello.com', +'go.wsockd.com', +'go.youlamedia.com', +'go2.trekaklik.com', +'go2affise.com', +'go2cloud.org', +'go2funz.com', +'go2linkfast.com', +'go2web20.net', +'go3.trekaklik.com', +'go34down.com', +'goadv.com', +'gobbetsdjgjnyc.download', +'goblemam.com', +'gocm.c.appier.net', +'godrejproperties-com.b.appier.net', +'goetheinstitut01.webtrekk.net', +'gofugyourself.us.intellitxt.com', +'gogousenet.com', +'goingplatinum.com', +'goku.brightcove.com', +'gold-file.com', +'goldenticket.disconnect.me', +'goldmansachs.122.2o7.net', +'golds.lp.mydas.mobi', +'goldspotmedia.com', +'goldstar.go2cloud.org', +'golem.met.vgwort.de', +'golf18.go2cloud.org', +'golfcountryhomes.com', +'golizoli.com', +'gomobbi.go2cloud.org', +'gomovies.track.clicksure.com', +'gooal.herokuapp.com', +'goodbookbook.com', +'gooddata.com', +'goodiemob.com', +'goodsavingtips.com', +'goodtraffic.net', +'google-analytics.com', +'googleads.g.doubleclick.net', +'googleads2.g.doubleclick.net', +'googleads4.g.doubleclick.net', +'googleadservices.com', +'googlesyndication.com', +'googletagmanager.com', +'gooool.com', +'gopacket.goforandroid.com', +'gopuralverslakf.download', +'goreal.at', +'goredi.com', +'gorilla.go2cloud.org', +'goshoppingonline.bfast.com', +'gosms.3g.cn', +'gosmsdev.3g.cn', +'gosmstheme.3g.cn', +'gospycash.com', +'gostats.com', +'gostats.de', +'gostats.pl', +'gostats.ru', +'gostats.vn', +'gotlaughs.com', +'goto.myfunbreak.com', +'gotoast.com', +'gotoo.com', +'goviralnetwork.com', +'goviralnetwork.net', +'goweb.de', +'goyellow.ivwbox.de', +'goywt.voluumtrk.com', +'gozilla.com', +'gp.dejanews.com', +'gpaper104.112.2o7.net', +'gpaper105.112.2o7.net', +'gpaper106.112.2o7.net', +'gpaper107.112.2o7.net', +'gpaper108.112.2o7.net', +'gpaper109.112.2o7.net', +'gpaper110.112.2o7.net', +'gpaper111.112.2o7.net', +'gpaper112.112.2o7.net', +'gpaper113.112.2o7.net', +'gpaper114.112.2o7.net', +'gpaper115.112.2o7.net', +'gpaper116.112.2o7.net', +'gpaper117.112.2o7.net', +'gpaper118.112.2o7.net', +'gpaper119.112.2o7.net', +'gpaper120.112.2o7.net', +'gpaper121.112.2o7.net', +'gpaper122.112.2o7.net', +'gpaper123.112.2o7.net', +'gpaper124.112.2o7.net', +'gpaper125.112.2o7.net', +'gpaper126.112.2o7.net', +'gpaper127.112.2o7.net', +'gpaper128.112.2o7.net', +'gpaper129.112.2o7.net', +'gpaper131.112.2o7.net', +'gpaper132.112.2o7.net', +'gpaper133.112.2o7.net', +'gpaper134.112.2o7.net', +'gpaper135.112.2o7.net', +'gpaper136.112.2o7.net', +'gpaper137.112.2o7.net', +'gpaper138.112.2o7.net', +'gpaper139.112.2o7.net', +'gpaper140.112.2o7.net', +'gpaper141.112.2o7.net', +'gpaper142.112.2o7.net', +'gpaper143.112.2o7.net', +'gpaper144.112.2o7.net', +'gpaper145.112.2o7.net', +'gpaper147.112.2o7.net', +'gpaper149.112.2o7.net', +'gpaper150.112.2o7.net', +'gpaper151.112.2o7.net', +'gpaper152.112.2o7.net', +'gpaper154.112.2o7.net', +'gpaper155.112.2o7.net', +'gpaper156.112.2o7.net', +'gpaper157.112.2o7.net', +'gpaper158.112.2o7.net', +'gpaper160.112.2o7.net', +'gpaper161.112.2o7.net', +'gpaper162.112.2o7.net', +'gpaper163.112.2o7.net', +'gpaper164.112.2o7.net', +'gpaper166.112.2o7.net', +'gpaper167.112.2o7.net', +'gpaper168.112.2o7.net', +'gpaper169.112.2o7.net', +'gpaper170.112.2o7.net', +'gpaper171.112.2o7.net', +'gpaper172.112.2o7.net', +'gpaper173.112.2o7.net', +'gpaper174.112.2o7.net', +'gpaper175.112.2o7.net', +'gpaper176.112.2o7.net', +'gpaper177.112.2o7.net', +'gpaper178.112.2o7.net', +'gpaper180.112.2o7.net', +'gpaper182.112.2o7.net', +'gpaper183.112.2o7.net', +'gpaper184.112.2o7.net', +'gpaper185.112.2o7.net', +'gpaper186.112.2o7.net', +'gpaper187.112.2o7.net', +'gpaper188.112.2o7.net', +'gpaper190.112.2o7.net', +'gpaper191.112.2o7.net', +'gpaper192.112.2o7.net', +'gpaper193.112.2o7.net', +'gpaper194.112.2o7.net', +'gpaper195.112.2o7.net', +'gpaper196.112.2o7.net', +'gpaper197.112.2o7.net', +'gpaper198.112.2o7.net', +'gpaper199.112.2o7.net', +'gpaper201.112.2o7.net', +'gpaper202.112.2o7.net', +'gpaper204.112.2o7.net', +'gpaper205.112.2o7.net', +'gpaper211.112.2o7.net', +'gpaper214.112.2o7.net', +'gpaper218.112.2o7.net', +'gpaper223.112.2o7.net', +'gpaper231.112.2o7.net', +'gpaper246.112.2o7.net', +'gpapercareer.112.2o7.net', +'gpkjxgsginfallible.review', +'gqe0d.voluumtrk.com', +'gqfysspiracles.review', +'gqgng.voluumtrk.com', +'gqkzu.voluumtrk.com', +'gqqv4.voluumtrk.com', +'gqsrirsleazes.review', +'gr1innovations.com', +'gr2hk6ze.com', +'gr8.com', +'gr8nk.voluumtrk.com', +'grabanapptrk.com', +'grabify.link', +'graffix.adition.com', +'grafix.xxxcounter.com', +'gramashgbbjqbzy.download', +'grammarly.go2cloud.org', +'granite.bnex.com', +'graphics.cams.com', +'graphics.friendfinder.com', +'graphics1.sextracker.com', +'graphics2.sextracker.com', +'graphics3.sextracker.com', +'graphics7.nytimes.com', +'graphics8.nytimes.m7z.net', +'graptolitezcmxrfe.download', +'gravitateszwcxvb.download', +'greatcpm.com', +'green.erne.co', +'green.virtual-nights.com', +'greenlightmedia.go2cloud.org', +'greensmoke.com', +'greenthinkday.com', +'greentooth.xtgem.com', +'greentubeiesgmbh.tt.omtrdc.net', +'gregoryenterprises.go2cloud.org', +'gregoryvjvbd.download', +'greystripe.com', +'gridironjhkdbypz.download', +'grieftalk.com', +'gripfile.net', +'grippedownloads.co', +'grosskjlkwccna.download', +'grouchiestopszo.download', +'groupe.go2cloud.org', +'groupritm.go2affise.com', +'grousingkvjtblhj.download', +'grow.kissmetrics.com', +'grsyd.voluumtrk.com', +'grupoblidoo.go2cloud.org', +'gruppoespresso01.webtrekk.net', +'gs.spylog.ru', +'gs.statcounter.com', +'gs1.surf-town.net', +'gsanet.com', +'gscounters.eu1.gigya.com', +'gscounters.us1.gigya.com', +'gserv.zdnet.co.uk', +'gsfn.us', +'gsfr1.voluumtrk.com', +'gsicrsk.112.207.net', +'gslbeacon.lijit.com', +'gsmtop.net', +'gsujb.voluumtrk.com', +'gtag.yieldoptimizer.com', +'gtcc1.acecounter.com', +'gtedtnebrises.review', +'gtiuy.voluumtrk.com', +'gtrforums.us.intellitxt.com', +'gts-ads.twistbox.com', +'gttracking.go2cloud.org', +'gu-pix.appspot.com', +'gugaswrjegxix.download', +'gui.secure.mobile.contentabc.com', +'guid.org', +'guidagedhgperv.download', +'gum.criteo.com', +'gumlz.voluumtrk.com', +'gunnedagcsg.download', +'guppymedia.com', +'gurgle.zdbb.net', +'guru3d.us.intellitxt.com', +'gutefrage.de.intellitxt.com', +'guyism.us.intellitxt.com', +'gv90x.voluumtrk.com', +'gvp3l.voluumtrk.com', +'gw.adotsolution.com', +'gw1.surf-town.net', +'gw2.surf-town.net', +'gw3.surf-town.net', +'gw4.surf-town.net', +'gwa.lphbs.com', +'gwa.reedbusiness.net', +'gzadt.voluumtrk.com', +'gzwku.voluumtrk.com', +'h.atdmt.com', +'h.cliphunter.com', +'h.imedia.cz', +'h.live.com', +'h.online-metrix.net', +'h.openx.net', +'h.scorecardresearch.com', +'h.zedo.com', +'h.zeroredirect.com', +'h.zeroredirect1.com', +'h.zeroredirect2.com', +'h1.flashvortex.com', +'h2.msn.com', +'h6.msn.com', +'h8lku.voluumtrk.com', +'h9diz.voluumtrk.com', +'hab3n.trackvoluum.com', +'habilatoryphyjf.download', +'hadecpjvwytpy.download', +'haklopar.com', +'hal9000.redintelligence.net', +'halc.iadvize.com', +'hamburg.pennerzone.de', +'hamster.com', +'hanaprop.com', +'handb.go2cloud.org', +'handbl.ivwbox.de', +'handworkedwguqhhqpj.download', +'handyseek.com', +'hangmyads.go2cloud.org', +'harassedlyayeigwq.download', +'hardcore.xxxcounter.com', +'hardsextube-bud.gravityrd-services.com', +'hardwarezone.us.intellitxt.com', +'hariqavi.com', +'harrenmedia.go2affise.com', +'harrenmedianetwork.com', +'harvardbp.vo.llnwd.net', +'harvestadsdepot.com', +'harvester.eu.square-enix.com', +'harvester.ext.square-enix-europe.com', +'harvester.hbpl.co.uk', +'harvester.piano-media.com', +'has.go2cloud.org', +'has.it', +'hasoffers.com', +'hasoffers.ymtrack.com', +'hastrk1.com', +'hastrk2.com', +'hastrk3.com', +'hata.ero-advertising.com', +'hatbo.voluumtrk.com', +'hatchmentstnddqlfba.download', +'hatelive.site', +'hatertoupfrcz.download', +'hatmedia.go2cloud.org', +'hauptstadtmuttide.digidip.net', +'hausgarten.de.intellitxt.com', +'hawkbitsirbzmvsf.download', +'hayday1.visits.lt', +'hayday145.visits.lt', +'hb.justclick.ru', +'hbb.concentra.be', +'hbho0.voluumtrk.com', +'hc1.humanclick.com', +'hc2.humanclick.com', +'hcharbach.de', +'hchrmain.112.2o7.net', +'hclrm.voluumtrk.com', +'hcu1u.voluumtrk.com', +'hd.jmp9.com', +'hdc3z.voluumtrk.com', +'hdlife-com-tw.b.appier.net', +'hdmoviesinc.com', +'heals.msgfocus.com', +'heartbeat.pmc.com', +'hebadu.com', +'hebdotop.com', +'heine.adclear.net', +'heiringlxsna.download', +'heise.met.vgwort.de', +'heise02.webtrekk.net', +'heisebanner.geizhals.at', +'hekng.voluumtrk.com', +'held.jmp9.com', +'hello.myfonts.net', +'hello.staticstuff.net', +'helloyoungmanqq.com', +'helmsstikizg.download', +'help.adtech.fr', +'help.chartboost.com', +'help.doubleclick.net', +'help.qualaroo.com', +'henbaneypgvxgt.download', +'herbisttjojeo.download', +'hernando.com', +'hexacash.com', +'heywire.com', +'heyzap.com', +'hfp.gdmdigital.com', +'hfph5.voluumtrk.com', +'hfrov.voluumtrk.com', +'hfx.go2cloud.org', +'hg-ios.hitbox.com', +'hg.travelocity.com.edgesuite.net', +'hg1.hitbox.com', +'hg7nu.voluumtrk.com', +'hgads.com', +'hgcjh.voluumtrk.com', +'hhbekxxw5d9e.pflexads.com', +'hhioj.voluumtrk.com', +'hi.hellobar.com', +'hicpm5.com', +'hide.io', +'hideaway.com', +'hield.jmp9.com', +'hig.com', +'highcpms.com', +'highdefforum.us.intellitxt.com', +'higheurest.com', +'highflyer.go2affise.com', +'hightrafficads.com', +'hijackedzdupdb.download', +'hilltopads.net', +'hindsight.com', +'hipcrime.home.dhs.org', +'hipersushiads.com', +'hippo.adultadworld.com', +'hirovivi.com', +'histats.com', +'histriodqxmtbztd.download', +'hit-counter.info', +'hit-counter.udub.com', +'hit-parade.com', +'hit.bg', +'hit.copesa.cl', +'hit.gemius.pl', +'hit.hotlog.ru', +'hit.meta.ua', +'hit.multimania.com', +'hit.multimania.lycos.fr', +'hit.stat24.com', +'hit.sunnydollars.net', +'hit.tripod.lycos.co.uk', +'hit.tripod.lycos.de', +'hit.tripod.lycos.es', +'hit.tripod.lycos.it', +'hit.tripod.lycos.nl', +'hit1.hotlog.ru', +'hit10.hotlog.ru', +'hit13.hotlog.ru', +'hit15.hotlog.ru', +'hit2.hotlog.ru', +'hit20.hotlog.ru', +'hit3.hotlog.ru', +'hit30.hotlog.ru', +'hit4.hotlog.ru', +'hit5.hotlog.ru', +'hit6.hotlog.ru', +'hit7.hotlog.ru', +'hit8.hotlog.ru', +'hit9.hotlog.ru', +'hitbox.com', +'hitcents.com', +'hitcounter.govmetric.com', +'hitcounter.ru', +'hitcounter.servmetric.com', +'hitcounter01.xspp.com', +'hitcpm.com', +'hitfarm.com', +'hitfox.go2cloud.org', +'hitlink.com', +'hitlist.ru', +'hitlogger.com', +'hitlounge.com', +'hitmeter.com', +'hitmeter.ru', +'hits.dealer.com', +'hits.icdirect.com', +'hits.nextstat.com', +'hits.roitracker.com', +'hits.spylog.com', +'hits.sys.lv', +'hits.webstat.com', +'hits.zdnet.co.kr', +'hitserver.ibope.com.br', +'hitslink.com', +'hitsniffer.com', +'hitsquad.us.intellitxt.com', +'hitweb.org', +'hitweb2.chosun.com', +'hitwebcounter.com', +'hitx.net', +'hiwire.com', +'hjapa.voluumtrk.com', +'hjchung.myweb.hinet.net', +'hjhaw.voluumtrk.com', +'hjlas.com', +'hjtjz.voluumtrk.com', +'hk.adserver.yahoo.com', +'hk9dl.voluumtrk.com', +'hkjhwrhogwash.review', +'hld.jmp9.com', +'hlgsolutions.go2cloud.org', +'hlok.qertewrt.com', +'hlrke.voluumtrk.com', +'hlt6o.voluumtrk.com', +'hm.baidu.com', +'hmhrw.voluumtrk.com', +'hmrhz.voluumtrk.com', +'hmultiplex.2cnt.net', +'hmz8h.voluumtrk.com', +'hnbutton.appspot.com', +'hni14.voluumtrk.com', +'ho-openx.ha.rs', +'holidaypirates.digidip.net', +'hollywoodlife-us.intellitxt.com', +'hollywoodlife.us.intellitxt.com', +'holystonesobrzuasu.download', +'homad-global-configs-eu-fra.schneevonmorgen.com.s3.amazonaws.com', +'homad-global-configs.schneevonmorgen.com', +'home-remodeling.com', +'home.compete.com.edgesuite.net', +'home.edt02.net', +'home.free-banners.com', +'home.mmcable.com', +'home.netster.com', +'home.pages.at', +'home.peoplepc.com', +'home.vividvip.com', +'homedepot.tt.omtrdc.net', +'homedepoy.com', +'homedepto.com', +'homeearthlink.net', +'homeemployed.com', +'homeeq.com', +'homegrownvideo.com', +'homelearningcenter.com', +'homeloan.tr.cx', +'homepage.cc', +'homepage.ru', +'homesclick.112.2o7.net', +'homesidelendinginc.com', +'homestad.com', +'homesteadtechnologies.122.2o7.net', +'homevisions.com', +'homonymyhnovvlnkz.download', +'hondahookup.us.intellitxt.com', +'hongkongdisneyland-com.b.appier.net', +'honourwkuowjaj.download', +'hoofprintsjvogd.download', +'hook.yieldbuild.com', +'hoopsvibe.us.intellitxt.com', +'hooqy.com', +'hoptopboy.com', +'hopurl.org', +'hordesvavxlom.download', +'horedi.com', +'horheloopo.com', +'horizon.attn.com', +'horizon.playboy.com', +'horizon.sailthru.com', +'horse-racing-affiliate-program.co.uk', +'host-tracker.com', +'host.clicksor.com', +'host.leadbolt.com', +'host6.hitbox.com', +'hostboard.us.intellitxt.com', +'hostedmovieupdates.aebn.net', +'hosting.sproutbuilder.com', +'hosting2.rts.lj.doublepimp.com', +'hosting4.rts.fling.doublepimp.com', +'hotdatinglist.com', +'hotex.voluumtrk.com', +'hotheadedwrkqqsm.download', +'hotjar.com', +'hotlinking.dosmil.imap.cc', +'hotlog.ru', +'hotonlinenews.us.intellitxt.com', +'hotrank.com.tw', +'hottour.justclick.ru', +'hotwords.com.br', +'hotwords.com.mx', +'house27.ch', +'housead.umeng.com', +'howaboutwe.go2cloud.org', +'howardchui.us.intellitxt.com', +'hoz01.voluumtrk.com', +'hpglobal.112.2o7.net', +'hphqglobal.112.2o7.net', +'hpqvvpfloatage.review', +'hpr.outbrain.com', +'hpwtrpizecrowned.review', +'hpygd.voluumtrk.com', +'hq.kissmetrics.com', +'hqfootyad4.blogspot.com', +'hqs7.cnzz.com', +'hrdya.voluumtrk.com', +'hrfdpodunwarlike.review', +'hrukxtcqmosaics.review', +'hs-sites.com', +'hs.interpolls.com', +'hs4rs.voluumtrk.com', +'hsaki.voluumtrk.com', +'hsbc.tt.omtrdc.net', +'hsbolewhzbaffs.review', +'hsn01.wcom-ma.us.conversion-marketing.com', +'hstde.tradedoubler.com', +'hstest.surf-town.net', +'hstpnetwork.com', +'hsxfa.voluumtrk.com', +'hsxmo.voluumtrk.com', +'hsykmnzsdogskins.review', +'ht.keezmovies.com', +'ht.pornhub.com', +'ht.redtube.com', +'ht.spankwire.com', +'ht.tidaltv.com.10089.9022.302br.net', +'ht.tube8.com', +'ht.xtube.com', +'ht.youporn.com', +'htimepyvhbondstone.review', +'htinua.justclick.ru', +'html-images.realnetworks.com', +'html.overture.com', +'html5adkit.plusmo.s3.amazonaws.com', +'html5zombo.com', +'htmlcenter.us.intellitxt.com', +'htmlcounter.com', +'htmonster.com', +'htt.jmp9.com', +'http.tidaltv.com.10088.9022.302br.net', +'http.tidaltv.com.10089.9022.302br.net', +'http.tidaltv.com.10090.9022.302br.net', +'http.tidaltv.com.1746.9009.302br.net', +'http.tidaltv.com.42107.9319.302br.net', +'http.tidaltv.com.42108.9319.302br.net', +'http.tidaltv.com.42109.9319.302br.net', +'hu0pd.voluumtrk.com', +'hubspot.my.salesforce.com', +'hubtraffic.com', +'hubxt.redtube.com', +'hubxt.tube8.com', +'hulu.112.2o7.net', +'humandemand.com', +'humaniq.com', +'humdrumsqflyl.download', +'hummumsutjuwal.download', +'humourqyizg.download', +'humuseliyahu.com', +'hunt-leads.com', +'huntmad.com', +'hurricanedigitalmedia.com', +'hv3.webstat.com', +'hv3jo.voluumtrk.com', +'hvaevqkprtumorous.review', +'hvqtw.voluumtrk.com', +'hvxca.voluumtrk.com', +'hw1vb.voluumtrk.com', +'hwcdn.reporo.net', +'hwuhk.voluumtrk.com', +'hwupgrade.it.intellitxt.com', +'hxhsu.voluumtrk.com', +'hxmtq.voluumtrk.com', +'hxnfk.voluumtrk.com', +'hxpwl.voluumtrk.com', +'hybl9bazbc35.pflexads.com', +'hybridview.co.kr', +'hybtq.voluumtrk.com', +'hyield.jmp9.com', +'hym.albinass.com', +'hymdo.voluumtrk.com', +'hyperbanner.net', +'hyperion.adtech.fr', +'hyperlinksecure.com', +'hypermall.com', +'hypertracker.com', +'hypoot.com', +'hyv6u.voluumtrk.com', +'hywae.voluumtrk.com', +'hz7.de', +'hzvtbypisdeejays.review', +'i-cdn.servedbyopenx.com', +'i-fit-com-tw.b.appier.net', +'i-lookup.com', +'i-mobile.co.jp', +'i-vengo.com', +'i.1cat.com', +'i.4see.mobi', +'i.adsame.com', +'i.appflood.com', +'i.bigbn.com.ua', +'i.bkatjs.info', +'i.blogads.com', +'i.bongacash.com', +'i.casalemedia.com', +'i.cdnpark.com', +'i.chartboost.com', +'i.exclusivegiftcards.com', +'i.flowgo.com', +'i.idownloadgalore.com', +'i.isohunt.to', +'i.jumptap.com', +'i.kissmetrics.com', +'i.ligatus.com', +'i.mxplayer.j2inter.com', +'i.n.jwpltx.com', +'i.nuseek.com', +'i.offerx.co.uk', +'i.playnow.guru', +'i.plug.it', +'i.po.st', +'i.psa-ads.openx.com', +'i.r1-cdn.net', +'i.sahcdn.com', +'i.serves.live', +'i.simpli.fi', +'i.socdm.com', +'i.tapit.com', +'i.txtsrving.info', +'i.verticalresponse.com', +'i.w.inmobi.com', +'i.w55c.net', +'i.walla.co.il', +'i.wifi-x.co.uk', +'i.xx.openx.com', +'i.zeroredirect.com', +'i.zeroredirect1.com', +'i.zeroredirect2.com', +'i1-j1-18-7-1-13335-2395654547-i.init.cedexis-radar.net', +'i1-j1-18-7-1-13335-423715794-i.init.cedexis-radar.net', +'i1-j4-19-0-1-13960-2465639427-i.init.cedexis-radar.net', +'i1-js-14-3-01-13960-152038880-i.init.cedexis-radar.net', +'i1-js-14-3-01-13960-28308226-i.init.cedexis-radar.net', +'i1-js-14-3-01-13960-519948169-i.init.cedexis-radar.net', +'i1-js-14-3-01-13960-544110554-i.init.cedexis-radar.net', +'i1-js-14-3-01-13960-551103725-i.init.cedexis-radar.net', +'i1-js-14-3-01-13960-57801005-i.init.cedexis-radar.net', +'i1-js-14-3-01-13960-670713316-i.init.cedexis-radar.net', +'i1-js-14-3-01-13960-749916135-s.init.cedexis-radar.net', +'i1-js-14-3-01-13960-764582940-i.init.cedexis-radar.net', +'i1-js-14-3-01-13960-904132444-i.init.cedexis-radar.net', +'i1.cmail1.com', +'i1.cmail2.com', +'i1.createsend4.com', +'i1.createsend5.com', +'i1.likes-media.com', +'i1.putags.com', +'i18n.adition.com', +'i1k2c.voluumtrk.com', +'i1slv.voluumtrk.com', +'i2.cmail1.com', +'i2.cmail2.com', +'i2.createsend1.com', +'i2.createsend3.com', +'i2.createsend4.com', +'i2.gatewayinterface.com', +'i2.likes-media.com', +'i2.putags.com', +'i3.cmail1.com', +'i3.cmail2.com', +'i3.cmail5.com', +'i3.createsend1.com', +'i3.createsend3.com', +'i3.createsend4.com', +'i3.createsend5.com', +'i3.putags.com', +'i3pw2.voluumtrk.com', +'i4.cmail1.com', +'i4.createsend4.com', +'i4.putags.com', +'i46rz.voluumtrk.com', +'i4927.voluumtrk.com', +'i4c.go2cloud.org', +'i5.cmail2.com', +'i5.cmail5.com', +'i5.createsend1.com', +'i5.createsend3.com', +'i5.createsend5.com', +'i5g9d.voluumtrk.com', +'i6.cmail1.com', +'i6.createsend3.com', +'i6.createsend5.com', +'i7.cmail1.com', +'i7.cmail2.com', +'i7.cmail5.com', +'i7.createsend5.com', +'i8vnk.voluumtrk.com', +'i9mhy.voluumtrk.com', +'ia.spinbox.net', +'ia1.7search.com', +'ia1.sftcdn.net', +'iacpromotion.s3.amazonaws.com', +'iad-login.dotomi.com', +'iad.anm.co.uk', +'iadc.qwapi.com', +'iadctest.qwapi.com', +'iadfeed.qwapi.com', +'iadfeedtest.qwapi.com', +'iads.com.np', +'iadsdk.apple.com', +'ialchemnteryield.jmp9.com', +'ialchemynteryield.jmp9.com', +'ialchenteryield.jmp9.com', +'ialcnteryield.jmp9.com', +'ialnteryield.jmp9.com', +'iamnotageek.us.intellitxt.com', +'ianteryield.jmp9.com', +'iapref.orange.fr', +'iapref.wanadoo.fr', +'iar.worthathousandwords.com', +'ias.hitbox.com', +'iaspromotes.com', +'iatzk.voluumtrk.com', +'ib.3lift.com', +'ib.adnxs.com', +'ib.bounceads.net', +'ib.mookie1.com', +'ibanners.empoweredcomms.com.au', +'ibario.com', +'ibeat.indiatimes.com', +'ibeu2.mookie1.com', +'ibg.hitbox.com', +'ibjk3.voluumtrk.com', +'ibope.2cnt.net', +'ibs.indiatimes.com', +'ibsys.com', +'icentric.us.intellitxt.com', +'icestorm.com', +'ichabodbvtxqb.download', +'icm.go2cloud.org', +'ico.freelogs.com', +'icompass.insightexpressai.com', +'icon.ajiang.net', +'icon.cnzz.com', +'iconator.com', +'iconifyingkjlzag.download', +'icontact.com', +'icontent.us', +'icount.com', +'icoupon.go2cloud.org', +'icptrack.com', +'ics.hitbox.com', +'icthl.voluumtrk.com', +'icubes.go2cloud.org', +'icubeswire.go2affise.com', +'icvdm.vo.llnwd.net', +'id.allegisgroup.com', +'id.google.com', +'id.tynt.com', +'iddiction.com', +'idg.dmdelivery.com', +'idgmagazine.met.vgwort.de', +'idgpctip.wemfbox.ch', +'idioticxellutv.download', +'idritracker.com', +'idspaces.ero-advertising.com', +'idsync.rlcdn.com', +'ie.justclick.ru', +'ieah8.voluumtrk.com', +'iectl.voluumtrk.com', +'iefqr.voluumtrk.com', +'ield.jmp9.com', +'iendoo.com', +'ientc.voluumtrk.com', +'ientry.com', +'ientrymail.com', +'ientrynetwork.net', +'iesnare.com', +'iezgb.voluumtrk.com', +'ifa.camads.net', +'ifcvc.voluumtrk.com', +'ifdds.voluumtrk.com', +'iffet.de', +'iforex.go2cloud.org', +'iframe.adultfriendfinder.com', +'iframe.mediaplazza.com', +'iframe.sponsorpay.com', +'iframes.hustler.com', +'ifriends.net', +'ifxvq.voluumtrk.com', +'igmarauders.isotx.com', +'ign.us.intellitxt.com', +'igninetwork.go2cloud.org', +'ignitad.com', +'igogoshare.com', +'igor093.justclick.ru', +'ih.adscale.de', +'ih.f2.constantcontact.com', +'ih4.gamecopyworld.com', +'ihcgpro.go2cloud.org', +'ihfpu.voluumtrk.com', +'ihm01.ct2.comclick.com', +'iicdn.com', +'iiiyr.voluumtrk.com', +'ijdkc.voluumtrk.com', +'ijrgl.voluumtrk.com', +'ijsl1.voluumtrk.com', +'ijxaxlacapacitors.review', +'ijyrq.voluumtrk.com', +'ikay6.voluumtrk.com', +'iknka.voluumtrk.com', +'ikwyd.analytics.sapo.pt', +'ilbfk.voluumtrk.com', +'ilead.itrack.it', +'ilife.com', +'illicitlyyyzmvq.download', +'iloopmobile.com', +'ilovecookies.co', +'iluv.clickbooth.com', +'ilzzf.voluumtrk.com', +'im.405d5700.1ff6a9b.ads.a4cdn.contentabc.com', +'im.405d5700.8d9937e.ads.a4cdn.contentabc.com', +'im.51111900.b1aad3f.ads.a4cdn.contentabc.com', +'im.b2a2c700.a80886f.ads.a4cdn.contentabc.com', +'im.b2a2c700.e8cace3.ads.a4cdn.contentabc.com', +'im.b2a2cd00.885d48e.ads.a4cdn.contentabc.com', +'im.b2a2cd00.92bde07.ads.a4cdn.contentabc.com', +'im.ov.yahoo.co.jp', +'im.upromise.com', +'im2.smartadserver.com', +'ima3vpaid.appspot.com', +'imads.ero-advertising.com', +'imads.integral-marketing.com', +'imads.rediff.com', +'imadworks.rediff.com', +'image-map.com', +'image.accendo.com', +'image.adition.com', +'image.atdmt.com', +'image.click2net.nl', +'image.cybererotica.com', +'image.excite.com', +'image.ig.com.br', +'image.linkexchange.com', +'image.linkexchange.net', +'image.masterstats.com', +'image.nsk-sys.com', +'image.pathfinder.com', +'image.providesupport.com', +'image.reporo.net', +'image.safe-sender.co.uk', +'image.versiontracker.com', +'image2.pubmatic.com', +'imageads.canoe.ca', +'imagec07.247realmedia.com', +'imagec08.247realmedia.com', +'imagec10.247realmedia.com', +'imagec11.247realmedia.com', +'imagec12.247realmedia.com', +'imagec14.247realmedia.com', +'imagec15.247realmedia.com', +'imagec16.247realmedia.com', +'imagec17.247realmedia.com', +'imagecache.allposters.com', +'imagecache2.allposters.com', +'imagecdn.infospace.com', +'imageceu1.247realmedia.com', +'imageers.com', +'imagen01.247realmedia.com', +'imagen03.247realmedia.com', +'imagen04.247realmedia.com', +'images-aud.freshmeat.net', +'images-aud.slashdot.org', +'images-aud.sourceforge.net', +'images-geo.outbrain.com', +'images-mcdn.startappexchange.com', +'images-pw.secureserver.net', +'images.about.com', +'images.adkmob.com', +'images.adprofile.net', +'images.ads.fairfax.com.au', +'images.ads.whaleads.com', +'images.adsyndication.msn.com', +'images.adultplex.com', +'images.bizrate.com', +'images.bmnq.com', +'images.brainfox.com', +'images.bravenet.com', +'images.buy.com', +'images.chitika.net', +'images.clickability.com', +'images.clicktrade.com', +'images.cloudassets.mobi', +'images.cybereps.com', +'images.dentalplans.com', +'images.directtrack.com', +'images.dmca.com', +'images.dreamhost.com', +'images.drivelinemedia.com', +'images.e-mailcom.co.uk', +'images.ed4.net', +'images.enhance.com', +'images.fastclick.net', +'images.francite.com', +'images.freelotto.com', +'images.hi5.com', +'images.hitwise.co.uk', +'images.ibsys.com', +'images.ientrymail.com', +'images.ifriends.net', +'images.indiads.com', +'images.intellitxt.com', +'images.livejasmin.com', +'images.lookwhatworks.com', +'images.m0.net', +'images.marchex.com', +'images.millennialmedia.com', +'images.mpression.net', +'images.mrskincash.com', +'images.myareaguide.com', +'images.mylot.com', +'images.netradio.nl', +'images.outbrain.com', +'images.paypal.com', +'images.people2people.com', +'images.performgroup.com', +'images.quitnet.com', +'images.rambler.ru', +'images.resellerratings.com', +'images.revmob.com', +'images.revtrax.com', +'images.sexkey.com', +'images.sexlist.com', +'images.specificclick.net', +'images.speedbit.com', +'images.startappexchange.com', +'images.startappservice.com', +'images.streamray.com', +'images.taboola.com', +'images.tigerdirect.com.edgesuite.net', +'images.v3.com', +'images.vantage-media.net', +'images.vantagenet.com', +'images.webads.nl', +'images02.netaddress.usa.net', +'images1.paycounter.com', +'images2.click-now.co', +'images2.iac-online.de', +'imageserv.adtech.fr', +'imagesrv.adition.com', +'imagevenue.advertserve.com', +'imagine-inc.com', +'imaginemedia.net', +'imap.linkshare.com', +'imatmobile.com', +'imbof.com', +'imedia.co.il', +'imeds.ero-advertising.com', +'imeseonetwork.go2cloud.org', +'img-cdn.mediaplex.com', +'img-iad.mediaplex.com', +'img-iad.wip.mediaplex.com', +'img-sjc.wip.mediaplex.com', +'img.163.com', +'img.7search.com', +'img.adecorp.co.kr', +'img.adkmob.com', +'img.adpublisher.com', +'img.ads.huntmad.com', +'img.ads.mobilefuse.net', +'img.ads.mocean.mobi', +'img.ads.mojiva.com', +'img.ads.taptapnetworks.com', +'img.ads1.mocean.mobi', +'img.ads1.mojiva.com', +'img.ads2.mocean.mobi', +'img.ads2.mojiva.com', +'img.ads3.mocean.mobi', +'img.ads3.mojiva.com', +'img.ads4.mocean.mobi', +'img.ads4.mojiva.com', +'img.ads5.mojiva.com', +'img.alcoholsoftcdn.com', +'img.atdmt.com', +'img.babcdn.com', +'img.bizjournals.com', +'img.blogsavenue.com', +'img.bluehost.com', +'img.bororeb.com', +'img.centrum.sk', +'img.cmpnet.com', +'img.cqcounter.com', +'img.df-stream.net', +'img.directadvert.ru', +'img.directtrack.com', +'img.dt00.net', +'img.espngp.com', +'img.filefactscdn.com', +'img.fliks.net', +'img.footprintlive.com', +'img.gmo.jp', +'img.gostats.com', +'img.livejasmin.com', +'img.mediaplex.com', +'img.mediaplex.com.edgesuite.net', +'img.mobpartner.mobi', +'img.mobusi.com', +'img.mqcdn.com', +'img.msgtag.com', +'img.mybet.com', +'img.nameintel.com', +'img.qualtrics.com', +'img.revcontent.com', +'img.revmob.com', +'img.sedoparking.com', +'img.servint.net', +'img.share-online.biz', +'img.solocpm.com', +'img.stamps.com', +'img.szm.sk', +'img.techweb.com', +'img.testsuite.adition.com', +'img.tradedoubler.com', +'img.turn.com.73892.9624.302br.net', +'img.turn.com.73893.9624.302br.net', +'img.users.51.la', +'img.vmmpxl.com', +'img.webring.com', +'img.wmp10.elsitiodc.com', +'img.woolik.com', +'img.zedo.com', +'img001.groovinads.com', +'img002.groovinads.com', +'img003.groovinads.com', +'img004.groovinads.com', +'img005.groovinads.com', +'img006.groovinads.com', +'img007.groovinads.com', +'img008.groovinads.com', +'img009.groovinads.com', +'img01.webtrekk.net', +'img02.webtrekk.net', +'img03.en25.com', +'img03.webtrekk.net', +'img04.webtrekk.net', +'img05.webtrekk.net', +'img06.webtrekk.net', +'img1.nend.net', +'img1.webring.com', +'img2.freeze.com', +'img22.ru.redtram.com', +'img3.giardinelli.com', +'img3.giardinelli.com.edgesuite.net', +'imgcache.classesusa.com', +'imgclck.com', +'imgfarm.com', +'imgg-cdn.adskeeper.co.uk', +'imgg.adskeeper.co.uk', +'imgg.marketgid.com', +'imgg.steepto.com', +'imgn.dt07.net', +'imgs.xinhuanet.com', +'imgserv.adbutler.com', +'imgstat.ameba.jp', +'imgtrack.domainmarket.com', +'imiclk.com', +'imimobile.com', +'imln5.voluumtrk.com', +'immassets.s3.amazonaws.com', +'imonitor.dhgate.com', +'imonitor.nethost.cz', +'imp.bid.ace.advertising.com', +'imp.clickability.com', +'imp.constantcontact.com', +'imp.optaim.com', +'imp.startappexchange.com', +'imp.tradedoubler.com', +'impact.applifier.com', +'impact.staging.applifier.com', +'impactmobile.com', +'impbe.tradedoubler.com', +'impde.tradedoubler.com', +'impdk.tradedoubler.com', +'impes.tradedoubler.com', +'impfi.tradedoubler.com', +'impfr.tradedoubler.com', +'impgb.tradedoubler.com', +'impit.tradedoubler.com', +'impluviawtqydlbbi.download', +'impnl.tradedoubler.com', +'impno.tradedoubler.com', +'impr.superpages.com', +'imprese.cz', +'impression.clickinc.com', +'imprusmp.admailtiser.com', +'impse.tradedoubler.com', +'imptestrm.com', +'ims.cz', +'ims.nl', +'imserv001.adtech.fr', +'imserv002.adtech.fr', +'imserv003.adtech.fr', +'imserv004.adtech.fr', +'imserv005.adtech.fr', +'imserv006.adtech.fr', +'imserv00x.adtech.fr', +'imssl01.adtech.fr', +'imstore.bet365affiliates.com', +'imtrck.com', +'imtrk.trktoo.com', +'imu.com.cn', +'imupdate.3g.cn', +'imx.comedycentral.com', +'in.adserver.yahoo.com', +'in.cybererotica.com', +'in.getclicky.com', +'in.mainentrypoint.com', +'in.ml314.com', +'in.mstrckinam.com', +'in.mydirtyhobby.com', +'in.paycounter.com', +'in.riskymail4free.com', +'inb.csrvrgroup.com', +'inb.genorithm.com', +'inbeingsfmjfup.download', +'inboxdollars.com', +'inboxpounds.co.uk', +'inboxpounds.com', +'incentaclick.com', +'inceptionads.go2cloud.org', +'inclk.com', +'include.reinvigorate.net', +'incoming.cloud-trax.com', +'indiads.com', +'indicative.com', +'indieclick.3janecdn.com', +'indocpa.go2cloud.org', +'indoorspkacwv.download', +'industryclick.com', +'indystar.com', +'inebriatesqmwpaz.download', +'inedo.com', +'inentasky.com', +'ineryield.jmp9.com', +'inet-traffic.com', +'inetlog.com', +'inetlog.ru', +'inf.marketgid.com', +'infinio.go2cloud.org', +'infinite-ads.com', +'infinite-mobility.go2affise.com', +'infinity.adsupply.com', +'infinityads.com', +'influens.go2affise.com', +'influentialads.go2cloud.org', +'info-mail.codeguard.com', +'info.anmedia.co.uk', +'info.bororeb.com', +'info.elba.at', +'info.evidon.com', +'info.skyhookwireless.com', +'info.static.startappservice.com', +'info.web.de', +'info4.a7.org', +'infoc1.duba.net', +'infoc2.duba.net', +'infomart.ca.112.2o7.net', +'infonlin.2cnt.net', +'infoproducts.go2cloud.org', +'information.com', +'infos.com', +'infospace.com', +'infospace.com.112.2o7.net', +'infostart.com', +'infostroy.nnov.ru', +'ingameads.gameloft.com', +'ingdirectit.tt.omtrdc.net', +'ingluvialqsbjgerp.download', +'inimage.tr553.com', +'init.lingospot.com', +'init.phpwind.net', +'init.startappexchange.com', +'initgroup.com', +'inkshare.com', +'inm.go2cloud.org', +'inmobi.com', +'inmobi.net', +'inmobisdk-a.akamaihd.net', +'inner-active.com', +'inner-active.mobi', +'inneractive-assets.s3.amazonaws.com', +'innn.site', +'inpencil.go2cloud.org', +'inpencilmedia.go2cloud.org', +'inpref.s3-external-3.amazonaws.com', +'inpref.s3.amazonaws.com', +'inquiries.redhat.com', +'inquiry.shop.xerox.com', +'insight.adsrvr.org', +'insight.mintel.com', +'insightexpress.com', +'insightexpressai.com', +'insights.gravity.com', +'insightsprod.zelfy.com', +'insitepromotion.com', +'insites.be', +'inspectlet.com', +'inspectorclick.com', +'instinctiveads.com', +'instore-audience.pb.adition.com', +'int.sitestat.com', +'intares.net', +'intarsia.bnex.com', +'intecyield.jmp9.com', +'integral-marketing.com', +'integrate.112.2o7.net', +'integrate.com', +'intelcorpchan.112.2o7.net', +'intelcorperror.112.2o7.net', +'intelcorpsupp.112.2o7.net', +'inteld.jmp9.com', +'inteletrack.com', +'intelglobal.112.2o7.net', +'intelli-direct.com', +'intelli-tracker.com', +'intelli.ageuk.org.uk', +'intelliad.de', +'intellicampaign.com', +'intellicontact.com', +'intelligence.dgmsearchlab.com', +'intelligentbeauty.122.2o7.net', +'intelliseek.com', +'intellitxt.com', +'interactive-assets.s3.amazonaws.com', +'interactivepartners.go2cloud.org', +'interhyp02.webtrekk.net', +'interield.jmp9.com', +'interludenbaabaim.download', +'internet-optimizer.com', +'internet-time.com', +'internet.cz', +'internetcount.com', +'internettrafficreport.com', +'interreklame.de', +'interstateanalytics.com', +'interunionieyyq.download', +'interupload.com', +'interworksmedia.co.kr', +'interyeild.jmp9.com', +'interyield.jmp9.com', +'interyield.jmp9.cominteryield.jmp9.com', +'interyieldw.jmp9.com', +'interyieldww.jmp9.com', +'interyieldwww.jmp9.com', +'interyieldwww.t.jmp9.com', +'inteteryield.jmp9.com', +'intext.advertise.com', +'intext.billboard.cz', +'intext.de', +'intext.ero-advertising.com', +'intext.intextdirect.com', +'intext.linknavi1.com', +'intext.nav-links.com', +'intimistsoqitkh.download', +'intouchmediagroup.com', +'intranet.adition.com', +'intranet.bnex.com', +'intranet.zedo.com', +'intredo.com', +'intredomedia.com', +'intueryield.jmp9.com', +'intuitinc.122.2o7.net', +'inuvi.com', +'investora.justclick.ru', +'invideo.ero-advertising.com', +'inviterdczpqji.download', +'invites.flipmailer.com', +'invites.infoaxe.com', +'inze5.voluumtrk.com', +'ioads.ero-advertising.com', +'ione.adspirit.de', +'ione.netmng.com', +'iopodx.de', +'ios.revmob.com', +'iosads20.adcolony.com', +'iosads22.adcolony.com', +'iosads24.adcolony.com', +'iota1.rtb.appier.net', +'iota5.rtb.appier.net', +'ip-api.com', +'ip.casalemedia.com', +'ip134.timesink.com', +'ip2.casalemedia.com', +'ipacc1.adtech.fr', +'ipc.chtah.com', +'ipdata.adtech.fr', +'ipdeutschland.122.2o7.net', +'iperceptions.com', +'ipfingerprint.com', +'iph.go2cloud.org', +'iphone.mobpartner.mobi', +'ipinvite.iperceptions.com', +'ipinyou.com.cn', +'ipqualityscore.com', +'ipstat.com', +'iptrack01.webtrekk.net', +'iptrack02.webtrekk.net', +'iptrack03.webtrekk.net', +'iptrack04.webtrekk.net', +'iptrack05.webtrekk.net', +'iq.mobilix.mobi', +'iq001.adtech.fr', +'iqads.2cnt.net', +'iqolu.voluumtrk.com', +'ir-de.amazon-adsystem.com', +'ir-jp.amazon-adsystem.com', +'ir-na.amazon-adsystem.com', +'ir.doubleclick.net', +'ir0.mobify.com', +'ir1p5.voluumtrk.com', +'ir2.beap.gemini.yahoo.com', +'ir752.voluumtrk.com', +'iranpopup.ir', +'ireklama.cz', +'irepdeliver.com', +'irozb.voluumtrk.com', +'irpopup.ir', +'irqnaphizzes.review', +'irs01.net', +'is9ip.voluumtrk.com', +'ise.clmbtech.com', +'isearch.shopathome.com', +'isg01.casalemedia.com', +'ishare.metric.rediff.com', +'isoa.adition.com', +'isobarevdwtaol.download', +'isoclinicvzlcj.download', +'ispeakvideo.com', +'ist.go2cloud.org', +'istatic.datafastguru.info', +'istats.nl', +'istrack.com', +'it.adserver.yahoo.com', +'itnteryield.jmp9.com', +'itop.cz', +'itpaystolearn.com', +'itpro.no.intellitxt.com', +'itrack.it', +'itrafficcontrol.com', +'itrckr.com', +'itreviews.uk.intellitxt.com', +'itroq.voluumtrk.com', +'itsptp.com', +'itunes.mobpartner.mobi', +'ituwnqfhoimpresari.review', +'itvandroid.2cnt.net', +'itvdotcom.2cnt.net', +'itvios.2cnt.net', +'itx5-publicidad.smartadserver.com', +'itx5.smartadserver.com', +'itxt2.us.intellitxt.com', +'itxt3.us.intellitxt.com', +'iuhts.voluumtrk.com', +'iusfpiadefunction.review', +'iut4u.voluumtrk.com', +'iv.doubleclick.net', +'ivi.traflab.ru', +'ivillageglobal.112.2o7.net', +'ivjca.voluumtrk.com', +'ivoriessrjwoctu.download', +'ivqva.voluumtrk.com', +'ivw.discover-outdoor.de', +'ivw.dumontreise.de', +'ivw.rtl.de', +'ivwextern.prosieben.de', +'ivwextern.sat1.de', +'ivypixel.com', +'ivypx.voluumtrk.com', +'iweb.go2cloud.org', +'iwebimg.net', +'iwmhtnexbthwartly.review', +'iwqzh.voluumtrk.com', +'ixsjz.voluumtrk.com', +'ixzvhxrithripses.review', +'iy3me.voluumtrk.com', +'iycmeworlds.review', +'iyczm.voluumtrk.com', +'iyfnzgb.com', +'iymaw.voluumtrk.com', +'izrtyzjvarememberer.review', +'izzonet.go2cloud.org', +'j.adlooxtracking.com', +'j.clickdensity.com', +'j.ophan.co.uk', +'j.rvttrack.com', +'j.sahcdn.com', +'j.zeroredirect.com', +'j.zeroredirect1.com', +'j.zeroredirect2.com', +'j0q3w.voluumtrk.com', +'j1alc.voluumtrk.com', +'j3vcj.voluumtrk.com', +'j4sgq.voluumtrk.com', +'j5g2b.voluumtrk.com', +'j5sjr.voluumtrk.com', +'j8r2b.voluumtrk.com', +'jaapt.voluumtrk.com', +'jackpotgambling.net', +'jade.bnex.com', +'jadina-counter.de', +'jadizayo.com', +'jag.go2cloud.org', +'jaggiestlydumv.download', +'jaildxlhdnvo.download', +'jajzr.voluumtrk.com', +'jalbum.net', +'jamii.2cnt.net', +'jaminfinity.tk', +'jammyads.go2affise.com', +'jandolav.com', +'japan.inmobi.com', +'jarvinzo.com', +'jasmin.com', +'jasper.go2cloud.org', +'jatxt.com', +'javascriptcounter.appspot.com', +'javdict.disqus.com', +'jayde.com', +'jayohmedia.go2cloud.org', +'jbmqa.voluumtrk.com', +'jbonlinemedia-electronics.t.domdex.com', +'jbrotrk.com', +'jcarter.spinbox.net', +'jclqf.voluumtrk.com', +'jcmailer.justcode.biz', +'jcount.com', +'jcr0757kum.s.ad6media.fr', +'jd-mail.co.uk', +'jd.revolvermaps.com', +'jd2yj.voluumtrk.com', +'jdelta2.rtb.appier.net', +'jdelta3.rtb.appier.net', +'jdn.monster.com', +'je.revolvermaps.com', +'je60z.voluumtrk.com', +'jeanswest-com-au.b.appier.net', +'jebadu.com', +'jebtrack.com', +'jeiup.voluumtrk.com', +'jenkins.kissmetrics.com', +'jeolk.voluumtrk.com', +'jerrcotch.com', +'jetenglish.justclick.ru', +'jetmultimedia1.audientia.net', +'jetzt.digidip.net', +'jewelryincandlescomplg-wxhost.netdna-ssl.com', +'jfhjh.voluumtrk.com', +'jggxm.voluumtrk.com', +'jh4ne.voluumtrk.com', +'jhojr.voluumtrk.com', +'jhwjkr.com', +'jidbn.voluumtrk.com', +'jigoshop.go2cloud.org', +'jijsonline.112.2o7.net', +'jingavot.com', +'jira.adition.com', +'jira.omniture.com', +'jirkinetsaxjjdegyp.download', +'jiwire.com', +'jixfo.voluumtrk.com', +'jkearns.freestats.com', +'jkeyp.voluumtrk.com', +'jkgah.voluumtrk.com', +'jkmiepojqatmolyse.review', +'jlh9b.voluumtrk.com', +'jlinks.industrybrains.com', +'jlyse.net', +'jm.moatads.com', +'jmm.livestat.com', +'jmp.realtraq.net', +'jmp9.com', +'jmpdirect01.com', +'jmpgo.com', +'jmplink.com', +'jmqqopacmilligram.review', +'jmsri.voluumtrk.com', +'jmyyyjhnzpeaching.review', +'jobclicks.net', +'jobfeeds.coroflot.com', +'joblo.us.intellitxt.com', +'jobs.advertising.com', +'jobs.leadbolt.com', +'jobs.zedo.com', +'jobscentral-com-sg.b.appier.net', +'joetec.net', +'johnlewis.112.2o7.net', +'joigd.voluumtrk.com', +'join.whitegfs.com', +'jokep.com', +'jokes.searchwho.com', +'jonathanleger.com', +'joredi.com', +'joredii.com', +'jorel.radfellas.com', +'joshtest1.evsuite.com', +'joyourself.com', +'jp-u.openx.net', +'jp8yh.voluumtrk.com', +'jpgolimited.go2affise.com', +'jpmedia.go2cloud.org', +'jppcj.voluumtrk.com', +'jpvoj.voluumtrk.com', +'jpxal.voluumtrk.com', +'jqreb.voluumtrk.com', +'jqs7d.voluumtrk.com', +'jquerycdn.co.il', +'jquerymin.co.il', +'jqyss.voluumtrk.com', +'jrcdelcotimescom.122.2o7.net', +'jrjdn.voluumtrk.com', +'jrtux.com', +'js-agent.newrelic.com', +'js-sec.indexww.com', +'js-webt-lol.9cache.com', +'js.ad-stir.com', +'js.adforgames.com', +'js.ads.ero-advertising.com', +'js.adscale.de', +'js.adsonar.com', +'js.avstats.com', +'js.bitlordservdownload.com', +'js.bizographics.com', +'js.callbutton.net', +'js.cdn.yieldkit.com', +'js.cybermonitor.com', +'js.dmtry.com', +'js.embedarticle.com', +'js.ero-advertising.com', +'js.francite.com', +'js.gumgum.com', +'js.hs-analytics.net', +'js.hubspot.com', +'js.indexww.com', +'js.juicyads.com', +'js.kau.li', +'js.libertysurf.fr', +'js.livehelper.com', +'js.matheranalytics.com', +'js.maxmind.com', +'js.moatads.com', +'js.myinfotopia.com', +'js.nrcdn.com', +'js.revsci.net', +'js.rmbn.ru', +'js.ru.redtram.com', +'js.sddan.com', +'js.smartredirect.de', +'js.stormcontainertag.com', +'js.users.51.la', +'js.w.inmobi.com', +'js.wingowin.com', +'js.worthathousandwords.com', +'js1.hitbox.com', +'js1.nend.net', +'js2.rfihub.com', +'jsauth.mymovies.net', +'jsc.dinclinx.com', +'jsc.dt07.net', +'jsc.madisonlogic.com', +'jsc.marketgid.com', +'jsc.mgid.com', +'jscount.com', +'jserr.cnzz.com', +'jserror.newrelic.com', +'jsl.blankbase.com', +'jsmith.go2cloud.org', +'jsn.dt07.net', +'jsn.mgid.com', +'jsok.demos.su', +'json-cricket.appspot.com', +'json.mmotraffic.com', +'json.moatads.com', +'jsonp.moatads.com', +'jspy.ru', +'jsu.dt07.net', +'jsu.mgid.com', +'jsv2.ptengine.com', +'jswrite.com', +'jsy59.voluumtrk.com', +'jtqhcgndrawlers.review', +'jttnk.voluumtrk.com', +'jtzvl.voluumtrk.com', +'ju6jb.voluumtrk.com', +'jubilationqeeau.download', +'juiceadv.com', +'juispsvgtproselytes.review', +'jump.aragontrack.com', +'jump.jspg.cc', +'jump.omnitarget.com', +'jump.youmobistein.com', +'jumptap.com', +'junbi-tracker.com', +'junggglex.go2affise.com', +'jupiter.bravenet.com', +'jupiter.us.intellitxt.com', +'jurymastgewtdwcw.download', +'justad.mobi', +'justgetitfaster.com', +'justsaywow.com', +'justwebads.com', +'justwtchaffiliatecom.ipage.com', +'jvesd.voluumtrk.com', +'jvhuv.voluumtrk.com', +'jvpmb.voluumtrk.com', +'jvrub.voluumtrk.com', +'jvz5.com', +'jvz7.com', +'jvz8.com', +'jvz9.com', +'jvzoo.com', +'jwljj.adsb4track.com', +'jwner.voluumtrk.com', +'jwpltx.com', +'jwtznloxywadsets.review', +'jxzmo.voluumtrk.com', +'jxzxqaauplaybooks.review', +'jzgng.voluumtrk.com', +'k.collective-media.net', +'k.ilius.net', +'k.zeroredirect.com', +'k.zeroredirect1.com', +'k.zeroredirect2.com', +'k30mn.voluumtrk.com', +'k3sbo.voluumtrk.com', +'k658t.voluumtrk.com', +'k66fd.voluumtrk.com', +'k6afu.voluumtrk.com', +'k6pwy.voluumtrk.com', +'k7j6a.voluumtrk.com', +'k9a8e.voluumtrk.com', +'kaartenhuis.nl.site-id.nl', +'kads.k-network.com', +'kalanternaya.justclick.ru', +'kaldi.voluumtrk.com', +'kaleidoaffiliates.go2cloud.org', +'kalender.adition.com', +'kalpit.go2cloud.org', +'kalstats.kaltura.com', +'kanoodle.com', +'kaponetwo.com', +'kargo.com', +'kavanga.ru', +'kb.2cnt.net', +'kb1vtest.2cnt.net', +'kb9kd.voluumtrk.com', +'kcaf9.voluumtrk.com', +'kcsbaujgynaecia.review', +'kd1fv.voluumtrk.com', +'kdhhl.voluumtrk.com', +'kdovs.voluumtrk.com', +'kds.ero-advertising.com', +'kdzwk.voluumtrk.com', +'kea98.voluumtrk.com', +'kecksesualnfr.download', +'kecwxhifheyestalks.review', +'keen.io', +'kefu.duba.net', +'keisu.eproof.com', +'kek2s.voluumtrk.com', +'kel6x.voluumtrk.com', +'kelshpjmntongues.review', +'kewlrank.com', +'keydownload.go2cloud.org', +'keynotedeviceanywhere.com', +'keyoptimize.com', +'keystat.com', +'keyword.daumdn.com', +'keyword.netscape.com', +'keywordblocks.com', +'keywordmax.com', +'keywords.fmpub.net', +'kfmm5.voluumtrk.com', +'kfngqabkeinfallibly.review', +'kfw-05.webtrekk.net', +'kfw-06.webtrekk.net', +'kfw-07.webtrekk.net', +'kfw01.webtrekk.net', +'kfw02.webtrekk.net', +'kfw03.webtrekk.net', +'kfw04.webtrekk.net', +'kgj9s.voluumtrk.com', +'kgn3j.voluumtrk.com', +'khe5q.voluumtrk.com', +'khkg2.voluumtrk.com', +'khvx.secoptim.com', +'ki6fu.voluumtrk.com', +'kiks.yandex.ru', +'kikuzip.com', +'kilobytebokrfnbvp.download', +'kilomansa.com', +'kilopog.com', +'kilorama.com', +'kinesiz.go2affise.com', +'kinkycards.com', +'kinocash.com', +'kinoprogramm.bild.de', +'kinostok.tv', +'kintris.adspirit.net.52322.9351.302br.net', +'kintris.adspirit.net.52325.9351.302br.net', +'kintris.adspirit.net.52328.9351.302br.net', +'kintris.adspirit.net.52331.9351.302br.net', +'kintris.adspirit.net.52337.9351.302br.net', +'kintris.adspirit.net.52340.9351.302br.net', +'kintrisaffiliates.go2cloud.org', +'kiomi-com01.webtrekk.net', +'kismia.go2affise.com', +'kissfm.ivwbox.de', +'kissmetrics.com', +'kissmyads.com', +'kitcg.voluumtrk.com', +'kizash.com', +'kjolj.voluumtrk.com', +'kjos.vo.llnwd.net', +'kjswp.voluumtrk.com', +'kka.agitos.de', +'kka.idg.de', +'kkastatic.s3.amazonaws.com', +'kkhopguserenate.review', +'kleiderkreisel.digidip.net', +'klick.affiliwelt.net', +'klick.retailerweb.net', +'klick4u.de', +'klikklik.nl', +'kliks.nl', +'kliktrek.com', +'klipmart.forbes.com', +'kliptracker.com', +'klix.cz', +'klu02.voluumtrk.com', +'klxik.voluumtrk.com', +'kmechte.justclick.ru', +'kmfrk.voluumtrk.com', +'kmylvwo5.com', +'knalo.voluumtrk.com', +'knigge.webtrekk.net', +'knnomeuaustringer.review', +'kochava.com', +'kohls.tt.omtrdc.net', +'komoona.com', +'kondratev.popunder.ru', +'kontaktanzeigen-fotos.de', +'kontera.com', +'koocash.com', +'kople.voluumtrk.com', +'kosoft-ads.com', +'kostenloseanzeigen.momentblick.de', +'kpcrw.voluumtrk.com', +'kpdxchvxydeepest.review', +'kpe75.voluumtrk.com', +'kpicentral.com', +'kqqfxfortlets.review', +'kqram.voluumtrk.com', +'kr-adimage.lycos.co.kr', +'krafteurope.112.2o7.net', +'kraftfoodseurope.d3.sc.omtrdc.net', +'kraken-measurements.s3.amazonaws.com', +'kreapixel.go2cloud.org', +'kristinaaza.justclick.ru', +'krj9b.redirectvoluum.com', +'krone.oewabox.at', +'kropka.tro.pl', +'krwxs.voluumtrk.com', +'kryptobanners.com', +'kscrudiscepted.review', +'kstmnfmdaphilologue.review', +'kszmp.voluumtrk.com', +'ktmoh.voluumtrk.com', +'ktu.sv2.biz', +'ktxtkvolitient.review', +'kuchebraska.com', +'kudika.2cnt.net', +'kuhuz.voluumtrk.com', +'kuivt.voluumtrk.com', +'kulinar.justclick.ru', +'kulxc.voluumtrk.com', +'kunal3291.ibprofits.cpa.clicksure.com', +'kundenserver.de', +'kvjwu.voluumtrk.com', +'kvsge.voluumtrk.com', +'kvvadrat.net', +'ky6oi.voluumtrk.com', +'ky9ab.voluumtrk.com', +'kyg.go2cloud.org', +'kyuhd.voluumtrk.com', +'kzhav.voluumtrk.com', +'kzyrg.voluumtrk.com', +'l.5min.com', +'l.advertstream.com', +'l.adxcore.com', +'l.betrad.com', +'l.deals.ebay.com', +'l.deindeal.ch', +'l.gamespot.com', +'l.longtailvideo.com', +'l.lp4.io', +'l.mail-backcountry.com', +'l.mail-steepandcheap.com', +'l.moapi.net', +'l.mydirtyhobby.com', +'l.myxcz.com', +'l.ooyala.com', +'l.player.ooyala.com', +'l.popin.cc', +'l.sharethis.com', +'l.zeroredirect.com', +'l.zeroredirect1.com', +'l.zeroredirect2.com', +'l1.zedo.com', +'l2.zedo.com', +'l3egp.voluumtrk.com', +'l4vt1.voluumtrk.com', +'l5.zedo.com', +'l69or.voluumtrk.com', +'l6kjl.voluumtrk.com', +'l9wne.voluumtrk.com', +'la-chi.outbrain.com', +'la1w1.salesforceliveagent.com', +'lab.atdmt.com', +'labelfind01.webtrekk.net', +'laboutique.go2affise.com', +'lacodeworks.com', +'lacquerersdfnkejwkz.download', +'ladbrokesaffiliates.com.au', +'lads.myspacecdn.com', +'lai.go2cloud.org', +'laih.com', +'laminarianxvdcl.download', +'landing.adhall.com', +'landing.appia.com', +'landing.parkplatzkartei.com', +'landing.seek2.com', +'landing.trafficz.com', +'landingpagegenius.com', +'landscaping.srv123.com', +'lapescuit.2cnt.net', +'lapoo.net', +'latest-460050.ebeda.info', +'latest-461069.dochyedu.info', +'latest-470741.takyake.ru', +'latinoreview.us.intellitxt.com', +'lau1.slot.union.ucweb.com', +'launch1.co', +'launchbit.com', +'launchermsg.3g.cn', +'laurel.macrovision.com', +'lavoce.justclick.ru', +'lax1.ib.adnxs.com', +'laxnws.112.2o7.net', +'laxprs.112.2o7.net', +'laxpsd.112.2o7.net', +'laxwht.122.2o7.net', +'layer-ad.org', +'layer-ads.de', +'layer.dhg-marketing.de', +'layer.interactivespot.net', +'layer.lima-city.de', +'layerads.ero-advertising.com', +'layers.ero-advertising.com', +'layers.yontoo.com', +'layout1.realtracker.com', +'lb-adserver.ig.com.br', +'lb.apicit.net', +'lb.statsevent.com', +'lb.trellian.com', +'lb.usemaxserver.de', +'lb.webovernet.com', +'lbhf.logo-net.co.uk', +'lbkkq.voluumtrk.com', +'lbn.ru', +'lbs.justclick.ru', +'lbtel.voluumtrk.com', +'lc-pay.com', +'lc.iadvize.com', +'lcc64.voluumtrk.com', +'lcs.livedoor.net', +'lcs.naver.com', +'ld.you2mail.com', +'lddthjbooboos.review', +'ldglob01.adtech.fr', +'ldglob02.adtech.fr', +'ldimage01.adtech.fr', +'ldimage02.adtech.fr', +'ldserv01.adtech.fr', +'ldserv02.adtech.fr', +'lead.adsender.us', +'leadads.go2jump.org', +'leadback.advertising.com', +'leadbolt.com', +'leadclick.com', +'leadcrunch.com', +'leader.linkexchange.net', +'leadfactory.go2cloud.org', +'leadformix.com', +'leadgid.go2cloud.org', +'leadhound.com', +'leadhug.go2cloud.org', +'leadim.go2cloud.org', +'leadin.adspirit.de', +'leadingedgecash.com', +'leadintelligence.co.uk', +'leadlander.com', +'leadmobi.en.alibaba.com', +'leadparadise.go2cloud.org', +'leadperformanceltd.go2cloud.org', +'leads.383media.com', +'leads.ohecampus.com', +'leadtrackgo.com', +'leadtracking.plumvoice.com', +'leapfind.com', +'learn.doubleclick.net', +'leastsuuhyh.download', +'leave.exacttarget.com', +'lecternxqlgvbl.download', +'legacylabs.go2cloud.org', +'legitfreecounters.com', +'legkokstroinosti.justclick.ru', +'lego.112.207.net', +'lenovo.demdex.net', +'lenovo.tt.omtrdc.net', +'lerelais.com', +'letssearch.com', +'lettre.research-int.fr', +'level.turboads.de', +'level3com.d2.sc.omtrdc.net', +'levexis.com', +'lexa3maus.justclick.ru', +'lfbot.voluumtrk.com', +'lfiofptxserows.review', +'lfstmedia.com', +'lg.brandreachsys.com', +'lhcep.voluumtrk.com', +'lhgqc.voluumtrk.com', +'lib.trafit.com', +'lib1.libstat.com', +'libie.justclick.ru', +'libs.coremetrics.com', +'libstat.com', +'license20121011.getjar.com', +'liczniki.org', +'lidl.adspirit.de', +'life-in-travels.justclick.ru', +'lifetoyou.justclick.ru', +'lift.openx.com', +'liftopia.go2cloud.org', +'ligatus.com', +'lightboxanalytics-53675.onmodulus.net', +'lightedpages.com', +'lijit.com', +'likebtn.com', +'liktirov.com', +'limelightovp3.creatorcloud.netdna-cdn.com', +'limitlessoffers.go2cloud.org', +'limmaocijq.download', +'linicom.co.il', +'link.ac', +'link.alviboard.com', +'link.alvicut.com', +'link.alvifly.com', +'link.alvilink.com', +'link.alvilite.com', +'link.alvinewss.com', +'link.alviopen.com', +'link.alvisoftt.com', +'link.ananboard.com', +'link.ananroot.com', +'link.anansky.com', +'link.belati.net', +'link.connectoffer.com', +'link.email.dynect.net', +'link.huffingtonpost.com', +'link.informer.com', +'link.mercent.com', +'link.net', +'link.offrerenouveau.fr', +'link.openfile.fr', +'link.p0.com', +'link.pcspeedup.com', +'link.profitreload.com', +'link.safecart.com', +'link.sysmail.fr', +'link4link.com', +'link4u.de', +'linkads.de', +'linkbuddies.com', +'linkconnector.com', +'linkcounter.com', +'linkdex.go2cloud.org', +'linkexchange.lk.net', +'linkexchange.net', +'linkexchange.nl', +'linkexchange.org', +'linklog.blogflux.com', +'linknavi1.com', +'linkopp.com', +'linkprice.com', +'linkpuls.idg.no', +'linkreferral.com', +'links.freeones.com', +'links.outster.com', +'links.services.disqus.com', +'links.xxxcounter.com', +'linkshare.com', +'linksmile.com', +'linksponsor.com', +'linksredirect.com', +'linkswaper.com', +'linktarget.com', +'linktrack.bravenet.com', +'linktrackerinc.go2cloud.org', +'linkwithin.com', +'linkwords.net', +'linkxchanger.com', +'linkxchanger.info', +'linkybank.com', +'linuxpark.adtech.fr', +'liquidad.narrowcastmedia.com', +'liqwid.net', +'list.ilius.net', +'list.ru', +'list2.bravenet.com', +'listbot.com', +'listenloop.com', +'lisyn.voluumtrk.com', +'litiumo.com', +'live-cams-1.livejasmin.com', +'live.chartboost.com', +'live.ec2.cxo.name', +'live.logaholic.com', +'live.rads.msn.com', +'live.sekindo.com', +'live1.logaholic.com', +'live2.logaholic.com', +'live3s.me', +'liveadexchanger.com', +'liveadvert.com', +'livecams.nl', +'livechat.s3.amazonaws.com', +'livecounter.dk', +'liveinternet.ru', +'livejasmin.com', +'livepass.conviva.com', +'liveprivates.com', +'livere.co.kr', +'livere.co.kr.cizion.ixcloud.net', +'liversely.com', +'livesearchnow.com', +'liveserver.com', +'livesexasian.com', +'livesharepersonals.com', +'livestat.com', +'livestat.derstandard.at', +'livestats.la7.tv', +'livestats.matrix.it', +'livetechnology.com', +'livetracker.martinoticias.org', +'livetracker.radiosawa.us', +'liveviewer.ez.no', +'ljostrade.go2cloud.org', +'ljteas.com', +'ljujm.voluumtrk.com', +'lkqd.net', +'lli.org', +'llivedotcom.2cnt.net', +'llivedotcomtest.2cnt.net', +'lllezpalebucks.review', +'llnwop-eu.cedexis.com', +'lloogg.com', +'llyebbsouthpaws.review', +'lm.visualware.com', +'lm5.spyc.biz', +'lmcd.us.intellitxt.com', +'lmdemo.netmining.com', +'lmimi.snfie.com', +'lmjgo.voluumtrk.com', +'lmlttrack.com', +'lnkgo.com', +'lnkgt.com', +'lnkxfer8.com', +'lnwns.voluumtrk.com', +'lnx.lu', +'load.exelator.com', +'load.instinctiveads.com', +'load.sumome.com', +'loader.engage.gsfn.us', +'loadeu.exelator.com', +'loading1.widdit.com', +'loadm.exelator.com', +'loadus.exelator.com', +'loanlinks.com', +'loanpush.com', +'lobstersctero.download', +'loc1.hitsprocessor.com', +'local.ads.nwsource.com', +'localads-statistics.maps.me', +'localads.maps.me', +'localmantra.com', +'localmediabuying.com', +'localytics.com', +'log.adap.tv', +'log.advista.no', +'log.amitshah.net', +'log.btopenworld.com', +'log.chartbeat.com', +'log.data.disney.com', +'log.dmtry.com', +'log.formr.io', +'log.gemscool.com', +'log.go.com', +'log.hiiir.com', +'log.ideamelt.com', +'log.idnes.cz', +'log.incredibar-search.com', +'log.ioam.de', +'log.itworld.com', +'log.kieskeurig.nl', +'log.kukuplay.com', +'log.kuwo.cn', +'log.mmstat.com', +'log.netgeography.net', +'log.newsvine.com', +'log.nexgen.neustar.biz', +'log.omiga-plus.com', +'log.opentracker.net', +'log.optimizely.com', +'log.outbrain.com', +'log.paulbetts.org', +'log.pinterest.com', +'log.streamagent.sensic.net', +'log.suchen.de', +'log.superweb.ws', +'log.tapatalk.com', +'log.trafic.ro', +'log.user-clicks.com', +'log.vdn.apps.cntv.cn', +'log.viva.co.id', +'log.wilmaa.com', +'log.worldsoft-cms.info', +'log.xiti.com', +'log000.goo.ne.jp', +'log10.doubleverify.com', +'loga.hit-parade.com', +'loga.xiti.com', +'logc1.xiti.com', +'logc10.xiti.com', +'logc110.xiti.com', +'logc127.xiti.com', +'logc13.xiti.com', +'logc132.xiti.com', +'logc135.xiti.com', +'logc147.xiti.com', +'logc148.xiti.com', +'logc153.xiti.com', +'logc156.xiti.com', +'logc168.xiti.com', +'logc172.xiti.com', +'logc174.xiti.com', +'logc175.xiti.com', +'logc183.xiti.com', +'logc194.xiti.com', +'logc199.xiti.com', +'logc2.xiti.com', +'logc204.xiti.com', +'logc205.xiti.com', +'logc206.xiti.com', +'logc209.xiti.com', +'logc215.xiti.com', +'logc23.xiti.com', +'logc239.xiti.com', +'logc240.xiti.com', +'logc246.xiti.com', +'logc269.xiti.com', +'logc278.xiti.com', +'logc281.xiti.com', +'logc286.xiti.com', +'logc35.xiti.com', +'logc4.xiti.com', +'logc5.xiti.com', +'logc57.xiti.com', +'logc8.xiti.com', +'logc9.xiti.com', +'logentries.com', +'logger-01.vty.dailymotion.com', +'logger-02.vty.dailymotion.com', +'logger-03.vty.dailymotion.com', +'logger-04.vty.dailymotion.com', +'logger-05.vty.dailymotion.com', +'logger-06.vty.dailymotion.com', +'logger.co.kr', +'logger.tlvmedia.com', +'logging.ourstats.de', +'logging.wilmaa.com', +'logging03.wxs.nl', +'loggingapi.spingo.com', +'logi.xiti.com', +'logi1.xiti.com', +'logi2.xiti.com', +'logi241.xiti.com', +'logi3.xiti.com', +'logi6.xiti.com', +'logi7.xiti.com', +'login.adition.com', +'login.affluentco.com', +'login.campaignmonitor.com', +'login.dotomi.com', +'loginlog.sdo.com', +'logiq.go2cloud.org', +'loglady.publicbroadcasting.net', +'lognormal.net', +'logo-net.co.uk', +'logp.hit-parade.com', +'logp.xiti.com', +'logp2.xiti.com', +'logp3.xiti.com', +'logp4.xiti.com', +'logp5.xiti.com', +'logp6.xiti.com', +'logp7.xiti.com', +'logp8.xiti.com', +'logp9.xiti.com', +'logs-01.loggly.com', +'logs.51cto.com', +'logs.dashlane.com', +'logs.eresmas.com', +'logs.eternityco.net', +'logs.infoaxe.com', +'logs.libuv.org', +'logs.naukri.com', +'logs.nodejs.org', +'logs.ovh.net', +'logs.sofaware.com', +'logs.www.eresmas.com', +'logs.xiti.com', +'logs.zedo.com', +'logs11.xiti.com', +'logs1204.xiti.com', +'logs1241.xiti.com', +'logs1242.xiti.com', +'logs1281.xiti.com', +'logs13.xiti.com', +'logs1400.xiti.com', +'logs1403.xiti.com', +'logs2.xiti.com', +'logs3.xiti.com', +'logs4.xiti.com', +'logs5.xiti.com', +'logs6.xiti.com', +'logs8.xiti.com', +'logstat.caixin.com', +'logtest.moatads.com', +'logv1.xiti.com', +'logv10.xiti.com', +'logv11.xiti.com', +'logv12.xiti.com', +'logv13.xiti.com', +'logv14.xiti.com', +'logv15.xiti.com', +'logv16.xiti.com', +'logv17.xiti.com', +'logv18.xiti.com', +'logv19.xiti.com', +'logv2.xiti.com', +'logv20.xiti.com', +'logv21.xiti.com', +'logv25.xiti.com', +'logv27.xiti.com', +'logv3.xiti.com', +'logv4.xiti.com', +'logv5.xiti.com', +'logv6.xiti.com', +'logv7.xiti.com', +'logv8.xiti.com', +'logv9.xiti.com', +'logyd.voluumtrk.com', +'lokhlp.com', +'lokipodi.com', +'lolfun.com', +'lon.telefonica.bench.cedexis.com', +'londonprivaterentals.standard.co.uk', +'look2me.com', +'lookest.win', +'looksa.com', +'looksmart.com', +'looky.hyves.org', +'loopme.biz', +'loopme.me', +'lootcrate.go2cloud.org', +'los.go2cloud.org', +'losbs.voluumtrk.com', +'losii.voluumtrk.com', +'lostwebtracker.com', +'lotame.com', +'lotame.nexac.com', +'loudgames.com', +'lovecam.com.br', +'loved-by.s3.amazonaws.com', +'lovehoney.peerius.com', +'lowndestdhlpcpo.download', +'loxtk.com', +'lp.amateurcommunity.com', +'lp.babbel.com', +'lp.bigfarm.goodgamestudios.com', +'lp.empire.goodgamestudios.com', +'lp.funtapps.com', +'lp.koramgame.com', +'lp.longtailvideo.com', +'lp.mp.mydas.mobi', +'lp.mydas.mobi', +'lp.plan-q-secret.com', +'lp.sekindo.co.il', +'lp.stargames.com', +'lp.webgame.web.id', +'lpm-20minutes.nuggad.net', +'lptag.liveperson.net', +'lpvzq.voluumtrk.com', +'lqckn.voluumtrk.com', +'lqhoy.voluumtrk.com', +'lqipx.voluumtrk.com', +'lrpush.apxlv.com', +'lrpush.cogocast.net', +'lrrtslskippers.review', +'lrzxk.voluumtrk.com', +'ls.ezakus.net', +'lsawards.com', +'lsegt.voluumtrk.com', +'lslfrhpqarechating.review', +'lslmetrics.djlmgdigital.com', +'lsut8.voluumtrk.com', +'lt.andomedia.com', +'lt.c.appier.net', +'lt.retargeter.com', +'ltassrv.com.s3.amazonaws.com', +'ltljm.voluumtrk.com', +'ltur.112.2o7.net', +'lucky.netmng.com', +'luckyorange.com', +'lumdf.voluumtrk.com', +'luminate.com', +'lummeslwusp.download', +'lunametrics.wpengine.netdna-cdn.com', +'lunarads.com', +'lunho.com', +'lup5z.voluumtrk.com', +'luu.lightquartrate.com', +'luvianetwork.hasoffers.com', +'lvler.voluumtrk.com', +'lvtxg.voluumtrk.com', +'lw1.cdmediaworld.com', +'lwfmc.voluumtrk.com', +'lwken.com', +'lxa6d.voluumtrk.com', +'lxpwv.voluumtrk.com', +'lyaxz.voluumtrk.com', +'lycos-eu.imrworldwide.com', +'lyikl.voluumtrk.com', +'lysoft.go2cloud.org', +'lyyy6.voluumtrk.com', +'lzukp.voluumtrk.com', +'m.2mdn.net', +'m.ad6media.fr', +'m.addthis.com', +'m.addthisedge.com', +'m.adnxs.com', +'m.adsymptotic.com', +'m.adtc.daum.net', +'m.ajxqiongbg.com', +'m.astrokolik.com', +'m.awesometracker.com', +'m.banner.linksynergy.com', +'m.banner.t-online.de', +'m.benaughty.com', +'m.burt.io', +'m.chartbeat.com', +'m.doubleclick.com', +'m.doubleclick.net', +'m.duba.net', +'m.exactag.com', +'m.exovueplatform.com', +'m.friendlyduck.com', +'m.leadbolt.com', +'m.livejasmin.com', +'m.loading-content.net', +'m.matdm.com', +'m.mirmay.com', +'m.mobilerevenu.com', +'m.porntourfr.3818.idhad.com', +'m.quantcount.com', +'m.quantserve.com', +'m.sancdn.net', +'m.servebom.com', +'m.shopathome.com', +'m.trb.com', +'m.tribalfusion.com', +'m.trk44.mobi', +'m.tstore.co.kr', +'m.wankz.com', +'m.wrating.com', +'m.xcams.com', +'m.xp1.ru4.com', +'m.xvideos.fr', +'m.zeroredirect.com', +'m.zeroredirect1.com', +'m.zeroredirect2.com', +'m08hh.voluumtrk.com', +'m0zl8.voluumtrk.com', +'m1.2mdn.net', +'m1.webstats4u.com', +'m1e.net', +'m1fzj.trackvoluum.com', +'m2.webstats.motigo.com', +'m2d.m2.ai', +'m2m1.inner-active.mobi', +'m3.usnews.com', +'m3.webstats.motigo.com', +'m3jok.voluumtrk.com', +'m4.webstats.motigo.com', +'m4.zedo.com', +'m43fw.voluumtrk.com', +'m4n.nl', +'m5.webstats.motigo.com', +'m6.webstats.motigo.com', +'m62-genreal.com', +'m7.webstats.motigo.com', +'m8.webstats.motigo.com', +'m9.webstats.motigo.com', +'m9qi1.voluumtrk.com', +'m9zzz.survey7.adsservingtwig.xyz', +'ma.tinyflashlight.com', +'ma156-r.analytics.edgesuite.net', +'ma180-r.analytics.edgekey.net', +'ma180-r.analytics.edgesuite.net', +'ma277-r.analytics.edgesuite.net', +'ma728-r.analytics.edgekey.net', +'ma9jh.voluumtrk.com', +'maarentkeaels.download', +'mabping.chartbeat.net', +'mad2.brandreachsys.com', +'madadsmedia.com', +'madas-ads.securest.org', +'madbidcom.go2cloud.org', +'madblast.com', +'madclient.uimserv.net', +'madisonlogic.com', +'madmax53.stellar.cpa.clicksure.com', +'madmimi.com', +'madnet.ru', +'mads.amazon-adsystem.com', +'mads.at.atwola.com', +'mads.bz', +'mads.cnet.com', +'mads.com.com', +'mads.zdnet.com', +'madserve.org', +'madsone.com', +'madsuk.aol.com', +'madsuk.at.atwola.com', +'maeas.voluumtrk.com', +'maedge.com', +'magentanews.com', +'magicads.nl', +'magicfuture.go2cloud.org', +'magicmail.co.nz', +'magicmail.createsend.com', +'magifirst.com', +'magnify360-cdn.s3.amazonaws.com', +'mahuaswcspi.download', +'mail-to-a-friend.com', +'mail.adsender.us', +'mail.yeahmobi.com', +'mail.zedo.com', +'mail1.surf-town.net', +'mail2.doublepimp.com', +'mail2.surf-town.net', +'mail3.surf-town.net', +'mail4.surf-town.net', +'mail5.surf-town.net', +'mail6.surf-town.net', +'mail7.surf-town.net', +'mailb1.surf-town.net', +'mailb2.surf-town.net', +'mailb3.surf-town.net', +'mailderef.web.de', +'mailer.livejasmin.com', +'mailer.p1ne.com', +'mailinb1.surf-town.net', +'mailmenrkgzquz.download', +'mailout1.surf-town.net', +'mailout2.surf-town.net', +'mailoutb1.surf-town.net', +'mailserver.247media.net', +'mailtrack.io', +'mailtrack.me', +'main.abqjournal.netdna-cdn.com', +'main.atdmt.com', +'main.exdynsrv.com', +'main.exoclick.com', +'main.exosrv.com', +'majintetley.bravejournal.com', +'majoringmcaiynfa.download', +'makemoneyonline.2yu.in', +'makersfile.com', +'mako.checkm8.com', +'malachite.bnex.com', +'manage001.adtech.fr', +'manager.koocash.fr', +'mandolinefchscpmft.download', +'manuelu.com', +'manwin.doublepimp.com', +'map.adsniper.ru', +'map.media6degrees.com', +'map.pop6.com', +'map.popunderz.com', +'map.sddan.com', +'map1.adsniper.ru', +'map2.adsniper.ru', +'mapi.tapreason.com', +'maple-team.com', +'maps.netster.com', +'mapstats.blogflux.com', +'marble.bnex.com', +'market.oicdn.com', +'market.trafficpimps.com', +'marketbrowser.com', +'marketconnect.go2cloud.org', +'marketgid.com', +'markethealth.go2cloud.org', +'marketing-issue.com', +'marketing.888.com', +'marketing.com', +'marketing.external.xerox.com', +'marketing.gamesload.de', +'marketing.ghosterymktg.com', +'marketing.kalahari.net', +'marketing.nyi.com', +'marketing.nyi.net', +'marketing.openoffice.org', +'marketing.vistaprint.com', +'marketingsecrets.com', +'marketingtips.com', +'marketingwithpostcards.com', +'marketingx.com', +'marketleverage.go2cloud.org', +'marketo.com', +'marketplace.trafficjunky.net', +'marketsource.com', +'marketsurveys.com', +'marsoffset.goforandroid.com', +'mashasedgwick.digidip.net', +'mass-traffic.com', +'massetersspaeu.download', +'massmerchandise.com', +'masterh1.adriver.ru', +'masterh2.adriver.ru', +'masterh3.adriver.ru', +'masterh4.adriver.ru', +'masterh5.adriver.ru', +'masterh6.adriver.ru', +'masterstats.com', +'mastertag.effiliation.com', +'masterzonex.com', +'mata.ero-advertising.com', +'match.admailtiser.com', +'match.adsrvr.org', +'matchbin-assets.s3.amazonaws.com', +'matchbin.com', +'matchetbpvgzvo.download', +'material.mediav.com', +'mathtag.com', +'matomy.adk2.co', +'matomy.com', +'matomygroup.com', +'matomymail.com', +'matomymarket.com', +'matomymax.com', +'matomymedia.com', +'matomymediagroup.com', +'matomymobile.com', +'mattiz.justclick.ru', +'mature.xxxcounter.com', +'maturescam.com', +'mauleadltd.go2cloud.org', +'maverickmedia.go2cloud.org', +'maxbounty.com', +'maxcash.com', +'maxgelir.go2cloud.org', +'maximumcash.com', +'maxspeedcdn.com', +'maxtrust.ru', +'maxvr.112.2o7.net', +'mayrondigital.go2affise.com', +'mazda-com-tw.b.appier.net', +'mb.datingadzone.com', +'mb.gammae.com', +'mb.hockeybuzz.com', +'mb.marathonbet.com', +'mb.zam.com', +'mb01.com', +'mb104.com', +'mb871.voluumtrk.com', +'mbixuxsfeoutfields.review', +'mbjqc.voluumtrk.com', +'mbotvisit.com', +'mbox12.offermatica.com', +'mbox12e.offermatica.com', +'mbox3.offermatica.com', +'mbox4.offermatica.com', +'mbox5.offermatica.com', +'mbox6.offermatica.com', +'mbox9.offermatica.com', +'mbox9e.offermatica.com', +'mbs.spankwirecams.com', +'mbs.youjizzlive.com', +'mc.yandex.ru', +'mcafee12.tt.omtrdc.net', +'mcc.godaddy.com', +'mcityadslink.com', +'mckygschalalled.review', +'mclient.ivwbox.de', +'mclient2.ivwbox.de', +'mcmads.mediacapital.pt', +'mcmoby.go2cloud.org', +'mcp8f.voluumtrk.com', +'mcpaz.voluumtrk.com', +'mcpvkhoven.review', +'mcs.delvenetworks.com', +'mcssl.com', +'mctracking.go2cloud.org', +'mdamarillo.112.2o7.net', +'mdataroom.com', +'mdjacksonville.112.2o7.net', +'mdlinx.app4.hubspot.com', +'mdmserver.mobidia.com', +'mdn1.phluantmobile.net', +'mdn2.phluantmobile.net', +'mdn3.phluantmobile.net', +'mdn3origin.phluantmobile.net', +'mdqc2.voluumtrk.com', +'mdwjuneau.122.2o7.net', +'me-cdn.effectivemeasure.net', +'measurementaz.com', +'mechtayte.justclick.ru', +'meclabs.go2cloud.org', +'medbroadcast.112.2o7.net', +'media-0.vpptechnologies.com', +'media-1.vpptechnologies.com', +'media-4.vpptechnologies.com', +'media-5.vpptechnologies.com', +'media-6.vpptechnologies.com', +'media-a.vpptechnologies.com', +'media-adrunner.mycomputer.com', +'media-b.vpptechnologies.com', +'media-c.vpptechnologies.com', +'media-clic.com', +'media-code.info', +'media-d.vpptechnologies.com', +'media-delivery.armorgames.com', +'media-e.vpptechnologies.com', +'media-f.vpptechnologies.com', +'media-mc-adrunner.mycomputer.com', +'media-mgmt.armorgames.com', +'media.adlegend.com', +'media.admob.com', +'media.adrevolver.com', +'media.alphaload.com', +'media.brandreachsys.com', +'media.campartner.com', +'media.carpediem.fr', +'media.contextweb.com', +'media.curse.com', +'media.datingpartner.com', +'media.doublepimp.com', +'media.email-match.com', +'media.exchange-it.com', +'media.fastclick.net', +'media.fc2.com', +'media.flixfacts.com', +'media.ftv-publicite.fr', +'media.funpic.de', +'media.gameduell.de', +'media.gan-online.com', +'media.go2app.org', +'media.go2speed.org', +'media.gsimedia.net', +'media.hasoffers.com', +'media.justad.mobi', +'media.l3.cdn.adbucks.com', +'media.likes.com', +'media.livepromotools.com', +'media.match.com', +'media.mgnetwork.com', +'media.mobileapptracking.com', +'media.mobilerevenu.com', +'media.mobpartner.mobi', +'media.monster.com', +'media.mybet.com', +'media.mydas.mobi', +'media.mykocam.com', +'media.mykodial.com', +'media.net', +'media.onlineteachers.co.in', +'media.onlinewelten.com', +'media.origin.doublepimp.com', +'media.pointroll.com', +'media.popuptraffic.com', +'media.richrelevance.com', +'media.salemwebnetwork.com', +'media.snowball.com', +'media.superstats.com', +'media.syracuse.com', +'media.tipjunkie.com', +'media.trafficfactory.biz', +'media.trafficjunky.net', +'media.ym0.net', +'media1.adsoftware.com', +'media2.carpediem.fr', +'media4.fc2.com', +'media970.com', +'mediaantics.go2cloud.org', +'mediabistro.112.2o7.net', +'mediabreakaway.com', +'mediabuilder.com', +'mediacampaign.org', +'mediadomain.com', +'mediaforce.com', +'mediageneral.com', +'mediahorizons.com', +'medialand.ru', +'mediamath.com', +'mediametrics.mpsa.com', +'mediamgr.ugo.com', +'mediamind.com', +'median.hu', +'medianyx.go2cloud.org', +'mediaplazza.com', +'mediaplex.com', +'mediaroi.go2cloud.org', +'mediascale.de', +'mediaserver.bwinpartypartners.com', +'mediaservices-d.openxenterprise.com', +'mediasheva.com', +'mediastay.go2cloud.org', +'mediasuite.multicastmedia.com', +'mediation.adnxs.com', +'mediatisedevkrumfkc.download', +'mediatotal.ads.visionweb.no', +'mediavisor.doubleclick.net', +'mediawhirl.net', +'mediaxds.go2affise.com', +'mediciinternet.go2cloud.org', +'medicinenet.us.intellitxt.com', +'medleyads.com', +'meethotties.mobi', +'meetupdev.122.2o7.net', +'megacash.warpnet.com.br', +'megacounter.de', +'megafriends.com', +'megalithusa.com', +'megapopads.com', +'megastore.bnex.com', +'melanitesmuawsxxw.download', +'mellowads.com', +'meltingpoint.com', +'meltwater.com', +'meltwaternews.com', +'member.clicksor.com', +'members.applifier.com', +'members.cj.com', +'members.homecareersearch.com', +'members.livejasmin.com', +'members.swimsuitnetwork.com', +'members.us.homecareersearch.com', +'memopumpkin.com', +'memorablesix.com', +'menato.ru', +'meraad2.blogspot.com', +'meraxes-cdn.polarmobile.com', +'merchant.com', +'merchant.linksynergy.com', +'merchant.myofferpal.com', +'merchant.wgiftcard.com', +'meshbean.com', +'mesia.com', +'meta.7search.com', +'meta.streamcloud.eu', +'metacount.com', +'metal.ovh', +'metalliselwgtj.download', +'metartmoney.met-art.com', +'meter.2cnt.net', +'metopesjdsrau.download', +'metric.federalnewsradio.com', +'metric.ind.rediff.com', +'metric.inetcore.com', +'metric.timewarnercable.com', +'metrica.yandex.by', +'metrica.yandex.com', +'metrica.yandex.com.tr', +'metrica.yandex.com.ua', +'metrica.yandex.kz', +'metrica.yandex.ru', +'metrica.yandex.ua', +'metricology.com', +'metrics.active.com', +'metrics.ambient-platform.com', +'metrics.apple.com', +'metrics.att.com', +'metrics.brightcove.com', +'metrics.cnn.com', +'metrics.comcast.com', +'metrics.directv.com', +'metrics.ee.co.uk', +'metrics.feedroom.com', +'metrics.fifa.com', +'metrics.mcafee.com', +'metrics.mmailhost.com', +'metrics.payback.de', +'metrics.premiereradio.net', +'metrics.raptr.com', +'metrics.responsetap.com', +'metrics.ryanair.com', +'metrics.scribblelive.com', +'metrics.seenon.com', +'metrics.sourceforge.net', +'metrics.ted.com', +'metrics.upcload.com', +'metrics.veryfunnyads.com', +'metrics.wikinvest.com', +'metrics.zales.com', +'metricskey.net', +'metrika.yandex.by', +'metrika.yandex.com', +'metrika.yandex.com.tr', +'metrika.yandex.com.ua', +'metrika.yandex.kz', +'metrika.yandex.ru', +'metrika.yandex.ua', +'metrixlablw.customers.luna.net', +'mfeed.newzfind.com', +'mftp.linksynergy.com', +'mg.dt00.net', +'mg.dt07.net', +'mg.mgid.com', +'mgage.com', +'mgbhr.voluumtrk.com', +'mgcash.com', +'mgcashgate.com', +'mgid.com', +'mgjournalnow.112.2o7.net', +'mgnjmsxycosta.review', +'mgtbo.112.2o7.net', +'mgtimesdispatch.112.2o7.net', +'mgutu.voluumtrk.com', +'mgwnct.112.2o7.net', +'mgwsls.112.2o7.net', +'mgxqs.voluumtrk.com', +'mha4c.voluumtrk.com', +'mi-web10.prod.millennialmedia.com', +'mi-web11.prod.millennialmedia.com', +'mi-web12.prod.millennialmedia.com', +'mi-web13.prod.millennialmedia.com', +'mi-web14.prod.millennialmedia.com', +'mi-web15.prod.millennialmedia.com', +'mi-web16.prod.millennialmedia.com', +'mi-web17.prod.millennialmedia.com', +'mi-web18.prod.millennialmedia.com', +'mi-web19.prod.millennialmedia.com', +'mi-web20.prod.millennialmedia.com', +'mi-web21.prod.millennialmedia.com', +'mi-web22.prod.millennialmedia.com', +'mi-web23.prod.millennialmedia.com', +'mi-web24.prod.millennialmedia.com', +'mi-web25.prod.millennialmedia.com', +'mi-web26.prod.millennialmedia.com', +'mi-web27.prod.millennialmedia.com', +'mi-web28.prod.millennialmedia.com', +'mi-web29.prod.millennialmedia.com', +'mi-web30.prod.millennialmedia.com', +'mi-web31.prod.millennialmedia.com', +'mi-web32.prod.millennialmedia.com', +'mi-web33.prod.millennialmedia.com', +'mi-web35.prod.millennialmedia.com', +'mi-web36.prod.millennialmedia.com', +'mi-web37.prod.millennialmedia.com', +'mi-web38.prod.millennialmedia.com', +'mi-web39.prod.millennialmedia.com', +'mi-web40.prod.millennialmedia.com', +'mi-web41.prod.millennialmedia.com', +'mi-web42.prod.millennialmedia.com', +'mi-web43.prod.millennialmedia.com', +'mi.adinterax.com', +'mi.gdt.qq.com', +'miami.ero-advertising.com', +'micro.marketo.com', +'microad.net', +'microreporting.metrofrance.com', +'microreporting.metronews.ru', +'microreporting.publimetro.cl', +'microsoft-watch.us.intellitxt.com', +'microsofteup.112.2o7.net', +'microsoftgamestudio.112.2o7.net', +'microsoftwga.112.2o7.net', +'microsoftwindows.112.2o7.net', +'microstatic.pl', +'microstocker.justclick.ru', +'microticker.com', +'midar.112.2o7.net', +'middleware.adition.com', +'middlewaredev.adition.com', +'midsen.112.2o7.net', +'midwayjfpvbvwuy.download', +'migpay.com', +'migrantsyyorzkm.download', +'miildoos.ru', +'milesaway.oracle.cpa.clicksure.com', +'milira.justclick.ru', +'millennialmedia.com', +'millennyadv.go2cloud.org', +'million.francite.com', +'millionaire.go2cloud.org', +'milliremsfpscyd.download', +'milparota.com', +'mim.io', +'mimage.opentext.com', +'mimg-snv.mediaplex.com', +'minimusespdjglnek.download', +'mintake.com', +'miov5.voluumtrk.com', +'mirgadaniy.justclick.ru', +'mirror1.surf-town.net', +'mirror3.filefacts.com', +'mirrorad.com', +'misbfskterrellas.review', +'miss-wellness.justclick.ru', +'missuitzyvtjtq.download', +'mixadvert.com', +'mixpanel.com', +'mixrank.go2cloud.org', +'mjgxsidsixes.review', +'mjjjr.voluumtrk.com', +'mjov7.voluumtrk.com', +'mjvns.voluumtrk.com', +'mjx.ads.nwsource.com', +'mkgcp.voluumtrk.com', +'mkgod.voluumtrk.com', +'mkin4.voluumtrk.com', +'mkonyvjesnorkelled.review', +'mktg.actonsoftware.com', +'mkto-k0029.com', +'ml314.com', +'ml8m.com', +'mlbglobal.112.2o7.net', +'mlinktracker.com', +'mlook.mcdstorage.com', +'mlvrp.voluumtrk.com', +'mlweb.dmlab.hu', +'mm.777-partner.com', +'mm.777-partners.net', +'mm.chitika.net', +'mmftpf.com', +'mmi.bemobile.ua', +'mmnetwork.mobi', +'mmotraffic.com', +'mmtracking.com', +'mmtrkdb.com', +'mmtrkmc.com', +'mnetads.com', +'mnetads.net', +'mngiangibabest.112.2o7.net', +'mngidmn.112.2o7.net', +'mngirockymtnnews.112.2o7.net', +'mngislctrib.112.2o7.net', +'mntr.babcdn.com', +'moadnet.com', +'moba8.net', +'mobadoo.go2affise.com', +'mobads.baidu.com', +'mobaloo.go2cloud.org', +'mobavenue.go2affise.com', +'mobbridge.mobpartner.mobi', +'mobcdn.com', +'mobco.go2affise.com', +'mobday.com', +'mobfox.com', +'mobhero.com', +'mobi-mobi.info', +'mobi.mobijo.tv', +'mobi.pornhubpremium.com', +'mobi.yanosik.pl', +'mobiads.ru', +'mobiadtrk.com', +'mobiaffiliatenetwork.go2cloud.org', +'mobidia.com', +'mobidiscover.go2affise.com', +'mobilda.com', +'mobile-abc.com', +'mobile-ads.wifog.com', +'mobile-collector.newrelic.com', +'mobile-ent.biz', +'mobile.adfarm1.adition.com', +'mobile.adnxs.com', +'mobile.banzai.it', +'mobile.biz.daum.net', +'mobile.juicyads.com', +'mobile.traffic-tracker.net', +'mobile18.in.com', +'mobileactive.com', +'mobileads.ero-advertising.com', +'mobileads.mobilebanner.net', +'mobileads.msn.com', +'mobileadvertisinghub.com', +'mobileapptracking.com', +'mobilecollege.go2cloud.org', +'mobileconspiracy.go2cloud.org', +'mobilecore.com', +'mobiledl.adboe.com', +'mobilemetrics.appspot.com', +'mobilemovie.bitterstrawberry.com', +'mobileposse.com', +'mobilestorm.com', +'mobiletest.2cnt.net', +'mobiletest2.2cnt.net', +'mobiletheory.com', +'mobileweb.api.airpush.com', +'mobilitysite.us.intellitxt.com', +'mobilogia.go2affise.com', +'mobiplay.go2affise.com', +'mobireckon.go2affise.com', +'mobirushhour.com', +'mobisense.go2affise.com', +'mobisystems.com', +'mobitracker.info', +'mobivity.com', +'mobix.a.bukugames.net', +'mobixell.com', +'mobl-apps.com', +'mobooka.go2cloud.org', +'mobooka.hasoffers.com', +'mobpartner.com', +'mobpartner.mobi', +'mobsonic.go2affise.com', +'mobstac.com', +'mobtions.go2affise.com', +'mobvid.mobi', +'mobvista.go2cloud.org', +'mobwall.mobpartner.com', +'mobyt.com', +'moceanmobile.com', +'modbm.voluumtrk.com', +'modelatos.com', +'modemspeedbooster.com', +'moderninstalls.go2cloud.org', +'mofox.com', +'mogofinance.go2affise.com', +'mogreet.com', +'mojiva.com', +'mojiva2-13fc.kxcdn.com', +'mojofarm.mediaplex.com', +'mojoworks.mediaplex.com', +'mojoworks.snv.mediaplex.com', +'mokono.com', +'mom.freelogs.com', +'momomall-com-tw.b.appier.net', +'momoshop-com-tw.b.appier.net', +'mon.0f8.cdnfarm18.com', +'mon.2os.cdnfarm18.com', +'mon.2yf.cdnfarm18.com', +'mon.cdnfarm18.com', +'mondainefpjwdelvr.download', +'mondrian.twyn.com', +'monetisetrk.co.uk', +'monetisetrk1.co.uk', +'monetisetrk2.co.uk', +'monetisetrk3.co.uk', +'monetisetrk4.co.uk', +'monetisetrk5.co.uk', +'monetisetrk6.co.uk', +'monetisevideo.com', +'monetize.applift.com', +'monetizemore.com', +'monetizeplus.go2affise.com', +'money--bux2013.justclick.ru', +'money.2cnt.net', +'money4exit.de', +'moneyempire.go2cloud.org', +'moneymakercdn.com', +'moneyup.justclick.ru', +'mongoosemetrics.com', +'monitor-old.adition.com', +'monitor.adition.com', +'monitor.applift.com', +'monitor.econda-monitor.de', +'monitor.stage.adition.com', +'monitor.yigao.com', +'monster.gostats.com', +'monsterpops.com', +'monteyxnmhx.download', +'moo.go2cloud.org', +'moradu.com', +'more-games.creative-mobile.com', +'morehitserver.com', +'moreover.com', +'morgweb.ivwbox.de', +'mos.com', +'mosaic.bnex.com', +'mostawesomeoffers.com', +'mostcash.com', +'motifcdn2.doubleclick.net', +'motionhits.com', +'motor-talk.digidip.net', +'motorads.go2affise.com', +'motormarket.com', +'motorsport-total.de.intellitxt.com', +'motorward.us.intellitxt.com', +'mottcp.go2affise.com', +'mottnow.adk2x.com', +'mountainbike.digidip.net', +'mousselinehkhnrrnlq.download', +'movieads.ero-advertising.com', +'moviepulp.eu', +'movise.site', +'mowburnsexrzvcbvq.download', +'mozo-widgets.f2.com.au', +'mozoo.com', +'mp-success.com', +'mp.apmebf.com', +'mp.clicksor.net', +'mp.piano-media.com', +'mp.twitch.tv', +'mpm.payback.de', +'mpn-analytics.mokonocdn.com', +'mpp.vindicosuite.com', +'mpp2.vindicosuite.com', +'mproxy.banner.linksynergy.com', +'mprptrk.com', +'mpsnare.iesnare.com', +'mq98e.voluumtrk.com', +'mqo7a.voluumtrk.com', +'mqot2.voluumtrk.com', +'mqs.ioam.de', +'mracqblihahas.review', +'mrapq.voluumtrk.com', +'mrchewy.go2cloud.org', +'mrhcyagrouchily.review', +'mridangastrtki.download', +'mrktrecord3.com', +'mrskin.netmng.com', +'mrtg.hitbox.com', +'mrwjy.voluumtrk.com', +'ms-links.com', +'ms49r.voluumtrk.com', +'msbmopod.vo.llnwd.net', +'msdbb1.surf-town.net', +'msdbb2.surf-town.net', +'msdbi1.surf-town.net', +'msft.demdex.net', +'msgui.go2cloud.org', +'msimg.com', +'msjil.voluumtrk.com', +'msn.rce.veeseo.com', +'msnaccountservices.112.2o7.net', +'msnbc.112.2o7.net', +'msnbcom.112.2o7.net', +'msnhome.com', +'msnhomepage.com', +'msninviteprod.112.2o7.net', +'msnlivefavorites.112.2o7.net', +'msnnetwork.com', +'msnportal.112.2o7.net', +'msnportalent.112.2o7.net', +'msnportalhome.112.2o7.net', +'msnportalprivacy.112.2o7.net', +'msnservices.112.2o7.net', +'msntest.serving-sys.com', +'msntrademarketing.112.2o7.net', +'msnwinonecare.112.2o7.net', +'mssqladmin.surf-town.net', +'mswgaprod.112.2o7.net', +'mswtg.voluumtrk.com', +'msxml.webcrawler.com', +'mt.sellingrealestatemalta.com', +'mtburn.com', +'mtburn.jp', +'mtcount.channeladvisor.com', +'mtkzz.survey7.adsservingtwig.xyz', +'mto.mediatakeout.com', +'mtrc1.digital-metric.com', +'mtree.com', +'mtrx.go.sonobi.com', +'mts.mansion.com', +'mtsd9.voluumtrk.com', +'mttwtrack.com', +'mtvn.demdex.net', +'mtvnetworks.tt.omtrdc.net', +'muas4.voluumtrk.com', +'muchmarketing.go2cloud.org', +'muesq.voluumtrk.com', +'mujilora.com', +'multi.xnxx.com', +'multicounter.de', +'multimania.com', +'munaluchibridal.munaluchibridema.netdna-cdn.com', +'munchkin.marketo.net', +'muntussejbnk.download', +'muricatedhslitves.download', +'musculahq.appspot.com', +'musecdn.businesscatalyst.com', +'musiccounter.ru', +'muv.famousintactswitch.com', +'mv6we.voluumtrk.com', +'mvakbserenates.review', +'mvexg.voluumtrk.com', +'mvldn.voluumtrk.com', +'mvpxv.voluumtrk.com', +'mwc.velti.com', +'mx.adserver.yahoo.com', +'mx.ero-advertising.com', +'mx1.revsci.net', +'mx3ih.voluumtrk.com', +'mxmacromedia.112.2o7.net', +'my-etracker.com', +'my-linker.com', +'my.applifier.com', +'my.blueadvertise.com', +'my.hellobar.com', +'my.mobfox.com', +'my.omniture.com', +'my.plexapp.com', +'my.skyhookwireless.com', +'myad.no', +'myadmarket.com', +'myads.newads.com', +'myadserve.s3-website-us-east-1.amazonaws.com', +'myadvertisingpays.com', +'myaffiliateads.com', +'myaffiliateprogram.com', +'mybb.ero-advertising.com', +'mybip.go2cloud.org', +'mycams.com', +'mycdn.media.net', +'mychannelvip2.netscape.com', +'mycomputer.superstats.com', +'mycounter.com.ua', +'mycoupons.com', +'mycpaads.go2cloud.org', +'mydas.mobi', +'mydas.mobi.hostlogr.com', +'mydas.mobi.visualizetraffic.com', +'mydb1.surf-town.net', +'mydb2.surf-town.net', +'mydb3.surf-town.net', +'mydb4.surf-town.net', +'mydbb1.surf-town.net', +'mydbb2.surf-town.net', +'mydbc1.surf-town.net', +'mydress-com-tw.b.appier.net', +'myetracker.com', +'myfamilyancestry.112.2o7.net', +'myfamilysurvival.net', +'myfavoritegames.us.intellitxt.com', +'mygosecure.com', +'myiframe.com', +'myimagetracking.com', +'mylistenetwork.go2cloud.org', +'mylottoadserv.com', +'myns-v1.websys.aol.com', +'myosotisvkrzovi.download', +'mypoints.com', +'mypopup.ir', +'mypowermall.com', +'myscoop-tracking.googlecode.com', +'myscreen.com', +'myseostats.com', +'mysite.com', +'mysmartprice.go2cloud.org', +'mysnoringsolution.go2cloud.org', +'mytds.pr.vc', +'mytiwi.com', +'mytogolinks.com', +'mytrafficbuilder.info', +'mytrannycams.com', +'myvacationguide.com', +'mywebstats.com.au', +'mz28ismn.com', +'mzadx.go2affise.com', +'mzqtm.voluumtrk.com', +'mzrvi.voluumtrk.com', +'n-tv.de.intellitxt.com', +'n-tv.met.vgwort.de', +'n.bodybuilding.com', +'n.fclick-adnow.com', +'n.gemini.yahoo.com', +'n.ladycash.ru', +'n.lcads.ru', +'n.pay-click.ru', +'n.popclck.org', +'n.targetdtracker.com', +'n.zeroredirect.com', +'n.zeroredirect1.com', +'n.zeroredirect2.com', +'n0cgi.distributed.net', +'n1.nedstatbasic.net', +'n21o1.voluumtrk.com', +'n24mobse.nuggad.net', +'n2m1z.voluumtrk.com', +'n32o1.voluumtrk.com', +'n388hkxg.com', +'n3hps.voluumtrk.com', +'n3qcp.voluumtrk.com', +'n4052ad.doubleclick.net', +'n4403ad.doubleclick.net', +'n479ad.doubleclick.net', +'n4p.ru.redtram.com', +'n60adserv.com', +'n63adserv.com', +'n64adserv.com', +'n65adserv.com', +'n69.com', +'n69adserv.com', +'n72adserv.com', +'n79adserv.com', +'n7yk4.voluumtrk.com', +'n99adshostnet.com', +'na-sjn.marketo.com', +'nagios.adition.com', +'naj.sk', +'nam11.voluumtrk.com', +'namestation.tenderapp.com', +'namitol.com', +'nandp.go2cloud.org', +'nanigans.com', +'nannyingeuzcxae.download', +'nanoadexchange.com', +'nanostats.nanopress.it', +'nappieseummiroso.download', +'napster.searchwho.com', +'naruko-com-tw.b.appier.net', +'nastinessprndnz.download', +'nastydollars.com', +'nata.ero-advertising.com', +'natgeoedit.112.2o7.net', +'natgeoeditcom.112.2o7.net', +'nationalpost.112.2o7.net', +'native.ai', +'native.sharethrough.com', +'nativeads.com', +'nativeadx.net', +'nativitystones.go2cloud.org', +'nats.hushmoney.com', +'naviant.com', +'navlog.channel4.com', +'navrcholu.cz', +'navteq.com', +'naytev.global.ssl.fastly.net', +'nazarabo.bitterstrawberry.com', +'nb.myspace.com', +'nbasic.sitestat.com', +'nbimg.dt00.net', +'nbjmp.com', +'nbnkg.voluumtrk.com', +'nbsmr.voluumtrk.com', +'nc0vx.voluumtrk.com', +'ncfae.voluumtrk.com', +'ncmzm.voluumtrk.com', +'nctymqrcplanular.review', +'nczgs.voluumtrk.com', +'ndirect.ppro.de', +'ndjln.voluumtrk.com', +'ndk38.voluumtrk.com', +'ndparking.com', +'ndwck.voluumtrk.com', +'nearbyad.com', +'neber.112.2o7.net', +'neblotech.com', +'ned.itv.com', +'nedstat.co.uk', +'nedstat.com', +'nedstat.net', +'nedstat.nl', +'nedstatbasic.com', +'nedstatbasic.net', +'neemfmujqqz.download', +'negmediaconsulting.go2cloud.org', +'nei.hitbox.com', +'neobux.com', +'neocounter.neoworx-blog-tools.net', +'neoseeker.us.intellitxt.com', +'nesql.voluumtrk.com', +'net-france.com', +'net.29193.9215.302br.net', +'net.29674.9239.302br.net', +'net.35369.9265.302br.net', +'net.44902.9339.302br.net', +'net.44920.9339.302br.net', +'net.49479.9362.302br.net', +'net.57222.9406.302br.net', +'net.57240.9406.302br.net', +'netbanner.com', +'netcomm.spinbox.net', +'netcore.go2affise.com', +'netcounter.de', +'netdirect.nl', +'netdna.cedexis.com', +'netdna.reporo.net', +'netezines.advertising.com', +'netflow.go2cloud.org', +'netfuerza.com', +'netgeo.com', +'nethit-free.nl', +'netidentity.com', +'netlinktrack.com', +'netmarketeur.com', +'netmarketing2004.com', +'netmetrix.2cnt.net', +'netmng.com', +'netmx.wemfbox.ch', +'netmxtst.wemfbox.ch', +'netnames.com', +'netperception.com', +'netperceptions.com', +'netpool.netbookia.net', +'netprefs.com', +'netreflector.com', +'netremote.com', +'netropa.com', +'netrp.112.2o7.net', +'netsalespl.go2cloud.org', +'netscope.data.marktest.pt', +'netsodawap.xtgem.com', +'netspiderads2.indiatimes.com', +'netstats-1.www.ibm.com', +'netstats-2.www.ibm.com', +'nettown.com', +'netweather.accuweather.com', +'network-a.bazaarvoice.com', +'network.adbullion.com', +'network.adjal.com', +'network.adsmarket.com', +'network.aptimus.com', +'network.aufeminin.com', +'network.bazaarvoice.com', +'network.bemyapp.com', +'network.bildderfrau.de', +'network.gofeminin.de', +'network.nocreditcard.net', +'network.realmedia.com.19388.9117.302br.net', +'network.sofeminine.co.uk', +'network2.aufeminin.com', +'network22.com', +'networkadvertising.org', +'networkcommerce.com', +'networkpb.com', +'networksolutionsaffiliates.com', +'netzathleten-media.de', +'netzathleten.net', +'netzip.com', +'netzwelt.digidip.net', +'neueoz.ivwbox.de', +'neutrinokhdii.download', +'new.adition.com', +'new.gtsads.com', +'new.livejasmin.com', +'newads.bangbros.com', +'newadserver.interfree.it', +'newbe122.homestead.com', +'newbestsellers.justclick.ru', +'newcomperformance.go2cloud.org', +'newjobs.d1.sc.omtrdc.net', +'newnet.qsrch.com', +'newopenx.simplethings.de', +'newpayload.yieldbuild.com', +'newprose.bravejournal.com', +'newrelic.com', +'news-whistleout.s3.amazonaws.com', +'news.duba.net', +'news.idealmedia.com', +'newsclicker.com', +'newsletter.linkshare.com', +'newsmaxfeednetwork.com', +'newsnet.in.ua', +'newsnetz.wemfbox.ch', +'newspaperarchive.go2cloud.org', +'newsroomsolsnkww.download', +'newt1.adultadworld.com', +'newt2.adultadworld.com', +'newtopsites.com', +'newusnews.justclick.ru', +'newworldiq.com', +'nexac.demdex.net', +'nexage.com', +'nextlevel.com', +'nextmag.apx.appier.net', +'nextmillennium.liqwid.net', +'nextoptim.com', +'nexus.adspirit.de', +'nexus.ensighten.com', +'nexusads.adspirit.de', +'nexzenpro.go2cloud.org', +'nfbal.trackvoluum.com', +'nfm.optdiv.net', +'nfs.visits.lt', +'ng3.ads.warnerbros.com', +'ngads.go.com', +'ngbn.net', +'ngludvfyaspiration.review', +'ngohq.us.intellitxt.com', +'ngxsx.voluumtrk.com', +'nhhr6.voluumtrk.com', +'nht-2.extreme-dm.com', +'ni3.imlive.com', +'ni8bd.voluumtrk.com', +'nicotianavcajdyyq.download', +'nid.timesink.com', +'nidinternal.timesink.com', +'nidtest.timesink.com', +'nifvd.voluumtrk.com', +'nihilistlhaeieykb.download', +'niholaev.com', +'nimdinb.com', +'ninemsn.imrworldwide.com', +'nip.net', +'nitratedffwtprxdo.download', +'nitroclicks.com', +'nj.fo.startappservice.com', +'njfy6.voluumtrk.com', +'njump.youmobistein.com', +'njwol.voluumtrk.com', +'njyshuopawas.review', +'nk.brandreachsys.com', +'nkcache.brandreachsys.com', +'nkf3i.voluumtrk.com', +'nkqgy.voluumtrk.com', +'nkyrh.voluumtrk.com', +'nl.adserver.yahoo.com', +'nl.count.worldstats.com', +'nl.cqcounter.com', +'nl.nedstatpro.com', +'nl.nedstatpro.net', +'nl.sitestat.com', +'nl.topstat.com', +'nl1.ero-advertising.com', +'nl2.ero-advertising.com', +'nlbanner.nl', +'nlhra.voluumtrk.com', +'nlrbucstales.review', +'nltlgufalsies.review', +'nm.netmng.com', +'nmaio.voluumtrk.com', +'nmanchorage.112.2o7.net', +'nmcommancomedia.112.2o7.net', +'nmeprod.122.2o7.net', +'nmhiltonhead.112.2o7.net', +'nmkawartha.112.2o7.net', +'nmminneapolis.112.2o7.net', +'nmmua.voluumtrk.com', +'nmnandomedia.112.2o7.net', +'nmqtp.voluumtrk.com', +'nmraleigh.112.2o7.net', +'nmsacramento.112.2o7.net', +'nmt5m.voluumtrk.com', +'nmtracking.netflix.com', +'nmyork.112.2o7.net', +'nn7la.voluumtrk.com', +'nndxcyybailliage.review', +'nners.ero-advertising.com', +'nnfku.voluumtrk.com', +'nnlb.go2cloud.org', +'nno9c.voluumtrk.com', +'no-stress.justclick.ru', +'no.2.cqcounter.com', +'no.adserver.yahoo.com', +'nobinet.go2cloud.org', +'noc.hitbox.com', +'noc.luckyorange.com', +'nodeposit.linktrackr.com', +'nodes.ads-digitalkeys.com', +'nodes.double6affiliation.com', +'nodes.r66t.com', +'nokby.voluumtrk.com', +'nomen-est-omen.de', +'nomogramsopptw.download', +'nonames.tk', +'noowho.com', +'norc.go2cloud.org', +'normalexchange.com', +'northnetworks.go2cloud.org', +'notebooksbilliger02.webtrekk.net', +'nova.dice.net', +'novascotianetworks.go2cloud.org', +'novellcom.112.2o7.net', +'novostimira.biz', +'now.eloqua.com', +'nowlucky.go2cloud.org', +'np.lexity.com', +'npdor.go2cloud.org', +'npoyv.voluumtrk.com', +'npvnf.voluumtrk.com', +'npvos.com', +'nqi5j.voluumtrk.com', +'nr.taboola.com', +'nrgdigital.checkm8.com', +'nrsadrefects.review', +'nry5r.voluumtrk.com', +'ns.2cnt.net', +'ns.ivwbox.de', +'ns.mediaplex.com', +'ns.rvmkitt.com', +'ns.valueclick.com', +'ns1.123go.net', +'ns1.247media.com', +'ns1.carmunity.de', +'ns1.datapipe.net', +'ns1.hitbox.com', +'ns1.hitx.net', +'ns1.iad.cimedia.net', +'ns1.ivwbox.de', +'ns1.lighthost.com', +'ns1.livetechnology.com', +'ns1.maximumhost.com', +'ns1.metacount.com', +'ns1.netster.net', +'ns1.sfj.pnap.net', +'ns1.skyhookwireless.com', +'ns1.sunrise.ch', +'ns1.surf-town.net', +'ns106.ehostpros.com', +'ns2.123go.net', +'ns2.2cnt.net', +'ns2.boostservice.com', +'ns2.datapipe.net', +'ns2.livetechnology.com', +'ns2.maximumhost.com', +'ns2.mediaplex.com', +'ns2.sellingsource.com', +'ns2.sfj.pnap.net', +'ns2.skyhookwireless.com', +'ns2.surf-town.net', +'ns2.w3open.com', +'ns24i.voluumtrk.com', +'ns3.adsender.us', +'ns3.datapipe.net', +'ns3.iad.cimedia.net', +'ns3.ivwbox.de', +'ns3.maximumhost.com', +'ns3.mediaplex.com', +'ns3.skyhookwireless.com', +'ns3.surf-town.net', +'ns4.ivwbox.de', +'nsa.conviva.com', +'nsa.lphbs.com', +'nsclick.baidu.com', +'nsmyk.voluumtrk.com', +'nstracking.nonstopdelivery.com', +'ntcompatible.us.intellitxt.com', +'nteryield.jmp9.com', +'nuadn.voluumtrk.com', +'nub9r.maisonx.com', +'nuera.go2cloud.org', +'nuggad.net', +'numb.hotshare.biz', +'nurno.com', +'nv.ad.naver.com', +'nv4n8.voluumtrk.com', +'nvk.realsecuredredirect.com', +'nvmuh.voluumtrk.com', +'nvtrak.com', +'nvy.sharesix.com', +'nw.ads.doko.jp', +'nwidget.networkedblogs.com', +'nws.naltis.com', +'nwxpdqczwighting.review', +'nwz.ivwbox.de', +'nxa-ls.s3.amazonaws.com', +'nxeso.voluumtrk.com', +'nxmav.voluumtrk.com', +'nxref.voluumtrk.com', +'ny-only.outbrain.com', +'ny1dm.voluumtrk.com', +'nychi2.outbrain.com', +'nydwc.voluumtrk.com', +'nyhyz.voluumtrk.com', +'nym1.ib.adnxs.com', +'nym1.mobile.adnxs.com', +'nym2.ib.adnxs.com', +'nymcom.112.2o7.net', +'nytadvertising.nytimes.com', +'nytbglobe.112.2o7.net', +'nytglobe.112.2o7.net', +'nythglobe.112.2o7.net', +'nytimesglobal.112.2o7.net', +'nytimesnonsampled.112.2o7.net', +'nytimesnoonsampled.112.2o7.net', +'nytmembercenter.112.2o7.net', +'nytrgadsden.112.2o7.net', +'nytrlakeland.112.2o7.net', +'nytrsantarosa.112.2o7.net', +'nytrsarasota.112.2o7.net', +'nytrwilmington.112.2o7.net', +'nyttechnology.112.2o7.net', +'nztv.prod.untd.com', +'nzujq.voluumtrk.com', +'o.addthis.com', +'o.leadbolt.com', +'o.sa.aol.com', +'o.ss2.us', +'o.swisscom.ch', +'o.xbox.com', +'o.yieldsquare.com', +'o.zedo.com', +'o.zeroredirect.com', +'o.zeroredirect1.com', +'o.zeroredirect2.com', +'o0.winfuture.de', +'o11cr.voluumtrk.com', +'o1bxv.voluumtrk.com', +'o1ghd.voluumtrk.com', +'o1hak.voluumtrk.com', +'o2onbusiness.de', +'o3hll.voluumtrk.com', +'o3ozt.voluumtrk.com', +'o64x.voluumtrk.com', +'o8yrg.voluumtrk.com', +'oa4xu.voluumtrk.com', +'oamtrk.com', +'oaqkv.voluumtrk.com', +'oas.alltforforaldrar.se', +'oas.benchmark.fr', +'oas.foxnews.com', +'oas.hitbox.com', +'oas.repubblica.it', +'oas.roanoke.com', +'oas.salon.com', +'oas.toronto.com', +'oas.uniontrib.com', +'oas.villagevoice.com', +'oas.wuv.de', +'oasc-eu1.247realmedia.com', +'oasc03012.247realmedia.com', +'oasc03049.247realmedia.com', +'oasc04012.247realmedia.com', +'oasc05024.247realmedia.com', +'oasc05050.247realmedia.com', +'oasc05059.247realmedia.com', +'oasc06006.247realmedia.com', +'oasc07.citywire.co.uk', +'oasc08006.247realmedia.com', +'oasc08024.247realmedia.com', +'oasc09.247realmedia.com', +'oasc10.247realmedia.com', +'oasc10006.247realmedia.com', +'oasc11.247realmedia.com', +'oasc12.247realmedia.com', +'oasc14.247realmedia.com', +'oasc15.247realmedia.com', +'oasc16.247realmedia.com', +'oasc17.247realmedia.com', +'oasc18.247realmedia.com', +'oasc18015.247realmedia.com', +'oascentral.abclocal.go.com', +'oascentral.adage.com', +'oascentral.advanstar.com', +'oascentral.appssavvy.com.23051.9155.302br.net', +'oascentral.appssavvy.com.23053.9155.302br.net', +'oascentral.appssavvy.com.23054.9155.302br.net', +'oascentral.appssavvy.com.24908.9184.302br.net', +'oascentral.appssavvy.com.24909.9184.302br.net', +'oascentral.appssavvy.com.24910.9184.302br.net', +'oascentral.appssavvy.com.24911.9184.302br.net', +'oascentral.appssavvy.com.24912.9184.302br.net', +'oascentral.appssavvy.com.31838.9155.302br.net', +'oascentral.appssavvy.com.31839.9155.302br.net', +'oascentral.blogher.org.10941.9030.302br.net', +'oascentral.blogher.org.12468.9030.302br.net', +'oascentral.blogher.org.12469.9030.302br.net', +'oascentral.blogher.org.12470.9030.302br.net', +'oascentral.blogher.org.12471.9030.302br.net', +'oascentral.blogher.org.12472.9030.302br.net', +'oascentral.blogher.org.12473.9030.302br.net', +'oascentral.blogher.org.12474.9030.302br.net', +'oascentral.blogher.org.12475.9030.302br.net', +'oascentral.blogher.org.12476.9030.302br.net', +'oascentral.blogher.org.12477.9030.302br.net', +'oascentral.blogher.org.12478.9030.302br.net', +'oascentral.blogher.org.12479.9030.302br.net', +'oascentral.blogher.org.23017.9030.302br.net', +'oascentral.businessweek.com', +'oascentral.chicagobusiness.com', +'oascentral.comcast.net', +'oascentral.construction.com', +'oascentral.crainsdetroit.com', +'oascentral.dailybreeze.com', +'oascentral.feedroom.com', +'oascentral.fortunecity.com', +'oascentral.mdlinx.com', +'oascentral.newsmax.com', +'oascentral.post-gazette.com', +'oascentral.register.com', +'oascentral.sina.com', +'oascentral.tmcnet.com', +'oascentral.villagevoice.com', +'oascentral.washtimes.com', +'oascentralnx.comcast.net', +'oasde.springstreetnetworks.com', +'oase00821.247realmedia.com', +'oasis.411affiliates.ca', +'oata.ero-advertising.com', +'oatcakehcewr.download', +'ob1trk.com', +'obc99.voluumtrk.com', +'obesw.com', +'obgyn.us.intellitxt.com', +'obi-at01.webtrekk.net', +'obi-com01.webtrekk.net', +'obi-de01.webtrekk.net', +'obi-ru01.webtrekk.net', +'objects.tremormedia.com', +'observantsumzcl.download', +'observer.ip-label.net', +'obuchenie.justclick.ru', +'oc-track.autonomycloud.com', +'oc.umeng.com', +'oc9e5.voluumtrk.com', +'oca.telemetry.microsoft.com', +'ocdn.adsterra.com', +'oceango.net', +'ocio.leadzu.com', +'ocoym.voluumtrk.com', +'ocpmb.voluumtrk.com', +'ocs.websponsors.com', +'ocybtztforth.review', +'odb-chidc2.outbrain.com', +'odb.outbrain.com', +'odmdr.voluumtrk.com', +'odttrilkocement.review', +'odzb5nkp.com', +'oehui.voluumtrk.com', +'oekwa.voluumtrk.com', +'oew7r.voluumtrk.com', +'oewa.oewabox.at', +'of3ga.voluumtrk.com', +'offended.feenode.net', +'offer.17bullets.com', +'offer.alibaba.com', +'offerannex.go2cloud.org', +'offerdeliver.com', +'offeredby.net', +'offeroptimizer.com', +'offers.appnext.com', +'offers.avazuscd.net', +'offers.bitbop.com', +'offers.bycontext.com', +'offers.keynote.com', +'offerservice.go2cloud.org', +'offersinternational.go2cloud.org', +'offersquared.go2cloud.org', +'offersquest.directtrack.com', +'offerssyndication.appspot.com', +'offervisionnetwork.go2cloud.org', +'offerx.co.uk', +'office.partnerearning.com', +'offline.adsoftware.com', +'offline.sanomaservices.nl', +'og1rc.voluumtrk.com', +'ogdocggdermas.review', +'oggva.voluumtrk.com', +'ogxtu.voluumtrk.com', +'ohgipscavenging.review', +'ohlone.vizu.com', +'oi2cz.voluumtrk.com', +'oimg.m.cnbc.com', +'oimg.mobile.cnbc.com', +'oin.valuead.com', +'ojbrnmoowoold.review', +'ojolink.com', +'ojrq.net', +'okohp.voluumtrk.com', +'okpgn.voluumtrk.com', +'okrg0.voluumtrk.com', +'okstrade.go2affise.com', +'ol14x.voluumtrk.com', +'olddata.radarurl.com', +'oleg71d.justclick.ru', +'olegnekrom.justclick.ru', +'oliver.adcenter.net', +'olizyr.com', +'om.cbsi.com', +'omariev.justclick.ru', +'omarsys.com', +'omg247.us4.list-manage.com', +'omg247.us4.list-manage1.com', +'omg247.us4.list-manage2.com', +'omg247.us5.list-manage1.com', +'omg247.us5.list-manage2.com', +'omkjd.voluumtrk.com', +'omnaling.com', +'omni.canadiantire.ca', +'omni.holidaycheck.com', +'omni.holidaycheck.de', +'omniata.com', +'omnistats.jetblue.com', +'omniture.112.207.net', +'omniture.112.2o7.net', +'omniture.chip.de', +'omniture.com', +'omniture.eaeurope.eu', +'omniture.mirror.co.uk', +'omniture.scotiabank.com', +'omns.americanexpress.com', +'oms.digitaledienste.web.de', +'omtrdc.net', +'on-js.herokuapp.com', +'on-mobi.com', +'on.linkexchange.com', +'on.maxspeedcdn.com', +'onceux.unicornmedia.com', +'onclickads.net', +'onclickmax.com', +'onclickrev.com', +'onclkds.com', +'oncqpdpmerosomes.review', +'one-time-offer.com', +'one.123counters.com', +'oneandonlynetwork.com', +'onedrive-collection.device.mobileengagement.windows.net', +'onefeed.co.uk', +'onelouder.com', +'onenetworkdirect.net', +'onepassnetwork.com', +'onespot-tracking.herokuapp.com', +'onestat.com', +'onestatfree.com', +'onet.hit.stat.pl', +'online-dohod.justclick.ru', +'online.adservicemedia.dk', +'online.casinodelrio.com', +'online.cnzz.com', +'online.com', +'online.qdigital.co.il', +'online.winner.com', +'online.winnerclub.com', +'onlineads.magicvalley.com', +'onlineboss.go2cloud.org', +'onlineemailmarketing.com', +'onlineindigoca.112.2o7.net', +'onlinetraffic.info', +'onlinewebfind.com', +'onlinsport.2cnt.net', +'onlysix.co.uk', +'onmobile.com', +'onshj.voluumtrk.com', +'onwkmbhucalthaeas.review', +'onyx.bnex.com', +'oobqt.voluumtrk.com', +'oofywoeynt.download', +'ooredi.com', +'op4g.go2cloud.org', +'opads.ero-advertising.com', +'opame.voluumtrk.com', +'opap.co.kr', +'open.ad.yieldmanager.net', +'open.mkt1397.com', +'open.vmdb.se', +'openad.tf1.fr', +'openad.travelnow.com', +'openadserving.com', +'opencms.adscale.de', +'openmarket.com', +'openstat.com', +'openstat.net', +'openstat.ru', +'opentracker.net', +'openvn.com', +'openx.admailtiser.com', +'openx.anonymouse.org', +'openx.archerytalk.com', +'openx.automation.com', +'openx.cda.pl', +'openx.cellulari.me', +'openx.city-nav.com', +'openx.com', +'openx.datacenterknowledge.com', +'openx.datacentermap.com', +'openx.detik.com', +'openx.financialpublishers.nl', +'openx.gamereactor.dk', +'openx.gen2server.com', +'openx.gns.co.il', +'openx.innogames.de', +'openx.kasjauns.lv', +'openx.net', +'openx.org', +'openx.pw', +'openx.ricetteveloci.me', +'openx.sales.e.fc2.com', +'openx.sexsearch.com', +'openx.sexsearchcom.com', +'openx.socialsex.biz', +'openx.tai.pl', +'openx.tunisien.tn', +'openx.wayfareinteractive.com', +'openx.xxxbookcom.com', +'openx.xxxconnect.com', +'openx.yolau.net', +'openx.yorkvillemarketing.com', +'openx.youmeet.se', +'openx4.emag.ro', +'openxmedia.com', +'opera1-servedby.advertising.com', +'operatest.webtrekk.net', +'operationfabulous.com', +'ophan.guardian.co.uk', +'ophan.theguardian.com', +'opinionlab.com', +'opinionlabcc.122.2o7.net', +'opinions.research-interactive.com', +'opportunity-tracking.com', +'opqyo.voluumtrk.com', +'opt-media.com', +'opt-n.net', +'opt.leadbolt.com', +'opticalnetworks.com', +'optimiser.trafficmansion.com', +'optimize.indieclick.com', +'optimize.webtrends.com', +'optimized-by.rubiconproject.com', +'optimized.by.vitalads.net', +'optimizedby.rmxads.com', +'optimizely.appspot.com', +'optimizely.com', +'optimizely.s3.amazonaws.com', +'optimum-hits.com', +'optimumadsmedia.go2cloud.org', +'optin.webtrekk.net', +'optiprofits.go2cloud.org', +'optmd.com', +'optout.2cnt.net', +'optout.ad1.adfarm1.adition.com', +'optout.ad2.adfarm1.adition.com', +'optout.ad3.adfarm1.adition.com', +'optout.ad4.adfarm1.adition.com', +'optout.ad5.adfarm1.adition.com', +'optout.ad6.adfarm1.adition.com', +'optout.ad7.adfarm1.adition.com', +'optout.ad8.adfarm1.adition.com', +'optout.adfarm1.adition.com', +'oqhdujtcharrier.review', +'oqw9b.voluumtrk.com', +'oqzwmbeliefs.review', +'or3v3.voluumtrk.com', +'oradestiri.2cnt.net', +'orangesoda.com', +'orangesoda.d2.sc.omtrdc.net', +'orarala.com', +'orbitscripts.com', +'orbitz.tt.omtrdc.net', +'orders.webpower.com', +'orencia.pflexads.com', +'orf.oewabox.at', +'origin.privoy.doublepimp.com', +'origin.zedo.com', +'originade.clmbtech.com', +'originadessl.clmbtech.com', +'orion.bnex.com', +'orlbh.voluumtrk.com', +'orts.wixawin.com', +'orw2k.voluumtrk.com', +'os.bororeb.com', +'os.filefactscdn.com', +'os2.alcoholsoftcdn.com', +'ospsweeps.brandmovers.net', +'ot.ca-mpr.jp', +'ot7od.voluumtrk.com', +'otf.msn.com', +'other.xxxcounter.com', +'otherprofit.com', +'otkyfxmassifs.review', +'otmsrv.com', +'otologistxyrdfmy.download', +'otracking.com', +'ots.optimize.webtrends.com', +'ouah.com', +'ouah.fr', +'our.affiliatetracking.net', +'ourdeal.go2cloud.org', +'out-there-media.com', +'out.paycounter.com', +'out.popads.net', +'outbrain.com', +'outerpages.com', +'outils.acf-webmaster.net', +'outils.f5biz.com', +'outlyingveburydd.download', +'outpost.real.com', +'output.nend.net', +'outsidethebeltway.us.intellitxt.com', +'outsolesevkcifol.download', +'outspeaksisfjto.download', +'outtalkedxtypmjjbh.download', +'ov.yahoo.co.jp', +'overawingksapsofy.download', +'overely.com', +'overpro.com', +'overroastiklcrpyn.download', +'oversee.d.chango.com', +'oversee.net', +'overstock.com.112.2o7.net', +'overture.com', +'overture.reporting.net', +'ovhomes.com', +'ovxvhtext.review', +'owha.vancouverco.com', +'owzdu.voluumtrk.com', +'ox-d.247wallst.servedbyopenx.com', +'ox-d.aa.com', +'ox-d.addkt.servedbyopenx.com', +'ox-d.adobe.com', +'ox-d.ads.alliancehealth.com', +'ox-d.aegdigitalgroup.com', +'ox-d.alf.servedbyopenx.com', +'ox-d.allday.servedbyopenx.com', +'ox-d.answers.servedbyopenx.com', +'ox-d.aopa.org', +'ox-d.ask.servedbyopenx.com', +'ox-d.babla.servedbyopenx.com', +'ox-d.bbm.servedbyopenx.com', +'ox-d.bbt.com', +'ox-d.bizjournals.servedbyopenx.com', +'ox-d.blogads.servedbyopenx.com', +'ox-d.bnmedia.servedbyopenx.com', +'ox-d.boston.servedbyopenx.com', +'ox-d.broadway.com', +'ox-d.cargurus.servedbyopenx.com', +'ox-d.catholic.org', +'ox-d.cbs.servedbyopenx.com', +'ox-d.cbsi.servedbyopenx.com', +'ox-d.cesarsway.com', +'ox-d.chosun.servedbyopenx.com', +'ox-d.consumed.servedbyopenx.com', +'ox-d.coolmath.servedbyopenx.com', +'ox-d.covers.com', +'ox-d.curse.servedbyopenx.com', +'ox-d.cyberagent.servedbyopenx.com', +'ox-d.datacenterdynamics.com', +'ox-d.diply.servedbyopenx.com', +'ox-d.doucettemedia.com', +'ox-d.ebayde.servedbyopenx.com', +'ox-d.ebaydeb.servedbyopenx.com', +'ox-d.evolvemedia.servedbyopenx.com', +'ox-d.ezoic.servedbyopenx.com', +'ox-d.fark.servedbyopenx.com', +'ox-d.forbesbidder.servedbyopenx.com', +'ox-d.futurenet.servedbyopenx.com', +'ox-d.fwmedia.com', +'ox-d.gamer-network.net', +'ox-d.gatewaymedia.servedbyopenx.com', +'ox-d.gloh.co.uk', +'ox-d.greatergood.servedbyopenx.com', +'ox-d.hatena.servedbyopenx.com', +'ox-d.hearstmagazines.servedbyopenx.com', +'ox-d.huddler.servedbyopenx.com', +'ox-d.ibt.servedbyopenx.com', +'ox-d.imgur.servedbyopenx.com', +'ox-d.ink.servedbyopenx.com', +'ox-d.intermarkets.net', +'ox-d.internetbrands.servedbyopenx.com', +'ox-d.interweave.com', +'ox-d.journatic.com', +'ox-d.jrn.com', +'ox-d.ksl.servedbyopenx.com', +'ox-d.kwick.servedbyopenx.com', +'ox-d.leessp.servedbyopenx.com', +'ox-d.m-market.servedbyopenx.com', +'ox-d.mailonline.servedbyopenx.com', +'ox-d.medianet.servedbyopenx.com', +'ox-d.merriamwebster.servedbyopenx.com', +'ox-d.mm1x.nl', +'ox-d.mmaadnet.com', +'ox-d.mods.pch.com', +'ox-d.monetizationservices.servedbyopenx.com', +'ox-d.monetizemore.servedbyopenx.com', +'ox-d.mst.servedbyopenx.com', +'ox-d.mylikes.servedbyopenx.com', +'ox-d.nasdaq.servedbyopenx.com', +'ox-d.nydailynews.servedbyopenx.com', +'ox-d.openx.jp', +'ox-d.os4m.servedbyopenx.com', +'ox-d.oxjapan.servedbyopenx.com', +'ox-d.pbhmedia.servedbyopenx.com', +'ox-d.philly.servedbyopenx.com', +'ox-d.pittpostgazette.servedbyopenx.com', +'ox-d.playboy.servedbyopenx.com', +'ox-d.publisherdesk.servedbyopenx.com', +'ox-d.quebecor.servedbyopenx.com', +'ox-d.ranker.servedbyopenx.com', +'ox-d.realtor.servedbyopenx.com', +'ox-d.rocketadserver.com', +'ox-d.saygoodbuy.servedbyopenx.com', +'ox-d.sbnationbidder.servedbyopenx.com', +'ox-d.sinclair.servedbyopenx.com', +'ox-d.skylikes.servedbyopenx.com', +'ox-d.slader.servedbyopenx.com', +'ox-d.sltrib.servedbyopenx.com', +'ox-d.sm.servedbyopenx.com', +'ox-d.socialknowledge.servedbyopenx.com', +'ox-d.southwest.com', +'ox-d.spanishdict.servedbyopenx.com', +'ox-d.sparksnetworks.servedbyopenx.com', +'ox-d.sporcle.servedbyopenx.com', +'ox-d.startribune.servedbyopenx.com', +'ox-d.technoratimedia.servedbyopenx.com', +'ox-d.thechive.servedbyopenx.com', +'ox-d.tmn.servedbyopenx.com', +'ox-d.traffichub.ch', +'ox-d.trulia.servedbyopenx.com', +'ox-d.tunein.servedbyopenx.com', +'ox-d.viumbe.servedbyopenx.com', +'ox-d.warnerbros.servedbyopenx.com', +'ox-d.weatherus.servedbyopenx.com', +'ox-d.wetransfer.com', +'ox-d.wikia.servedbyopenx.com', +'ox-d.wikihow.servedbyopenx.com', +'ox-d.wuv.servedbyopenx.com', +'ox-d.yp.com', +'ox-d.zergnet.servedbyopenx.com', +'ox-i.ebayus.servedbyopenx.com', +'ox-i.majorgeeks.com', +'ox-i.mm1x.nl', +'ox-i.quebecor.servedbyopenx.com', +'ox-i.zam.com', +'ox-socialimg.bidsystem.com', +'ox-ui.amu.servedbyopenx.com', +'ox-ui.ask.servedbyopenx.com', +'ox-ui.ebayukb.servedbyopenx.com', +'ox-ui.ebayus.servedbyopenx.com', +'ox-ui.synacor.servedbyopenx.com', +'ox-ui.usatodaysports.servedbyopenx.com', +'ox-ui.wayfairssp.servedbyopenx.com', +'ox.ac.onthehub.com', +'ox.appnext.com', +'ox.furaffinity.net', +'ox.gassi-tv.de', +'ox.gluu.org', +'ox.indomediagroup.com', +'ox.irv.si', +'ox.mediabistro.com', +'ox.mybroadband.co.za', +'ox.pigu.lt', +'ox.stardoll.com', +'ox.videobuster.de', +'oxado.com', +'oxcash.com', +'oxeey.voluumtrk.com', +'oxen8.voluumtrk.com', +'oxosurf.eu', +'oxs1.selsin.net', +'oylkc.voluumtrk.com', +'oyvir.voluumtrk.com', +'ozzhf.voluumtrk.com', +'o_thus.ero-advertising.com', +'p-bandai-hk.b.appier.net', +'p.ace.advertising.com', +'p.adpdx.com', +'p.adsymptotic.com', +'p.algovid.com', +'p.ato.mx', +'p.chango.com', +'p.chartboost.com', +'p.cpaoa.org', +'p.cpx.to', +'p.cpxinteractive.com', +'p.ctasnet.com', +'p.delivery.net', +'p.errorception.com', +'p.imgur.com', +'p.l.qq.com', +'p.medialytics.com', +'p.nexac.com', +'p.pagesjaunes.fr', +'p.po.st', +'p.pxl2015x1.com', +'p.raasnet.com', +'p.rfihub.com', +'p.srv2trkk.com', +'p.t-online.de', +'p.tanx.com', +'p.txtsrving.info', +'p.typekit.net', +'p.univide.com', +'p.wntg2x.com', +'p.yigao.com', +'p.zeroredirect.com', +'p.zeroredirect1.com', +'p.zeroredirect2.com', +'p1.tcr111.tynt.com', +'p13n-int.herokuapp.com', +'p13n-test.herokuapp.com', +'p1tre.emv3.com', +'p2-aahhyknavsj2m-wtnlrzkba6lht33q-if-v6exp3-v4.metric.gstatic.com', +'p2-f6rp6piuxns4u-uzq4vp76bu3w2tso-if-v6exp3-v4.metric.gstatic.com', +'p2-n3zurhre4jjvk-can5rb2f2a4urcxh-if-v6exp3-v4.metric.gstatic.com', +'p2.adhitzads.com', +'p2.wncit.com', +'p2in2.voluumtrk.com', +'p2tre.emv3.com', +'p30download.ads.saba-e.com', +'p30gp.voluumtrk.com', +'p36jk.voluumtrk.com', +'p3marketing.com', +'p3tre.emv3.com', +'p4-ajvwyt5lpjazy-us7r2dzqcjsqh7pt-164149-i1-v6exp3-v4.metric.gstatic.com', +'p4-ajvwyt5lpjazy-us7r2dzqcjsqh7pt-164149-i2-v6exp3-ds.metric.gstatic.com', +'p4-ajvwyt5lpjazy-us7r2dzqcjsqh7pt-164149-s1-v6exp3-v4.metric.gstatic.com', +'p4-ajvwyt5lpjazy-us7r2dzqcjsqh7pt-if-v6exp3-v4.metric.gstatic.com', +'p4iov.voluumtrk.com', +'p4tre.emv3.com', +'p5-lj5aujgj7jl7w-r2pmxqvndsgx2im2-931517-i1-v6exp3-v4.metric.gstatic.com', +'p5-lj5aujgj7jl7w-r2pmxqvndsgx2im2-931517-i2-v6exp3-ds.metric.gstatic.com', +'p5trc.emv2.com', +'p5tre.emv3.com', +'p6tre.emv3.com', +'p7tre.emv3.com', +'p8gqd.voluumtrk.com', +'p8tre.emv3.com', +'p96582.adskape.ru', +'p9tre.emv3.com', +'pa.advertising.veeseo.com', +'pa.yahoo.com', +'pads.adition.com', +'pads.se', +'pads1.go2cloud.org', +'padsdel.cdnads.com', +'padv.co.il', +'pagead2.googleadservices.com', +'pagead2.googlesyndication.com', +'pagead46.l.doubleclick.net', +'pagecount.com', +'pagepeel.ero-advertising.com', +'pages.appia.com', +'pages.crittercism.com', +'pages.expert-offers.com', +'pages2.marketo.com', +'pagvl.voluumtrk.com', +'paid-work-at-home.com', +'paid.outbrain.com', +'paid2mobi.com', +'paid4clicks.de', +'pajpv.voluumtrk.com', +'paletotseeyzubqr.download', +'palimashop.com', +'pamedia.com.au', +'pan.conanpartners.com', +'panachedesai.go2cloud.org', +'panasonic-jp.b.appier.net', +'pandaapp.us.intellitxt.com', +'pandectxfszuufr.download', +'panel-metrica.2cnt.net', +'panel.ioam.de', +'pangea-livetracker.rferl.org', +'panisukharska.justclick.ru', +'panther1.cpxinteractive.com', +'panzermedia.go2cloud.org', +'pap.zalando.de', +'papayamobile.com', +'papi.slideme.org', +'paramount.go2cloud.org', +'paranoicbarhuhw.download', +'parenting.searchwho.com', +'pareticpaypdtpq.download', +'paris.typepad.com', +'paritycube.go2cloud.org', +'park.above.com', +'parking.parklogic.com', +'parkingcrew.net', +'parradoodle.bravejournal.com', +'parse.ly', +'parship.co.uk', +'partner-ads.com', +'partner.ah-ha.com', +'partner.applift.com', +'partner.auxilis.de', +'partner.bargaindomains.com', +'partner.buzzcity.com', +'partner.clubandmore.de', +'partner.cynapse.com', +'partner.dasoertliche-marketing.de', +'partner.dhl.de', +'partner.e-conomic.com', +'partner.finline.ua', +'partner.gewinnspiele.de', +'partner.googleadservices.com', +'partner.leguide.com', +'partner.maxxim.de', +'partner.monetizus.com', +'partner.oboom.com', +'partner.premiumdomains.com', +'partner.privatbank.ua', +'partner.share-online.biz', +'partner.simplytel.de', +'partner.stellenanzeigen.de', +'partner.teufel.de', +'partner.topcities.com', +'partner.zangocash.com', +'partner.zooplus.de', +'partner1.whatsfind.com', +'partner2profit.com', +'partner6.linktrust.com', +'partnerad.l.doubleclick.net', +'partnerads.ysm.yahoo.com', +'partnercash.com', +'partnerprogramm.e-wie-einfach.de', +'partners.adultadworld.com', +'partners.affili24.com', +'partners.bangbrosonline.com', +'partners.betus.com', +'partners.cltrda.com', +'partners.cmptch.com', +'partners.cotterweb.net', +'partners.eatsmarter.de', +'partners.keezmovies.com', +'partners.pornerbros.com', +'partners.rochen.com', +'partners.sportingbet.com.au', +'partners.trafficz.com', +'partners.tremorhub.com', +'partners.webmasterplan.com', +'partners.webtrends.com', +'partners.xpertmarket.com', +'partners.yobt.com', +'partners.yobt.tv', +'pas.private4.com', +'pass.duba.net', +'passinst.com', +'passport.pfn.bz', +'pasta.dianxinos.com', +'pastilon.com', +'pata.ero-advertising.com', +'patchwork.net', +'patriothealth.go2cloud.org', +'pavelbagryancev.justclick.ru', +'pay-ads.com', +'pay-to-promote.com', +'paycount.com', +'paycounter.com', +'payload.yieldbuild.com', +'paymonsters.biz', +'payoom.go2cloud.org', +'paypal.112.2o7.net', +'paypal.adtag.where.com', +'paypal.d1.sc.omtrdc.net', +'paypalssl.doubleclick.net', +'payperclick.co.il', +'payperplay.voice2page.com', +'paypersaleadvertising.com', +'payserve.com', +'pb.i.sogou.com', +'pb.sogou.com', +'pba39.inethoster.org', +'pbc7m.voluumtrk.com', +'pbid.pro-market.net', +'pbm7t.voluumtrk.com', +'pbnet.ru', +'pbnwiecwfpaltrier.review', +'pbtool.adition.com', +'pcash.imlive.com', +'pcastuces.fr.intellitxt.com', +'pcdwh.voluumtrk.com', +'pcgames.de.intellitxt.com', +'pclick.europe.yahoo.com', +'pclick.internal.yahoo.com', +'pclick.yahoo.com', +'pcmagazin.digidip.net', +'pcmega.hasoffers.com', +'pcookie.cnzz.com', +'pcppu.voluumtrk.com', +'pcsvy.voluumtrk.com', +'pcsx9.voluumtrk.com', +'pctipp.ch.intellitxt.com', +'pctools.tt.omtrdc.net', +'pctweu.vancouverco.com', +'pd.justclick.ru', +'pda.mv.bidsystem.com', +'pde.lp4.io', +'pdf.forbes.com', +'pdn.applovin.com', +'pdpdsromlaconical.review', +'pdsqopgtdiphyodont.review', +'pdt.tradedoubler.com', +'peakclick.com', +'peakcounter.dk', +'pebble.bnex.com', +'peekipaiw.com', +'peerform.go2cloud.org', +'peffk.voluumtrk.com', +'pegasoweb.com', +'peils.voluumtrk.com', +'pejorationkgoibtbvp.download', +'pencomputing.us.intellitxt.com', +'penneroqqwnqz.download', +'penton.us.intellitxt.com', +'pentos-cdn.polarmobile.com', +'people-group.su', +'people.searchwho.com', +'perf.mmstat.com', +'perf.overture.com', +'perfect-privacy.postaffiliatepro.com', +'performance.affiliaxe.com', +'performancerevenues.com', +'performances.bestofmedia.com', +'performercenter.livejasmin.com', +'permissionmedia.com', +'persevered.com', +'persiangig.ads.saba-e.com', +'persianstat.com', +'perso0.free.fr', +'personalcapital.go2cloud.org', +'personalize.rapleaf.com', +'personalreports.lexisnexis.com', +'pezrphjl.com', +'pf.tradedoubler.com', +'pfead1.netway.at', +'pfead2.netway.at', +'pfead3.netway.at', +'pfead4.netway.at', +'pflexads.com', +'pfpc.citygridmedia.com', +'pfuv5.voluumtrk.com', +'pfx9u.voluumtrk.com', +'pgcxe.voluumtrk.com', +'pgdb1.surf-town.net', +'pgdbb1.surf-town.net', +'pgmopcongruity.review', +'ph-ad.focalink.com', +'ph-ad01.focalink.com', +'ph-ad02.focalink.com', +'ph-ad03.focalink.com', +'ph-ad04.focalink.com', +'ph-ad05.focalink.com', +'ph-ad06.focalink.com', +'ph-ad07.focalink.com', +'ph-ad08.focalink.com', +'ph-ad09.focalink.com', +'ph-ad10.focalink.com', +'ph-ad11.focalink.com', +'ph-ad12.focalink.com', +'ph-ad13.focalink.com', +'ph-ad14.focalink.com', +'ph-ad15.focalink.com', +'ph-ad16.focalink.com', +'ph-ad17.focalink.com', +'ph-ad18.focalink.com', +'ph-ad19.focalink.com', +'ph-ad20.focalink.com', +'ph-ad21.focalink.com', +'ph-ad23.focalink.com', +'ph.affinity.com', +'phenomcrm.com', +'phg.hitbox.com', +'philipselectronicsne.tt.omtrdc.net', +'phizzle.com', +'phluant.com', +'phmgtrfqxreesting.review', +'phn.apnanalytics.com', +'phoenix-adrunner.mycomputer.com', +'phoenix-mc-adrunner.mycomputer.com', +'phoenix.ivwbox.de', +'phoenix.untd.com', +'phoneboxexperiment.com', +'photoshop-master.org', +'php.bisrv.com', +'phpbbex.com', +'phpmyadmin.ads.ero-advertising.com', +'phpmyadmin.ero-advertising.com', +'phpmyadmin.js.ero-advertising.com', +'phx.co.in', +'phylesonqjkilk.download', +'physorg.us.intellitxt.com', +'pi.feedsportal.com', +'pi.pardot.com', +'pi.safer-networking.ie', +'pic.tokyo-tube-ad.com', +'picda.ilius.net', +'picket0.com', +'pickyourplum.hasoffers.com', +'picreel.com', +'pics.firstload.de', +'pics3.inxhost.com', +'picupload.tnaflix.com', +'piet2eix3l.com', +'pigment-adv.co.il', +'pillowywdgpchl.download', +'pimprig.us.intellitxt.com', +'pimproll.com', +'pinfishmabev.download', +'ping-fast.com', +'ping.aclst.com', +'ping.answerbook.com', +'ping.apptornado.com', +'ping.chartbeat.net', +'ping.dozuki.com', +'ping.getadblock.com', +'ping.jmp9.com', +'ping.taplytics.com', +'pingback.sogou.com', +'pinger.macromedia.com', +'pingjs.qq.com', +'pings.conviva.com', +'pinguinqeslaj.download', +'pipedream.wistia.com', +'pipeschannels.com', +'piranho.com', +'piranho.de', +'piratinviaggio.digidip.net', +'pitneybowes-www.baynote.net', +'piumrtfasiv.download', +'pivotal.github.com', +'pivotnetworks.com', +'piwik.adspaces.ero-advertising.com', +'piwik.ero-advertising.com', +'piwik.ilfllc.com', +'piwik.kuhlmann-software.at', +'pix.bit.ly', +'pix.btrll.com', +'pix.gfycat.com', +'pix.speedbit.com', +'pix01.revsci.net', +'pix04-pd04.revsci.net', +'pix04.revsci.net', +'pix521.adtech.fr', +'pix522.adtech.fr', +'pixazza.com', +'pixel-dimestore.dmi.sensic.net', +'pixel.1und1.de', +'pixel.33across.com', +'pixel.ad.mlnadvertising.com', +'pixel.adcrowd.com', +'pixel.adsafeprotected.com', +'pixel.adsniper.ru', +'pixel.advertising.com', +'pixel.alephd.com', +'pixel.alexametrics.com', +'pixel.autoaffiliatenetwork.com', +'pixel.bild.de', +'pixel.despegar.com', +'pixel.eversttech.net', +'pixel.facebook.com', +'pixel.fanbridge.com', +'pixel.getpaidfordata.com', +'pixel.gfycat.com', +'pixel.honestjohn.co.uk', +'pixel.intares.net', +'pixel.invitemedia.com', +'pixel.jumptap.com', +'pixel.mathtag.com', +'pixel.moatads.com', +'pixel.monitor1.returnpath.net', +'pixel.monitor2.returnpath.net', +'pixel.nbsp.de', +'pixel.pcworld.com', +'pixel.prfct.co', +'pixel.prosieben.de', +'pixel.quantcount.com', +'pixel.quantserve.com', +'pixel.reddit.com', +'pixel.redditmedia.com', +'pixel.rubiconproject.com', +'pixel.serviceleverage.com', +'pixel.sitescout.com', +'pixel.solvemedia.com', +'pixel.staging.tree.com', +'pixel.staticworld.net', +'pixel.tapad.com', +'pixel.tcog.cp1.news.com.au', +'pixel.tree.com', +'pixel.watch', +'pixel.wp.com', +'pixel.wp.tv', +'pixel.yabidos.com', +'pixel.yola.com', +'pixel1041.everesttech.net', +'pixel1739.everesttech.net', +'pixelcounter.expansion.com', +'pixelcounter.telva.com', +'pixeleze.com', +'pixiedust.buzzfeed.com', +'pk5qr.voluumtrk.com', +'pkmg.go2cloud.org', +'pl105423.putags.com', +'pl106332.puhtml.com', +'pl108274.puhtml.com', +'pl109299.puhtml.com', +'pl111316.puhtml.com', +'pl111439.puhtml.com', +'pl112153.puhtml.com', +'pl116670.puhtml.com', +'pl117290.puhtml.com', +'pl130464.puhtml.com', +'pl133504.puhtml.com', +'pl144731.puhtml.com', +'pl147032.puhtml.com', +'pl1567.bntags.com', +'pl3700.puhtml.com', +'pl3792.puhtml.com', +'pl4277.putags.com', +'pl4851.putags.com', +'pl5014.putags.com', +'pl5027.putags.com', +'pl504.putags.com', +'pl5191.putags.com', +'pl5225.bntags.com', +'pl5411.bntags.com', +'pl61x.voluumtrk.com', +'placed.com', +'placehold.it', +'placeholdit.imgix.net', +'planet-source-code.us.intellitxt.com', +'planetactive.com', +'planetgamecube.us.intellitxt.com', +'planetluck.com', +'planituk.go2cloud.org', +'platado.com', +'platform.communicatorcorp.com', +'platform.linkedin.com', +'platform.revenuestreet.com', +'platform.stumbleupon.com', +'platform.tumblr.com', +'play.affmob.org', +'play.leadzu.com', +'play2mobi.com', +'play4traffic.com', +'playads.applift.com', +'playboy.us.intellitxt.com', +'player.piksel.com', +'playminigolf.com', +'playnow.guru', +'playtomic.com', +'plb27.voluumtrk.com', +'pleadshvzek.download', +'pleasewaitlonger.com', +'plemedia.com', +'plemx.com', +'pleshkov.justclick.ru', +'plethoramobile.com', +'plgundr.com', +'pll28.voluumtrk.com', +'plmokn.pw', +'plocia.com', +'ploko.voluumtrk.com', +'ploppingppoqqgq.download', +'pls.webtype.com', +'plsdrct2.me', +'plug.plugerr.com', +'plugin.2easydroid.com', +'plugin.mediavoice.com', +'plugin.reactful.com', +'plugins.mixi.jp', +'plugrush.com', +'plusperformance.go2cloud.org', +'pluto.adcycle.com', +'plutusads.com', +'pm.bumskontakt.com', +'pm.deinfickdate.com', +'pm.deinsexdate.com', +'pm.fetischsexkontakte.com', +'pm.heutenochficken.com', +'pm.hobbyhurenkontakte.com', +'pm.hobbynuttendatenbank.com', +'pm.kontakt-vermittler.de', +'pm.natursektdating.com', +'pm.onlineseitensprung.de', +'pm.schwangerdating.com', +'pm.sexkiste.com', +'pm.sexkontaktflatrate.com', +'pm.sofortficken.com', +'pm.swingerdatenbank.com', +'pm.tittendating.com', +'pm.w55c.net', +'pm.web.com', +'pmloe.voluumtrk.com', +'pmlt1.voluumtrk.com', +'pmm.people.com.cn', +'pn2.adserver.yahoo.com', +'pnx6n.voluumtrk.com', +'pnytimes.chartbeat.net', +'po.st', +'pocketmedia.go2cloud.org', +'pocketpc.digidip.net', +'poconorecordcom.112.2o7.net', +'pod.xpress.com', +'pod.xxxconnect.com', +'pointific.go2cloud.org', +'pointix.com', +'pointroll.com', +'pointshop.dk', +'pokasvobodna.justclick.ru', +'polishedsvcxddsy.download', +'politads.com', +'politics.searchwho.com', +'poll.truehits.net', +'polluxnetwork.com', +'pompazilla.com', +'pongoresume.com', +'pontiflex.com', +'pool.admedo.com', +'pool.ads.netlog.com', +'pool.skyhookwireless.com', +'pool01.2cnt.net', +'pool02.2cnt.net', +'poopoo.freestats.com', +'pop.adcocktail.com', +'pop.kissmetrics.com', +'pop.mobpartner.mobi', +'pop.mrstiff.com', +'pop.performancerevenues.com', +'pop.pptw.org', +'pop.yeahmobi.com', +'popacs.ero-advertising.com', +'popads.ero-advertising.com', +'popads.net', +'popadscdn.net', +'popcash.net', +'popelingmltdiidyr.download', +'popit.mediumpimpin.com', +'popload.net', +'popme.163.com', +'poponclick.com', +'poppntags.com', +'pops.ero-advertising.com', +'pops.freeze.com', +'popserve.adscpm.net', +'popstrap.com', +'poptm.com', +'popunder.jacquieetmichel.net', +'popunder.loading-delivery1.com', +'popunder.net', +'popunder.ru', +'popunderz.com', +'popup.msn.com', +'popup.smusic.ir', +'popup.wisepops.com', +'popupad.net', +'popupads.ir', +'popupmoney.com', +'popups.infostart.com', +'popuptraffic.com', +'popzila.com', +'poratav.com', +'poredii.com', +'pornads.biz', +'porner.at', +'pornhub.tardangro.com', +'pornhub.yoshatia.com', +'pornlist.mobi', +'porntrack.com', +'pornvideostube.net', +'portableplanet.us.intellitxt.com', +'portal.admeld.com', +'portal.publishersserviceassociates.com', +'portal.scanscout.com', +'portal.skyhookwireless.com', +'portal.zedo.com', +'pos.baidu.com', +'posibilities_en.popunder.net', +'possibilities.popunder.net', +'posst.co', +'post.securestudies.com', +'post.update.moatads.com', +'postads24.com', +'postchronicle.us.intellitxt.com', +'postitial.iqzone.com', +'postmasterbannernet.com', +'postpixel.vindicosuite.com', +'potd.onlytease.com', +'potionoxfrtmzvr.download', +'power-affliate.blogspot.com', +'poweradvertising.co.uk', +'powercount.jswelt.de', +'powersearch.us.com', +'powertube.bitterstrawberry.com', +'pp-serve.newsinc.com', +'pp0ru.voluumtrk.com', +'ppcchicago.com', +'ppcindo.com', +'ppctracking.net', +'ppctrck.com', +'ppp.voice2page.com', +'ppsxqapwsurcoats.review', +'pptrk.com', +'pq-direct.revsci.net', +'pr-bh.ybp.yahoo.com', +'pr-static.empflix.com', +'pr.atwola.com', +'pr.blogflux.com', +'pr.pbp.vip.ir2.yahoo.com', +'pr.prchecker.info', +'pr.ybp.yahoo.com', +'praiseads.go2cloud.org', +'pranking12.ziyu.net', +'praptkppltraditors.review', +'prchecker.info', +'pre.footprintpredict.com', +'precisionleads.go2cloud.org', +'predictad.com', +'predictivadvertising.com', +'preferences.truste.com', +'preferredpublishers.go2cloud.org', +'prehensivetvrie.download', +'premiercreditcard.com', +'premios.go2cloud.org', +'premium.cz', +'premium.naturalnews.tv', +'premiumastrology.go2cloud.org', +'premiumnetwork.com', +'premiumtrack01.webtrekk.net', +'premiumtrack02.webtrekk.net', +'premiumtrack03.webtrekk.net', +'premiumtrack04.webtrekk.net', +'prepareriblef.download', +'preplannedpbxggguv.download', +'preply.go2affise.com', +'prerelease.rts.doublepimp.com', +'prerelease.rts.phn.doublepimp.com', +'prerelease.streamate.doublepimp.com', +'prerollads.ign.com', +'preview.bnex.com', +'preview.serving-sys.com', +'prexista.com', +'priceinfo.comuv.com', +'priceminister.ezakus.net', +'prikolizdesa.com', +'primaryads.com', +'primedia.us.intellitxt.com', +'primosearch.com', +'pringotrack.com', +'prishla.info', +'prismaprofits.go2cloud.org', +'prizee.com', +'prkhg.voluumtrk.com', +'prm.europacash.com', +'prmfactory.go2cloud.org', +'prmobiles.com', +'pro-advertising.com', +'pro.hit.gemius.pl', +'proac.nationwide.com', +'proactive.base.de', +'probe.cedexis.org', +'probe.yieldlab.net', +'probes.cedexis.com', +'probux.com', +'procinema.2cnt.net', +'prodege.go2cloud.org', +'production-eqbc.lvp.llnw.net', +'production-mcs.lvp.llnw.net', +'production-ps.lvp.llnw.net', +'production-stats-ezpublishing.netdna-ssl.com', +'production.mcs.delve.cust.lldns.net', +'productpartnersllc.tt.omtrdc.net', +'products-and-services.com', +'prof.estat.com', +'proffigurufast.com', +'profile.bharatmatrimony.com', +'profiles.mydirtyhobby.com', +'profitreload.com', +'profitshare.emag.ro', +'profitsiegenetwork.go2cloud.org', +'profitzone.com', +'progressive.lp.mydas.mobi', +'project2.realtracker.com', +'projectcounter.org', +'projectvrtcl.go2cloud.org', +'projectwonderful.com', +'projop.dnsalias.com', +'promo.acquinityinteractive.com', +'promo.awempire.com', +'promo.badoink.com', +'promo.blackcrush.com', +'promo.bluesq.com', +'promo.bongacash.com', +'promo.easy-dating.org', +'promo.ezstatic.com', +'promo.fileforum.com', +'promo.free-datings.com', +'promo.freecamstars.com', +'promo.indecentes-voisines.com', +'promo.pegcweb.com', +'promo.selbstaendig20.12227.digistore24.com', +'promo.thepornsurvey.com', +'promo.ulust.com', +'promo.yahoo.com', +'promo1.c-rewards.com', +'promo2.c-rewards.com', +'promo3.c-rewards.com', +'promo4.c-rewards.com', +'promo4partners.com', +'promobenef.com', +'promos.adlead.com', +'promos.fling.com', +'promos.gpniches.com', +'promote.pair.com', +'promotion.coreg.de', +'promotion.partnercash.com', +'promotion.shirtinator.net', +'promotionmaterial.betacash.com', +'promotions.iasbet.com', +'promotions.yahoo.com', +'promptleads.go2cloud.org', +'pronatingwdlurtut.download', +'propellerpops.com', +'prophet.heise.de', +'proratepgehzyd.download', +'prosperent.com', +'protectsebuwflgm.download', +'protexting.com', +'protraffic.com', +'providence.voxmedia.com', +'proxad.net', +'proxy.ladot.com', +'proxypage.msn.com', +'prpops.com', +'prscripts.com', +'prstatics.com', +'prunemedia.go2affise.com', +'prv3h.voluumtrk.com', +'prwidgets.com', +'ps-eu.amazon-adsystem.com', +'ps.ns-cdn.com', +'ps2.interpolls.com', +'ps3.ign.us.intellitxt.com', +'psfjg.voluumtrk.com', +'psl19.voluumtrk.com', +'psma02.com', +'psp.ign.us.intellitxt.com', +'psstt.com', +'pssvc.iqzone.com', +'psx.ign.us.intellitxt.com', +'psyimjyctimeliness.review', +'psyschool.justclick.ru', +'pt.crossmediaservices.com', +'pt.friendbuy.com', +'pt.trafficjunky.net', +'pt000127.unica.com', +'pt200204.unica.com', +'pt7ma.voluumtrk.com', +'ptest.webtrekk.net', +'ptk6n.voluumtrk.com', +'ptp.lolco.net', +'ptp4ever.fr', +'ptqss.voluumtrk.com', +'ptracker.be2.com', +'ptsc.shoplocal.com', +'pttsite.com', +'pu-dsp.adsniper.ru', +'pu.trafficshop.com', +'puat.go2cloud.org', +'pub.ad-sys.com', +'pub.adswam.com', +'pub.akinator.com', +'pub.aujourdhui.com', +'pub.chez.com', +'pub.clicktraffix.com', +'pub.club-internet.fr', +'pub.cyberbrain.net', +'pub.dreamboxcart.com', +'pub.ftv-publicite.fr', +'pub.hardware.fr', +'pub.realmedia.fr', +'pub.sapo.pt', +'pub.sex.com', +'pub.sitetag.us', +'pub.sponsorselect.com', +'pub.sv2.biz', +'pub1.bravenet.com', +'pub1.co', +'pub10.bravenet.com', +'pub11.bravenet.com', +'pub12.bravenet.com', +'pub13.bravenet.com', +'pub14.bravenet.com', +'pub15.bravenet.com', +'pub16.bravenet.com', +'pub17.bravenet.com', +'pub18.bravenet.com', +'pub19.bravenet.com', +'pub2.bravenet.com', +'pub20.bravenet.com', +'pub21.bravenet.com', +'pub22.bravenet.com', +'pub23.bravenet.com', +'pub24.bravenet.com', +'pub25.bravenet.com', +'pub26.bravenet.com', +'pub27.bravenet.com', +'pub28.bravenet.com', +'pub29.bravenet.com', +'pub2srv.com', +'pub3.bravenet.com', +'pub3.media-clic.com', +'pub30.bravenet.com', +'pub31.bravenet.com', +'pub32.bravenet.com', +'pub33.bravenet.com', +'pub34.bravenet.com', +'pub35.bravenet.com', +'pub36.bravenet.com', +'pub37.bravenet.com', +'pub38.bravenet.com', +'pub39.bravenet.com', +'pub4.bravenet.com', +'pub40.bravenet.com', +'pub41.bravenet.com', +'pub42.bravenet.com', +'pub43.bravenet.com', +'pub44.bravenet.com', +'pub45.bravenet.com', +'pub46.bravenet.com', +'pub47.bravenet.com', +'pub48.bravenet.com', +'pub49.bravenet.com', +'pub5.bravenet.com', +'pub50.bravenet.com', +'pub6.bravenet.com', +'pub7.bravenet.com', +'pub8.bravenet.com', +'pub9.bravenet.com', +'pubads.g.doubleclick.net', +'pubcpm.com', +'pubdirecte.com', +'publead.go2cloud.org', +'public.bravenet.com', +'public.carpediem.fr', +'public.porn.fr', +'public0.bravenet.com', +'public1.bravenet.com', +'public10.bravenet.com', +'public11.bravenet.com', +'public12.bravenet.com', +'public13.bravenet.com', +'public14.bravenet.com', +'public15.bravenet.com', +'public16.bravenet.com', +'public17.bravenet.com', +'public18.bravenet.com', +'public19.bravenet.com', +'public2.bravenet.com', +'public20.bravenet.com', +'public21.bravenet.com', +'public22.bravenet.com', +'public23.bravenet.com', +'public24.bravenet.com', +'public25.bravenet.com', +'public26.bravenet.com', +'public27.bravenet.com', +'public28.bravenet.com', +'public29.bravenet.com', +'public3.bravenet.com', +'public30.bravenet.com', +'public31.bravenet.com', +'public32.bravenet.com', +'public33.bravenet.com', +'public34.bravenet.com', +'public35.bravenet.com', +'public36.bravenet.com', +'public37.bravenet.com', +'public38.bravenet.com', +'public39.bravenet.com', +'public4.bravenet.com', +'public40.bravenet.com', +'public41.bravenet.com', +'public42.bravenet.com', +'public43.bravenet.com', +'public44.bravenet.com', +'public45.bravenet.com', +'public46.bravenet.com', +'public47.bravenet.com', +'public48.bravenet.com', +'public49.bravenet.com', +'public5.bravenet.com', +'public50.bravenet.com', +'public6.bravenet.com', +'public7.bravenet.com', +'public8.bravenet.com', +'public9.bravenet.com', +'publicationsunbound.112.2o7.net', +'publicidad.elmundo.es', +'publicizedrtgtvj.download', +'publish.pizzazzemail.com', +'publish.vidavee.com', +'publisher.acquinityinteractive.com', +'publisher.affiliwelt.net', +'publisher.infinityads.com', +'publisher.tradedoubler.com', +'publisherportal.doubleclick.net', +'publishers.clickbooth.com', +'publishers.gourmetads.com', +'pubnative.net', +'pubs.lemonde.fr', +'pubted.com', +'pubx.co', +'pud.cpulse.com', +'puggareeslshty.download', +'puhtml.com', +'pulharktheherald.112.2o7.net', +'pulpantagraph.112.2o7.net', +'pulsarads.go2affise.com', +'pulsepoint.com', +'pulsetv.com', +'puma.vizu.com.51275.9332.302br.net', +'puma.vizu.com.51276.9332.302br.net', +'puma.vizu.com.51277.9332.302br.net', +'puma.vizu.com.51278.9332.302br.net', +'puokp.voluumtrk.com', +'pure-ads.com', +'pureresults.go2cloud.org', +'puretec.de', +'purgrobi.com', +'push.appsgeyser.com', +'push.cdnads.com', +'pushdoglucoside.review', +'putbid.net', +'pv.sogou.com', +'pvcteegjdrecombine.review', +'pvnrr.voluumtrk.com', +'pvrgf.voluumtrk.com', +'pwgrkcxuescaped.review', +'pwu0e.voluumtrk.com', +'px.adhigh.net', +'px.cdn.creative.medialytics.com', +'px.demdex.net', +'px.dpmsrv.com', +'px.excitedigitalmedia.com', +'px.owneriq.net', +'px.ozonemedia.com', +'px.srvcs.tumblr.com', +'px.topspin.net', +'px.wa.ui-portal.de', +'px1.vtrtl.de', +'pxl.darchermedia.com', +'pxl.leads.su', +'pxlctl.as.com', +'pxlctl.elpais.com', +'py2so.voluumtrk.com', +'pyhel.voluumtrk.com', +'pyj6n.voluumtrk.com', +'pyqnmtgtsrouleaux.review', +'pyracanthahiiiy.download', +'pyrolyzesgykddf.download', +'pyrrhousabowdw.download', +'pyrroleqkoaob.download', +'pywatur.biz', +'pyxqbzdwemuteness.review', +'pyzct.voluumtrk.com', +'pyzou.voluumtrk.com', +'pztqt.voluumtrk.com', +'pzxld.voluumtrk.com', +'p_en.popunder.net', +'q-mobi.go2affise.com', +'q.addthis.com', +'q.azcentral.com', +'q.jmp9.com', +'q.pni.com', +'q.serving-sys.com', +'q.stripe.com', +'q.zeroredirect.com', +'q.zeroredirect1.com', +'q.zeroredirect2.com', +'q1blk.voluumtrk.com', +'q2fqo.voluumtrk.com', +'q3-2.webtrekk.net', +'q3.webtrekk.net', +'q3aut.voluumtrk.com', +'q3iko.voluumtrk.com', +'q3mz4.voluumtrk.com', +'q47bd.voluumtrk.com', +'q4trt.voluumtrk.com', +'q9dga.voluumtrk.com', +'qa.rlcdn.com', +'qa3wf.voluumtrk.com', +'qadabra.com', +'qainteryield.jmp9.com', +'qajtgdsulfate.review', +'qannd.voluumtrk.com', +'qantas.demdex.net', +'qarmonija.justclick.ru', +'qawiman.com', +'qb2h0.voluumtrk.com', +'qb6q5.voluumtrk.com', +'qbeeeld.jmp9.com', +'qbeeld.jmp9.com', +'qbeeseld.jmp9.com', +'qbeld.jmp9.com', +'qbsg9.voluumtrk.com', +'qbt0g.voluumtrk.com', +'qbuxm.voluumtrk.com', +'qckjmp.com', +'qclyu.voluumtrk.com', +'qd.jmp9.com', +'qdibdzannvauntings.review', +'qdigital.co.il', +'qdildryypitapat.review', +'qdmil.com', +'qdzlt.voluumtrk.com', +'qeld.jmp9.com', +'qf2e4.voluumtrk.com', +'qfrirscauterises.review', +'qftqw.voluumtrk.com', +'qi2kt.voluumtrk.com', +'qibly.voluumtrk.com', +'qimuj.voluumtrk.com', +'qitr0.voluumtrk.com', +'qixrb.voluumtrk.com', +'qj.us.intellitxt.com', +'qjfbjuyvuazotizing.review', +'qksrv.growhope.com', +'qld.jmp9.com', +'qlipsodigital.checkm8.com', +'qlog.adap.tv', +'qm41q.voluumtrk.com', +'qmkkm.voluumtrk.com', +'qmtjz.voluumtrk.com', +'qmuuc.voluumtrk.com', +'qnlcq.voluumtrk.com', +'qnzdd.voluumtrk.com', +'qof7o.voluumtrk.com', +'qoredi.com', +'qos.report.qq.com', +'qpfumxmsxvoars.review', +'qplir.voluumtrk.com', +'qq.m.cn.miaozhen.com', +'qqc.co', +'qqvj6.voluumtrk.com', +'qs.ioam.de', +'qs.ivwbox.de', +'qsearch.media.net', +'quakemarketing.com', +'qualaroo.com', +'qualigo.de', +'qualigo.net', +'qualityclickcontrol.com', +'qualitylegion.com', +'quantcount.com', +'quantserve.com', +'quartz.bnex.com', +'qubitanalytics.appspot.com', +'qubitproducts.app13.hubspot.com', +'qudll.voluumtrk.com', +'queerestxyxlws.download', +'questaffiliates.net', +'questnet.de', +'questseek.com', +'quickdomainfwd.com', +'quicken.demdex.net', +'quickinfo247.com', +'quickinspirations.com', +'quickpay.carmunity.de', +'quickstartstore.go2cloud.org', +'quinolaerbnj.download', +'quinst.com', +'qvb2w.voluumtrk.com', +'qvciu.voluumtrk.com', +'qwest.bfast.com', +'qwiklnk.com', +'qwwqb.voluumtrk.com', +'qxj3b.voluumtrk.com', +'qyrix.go2cloud.org', +'r.254a.comjs.moatads.com', +'r.adserver01.de', +'r.af-share.jp', +'r.aol.com', +'r.apina.biz', +'r.best-rated-apps.com', +'r.casalemedia.com', +'r.chip.de', +'r.coolmobile.biz', +'r.domob.cn', +'r.edge.inmobicdn.net', +'r.leadzu.com', +'r.leadzuaf.com', +'r.leadzupc.com', +'r.mail.ru', +'r.migch.com', +'r.mobhubrdrms.com', +'r.mobpartner.mobi', +'r.movad.de', +'r.msn.com', +'r.my.com', +'r.myadx.net', +'r.openx.net', +'r.radikal.ru', +'r.skimresources.com', +'r.turn.com', +'r.twimg.com', +'r.uimserv.net', +'r.w.inmobi.com', +'r.yieldkit.com', +'r.zeroredirect.com', +'r.zeroredirect1.com', +'r.zeroredirect2.com', +'r0d2x.voluumtrk.com', +'r1.ace.advertising.com', +'r1.beta.ace.advertising.com', +'r1.computerbild.de', +'r1.cooleremail.com', +'r1.fmpub.net', +'r1.pcwelt.de', +'r1.plugrush.com', +'r1.zedo.com', +'r10.cooleremail.com', +'r11.cooleremail.com', +'r2.cooleremail.com', +'r2.linksynergy.com', +'r2.plugrush.com', +'r20.rs6.net', +'r2fjs.voluumtrk.com', +'r2jmarketing.go2cloud.org', +'r2v3n.voluumtrk.com', +'r3.cooleremail.com', +'r3.plugrush.com', +'r4.cooleremail.com', +'r4.plugrush.com', +'r4zih.voluumtrk.com', +'r5.cooleremail.com', +'r5.plugrush.com', +'r6.cooleremail.com', +'r6qz8.voluumtrk.com', +'r7.cooleremail.com', +'r8.cooleremail.com', +'r9.cooleremail.com', +'r9pyq.voluumtrk.com', +'ra.revolvermaps.com', +'rack.bauermedia.co.uk', +'raconteurnvlwsc.download', +'rad.adriver.ru', +'rad.reporo.net', +'radar.cedexis.com', +'radar.cedexis.swiftserve.com', +'radar11ab.co.uk', +'radartumblr.cedexis.com', +'radarurl.com', +'radiate.com', +'radioguerr.2cnt.net', +'radiozu.2cnt.net', +'radstackmedia.go2cloud.org', +'rainbow-de.mythings.com', +'rainbow.mythings.com', +'rainmaker.digitalbrandsinc.netdna-cdn.com', +'rainoffers.afftrack.com', +'rainydaymarketing.go2affise.com', +'raiss.voluumtrk.com', +'ramctrlgate.com', +'ramongroup.go2affise.com', +'rampidads.com', +'ranking-charts.de', +'ranking-hits.de', +'ranks.com', +'rankseller.de', +'ranksider.com', +'rankyou.com', +'rapdirt.us.intellitxt.com', +'rapid-cdn.com', +'rapleaf.com', +'raplz.voluumtrk.com', +'rareru.ru', +'rasedbdhczr.download', +'rasius.pro', +'rasml.voluumtrk.com', +'rata.ero-advertising.com', +'rates.insureship.com', +'rating.openstat.com', +'rating.openstat.ru', +'ratkalol.com', +'ratx9.voluumtrk.com', +'ravenstonedigital.go2cloud.org', +'rawdinner.justclick.ru', +'rawstory.us.intellitxt.com', +'raygun.io', +'raymond.uk.intellitxt.com', +'rb1.design.ru', +'rbb.ic.llnwd.net', +'rbs.tt.omtrdc.net', +'rc-au.imrworldwide.com', +'rc.adition.com', +'rc.bt.ilsemedia.nl', +'rc.rlcdn.com', +'rc6.i2i.jp', +'rce.veeseo.com', +'rcgi.video.qq.com', +'rckymtnnws.112.2o7.net', +'rcm-de.amazon.de', +'rcm-fe.amazon-adsystem.com', +'rcm-images.amazon.com', +'rcm.amazon.com', +'rcm.go2cloud.org', +'rcp.c.appier.net', +'rcpmf.voluumtrk.com', +'rcsmetrics.it', +'rd-eu.a9.com', +'rd.ads.juno.com', +'rd.advertising.com', +'rd.alice.it', +'rd.ane.yahoo.co.jp', +'rd.apmebf.com', +'rd.jersey.ads.juno.com', +'rd.mobiteasy.com', +'rd.rakuten.co.jp', +'rd.sslmediaserver.com', +'rd1.hitbox.com', +'rd1.surfernetwork.com', +'rddywd.com', +'rdir.smartshoppingads.co.uk', +'rds4k.voluumtrk.com', +'rdstat.tanx.com', +'re.adroll.com', +'re.directrev.com', +'re.try9.com', +'readserver.cachefly.net', +'realclick.co.kr', +'realclix.com', +'realcounter.eu', +'realestate.searchwho.com', +'realist.gen.tr', +'realitatea.2cnt.net', +'reallybig.spinbox.net', +'realmedia-a592.d4p.net', +'realmedia-a800.d4p.net', +'realmedia.co.kr', +'realmedia.fr', +'realmedia.ro', +'realnetworks.com', +'realtechnetwork.com', +'realtime.services.disqus.com', +'realtracker.com', +'reamerskltzgimoz.download', +'rec.quartic.pl', +'rec3.prosieben.de', +'recade.clmbtech.com', +'recipegoldmine.us.intellitxt.com', +'reco.hardsextube.com', +'recommendation.24.com', +'recommendations.shareaholic.com', +'recommendedpreview.com', +'record.commissionlounge.com', +'recorded-email.com', +'recreationalequipmen.tt.omtrdc.net', +'recreativ.ru', +'recrossedmuwiemq.download', +'recs.atgsvcs.com', +'red.chic-avenue.fr', +'red.yourdailyoffers.co.uk', +'redcounter.net', +'redcourtside.com', +'redeye.williamhill.com', +'redir-traffic.elephant-traffic.com', +'redir.adap.tv', +'redir.metaservices.microsoft.com', +'redir.speedbit.com', +'redir.widdit.com', +'redirect-for-more.info', +'redirect.advertising.se', +'redirect.com', +'redirect.dealabs.com', +'redirect.ero-advertising.com', +'redirect.fairfax.com.au', +'redirect.la.idealab.com', +'redirect.linksummary.com', +'redirect.mobpartner.mobi', +'redirect.searchignite.com', +'redirect.simba.taobao.com', +'redirect.viglink.com', +'redirect.wister.biz', +'redirect1.vip.store.yahoo.com', +'redirect2719.ws', +'redirecting.ws', +'redirector.themobilehub.net', +'redirects.ero-advertising.com', +'redirects.timesink.com', +'reditions.net', +'redmas.com', +'redrct.site', +'redshiftleads.steele.net', +'redtube.yoshatia.com', +'reduxmedia.com', +'redvase.bravenet.com', +'redvertisment.com', +'redzun.go2cloud.org', +'reedingxgxwiet.download', +'refer.ccbill.com', +'refer.webhostingbuzz.com', +'refer100.outster.com', +'referral.imcbet.com', +'referral.indotogel.net', +'referral.lotto01.com', +'referral.togel4d.com', +'referral.totobet.net', +'referral.totojitu.com', +'referral.totost.com', +'referralware.com', +'referrer.disqus.com', +'refinedads.com', +'reformal.ru', +'reg20.ubermedia.com', +'regalcigs.go2cloud.org', +'regie.oopt.fr', +'register.leadbolt.com', +'registration.livejasmin.com', +'rehungekmar.download', +'reichelt02.webtrekk.net', +'rejectclick.com', +'rek.mobi', +'rekket.go2affise.com', +'reklam.rfsl.se', +'reklama.internet.cz', +'reklama.reflektor.cz', +'relap.io', +'relatedweboffers.com', +'relay.cj.com', +'relay.livejasmin.com', +'relay.reporo.net', +'relentless.go2cloud.org', +'reliaquote.com', +'rem-track.bild.de', +'rem.go2cloud.org', +'remarketing.doubleclick.net', +'remercyingynfycoay.download', +'remotead-internal.cnet.com', +'remotead.cnet.com', +'renegademillionaire.go2cloud.org', +'renouncecvtqbkx.download', +'replay.foreseeresults.com', +'replaycontroller.4seeresults.com', +'report-zt.1rx.io', +'report.adsender.us', +'report.adview.cn', +'report.footprintdns.com', +'report.ivwbox.de', +'report.qq.com', +'report.the-path-gateway.com', +'report.webtrekk.de', +'report.yeahmobi.com', +'report.zedo.com', +'report02.adtech.fr', +'report12.webtrekk.com', +'report2.webtrekk.de', +'report8.webtrekk.com', +'reportcentral.doubleclick.net', +'reporter.adtech.fr', +'reporter001.adtech.fr', +'reportimage.adtech.fr', +'reporting.flymonarch.com', +'reporting.ilius.net', +'reporting.net', +'reporting.theonion.com', +'reporting.wilkinsonplus.com', +'reports.adition.com', +'reports.amonetize.com', +'reports.cedexis.com', +'reports.doubleclick.com', +'reports.doubleclick.net', +'reports.extreme-dm.com', +'reports.pagesuite-professional.co.uk', +'reports.wes.df.telemetry.microsoft.com', +'reports.zedo.com', +'repricebkbakkrxq.download', +'republika.onet.pl', +'req.mojiva.com', +'req.startappexchange.com', +'req.startappservice.com', +'reqpostanza.com', +'request.issuu.com', +'res-x.com', +'res.lazyswipe.com', +'res3.feedsportal.com', +'research-artisan.com', +'research.de.com', +'researchnow.co.uk', +'reseller.hitbox.com', +'resimler.randevum.com', +'resolingvmvkfqrq.download', +'resolvedlyecyduwkv.download', +'resource-marketing.com', +'resources.hitbox.com', +'resources.infolinks.com', +'resources.search.conduit.com', +'resourcs.infolinks.com', +'responder.wt-safetag.com', +'rest.sharethis.com', +'result.wired.com', +'resultanthixic.download', +'resultonline.com', +'retail-affiliates.com', +'retarget.ssl-services.com', +'retargetpro.net', +'retentionscience.com', +'retrostats.com', +'return.bs.domainnamesales.com', +'return.to', +'return.uk.domainnamesales.com', +'rev.adip.ly', +'rev.fapdu.com', +'rev.pornxs.com', +'rev2pub.adk2x.com', +'revadstrk.com', +'revdepo.com', +'revealads.appspot.com', +'revelations.trovus.co.uk', +'revenue.net', +'revenues.go2cloud.org', +'revenues.performancerevenues.com', +'revenueservice.com', +'revlabs.go2cloud.org', +'revmob.com', +'revmobmobileadnetwork.com', +'revolution.ign.us.intellitxt.com', +'revolutiongolf.go2cloud.org', +'revsci.net', +'rewardit.go2cloud.org', +'rewardsflow.com', +'rewardster.com', +'rewqs.com', +'rexmox.com', +'rextk.com', +'rextopia.com', +'rextrk.com', +'rey3935.112.2o7.net', +'rg.yieldoptimizer.com', +'rg1.com', +'rg4.com', +'rg6.com', +'rg7.com', +'rg9.com', +'rgady.voluumtrk.com', +'rgmarket.adspirit.net', +'rgrmarketing.go2cloud.org', +'rgryk.voluumtrk.com', +'rgxzf.voluumtrk.com', +'rhapsodespzamgepzf.download', +'rhodonitexnwpvf.download', +'rhtag.com', +'rhvtt.voluumtrk.com', +'ribbon.india.com', +'rich-agent.s3.amazonaws.com', +'richfind.com', +'richpays.com', +'richwebmaster.com', +'ricinoleicqnvzzrqnk.download', +'ricksticksidperh.download', +'ricor.ru', +'ridiculeojlipf.download', +'rightmedia.com', +'rightonmediagroup.go2cloud.org', +'rightpundits.us.intellitxt.com', +'rightstats.com', +'ringmenbnfkg.download', +'rinsesqpppqbd.download', +'ripenesscamuhceu.download', +'ritogaga.com', +'rivasearch.com', +'rjfjx.voluumtrk.com', +'rjnc0.voluumtrk.com', +'rkaffiliates.go2cloud.org', +'rkq0r.voluumtrk.com', +'rl.heise.de', +'rland.searchlabel.com', +'rlcdn.com', +'rlcxi.voluumtrk.com', +'rleeden.myby.co.uk', +'rll9v.voluumtrk.com', +'rlog-api.under9.co', +'rlog.9gag.com', +'rlyg7.voluumtrk.com', +'rm.yieldmanager.com', +'rm2.adtilt.com', +'rmads.eu.msn.com', +'rmads.msn.com', +'rmatic.go2cloud.org', +'rmbn.ru', +'rmd.atdmt.com', +'rmedia.boston.com', +'rmj9i.voluumtrk.com', +'rmpanelzone.research-int.com', +'rmsurveys.research-int.com', +'rmv.so', +'rnd.yxo.ru', +'rnyp9.voluumtrk.com', +'ro.adocean.pl', +'roadcatalogs.us.intellitxt.com', +'roadmappdigital.go2affise.com', +'roar.com', +'roars.com', +'robotreplay.com', +'rockdirt.us.intellitxt.com', +'rocketfuel.com', +'rockoneinnovations.go2cloud.org', +'rockstaralliance.go2cloud.org', +'rockyou.go2cloud.org', +'rogers.demdex.net', +'roi.mediaplex.com', +'roia.biz', +'roiliernoqgxdj.download', +'roilsqbquh.download', +'roitracker.com', +'romanticfm.2cnt.net', +'romview.atdmt.com.915.9004.302br.net', +'ronaldheft.com', +'roomkey.d1.sc.omtrdc.net', +'rootzwiki.us.intellitxt.com', +'ropnqabtmaths.review', +'roritabo.com', +'rose.ixbt.com', +'rosettastone.tt.omtrdc.net', +'rotabanner.kulichki.net', +'rotate.fncnet1.com', +'rotatix.go2affise.com', +'rotator.nbjmp.com', +'rotator.offpageads.com', +'rotator.tradetracker.nl', +'rotator.trafficstars.com', +'rotrk.com', +'rotunddpgyiagb.download', +'routehero.com', +'router.adlure.net', +'router.tlvmedia.com', +'rovelrpphyrua.download', +'row.bc.yahoo.com', +'rowdyishtnhlgiax.download', +'roxio.112.2o7.net', +'roxionewroxio2006.112.2o7.net', +'royal-cannabis-seeds-nirvanashop.netdna-ssl.com', +'royalmial.112.207.net', +'royalmobi.go2affise.com', +'rp.alcoholsoftcdn.com', +'rp.filefactscdn.com', +'rp.hit.gemius.pl', +'rp.mamamama2.com', +'rpc-php.trafficfactory.biz', +'rpjf.com', +'rpm-images.newrelic.com', +'rpt.cedexis.com', +'rpylvksecants.review', +'rqc3w.voluumtrk.com', +'rr1.outster.com', +'rr1.xxxcounter.com', +'rrglxwvflpropensely.review', +'rrwnt.voluumtrk.com', +'rs-staticart.ybcdn.net', +'rs.epoq.de', +'rs.ero-advertising.com', +'rs.gwallet.com', +'rs0.co.uk', +'rs1.avenuea.com', +'rs2.ero-advertising.com', +'rs4.anti-leech.com', +'rsmrttracking.com', +'rss.dtiserv.com', +'rsvfh.voluumtrk.com', +'rsvjs.voluumtrk.com', +'rt.analytics.anvato.net', +'rt.globo.com', +'rt.liftdna.com', +'rt.prnewswire.com', +'rt.rakuten.co.jp', +'rt01.2cnt.net', +'rt02.2cnt.net', +'rta.dailymail.co.uk', +'rtax.criteo.com', +'rtb-pclick.secure.yahoo.com', +'rtb-pixel-ams1.everesttech.net', +'rtb.nexage.com', +'rtb.watchmedia.biz', +'rtbpop.com', +'rtd.tubemogul.com', +'rtl.2cnt.net', +'rtl.ivwbox.de', +'rtlvtest.2cnt.net', +'rtlvtest1.2cnt.net', +'rtlxl.2cnt.net', +'rtraccoin1.com', +'rtrcoin1.com', +'rtrinstcap1.com', +'rtrk.com', +'rtrpropcoin1.com', +'rts.fling.doublepimp.com', +'rts.lj.doublepimp.com', +'rts.mobula.sdk.duapps.com', +'rtsg.com', +'rtso.divolution.com', +'rtt.campanja.com', +'rtv.2cnt.net', +'rtvhalearn.review', +'ru.redtram.com', +'ru.velti.com', +'ruaft.voluumtrk.com', +'rubanners.com', +'rubicon.admailtiser.com', +'rubulat.justclick.ru', +'rucir.voluumtrk.com', +'ruclicks.com', +'rum-static.pingdom.net', +'rum.monitis.com', +'rum.turbobytes.com', +'run.dts.startappservice.com', +'run.dvdbeats.com', +'run.startappexchange.com', +'run.trackimpression.com', +'rundumsb.ivwbox.de', +'rushbucks.go2cloud.org', +'rushdktwu.download', +'russia1.2cnt.net', +'russia2.2cnt.net', +'rutht.vgzmedia.com', +'rutht.voluumtrk.com', +'rvcjn.voluumtrk.com', +'rvkai.voluumtrk.com', +'rvy2a.voluumtrk.com', +'rvzr-a.akamaihd.net', +'rvzr2-a.akamaihd.net', +'rwbd0.voluumtrk.com', +'rwnkj.voluumtrk.com', +'rxdja.voluumtrk.com', +'ry7c5.directadsopt.com', +'rydium.us.intellitxt.com', +'ryerose.net', +'rygpq.voluumtrk.com', +'ryield.jmp9.com', +'rytj3.voluumtrk.com', +'rzr.tractionize.com', +'s-adserver.cxad.cxense.com', +'s-adserver.sandbox.cxad.cxense.com', +'s-assets.tp-cdn.com', +'s-cs.send.microad.jp', +'s-jsonp.moatads.com', +'s.206ads.com', +'s.2app.lk', +'s.ad120m.com', +'s.ad121m.com', +'s.ad123m.com', +'s.ad124m.com', +'s.ad125m.com', +'s.ad127m.com', +'s.ad129m.com', +'s.ad131m.com', +'s.ad7m.com', +'s.adroll.com', +'s.agava.ru', +'s.amazon-adsystem.com', +'s.arlime.com', +'s.as997.de', +'s.ato.mx', +'s.btstatic.com', +'s.c.appier.net', +'s.click.aliexpress.com', +'s.click.taobao.com', +'s.cpx.to', +'s.dpmsrv.com', +'s.effectivemeasure.net', +'s.ero-advertising.com', +'s.getsmartcontent.com', +'s.gstat.orange.fr', +'s.innovid.com', +'s.ixiaa.com', +'s.jwpltx.com', +'s.ktxtr.com', +'s.luxadv.com', +'s.m2pub.com', +'s.moatads.com', +'s.mobclix.com', +'s.motads.com', +'s.n.jwpltx.com', +'s.ndemiccreations.com', +'s.ntv.io', +'s.o-clk.com', +'s.po.st', +'s.rankdirectory.org', +'s.renren.com', +'s.rev2pub.com', +'s.sharethis.com', +'s.skimresources.com', +'s.ssacdn.com', +'s.tagsrvcs.com', +'s.tcimg.com', +'s.tctm.co', +'s.thebrighttag.com', +'s.tribalfusion.com', +'s.uadx.com', +'s.update.moatads.com', +'s.update.rubiconproject.com', +'s.userzoom.com', +'s.vgsgaming-ads.com', +'s.wnd.com', +'s.xp1.ru4.com', +'s.xpanama.net', +'s.yjtag.jp', +'s.zeroredirect.com', +'s.zeroredirect1.com', +'s.zeroredirect2.com', +'s.zkcdn.net', +'s0.2mdn.net', +'s0.img.awempire.com', +'s01-delivery.addynamo.net', +'s01.flagcounter.com', +'s02.flagcounter.com', +'s02.optimix.asia', +'s03.flagcounter.com', +'s04.flagcounter.com', +'s05.flagcounter.com', +'s06.flagcounter.com', +'s06i.categoria.hpg.com.br', +'s07.flagcounter.com', +'s0s5e.voluumtrk.com', +'s1.2mdn.net', +'s1.freehostedscripts.net', +'s1.img.awempire.com', +'s1.ipicture.ru', +'s1.listrakbi.com', +'s1.mobile-tracking.gfsrv.net', +'s1.rotaban.ru', +'s1.shinystat.com', +'s1.shinystat.it', +'s1.slimtrade.com', +'s1.teknum.com', +'s1.trafficmaxx.de', +'s10.hiadspaces.ero-advertising.com', +'s10.hipaces.ero-advertising.com', +'s10.his.ero-advertising.com', +'s10.hispaces.ero-advertising.com', +'s10.histas.ero-advertising.com', +'s10.histats.com', +'s10.histats.com.ero-advertising.com', +'s10.shinystat.com', +'s10.sitemeter.com', +'s109.cnzz.com', +'s10paces.ero-advertising.com', +'s11.cnzz.com', +'s11.sitemeter.com', +'s12.sitemeter.com', +'s13.sitemeter.com', +'s133d7.virtualxs.com', +'s14.sitemeter.com', +'s15.sitemeter.com', +'s16.sitemeter.com', +'s164.211bs.serving-sys.com.1827.9021.302br.net', +'s17.cnzz.com', +'s17.sitemeter.com', +'s18.sitemeter.com', +'s19.sitemeter.com', +'s2.ads.tradeads.eu', +'s2.focalink.com', +'s2.forumforfree.com', +'s2.img.awempire.com', +'s2.ipicture.ru', +'s2.rotaban.ru', +'s2.shinystat.com', +'s2.shinystat.it', +'s2.socialannex.com', +'s2.statcounter.com', +'s20.sitemeter.com', +'s21.sitemeter.com', +'s2143.t.eloqua.com', +'s22.sitemeter.com', +'s2206i.categoria.hpg.com.br', +'s23.sitemeter.com', +'s24.sitemeter.com', +'s25.sitemeter.com', +'s26.topstat.com', +'s290.meetrics.net', +'s290.mxcdn.net', +'s2s.go2affise.com', +'s2wrw.voluumtrk.com', +'s3-tracking.synthasite.net.s3.amazonaws.com', +'s3.buysellads.com', +'s3.ongsono.com', +'s3.phluant.com', +'s3.shinystat.com', +'s32.research.de.com', +'s361.meetrics.net', +'s383.meetrics.net', +'s3bvd.voluumtrk.com', +'s3mzd.voluumtrk.com', +'s3nit.voluumtrk.com', +'s4.histats.com', +'s4.shinystat.com', +'s4.trafficmaxx.de', +'s48bp.voluumtrk.com', +'s4candroid.2cnt.net', +'s4candroidtest.2cnt.net', +'s4cdotcom.2cnt.net', +'s4cdotcomtest.2cnt.net', +'s4cios.2cnt.net', +'s4ciostest.2cnt.net', +'s4orw.voluumtrk.com', +'s4smedia.go2cloud.org', +'s4snetwork.go2cloud.org', +'s4tac.voluumtrk.com', +'s5.ads.tradeads.eu', +'s5.com', +'s5.histats.com', +'s5.shinystat.com', +'s6.netlogstatic.com', +'s6.shinystat.com', +'s62.research.de.com', +'s6b3m.voluumtrk.com', +'s6hbo.voluumtrk.com', +'s6x7y.voluumtrk.com', +'s7.adaces.ero-advertising.com', +'s7.addthis.com', +'s7.cnzz.com', +'s7.shinystat.com', +'s73.cnzz.com', +'s8.shinystat.com', +'s9.addthis.com', +'s9.shinystat.com', +'s90.cnzz.com', +'s95.research.de.com', +'s9kpd.voluumtrk.com', +'sa-receiver.sematext.com', +'sa.bbc.co.uk', +'sa.seotoaster.com', +'sa.squareup.com', +'sa.windows.com', +'saaronl.ivwbox.de', +'saas.appoxee.com', +'saas.seewhy.com', +'sabela.com', +'sabin.free.fr', +'sact.atdmt.com', +'sad1.adriver.ru', +'sadv.dadapro.com', +'safarids.com', +'safe.net-az83.stream', +'safelinking.net', +'safelinktracker.com', +'safelists.com', +'safetracgr.com', +'salem02.webtrekk.net', +'salescast.real.com', +'salesforcecom.tt.omtrdc.net', +'salesmanager.doubleclick.net', +'sammix.adsame.com', +'samsclub.r.delivery.net', +'sana.newsinc.com', +'sana.newsinc.com.s3.amazonaws.com', +'sand-01.adnxs.com', +'sandbox.outbrain.com', +'sapremium.go2cloud.org', +'sarrazinsxkkkyv.download', +'sassolitesffuzwmv.download', +'sassvodetba.download', +'sat.sanoma.fi', +'sat101.webtrekk.net', +'satgreera.com', +'satyridsochasuzk.download', +'saveology.go2cloud.org', +'savings-galleria.com', +'sax.sina.com.cn', +'saxoniesiqolqoh.download', +'sayhello.popunder.ru', +'saymedia.com', +'sayutracking.co.uk', +'sb.monetate.net', +'sb.scorecardresearch.com', +'sb.sellpoint.net', +'sb.vevo.com', +'sb44a.voluumtrk.com', +'sba.about.co.kr', +'sbdhealth.go2cloud.org', +'sbrjgqeppcarbuncle.review', +'sbs.2cnt.net', +'sbx.pagesjaunes.fr', +'sc-a-lbs.focalink.com', +'sc.ca.us.cddb.com', +'sc.rvtlife.com', +'sc.tradetracker.net', +'sc.tynt.com', +'sc2bg.voluumtrk.com', +'sc5pr.voluumtrk.com', +'sca1.listrakbi.com', +'scarabaeidpiiwuw.download', +'scarthspnckx.download', +'scbl54virared.com', +'sccqbcwwuoerlikon.review', +'scd.secureintl.com', +'scdn.cxense.com', +'schizopodviicvxvtr.download', +'scholasticinc.tt.omtrdc.net', +'schuelvz.ivwbox.de', +'schumacher.adtech.fr', +'sciamglobal.112.2o7.net', +'scleromanongsf.download', +'sclick.baidu.com', +'scluvkzgdowel.review', +'scootloor.com', +'scorecard.wspisp.net', +'scores-brataudit.2cnt.net', +'scores01.2cnt.net', +'scores02.2cnt.net', +'scout.haymarketmedia.com', +'scout.rollcall.com', +'scptn.voluumtrk.com', +'scrappykoko.com', +'scrawliestliopa.download', +'scrawlymecmxobp.download', +'screencapturewidget.aebn.net', +'scribol.com', +'scrippsfoodnet.112.2o7.net', +'script.blamads.com', +'script.crazyegg.com', +'script.footprintlive.com', +'script.ioam.de', +'script.leadboxer.com', +'script.opentracker.net', +'script.tailsweep.com', +'scripts.adrcdn.com', +'scripts.affiliatefuture.com', +'scripts.affilired.com', +'scripts.amateurpin.com', +'scripts.blamads.com', +'scripts.blueadvertise.com', +'scripts.cgispy.com', +'scripts.chitika.net', +'scripts.hellobar.com', +'scripts.insite.com.br', +'scripts.kiosked.com', +'scripts.kissmetrics.com', +'scripts.lycos.com', +'scripts.psyma.com', +'scripts.speedshiftmedia.com', +'scripts.stage.kissmetrics.com', +'scripts.view-ads.de', +'scriptshead.com', +'scrooge.click10.com', +'scrooge.nbc11.com', +'scrooge.nbc4.com', +'scrooge.nbcsandiego.com', +'scrooge.newsnet5.com', +'scrooge.thedenverchannel.com', +'scrooge.theindychannel.com', +'scrooge.wesh.com', +'scrooge.wnbc.com', +'scubajournal.com', +'scytalesezqaxxr.download', +'sd.domob.cn', +'sd.sharethis.com', +'sda.groupspaces.com', +'sdc.ca.com', +'sdc.hns.com', +'sdc.krollontrack.com', +'sdc.mako.co.il', +'sdc.mcafee.com', +'sdk-b.apptornado.com', +'sdk.appbrain.com', +'sdk.justad.mobi', +'sdkm.w.inmobi.com', +'sdr.totango.com', +'sdsbucket.s3.amazonaws.com', +'sdtimes.us.intellitxt.com', +'se.adserver.yahoo.com', +'se.cqcounter.com', +'sea-u.openx.net', +'seacoastonlinecom.112.2o7.net', +'seal.verisign.com', +'search-images.com', +'search-results.com', +'search-results.mobi', +'search-tracker.com', +'search.clicksor.com', +'search.dmtracker.com', +'search.doubleclick.com', +'search.doubleclick.net', +'search.keywordblocks.com', +'search.media.net', +'search.opentext.com', +'search.snap.do', +'search.spotxchange.com', +'search.url.com', +'search.us.com', +'search.vertoz.com', +'searchesinteractive.com', +'searchingresult.com', +'searchinquire.com', +'searchlocate.com', +'searchpeack.com', +'searchproduction.com', +'searchramp.com', +'searchswitch.com', +'searchtracking.leads.com', +'searchwebresults.com', +'searscom.112.2o7.net', +'searsholdings.tt.omtrdc.net', +'seawood.org', +'sebeadmin.justclick.ru', +'sebgomokos.review', +'sebowelarger.review', +'sec.hit.gemius.pl', +'sec.yimg.com', +'secimage.adtech.fr', +'secoptim.com', +'secrets40.com', +'secserv.adtech.de', +'secserv.adtech.fr', +'secure-ads.pictela.net', +'secure-assets.rubiconproject.com', +'secure-au.imrworldwide.com', +'secure-cdn.mplxtms.com', +'secure-dcr.imrworldwide.com', +'secure-ds.serving-sys.com', +'secure-eu.imrworldwide.com', +'secure-gl.imrworldwide.com', +'secure-jp.imrworldwide.com', +'secure-nz.imrworldwide.com', +'secure-uk.imrworldwide.com', +'secure-us.imrworldwide.com', +'secure-za.imrworldwide.com', +'secure.ace-tag.advertising.com', +'secure.adnxs.com', +'secure.adsender.us', +'secure.advertising.com', +'secure.adzerk.net', +'secure.applifier.com', +'secure.asiansluttease.com', +'secure.bidvertiser.com', +'secure.bigfatjuicylesbians.com', +'secure.cpaempire.com', +'secure.download-sponsor.de', +'secure.eloqua.com', +'secure.exoclick.com', +'secure.flashtalking.com', +'secure.footprint.net', +'secure.fortuneaffiliates.com', +'secure.gaug.es', +'secure.ifbyphone.com', +'secure.img-cdn.mediaplex.com', +'secure.leadback.advertising.com', +'secure.livejasmin.com', +'secure.medleyads.com', +'secure.providesupport.com', +'secure.pubdirecte.com', +'secure.quantserve.com', +'secure.redirectportal.com', +'secure.testoxl.com', +'secure.webconnect.net', +'secure.xsrving.com', +'secure128.go2cloud.org', +'secure3.go2cloud.org', +'secureadcenter.com', +'securejoinsite.com', +'securejump.net', +'securemetrics.apple.com', +'securepaths.com', +'securepubads.g.doubleclick.net', +'securestudies.com', +'securetracking2.com', +'secursors.com', +'sedotracker.com', +'sedotracker.de', +'seducemvjbklpqi.download', +'seedingsllobt.download', +'seethisinaction.com', +'seevolution.com', +'seg.sharethis.com', +'sega.go2cloud.org', +'segapi.quantserve.com', +'segment-data.zqtk.net', +'segment-pixel.invitemedia.com', +'segment.com', +'segment.io', +'segments.adap.tv', +'segs.btrll.com', +'seitentipp.com', +'sekindo.co.il', +'sekindo.com', +'select001.adtech.fr', +'select002.adtech.fr', +'select003.adtech.fr', +'select004.adtech.fr', +'self-destructing-email.com', +'self-destructing.com', +'self-destructingemail.com', +'selfdestructing.com', +'selfdestructingemail.com', +'selfdestructingmessage.com', +'selfnetwork.com', +'sellads.eu', +'sem.shopexplorer.com', +'semrush.com', +'send.microad.jp', +'send4fun.com', +'sengreensbaxsovax.download', +'senolati.com', +'senseiproducts.com', +'sensor.org.ua', +'seoproofits.justclick.ru', +'seotoolscentral.com', +'separatingvqeikpmhz.download', +'separtnership.com', +'sergarius.popunder.ru', +'serializedwzrxrhw.download', +'serpanel.com', +'serv.powerofads.com', +'serv0.com', +'serve.adplxmd.com', +'serve.ads.chaturbate.com', +'serve.adsxgm.com', +'serve.joylandcasino.com', +'serve.popads.net', +'serve.traffic-orgy.com', +'serve.vdopia.com', +'serve.williamhill.com', +'serve.williamhill.it', +'serve.williamhillcasino.com.27688.9216.302br.net', +'servecontent.net', +'servedby.adsfactor.net', +'servedby.advertising.com', +'servedby.adxpose.com', +'servedby.blamads.com', +'servedby.eleavers.com', +'servedby.flashtalking.com', +'servedby.flashtalking.com.16508.9069.302br.net', +'servedby.flashtalking.com.16510.9069.302br.net', +'servedby.flashtalking.com.16514.9069.302br.net', +'servedby.flashtalking.com.16516.9069.302br.net', +'servedby.flashtalking.com.16518.9069.302br.net', +'servedby.flashtalking.com.16520.9069.302br.net', +'servedby.flashtalking.com.16521.9069.302br.net', +'servedby.flashtalking.com.16522.9069.302br.net', +'servedby.flashtalking.com.16524.9069.302br.net', +'servedby.flashtalking.com.16525.9069.302br.net', +'servedby.flashtalking.com.16526.9069.302br.net', +'servedby.flashtalking.com.16529.9069.302br.net', +'servedby.flashtalking.com.16530.9069.302br.net', +'servedby.flashtalking.com.23979.9167.302br.net', +'servedby.flashtalking.com.23981.9167.302br.net', +'servedby.flashtalking.com.23983.9167.302br.net', +'servedby.flashtalking.com.23989.9167.302br.net', +'servedby.flashtalking.com.23992.9167.302br.net', +'servedby.flashtalking.com.23993.9167.302br.net', +'servedby.flashtalking.com.23994.9167.302br.net', +'servedby.flashtalking.com.23995.9167.302br.net', +'servedby.flashtalking.com.24000.9167.302br.net', +'servedby.flashtalking.com.24001.9167.302br.net', +'servedby.flashtalking.com.24327.9172.302br.net', +'servedby.flashtalking.com.63355.9124.302br.net', +'servedby.flashtalking.com.63356.9124.302br.net', +'servedby.flashtalking.com.63357.9124.302br.net', +'servedby.flashtalking.com.63358.9124.302br.net', +'servedby.flashtalking.com.63359.9124.302br.net', +'servedby.flashtalking.com.63360.9124.302br.net', +'servedby.flashtalking.com.63362.9124.302br.net', +'servedby.flashtalking.com.63364.9124.302br.net', +'servedby.flashtalking.com.63375.9311.302br.net', +'servedby.flashtalking.com.63376.9311.302br.net', +'servedby.flashtalking.com.63377.9311.302br.net', +'servedby.flashtalking.com.63378.9311.302br.net', +'servedby.flashtalking.com.63379.9311.302br.net', +'servedby.flashtalking.com.63380.9311.302br.net', +'servedby.flashtalking.com.63381.9311.302br.net', +'servedby.flashtalking.com.63382.9311.302br.net', +'servedby.flashtalking.com.63384.9311.302br.net', +'servedby.flashtalking.com.70369.9591.302br.net', +'servedby.flashtalking.com.70370.9591.302br.net', +'servedby.flashtalking.com.70371.9591.302br.net', +'servedby.flashtalking.com.70372.9591.302br.net', +'servedby.flashtalking.com.70373.9591.302br.net', +'servedby.flashtalking.com.70374.9591.302br.net', +'servedby.flashtalking.com.70375.9591.302br.net', +'servedby.flashtalking.com.70376.9591.302br.net', +'servedby.flashtalking.com.70380.9591.302br.net', +'servedby.flashtalking.com.71515.9591.302br.net', +'servedby.flashtalking.com.71516.9591.302br.net', +'servedby.flashtalking.com.71517.9591.302br.net', +'servedby.flashtalking.com.71518.9591.302br.net', +'servedby.flashtalking.com.71519.9591.302br.net', +'servedby.flashtalking.com.71520.9591.302br.net', +'servedby.flashtalking.com.71521.9591.302br.net', +'servedby.flashtalking.com.71522.9591.302br.net', +'servedby.flashtalking.com.71523.9591.302br.net', +'servedby.flashtalking.com.71524.9591.302br.net', +'servedby.flashtalking.com.71525.9591.302br.net', +'servedby.flashtalking.com.71526.9591.302br.net', +'servedby.flashtalking.com.71527.9591.302br.net', +'servedby.flashtalking.com.71528.9591.302br.net', +'servedby.flashtalking.com.71529.9591.302br.net', +'servedby.openxmarket.asia', +'servedby.openxmarket.jp', +'servedby.orbisvideo.com', +'servedby.reviveservers.com', +'servedby1.advertising.com', +'servedby2.advertising.com', +'servedby3.advertising.com', +'servedbyadbutler.com', +'servedbyopenx.com', +'server-au.imrworldwide.com', +'server-br.imrworldwide.com', +'server-by.imrworldwide.com', +'server-de.imrworldwide.com', +'server-dk.imrworldwide.com', +'server-ee.imrworldwide.com', +'server-fi.imrworldwide.com', +'server-fr.imrworldwide.com', +'server-hk.imrworldwide.com', +'server-it.imrworldwide.com', +'server-jp.imrworldwide.com', +'server-lt.imrworldwide.com', +'server-lv.imrworldwide.com', +'server-no.imrworldwide.com', +'server-nz.imrworldwide.com', +'server-oslo.imrworldwide.com', +'server-pl.imrworldwide.com', +'server-ru.imrworldwide.com', +'server-se.imrworldwide.com', +'server-sg.imrworldwide.com', +'server-stockh.imrworldwide.com', +'server-ua.imrworldwide.com', +'server-uk.imrworldwide.com', +'server-us.imrworldwide.com', +'server.adform.net', +'server.adformdsp.net', +'server.cpmstar.com', +'server01.2cnt.net', +'server02.2cnt.net', +'server1.streamsend.com', +'server2.ompinc.com', +'server3.web-stat.com', +'serverfarm.continentads.com', +'serverwatch.de.intellitxt.com', +'servethis.com', +'service-stat.tbn.ru', +'service.adtech.fr', +'service.clicksvenue.com', +'service.maxymiser.net', +'service.sponsorpay.com', +'service.srvmd60.com', +'service.urchin.com', +'service001.adtech.fr', +'service002.adtech.fr', +'service003.adtech.fr', +'service004.adtech.fr', +'service00x.adtech.fr', +'services.adtech.fr', +'services.chartboost.com', +'services.mailermailer.com', +'services.serving-sys.com', +'services.webestools.com', +'services.wes.df.telemetry.microsoft.com', +'services.x-traceur.com', +'services1.adtech.fr', +'servicetick.com', +'serving-sys.com.36659.9244.302br.net', +'serving.adsrevenue.clicksor.net', +'serving.asdrevenue.clicksor.net', +'serving.demo.clicksor.net', +'serving.plexop.net', +'serw.clicksor.com', +'serw.myroitracking.com', +'seselisgqpobnny.download', +'session-tracker.badcreditloans.com', +'sessionm.com', +'seth.avazutracking.net', +'setihome.com', +'seto.createsend.com', +'settings-sandbox.data.microsoft.com', +'settings-win.data.microsoft.com', +'seu.cleverreach.com', +'seventynine.go2cloud.org', +'sevnhcdshops.review', +'sexcount.de', +'sexcounter.com', +'sexinyourcity.com', +'sexlist.com', +'sextracker.com', +'sextube2.bitterstrawberry.com', +'sexy.fling.com', +'sfgybrfoveracting.review', +'sfl.downloadfilesnow.info', +'sfl.erw.downloadfilesnow.info', +'sftp.barb.2cnt.net', +'sftp.clickability.com', +'sftrack.searchforce.net', +'sftwrads.com', +'sfw.adsafeprotected.com', +'sg-ssl.effectivemeasure.net', +'sg.adserver.yahoo.com', +'sg.akamai.startappservice.com', +'sg.c.appier.net', +'sg.d.p.xpanama.net', +'sg.eu-west-1.p.xpanama.net', +'sg.eu.p.xpanama.net', +'sg.geo.p.xpanama.net', +'sg.p.xpanama.net', +'sg.us-east-1.p.xpanama.net', +'sg.us.p.xpanama.net', +'sg.winmobi.me', +'sgcdn.duplomediaas.netdna-cdn.com', +'sgiegeexposture.review', +'sgiz.mobi', +'sgs001.adtech.fr', +'sh.adingo.jp', +'shadu.duba.net', +'share.9cdn.net', +'share.loginradius.com', +'share.pluso.ru', +'shareasale.com', +'shared.9msn.com.au', +'sharemyclick.go2cloud.org', +'shedad.com', +'sheetedgfypgdtws.download', +'shellersyheaefm.download', +'sher.index.hu', +'shfr.hernando.com', +'shield.sitelock.com', +'shiltirs.com', +'shinystat.com', +'shinystat.it', +'shinystat.shiny.it', +'shmonekisot.com', +'shokala.com', +'shoogloomobile.go2affise.com', +'shop.adition.com', +'shop.gnezdo.ru', +'shop.zedo.com', +'shopexplorer.com', +'shopping-udn-com.b.appier.net', +'shopping.dailycamera.com', +'shoppingpartners2.futurenet.com', +'shorte.st', +'show-jp1.c.appier.net', +'show.ctrmanager.com', +'show.textads.lv', +'show.yeabble.com', +'show2.textads.lv', +'showads.pubmatic.com', +'showads1000.pubmatic.com', +'showadsak.pubmatic.com', +'showcount.honest.com', +'showm3.com', +'showroomvip.com', +'showstat.com', +'shtuppingxpacoed.download', +'shufflepointads.go2cloud.org', +'si.2.cqcounter.com', +'si.netmng.com', +'si1.default-homepage-network.com', +'sibylipmxs.download', +'sic-akamai.33across.com', +'sichtbarkeitsindex.de', +'sictalk.com', +'sidebar.angelfire.com', +'sidebar.issuu.com', +'sifyimg.edgesuite.net', +'sifyimg.speedera.net', +'sig.gamerdna.com', +'sigma0.rtb.appier.net', +'sigma1.rtb.appier.net', +'sigma10.rtb.appier.net', +'sigma100.rtb.appier.net', +'sigma11.rtb.appier.net', +'sigma111.rtb.appier.net', +'sigma12.rtb.appier.net', +'sigma126.rtb.appier.net', +'sigma132.rtb.appier.net', +'sigma22.rtb.appier.net', +'sigma23.rtb.appier.net', +'sigma26.rtb.appier.net', +'sigma27.rtb.appier.net', +'sigma51.rtb.appier.net', +'sigma52.rtb.appier.net', +'sigma63.rtb.appier.net', +'sigma67.rtb.appier.net', +'sigma69.rtb.appier.net', +'sigma72.rtb.appier.net', +'sigma73.rtb.appier.net', +'sigma74.rtb.appier.net', +'sigma76.rtb.appier.net', +'sigma79.rtb.appier.net', +'sigma84.rtb.appier.net', +'sigma85.rtb.appier.net', +'sigma89.rtb.appier.net', +'sigma94.rtb.appier.net', +'sigma97.rtb.appier.net', +'signaltrader.go2cloud.org', +'signpost.go2cloud.org', +'signup.clicksor.com', +'siliconaction.com', +'silverpush.com', +'silversol.go2affise.com', +'sim.thetrafficstat.net', +'simg.sinajs.cn', +'simg.zedo.com', +'similezfzycz.download', +'simonsearch.com', +'simpailoppvw.download', +'simplehitcounter.com', +'simpleonlinemedia.go2cloud.org', +'simplistssxshrgh.download', +'simyo.adclear.net', +'sin.ero-advertising.com', +'singaporeair-com.b.appier.net', +'sired.com', +'site-stats.com', +'site-stats.i8.com', +'site-submit.com.ua', +'siteanalyser.yellgroup.com', +'siteauikozph.download', +'sitedirectory.doubleclick.net', +'siteflow.com', +'siteinfo.libero.it', +'siteintercept.qualtrics.com', +'sitelife.ehow.com', +'sitemeter.com', +'siteminer.mycomputer.com', +'siteminer.superstats.com', +'sitepal.com', +'sites.chartboost.com', +'sitesearch.hitbox.com', +'sitesell.com', +'sitestat.com', +'sitestat.hetnet.nl', +'sitestats.com', +'sitestats.tiscali.co.uk', +'sitestatz.com', +'sitetagger.co.uk', +'sitetracker.com', +'sixpackshortcuts.go2cloud.org', +'sj-g-lbs.focalink.com', +'sj1.lenta.ru', +'sj2.lenta.ru', +'sj3.lenta.ru', +'sj4.lenta.ru', +'sjc-g007.us.intellitxt.com', +'sjs.bizographics.com', +'sk.connect2.ws', +'skilljam.com', +'skimlinks.com', +'skinhead.com', +'sklentedjibkmbouo.download', +'skwheunderlines.review', +'skyandroid.2cnt.net', +'skydotcom.2cnt.net', +'skyhookwireless.com', +'skyhorn.com', +'skyios.2cnt.net', +'skyligh.co', +'skype.tt.omtrdc.net', +'skypronz6j.s.ad6media.fr', +'skyrocketingmedia.go2cloud.org', +'sl3tsw6.com', +'slashphone.us.intellitxt.com', +'sleepcartoon.com', +'slfnmzblblowsy.review', +'slfpu.com', +'slimtrade.com', +'slingersdlbrbhjs.download', +'slinse.com', +'sls.go2cloud.org', +'slushingfcikpfvjt.download', +'slzppcgzheuristic.review', +'sm.banner-link.com.br', +'sm.domob.cn', +'sm1.sitemeter.com', +'sm2.sitemeter.com', +'sm3.sitemeter.com', +'sm4.sitemeter.com', +'sm5.sitemeter.com', +'sm6.sitemeter.com', +'sm7.sitemeter.com', +'sm8.sitemeter.com', +'sm9.sitemeter.com', +'sma.punto.net', +'smaato.net', +'smart-ip.net', +'smart.allocine.fr', +'smart.montiera.com', +'smart.theadsnet.com', +'smart2.allocine.fr', +'smartadserver.com', +'smartadv.ru', +'smartbrowse.netster.com', +'smartdevicemedia.com', +'smartdirect.com', +'smarticon.geotrust.com', +'smartmediamarketing.go2cloud.org', +'smartoffer.site', +'smarttracks2.smarttracks.net', +'smarttrk.com', +'smetrics.att.com', +'smetrics.blackberry.com', +'smetrics.comcast.com', +'smetrics.delta.com', +'smetrics.fifa.com', +'smetrics.mcafee.com', +'smetrics.npr.org', +'smetrics.payback.de', +'smetrics.southwest.com', +'smetrics.starwoodhotels.com', +'smetrics.toptenreviews.com', +'smfgroup.cjb.net', +'smilepop.com', +'smirchedsapkthxmy.download', +'smjmp.net', +'smockingbjyvmh.download', +'smoochjmxptj.download', +'smoothedqwcpw.download', +'smoothscrollapp.com', +'smp.adviva.net', +'sms-mmm.com', +'sms.otair.com', +'sms18.in.com', +'smssts.3g.cn', +'smtp.ero-advertising.com', +'smtp.kissmetrics.com', +'smtp.mobpartner.mobi', +'smtp.performancerevenues.com', +'smtp.yeahmobi.com', +'smtp.zedo.com', +'smtrack.go2affise.com', +'smurringdimmv.download', +'smwww.112.2o7.net', +'snapabug.appspot.com', +'snapengage.com', +'snapify.go2cloud.org', +'sndkorea.co.kr', +'sndkorea.nowcdn.co.kr', +'snimi-sam.justclick.ru', +'snowmenwwrotgud.download', +'soa.adition.com', +'soadev.adition.com', +'soaold.adition.com', +'soaperformance.adition.com', +'soastage.adition.com', +'soav1.adition.com', +'soccer.searchwho.com', +'social.msgplus.net', +'social1listnews.com', +'socialize-it.com', +'socialschanche.com', +'socialskive.com', +'sociomantic.com', +'socitm.govmetric.com', +'soclock.com', +'sofa.bankofamerica.com', +'sofia.ai', +'softcash.biz', +'softclick.com.br', +'softcore.xxxcounter.com', +'softlayertechnologie.tt.omtrdc.net', +'softlinkers.popunder.ru', +'softonic.112.2o7.net', +'softonic.us.intellitxt.com', +'softpedia.uk.intellitxt.com', +'software.xoomcounter.com', +'softwares.timesink.com', +'sohh.us.intellitxt.com', +'sokrates.adtech.fr', +'soldi.msn.it', +'solidclix.go2cloud.org', +'solutions.tradedoubler.com', +'solutionswide.go2cloud.org', +'soma.smaato.net', +'somethingawful.us.intellitxt.com', +'somniture.theglobeandmail.com', +'somt.honda.com', +'sony.demdex.net', +'soogiedsoafm.download', +'soothsitlppfwm.download', +'sororiallyfdnstbxp.download', +'sosharpcorporation.go2cloud.org', +'soundadgroup.go2cloud.org', +'soundbeat.go2cloud.org', +'soundslam.us.intellitxt.com', +'sousquywpscd.download', +'southwestairlines.tt.omtrdc.net', +'sovetnik.go2cloud.org', +'sp.analytics.yahoo.com', +'spacash.com', +'spaces.ero-advertising.com', +'spaces.slimspots.com', +'spad.i-mobile.co.jp', +'spade.twitch.tv', +'spanids.reference.com', +'spanksvrfvabcuq.download', +'sparkimg.com', +'sparknetworks.112.2o7.net', +'spc.ceahcdiflefhadbgigaheffe.iban.telemetryverification.net.47289.9351.302br.net', +'spc.cefdfgjcdedhnejehfdekfad.iban.telemetryverification.net.47290.9351.302br.net', +'spc.cegeihmgcfefpedefemeogbe.iban.telemetryverification.net.47544.9351.302br.net', +'spc.cejhbebefgneifcekhfgggff.iban.telemetryverification.net.47287.9351.302br.net', +'spd.atdmt.com', +'spd.atdmt.speedera.net', +'spd.pointroll.com', +'spdeliver.i-mobile.co.jp', +'spdeliverp.i-mobile.co.jp', +'spe.atdmt.com', +'special-news.online', +'specialoffers.aol.com', +'specific-match.dotomi.com', +'specificads.go2affise.com', +'specificmedia.com', +'specificpop.com', +'spectato.com', +'speed.pointroll.com', +'speed4cksa.ero-advertising.com', +'speedclecks.ero-advertising.com', +'speedclicks.ero-advertising.com', +'speedclics.ero-advertising.com', +'speedlicks.ero-advertising.com', +'speednetwork6.adk2x.com', +'speedtrap.shopdirect.com', +'speeuclicks.ero-advertising.com', +'sperse.com', +'spezialreporte.de', +'spicymobile.go2affise.com', +'spiegel.met.vgwort.de', +'spiegel.rce.veeseo.com', +'spin.spinbox.net', +'spinbox.techtracker.com', +'spinbox.versiontracker.com', +'spixel.adsafeprotected.com', +'spixl.ivwbox.de', +'spixlcont.ivwbox.de', +'splash.appsgeyser.com', +'splashpageadvertising.com', +'splatzmmkvu.download', +'splitter.ndsplitter.com', +'sponsorads.de', +'sponsorpay.com', +'sponsors.thoughtsmedia.com', +'sponsors.webosroundup.com', +'sponsorships.net', +'spoods.rce.veeseo.com', +'sport.xoomcounter.com', +'sportingbet-affiliate.host.bannerflow.com', +'sports.ign.us.intellitxt.com', +'spotexchange.com', +'spotlight.accuweather.com', +'spots.ah-me.com', +'spotsniper.ru', +'springboardplatform.com', +'springer02.webtrekk.net', +'sprint.r.delivery.net', +'sprung.go2cloud.org', +'spycash.biz', +'spyhunter-download.s3.amazonaws.com', +'spyingjplnda.download', +'spykemedia.go2cloud.org', +'spylog.com', +'spylog.ru', +'spymac.us.intellitxt.com', +'spynet2.microsoft.com', +'spytrack.tic.ru', +'spyware.homestead.com', +'spywarelabs.com', +'spywarenuker.com', +'sq2trk2.com', +'sql.doublepimp.com', +'sqm.df.telemetry.microsoft.com', +'sqm.telemetry.microsoft.com', +'sqm.telemetry.microsoft.com.nsatc.net', +'squareandcircle.go2affise.com', +'squarenessqyecvdn.download', +'squarespace.evyy.net', +'squashyrsewa.download', +'sr.adrevolver.com', +'src.kitcode.net', +'srf.wemfbox.ch', +'sronline.ivwbox.de', +'srs.targetpoint.com', +'srv-2015-01-12-10.pixel.parsely.com', +'srv.admailtiser.com', +'srv.buysellads.com', +'srv.clickfuse.com', +'srv.de.ebayrtm.com', +'srv.dynamicyield.com', +'srv.nwave.de', +'srv.sayyac.net', +'srv.tonefuse.com', +'srv.tyroodr.com', +'srv1.bannercommunity.de', +'srv18.xmediaserve.com', +'srv2cnt.2cnt.net', +'srv2cnt2.2cnt.net', +'srv2trking.com', +'srv3.adnetworkme.com', +'srv3.bannercommunity.de', +'srv6.admedit.me', +'srv6.mobpedia.com', +'srvjs.media.net', +'srvpub.com', +'srx.at.ebayrtm.com', +'srx.au.ebayrtm.com', +'srx.befr.ebayrtm.com', +'srx.benl.ebayrtm.com', +'srx.ca.ebayrtm.com', +'srx.cafr.ebayrtm.com', +'srx.ch.ebayrtm.com', +'srx.de.ebayrtm.com', +'srx.es.ebayrtm.com', +'srx.fr.ebayrtm.com', +'srx.ie.ebayrtm.com', +'srx.in.ebayrtm.com', +'srx.it.ebayrtm.com', +'srx.main.ebayrtm.com', +'srx.nl.ebayrtm.com', +'srx.pl.ebayrtm.com', +'srx.sg.ebayrtm.com', +'srx.uk.ebayrtm.com', +'ss.c.appier.net', +'ss.linksynergy.com', +'ss.tiscali.it', +'ss.xxxnavy.com', +'ss2.zedo.com', +'ssangyong.co.il', +'sscdn.banners.advidi.com', +'ssdk.adkmob.com', +'ssh.kissmetrics.com', +'sshowads.pubmatic.com', +'ssi.go2cloud.org', +'ssl-i.2cnt.net', +'ssl-munchkin.marketo.net', +'ssl-offloader.2cnt.net', +'ssl-static.vinsight.de', +'ssl-stats.wordpress.com', +'ssl-stumbleupon-com-ded5f3.c-col.com', +'ssl-test.2cnt.net', +'ssl-vg03.met.vgwort.de', +'ssl-vpn.cutterbuck.com', +'ssl-vznetzme.ivwbox.de', +'ssl-vznetzst.ivwbox.de', +'ssl-youtube.2cnt.net', +'ssl.clickbank.net', +'ssl.google-analytics.com', +'ssl.linksynergy.com', +'ssl.luckyorange.com', +'ssl.safepoollink.com', +'ssl.webserviceaward.com', +'ssl.xplosion.de', +'sslad.adcash.com', +'ssljscdn.airbrake.io', +'sso.conduit.com', +'ssp.sellads.me', +'sstatic1.histats.com', +'sstats.adobe.com', +'sstats.economist.com', +'ssum-sec.casalemedia.com', +'sszomsa.imdrv.net', +'st-ops.stage.adition.com', +'st.a-link.co.kr', +'st.bebi.com', +'st.blogads.com', +'st.dynamicyield.com', +'st.ladycash.ru', +'st.listrak.com', +'st.madisonlogic.com', +'st.magnify.net', +'st.mirror.co.uk', +'st.pay-click.ru', +'st.pc.adonweb.ru', +'st.penis-size.net', +'st.shinobi.jp', +'st.wetrack.it', +'st.xhamster.com', +'st1.freeonlineusers.com', +'st2-img.recreativ.ru', +'st2.xhamster.com', +'st3.xhamster.com', +'st4.xhamster.com', +'st5.surf-town.net', +'sta.ifeng.com', +'stadig.ifeng.com', +'stadtbremerhaven.digidip.net', +'staffpicks.outbrain.com', +'stag.tivinci.com', +'stage.alphagirlz.mobi', +'stage.ap1.alphagirlz.mobi', +'stage.ap2.alphagirlz.mobi', +'stage.hitbox.com', +'stage.traffiliate.com', +'stage102.hitbox.com', +'stage39media.go2cloud.org', +'staging-beacon-1.newrelic.com', +'staging-goldcrown.linkshare.com', +'staging-hallmark.linkshare.com', +'staging.50onred.com', +'staging.adition.com', +'staging.luckyorange.com', +'staging.rts.doublepimp.com', +'staging.rts.phn.doublepimp.com', +'staging.streamate.doublepimp.com', +'stags.bluekai.com', +'staples.tt.omtrdc.net', +'star.pulseonclick.com', +'starchedlyyvlbyt.download', +'stare.adrevolver.com', +'stargamesaffiliate.com', +'starsads.com', +'start.freeze.com', +'start.xxxcounter.com', +'startapp.com', +'startapp.go2cloud.org', +'startappexchange.com', +'starwoodhotelsandres.tt.omtrdc.net', +'stat.4u.pl', +'stat.acca.it', +'stat.adlabs.ru', +'stat.appsgeyser.com', +'stat.caijing.com.cn', +'stat.clichehosting.de', +'stat.cybermonitor.com', +'stat.dealtime.com', +'stat.flashtalking.com', +'stat.freetool.it', +'stat.funshion.net', +'stat.gw.youmi.net', +'stat.hudong.com', +'stat.info-stream.net', +'stat.iteye.com', +'stat.mtv3.fi', +'stat.nebula168.com', +'stat.onestat.com', +'stat.pl', +'stat.ppstream.com', +'stat.prsmedia.fr', +'stat.ringier.cz', +'stat.ringier.sk', +'stat.rum.cdnvideo.ru', +'stat.ruvr.ru', +'stat.segitek.hu', +'stat.simba.taobao.com', +'stat.tianya.cn', +'stat.tvigle.ru', +'stat.uptodown.com', +'stat.uuu9.com', +'stat.vidcore.tv', +'stat.web-regie.com', +'stat.webmedia.pl', +'stat.webtrack.biz', +'stat.www.fi', +'stat.zenon.net', +'stat.zol.com.cn', +'stat1.vipstat.com', +'stat1.z-stat.com', +'stat2.cybermonitor.com', +'stat24.meta.ua', +'stat3.cybermonitor.com', +'stat4.edev.at', +'statcollector.sidearmsports.com', +'statcounter.com', +'statdb.pressflex.com', +'stateresolver.link', +'stathat.com', +'static-analytics.nativeads.com', +'static-cdn.anetwork.ir', +'static-rtb.adkernel.com', +'static-trackers.adtarget.me', +'static-www.ec.popcap.com', +'static.2mdn.net', +'static.3-mobiappu.com', +'static.acs86.com', +'static.addinto.com', +'static.addynamo.net', +'static.adfarm1.adition.com', +'static.ads.crakmedia.com', +'static.adsafeprotected.com', +'static.adsender.us', +'static.adsnative.com', +'static.adzerk.net', +'static.adziff.com', +'static.affilae.com', +'static.akamai.startappexchange.com', +'static.alimama.com', +'static.ap.bittorrent.com', +'static.app.widdit.com', +'static.application-77my.com', +'static.appwatch.com', +'static.atdmt.com.24293.9170.302br.net', +'static.atdmt.com.24299.9170.302br.net', +'static.atdmt.com.24492.9179.302br.net', +'static.atdmt.com.24495.9179.302br.net', +'static.atdmt.com.67997.9528.302br.net', +'static.atdmt.com.68423.9546.302br.net', +'static.atdmt.com.75273.9615.302br.net', +'static.atomload.at', +'static.audienceinsights.net', +'static.awempire.com', +'static.bannerbank.ru', +'static.beintoo.com', +'static.chartbeat.com', +'static.chartboost.com', +'static.clickpapa.com', +'static.clixsense.com', +'static.clmbtech.com', +'static.contactme.com', +'static.crakbanner.com', +'static.criteo.com', +'static.criteo.net', +'static.csbew.com', +'static.dcoengine.com', +'static.digidip.net', +'static.doubleclick.com', +'static.doubleclick.net', +'static.doubleclick.net.12022.9038.302br.net', +'static.doubleclick.net.12026.9038.302br.net', +'static.doubleclick.net.12035.9038.302br.net', +'static.doubleclick.net.12467.9038.302br.net', +'static.doubleclick.net.30351.9240.302br.net', +'static.doubleclick.net.36066.9275.302br.net', +'static.doubleclick.net.37659.9298.302br.net', +'static.doubleclick.net.37674.9298.302br.net', +'static.doubleclick.net.40322.9309.302br.net', +'static.doubleclick.net.51235.9318.302br.net', +'static.doubleclick.net.51253.9318.302br.net', +'static.doubleclick.net.67594.9515.302br.net', +'static.doubleclick.net.76539.9544.302br.net', +'static.eplayer.performgroup.com', +'static.estebull.com', +'static.etracker.com', +'static.everyone.net', +'static.everyplay.com', +'static.exoclick.com', +'static.firstmobilecash.com', +'static.fmpub.net', +'static.fragbite.com', +'static.freewebs.getclicky.com', +'static.getclicky.com', +'static.getkudos.me', +'static.groupon.co.uk', +'static.hoptopboy.com', +'static.hotjar.com', +'static.htmlhubing.xyz', +'static.hubspot.com', +'static.hupso.com', +'static.ifa.camads.net', +'static.it.groupon-content.net', +'static.itrack.it', +'static.kameleoon.com', +'static.kinghost.com', +'static.kinley.com', +'static.l3.cdn.adbucks.com', +'static.live2delivery.com', +'static.livejasmin.com', +'static.mailchimp.com', +'static.manwin.doublepimp.com', +'static.matchnet.com', +'static.mb89-live.com', +'static.mediav.com', +'static.mmotraffic.com', +'static.mobilecore.com', +'static.ngbn.net', +'static.nrelate.com', +'static.parse.ly', +'static.parsely.com', +'static.plista.com', +'static.plugrush.com', +'static.promo2.tubemogul.com.1748.9016.302br.net', +'static.pubdirecte.com', +'static.resetamobil.com', +'static.rpxnow.com', +'static.rts.doublepimp.com', +'static.rts.phn.doublepimp.com', +'static.salesresourcepartners.com', +'static.serving-sys.com.47157.9349.302br.net', +'static.shiltirs.com', +'static.slfpu.com', +'static.smsac.net.edgesuite.net', +'static.streamate.doublepimp.com', +'static.styria-digital.com', +'static.t4btv.com', +'static.teasermedia.net', +'static.theadex.com', +'static.thumbr.com', +'static.tradetracker.net', +'static.traffe.eu', +'static.trafficjunky.net', +'static.uolcontent.com', +'static.verticalscope.com', +'static.vinsight.de', +'static.vpptechnologies.com', +'static.whoopalook.com', +'static.xpct.de', +'static.yieldmo.com', +'static.zangocash.com', +'static.zanox.com', +'static.zedo.com', +'static.ziffdavis.com', +'static0.awempire.com', +'static1.awempire.com', +'static1.baifendian.com', +'static2.amateurpin.net', +'static2.chartbeat.com', +'staticadm.leju.sina.com.cn', +'staticads.btopenworld.com', +'staticrr.paleokits.net', +'staticrr.sslsecure1.com', +'statistic.qzone.qq.com', +'statistics.crowdynews.com', +'statistics.infowap.info', +'statistics.rbi-nl.com', +'statistics.tattermedia.com', +'statistics.wibiya.com', +'statistik-gallup.net', +'statistik.simaja.de', +'statm.the-adult-company.com', +'statonly.com', +'stats-ec2-46-137-101-227.layar.com', +'stats.aatrk.com', +'stats.adobe.com', +'stats.adotube.com', +'stats.adsender.us', +'stats.adspaces.ero-advertising.com', +'stats.adultplex.com', +'stats.adultrevenueservice.com', +'stats.applifier.com', +'stats.appsgeyser.com', +'stats.ars4real.com', +'stats.avg.com', +'stats.bbc.co.uk', +'stats.betradar.com', +'stats.binki.es', +'stats.bitgravity.com', +'stats.blogg.se', +'stats.blogger.com', +'stats.bmw.de', +'stats.buysellads.com', +'stats.cashring.com', +'stats.cdn.pfn.bz', +'stats.channel4.com', +'stats.cheatscodesguides.com', +'stats.christianpost.com', +'stats.clear-media.com', +'stats.clickability.com', +'stats.clickforknowledge.com', +'stats.clicktracks.com', +'stats.computecmedia.de', +'stats.comunio.de', +'stats.coolwebsearch.com', +'stats.coronalabs.com', +'stats.cts-bv.nl', +'stats.cubi.me', +'stats.dallasnews.com', +'stats.data2.ero-advertising.com', +'stats.digital-natives.de', +'stats.directnic.com', +'stats.distributed.net', +'stats.dlx-media.com', +'stats.ebay.com', +'stats.empowher.com', +'stats.ero-advertising.com', +'stats.esomniture.com', +'stats.espncricinfo.com', +'stats.examiner.com', +'stats.fastcompany.com', +'stats.fileplanet.com', +'stats.fittkaumaass.de', +'stats.frankfurterneuepresse.de', +'stats.g.doubleclick.net', +'stats.gammacash.com', +'stats.gbvanalytics.com', +'stats.geegain.com', +'stats.gohip.com', +'stats.greenpixels.com', +'stats.grok.se', +'stats.groupninetyfour.com', +'stats.harpercollins.com', +'stats.hickoryfarms.com', +'stats.highwire.com', +'stats.hitbox.com', +'stats.homestead.com', +'stats.homestead.net', +'stats.hosting24.com', +'stats.ilius.net', +'stats.immense.net', +'stats.inergizedigitalmedia.com', +'stats.inter-it.nl', +'stats.irishmirror.ie', +'stats.itsol.it', +'stats.iwebtrack.com', +'stats.justad.mobi', +'stats.justin.tv', +'stats.kaltura.com', +'stats.lnol.com.ar', +'stats.macmillanusa.com', +'stats.mako.co.il', +'stats.manticoretechnology.com', +'stats.matomy.com', +'stats.maximumcash.com', +'stats.metacount.com', +'stats.miarroba.info', +'stats.milenio.com', +'stats.mirror.co.uk', +'stats.nascar.com', +'stats.net', +'stats.netbopdev.co.uk', +'stats.netnorth.co.uk', +'stats.nomade.fr', +'stats.norton.com', +'stats.nutritiondata.com', +'stats.orangemail.orange.fr', +'stats.ourstats.de', +'stats.outster.com', +'stats.partypoker.com', +'stats.paste2.org', +'stats.paycounter.com', +'stats.pflexads.com', +'stats.piaggio.com', +'stats.pingdom.com', +'stats.polldaddy.com', +'stats.popcap.com', +'stats.popuptraffic.com', +'stats.profileponds.com', +'stats.propublica.org', +'stats.pusher.com', +'stats.rcsobjects.it', +'stats.remoteserver.pw', +'stats.sawlive.tv', +'stats.scholastic.com', +'stats.sextracker.com', +'stats.sharenet.co.za', +'stats.shoppydoo.com', +'stats.sitegauge.bizland.com', +'stats.sitesuite.org', +'stats.skyhookwireless.com', +'stats.skyhorn.com', +'stats.slideshare.net', +'stats.smartbucks.com', +'stats.smartclip.net', +'stats.speedclicks.ero-advertising.com', +'stats.storify.com', +'stats.superstats.com', +'stats.superstats.de', +'stats.superstats.nl', +'stats.surf-town.net', +'stats.technopia.it', +'stats.teledyski.info', +'stats.tubemogul.com', +'stats.united-domains.de', +'stats.unity3d.com', +'stats.uswitch.com', +'stats.valaffiliates.com', +'stats.vertriebsassistent.de', +'stats.viddler.com', +'stats.virtuemart.net', +'stats.walesonline.co.uk', +'stats.warenform.de', +'stats.webnext.com', +'stats.webs.com', +'stats.webstarts.com', +'stats.wired.com', +'stats.wittyfeed.com', +'stats.wordpress.com', +'stats.wp.com', +'stats.wwd.com', +'stats.www.ibm.com', +'stats0.one.ru', +'stats1.clicktracks.com', +'stats1.one.ru', +'stats1.porntrack.com', +'stats1.tune.pk', +'stats1x1.kapaza.be', +'stats2.algo.at', +'stats2.clicktracks.com', +'stats2.one.ru', +'stats2.porntrack.com', +'stats3.porntrack.com', +'stats4.porntrack.com', +'stats4you.com', +'statsadv.dadapro.com', +'statsdev.treesd.com', +'statse.webtrendslive.com', +'statt-collect.herokuapp.com', +'stattds.club', +'stattrax.com', +'statuncore.com', +'status.kissmetrics.com', +'statystyki.panelek.com', +'statz.123ads.nl', +'stbt.coupons.com', +'stcb.admailtiser.com', +'stcollection.moneysupermarket.com', +'steakafka.pro', +'stepank.justclick.ru', +'stepstone.112.2o7.net', +'ster.2cnt.net', +'stern.met.vgwort.de', +'sternvtest.2cnt.net', +'stiltyulrmms.download', +'stiriprotv.2cnt.net', +'storage.cloud.kargo.com', +'storage.conduit.com', +'storage.creative-mobile.com', +'storage.outbrain.com', +'storage.psstgccint.com', +'store.greatdealnews.com', +'store.lavasoft.com', +'storedsearch.com', +'storewidget.pcauthority.com.au', +'storm.applifier.com', +'straightschool.com', +'strategy.com', +'stratoshear.go2cloud.org', +'stream.aff-id.com', +'stream.tribeca.vidavee.com', +'stream4u.me', +'streamagent.sensic.net', +'streamcastnetworks.com', +'streaming-illimite5.com', +'stretchywrrbzwg.download', +'strikeadcdn.s3.amazonaws.com', +'strk.enlnks.com', +'strookepvwkv.download', +'stroutstlwvrss.download', +'strtrk.go2cloud.org', +'struct.nt-com.co', +'stubbierrjdassboo.download', +'studio.doubleclick.com', +'studio.doubleclick.net', +'studivz.adfarm1.adition.com', +'stun.xpanama.net', +'stuntoffer.com', +'stuttest.ivwbox.de', +'stvdotcom.2cnt.net', +'stvdotcomtest.2cnt.net', +'stx.banners.sextracker.com', +'stx.sextracker.com', +'stx0.sextracker.com', +'stx1.sextracker.com', +'stx10.sextracker.com', +'stx11.sextracker.com', +'stx12.sextracker.com', +'stx13.sextracker.com', +'stx14.sextracker.com', +'stx15.sextracker.com', +'stx16.sextracker.com', +'stx2.sextracker.com', +'stx3.sextracker.com', +'stx4.sextracker.com', +'stx5.sextracker.com', +'stx6.sextracker.com', +'stx7.sextracker.com', +'stx8.sextracker.com', +'stx9.sextracker.com', +'stxbans.sextracker.com', +'style2.ad6.fr', +'su.addthis.com', +'su600.com', +'subchanterpjiyqc.download', +'subeditorsoqltcxf.download', +'subfuscsoweaucss.download', +'submitexpress.co.uk', +'subs.flixhangar.com', +'subsoilsolvhikahb.download', +'success.act-on.com', +'success123.com', +'successalert.com', +'successetc.go2cloud.org', +'sueddeut.ivwbox.de', +'suez.xpanama.net', +'sugar.gameforge.com', +'suggest.infospace.com', +'sugoicounter.com', +'sun3xani.justclick.ru', +'suncom.112.2o7.net', +'suncountryair.com', +'sunglobal.112.2o7.net', +'sunnssgybqn.download', +'sunonesearch.112.2o7.net', +'sunopenoffice.112.2o7.net', +'suo.lp.mydas.mobi', +'superadmin.adition.com', +'superfish.com', +'superloofy.com', +'superprofit.justclick.ru', +'supersonicads.com', +'superstats.com', +'superstats.de', +'superstats.nl', +'supertop100.com', +'supply.upjers.com', +'support.crittercism.com', +'support.hasoffers.com', +'support.kissmetrics.com', +'support.leadbolt.com', +'support.mobpartner.com', +'support.publicrand.org', +'support.skyhookwireless.com', +'surebaby.us.intellitxt.com', +'surehits.com', +'sureonlinefind.com', +'sureseeker.com', +'surezilla.go2cloud.org', +'surfers.ro', +'surfingprizes.com', +'surgelesssomdpninp.download', +'survey.112.2o7.net', +'survey.122.2o7.net', +'survey.com-annualsurvey.info', +'survey.foreseeresults.com', +'survey.g.doubleclick.net', +'survey.interquest.com', +'survey.ivwbox.de', +'surveyfocus.com', +'surveylogix.com', +'surveymanager.com', +'surveynetworks.com', +'surveys.cnet.com', +'surveysavvy.com', +'susi.adtech.fr', +'suthome.com', +'suvinleo.justclick.ru', +'svast.moatads.com', +'svastx.moatads.com', +'svc-analytics.adkernel.com', +'svpro7.oewabox.at', +'svr1.unicaondemand.com', +'svsub.com', +'swa.demdex.net', +'swag.go2cloud.org', +'swaggeredvflzknyhf.download', +'sweeneyxuumfdw.download', +'sweepstakes.com', +'sweetpacks.go2cloud.org', +'swellisholupo.download', +'swift.com', +'swimsuitnetwork.com', +'switch.atdmt.com', +'switch.atdmt.net', +'swww.sc.pages02.net', +'swx.domob.cn', +'sx.thrnt.com', +'syllabusqhlloohss.download', +'symantec.tt.omtrdc.net', +'sympmsnsports.112.2o7.net', +'synad.nuffnang.com.my', +'synad2.nuffnang.com.my', +'synad2.nuffnang.com.ph', +'sync.1rx.io', +'sync.adap.tv', +'sync.adaptv.advertising.com', +'sync.go.sonobi.com', +'sync.mathtag.com', +'sync.mookie1.cn', +'sync.teads.tv', +'syndicate.payloadz.com', +'syndicate.powerofads.com', +'syndication-evo.exoclick.com', +'syndication.adlandmark.com', +'syndication.cntrafficpro.com', +'syndication.dtcn.com', +'syndication.exoclick.com', +'syndication.globaltraffico.com', +'syndication.jobthread.com', +'syndication.loganmueller.info', +'syndication.openapi.naver.com', +'syndication.teleborsa.it', +'syndication.theguardian.com', +'syndication.traffichaus.com', +'syndication.universalnightlife.com', +'syndication.voodoo.com', +'syndication1.traffichaus.com', +'synergetic.de', +'synthes.vo.llnwd.net', +'sys.itop.cz', +'sys.osttirol-online.at', +'sysprobs.us.intellitxt.com', +'system.picreel.com', +'systemmonitoring.badgeville.com', +'sz.met.vgwort.de', +'sz.track4.com', +'t-ak.hulu.com', +'t-krone.2cnt.net', +'t-krone.oewabox.at', +'t-oewa.2cnt.net', +'t-online.de.intellitxt.com', +'t-orf.2cnt.net', +'t-staging.powerreviews.com', +'t.9gag.com', +'t.acxiom-online.com', +'t.adonly.com', +'t.afftrackr.com', +'t.appsflyer.com', +'t.atdmt.com', +'t.bimvid.com', +'t.channeladvisor.com', +'t.cpa37.com', +'t.cqq5id8n.com', +'t.dailymail.co.uk', +'t.devnet.com', +'t.dgm-au.com', +'t.dtscout.com', +'t.eharmony.com', +'t.extreme-dm.com', +'t.flux.com', +'t.formalyzer.com', +'t.frtyi.com', +'t.hypers.com.cn', +'t.insigit.com', +'t.irtya.com', +'t.ivwbox.de', +'t.jobthread.com', +'t.ktxtr.com', +'t.leadlander.com', +'t.leady.com', +'t.locpub.com', +'t.mdn2015x1.com', +'t.mdn2015x2.com', +'t.menepe.com', +'t.ml00.net', +'t.mobilediva.com', +'t.mobitrk.com', +'t.mookie1.com', +'t.mpire.nxus.mobi', +'t.mplxtms.com', +'t.mtagmonetizationa.com', +'t.mtagmonetizationb.com', +'t.myfuncards.com', +'t.myvisualiq.net', +'t.nxus.mobi', +'t.p.mybuys.com', +'t.paypal.com', +'t.pointroll.com', +'t.powerreviews.com', +'t.qservz.com', +'t.searchelper.com', +'t.searchhelper.com', +'t.sf14g.com', +'t.skimresources.com', +'t.thetrafficstat.net', +'t.trackalyzer.com', +'t.trackedlink.net', +'t.trafficninjas.co', +'t.unbounce.com', +'t.update.moatads.com', +'t.webtracker.jp', +'t.wowanalytics.co.uk', +'t.wowtrk.com', +'t.ymlp275.net', +'t.zedo.com', +'t.zeroredirect.com', +'t.zeroredirect1.com', +'t.zeroredirect2.com', +'t0.c.appier.net', +'t0.extreme-dm.com', +'t0.formalyzer.com', +'t0.leadlander.com', +'t0.trackalyzer.com', +'t01.rbnt.org', +'t02.rbnt.org', +'t03.rbnt.org', +'t04.rbnt.org', +'t05.rbnt.org', +'t06.rbnt.org', +'t07.rbnt.org', +'t08.rbnt.org', +'t09.rbnt.org', +'t1.extreme-dm.com', +'t1.formalyzer.com', +'t1.leadlander.com', +'t1.stormcontainertag.com', +'t1.trackalyzer.com', +'t10.rbnt.org', +'t2.formalyzer.com', +'t2.hulu.com', +'t2.huluim.com', +'t2.junbi-tracker.com', +'t2.leadlander.com', +'t2.trackalyzer.com', +'t3.formalyzer.com', +'t3.leadlander.com', +'t3.trackalyzer.com', +'t3q7af0z.com', +'t4.formalyzer.com', +'t4.leadlander.com', +'t4.trackalyzer.com', +'t4ft.de', +'t5.formalyzer.com', +'t5.leadlander.com', +'t5.trackalyzer.com', +'t5.wrating.com', +'t6.formalyzer.com', +'t6.leadlander.com', +'t6.trackalyzer.com', +'t7.formalyzer.com', +'t7.leadlander.com', +'t7.trackalyzer.com', +'t8.formalyzer.com', +'t8.leadlander.com', +'t8.trackalyzer.com', +'t9.formalyzer.com', +'t9.leadlander.com', +'t9.trackalyzer.com', +'ta.demdex.net', +'tabligheirani.com', +'taboola.com', +'tackledoyuzsfx.download', +'tag.120ask.com', +'tag.163.com', +'tag.adip.ly', +'tag.bounceexchange.com', +'tag.contextweb.com', +'tag.crsspxl.com', +'tag.email-attitude.com', +'tag.gstat.orangeportails.net', +'tag.myplay.com', +'tag.researchnow.com', +'tag.shopping-feed.com', +'tag.shopping-flux.com', +'tag.sitescout.com', +'tag.tlvmedia.com', +'tag.wigetmedia.com', +'tag.yakarouler.com', +'tag.yieldoptimizer.com', +'tag.zhupiter.com', +'tagcash.com', +'tagcontainer.arvato-e.com', +'tagjunction.com', +'tags-cdn.deployads.com', +'tags-eu.tiqcdn.com', +'tags.1001spiele.de', +'tags.api.umbel.com', +'tags.bkrtx.com', +'tags.bluekai.com', +'tags.chitika.net', +'tags.compuhot.com', +'tags.crwdcntrl.net', +'tags.expo9.exponential.com', +'tags.go2cloud.org', +'tags.grajteraz.pl', +'tags.h12-media.com', +'tags.jiwire.com', +'tags.liveperson.net', +'tags.master-perf-tools.com', +'tags.mathtag.com', +'tags.mediaforge.com', +'tags.msnbc.com', +'tags.news.com.au', +'tags.pixnet.net', +'tags.topshareware.com', +'tags.toroadvertising.com', +'tagx.nytimes.com', +'tajs.qq.com', +'take5.real.com', +'takyake.ru', +'talesoftheslayer.bravejournal.com', +'talkcity.realtracker.com', +'talkingdata.com', +'talkingdata.net', +'tantella.com', +'tantrack.info', +'tanzanite.infomine.com', +'tap-cdn.rubiconproject.com', +'tap-secure.rubiconproject.com', +'tap.more-results.net', +'tap.rubiconproject.com', +'tap2-cdn.rubiconproject.com', +'tapad.com', +'tapenowmskndjn.download', +'tapestry.tapad.com', +'tapfiliate.com', +'tapgen.com', +'tapit.com', +'tapit.go2cloud.org', +'tapjoy.com', +'tapjoy.go2cloud.org', +'tapjoyads.com', +'taplytics.com', +'tapone.jp', +'tappx.go2affise.com', +'tapsense.com', +'targad.com', +'target-talent.com', +'target.122.2o7.net', +'target.untd.com', +'target.zedo.com', +'targetclick.com', +'targetnet.com', +'targetpoint.com', +'targetspot.com', +'tarifliste.com', +'tarrinc.go2cloud.org', +'tarsan.go2affise.com', +'tasks.kissmetrics.com', +'tasseledalcktk.download', +'tassellingnmwczavi.download', +'tasteguru.go2cloud.org', +'tatango.com', +'tayppqgouaches.review', +'tbe.tom.ru', +'tbgilthmonticulus.review', +'tbl.tradedoubler.com', +'tbm.go2cloud.org', +'tbws.shopathome.com', +'tbws64.shopathome.com', +'tc.freehostedscripts.net', +'tc.tradetracker.net', +'tc.tradetracker.nl', +'tchibo02.webtrekk.net', +'tchibo03.webtrekk.net', +'tchibo04.webtrekk.net', +'tchibo05.webtrekk.net', +'tchibo06.webtrekk.net', +'tchibo07.webtrekk.net', +'tchibo08.webtrekk.net', +'tchibo09.webtrekk.net', +'tcm.optica.ero-advertising.com', +'tcmagazine.uk.intellitxt.com', +'tcr.tynt.com', +'tcr111.tynt.com', +'td.demdex.net', +'tdeiggbfmetamers.review', +'tds.clicks2count.com', +'tds41.bestdeals.at', +'tds42.bestdeals.at', +'tds43.bestdeals.at', +'tds44.bestdeals.at', +'tds45.bestdeals.at', +'tds46.bestdeals.at', +'tds47.bestdeals.at', +'tds48.bestdeals.at', +'tds49.bestdeals.at', +'tds50.bestdeals.at', +'tds51.bestdeals.at', +'tds52.bestdeals.at', +'tds53.bestdeals.at', +'tds54.bestdeals.at', +'tds55.bestdeals.at', +'tds56.bestdeals.at', +'tds57.bestdeals.at', +'tds58.bestdeals.at', +'tds59.bestdeals.at', +'tds60.bestdeals.at', +'tdstats.com', +'te.adlandpro.com', +'te.thestar.ca', +'te.thestar.com', +'te.versiontracker.com', +'teachscape.vo.llnwd.net', +'teasermedia.net', +'teasernet.com', +'tebadu.com', +'tecchannel.de.intellitxt.com', +'tech.leadbolt.com', +'techexpress.home.mindspring.com', +'techmarkaffi.go2cloud.org', +'technewsworld.us.intellitxt.com', +'technology.searchwho.com', +'techreview.112.2o7.net', +'techspot.us.intellitxt.com', +'techtalks.enigma.revenuewire.net', +'techtalks.paretologic.revenuewire.net', +'techtracker.com', +'ted.dailymail.co.uk', +'ted.metro.co.uk', +'teenrevenue.com', +'tegulaenasqffvn.download', +'teilsidhobehqy.download', +'teknosurf3.com', +'telecommand.telemetry.microsoft.com', +'telekom01.webtrekk.net', +'telekom02.webtrekk.net', +'telemetry.appex.bing.net', +'telemetry.microsoft.com', +'telemetry.soundcloud.com', +'telemetry.urs.microsoft.com', +'telenor.112.2o7.net', +'telenorstartsiden.112.2o7.net', +'television.searchwho.com', +'telstra.imrworldwide.com', +'temp.adzerver.com', +'temperersgelvhakyk.download', +'tempest.services.disqus.com', +'template.aebn.net', +'tenantrymishdg.download', +'tenlokif.com', +'tennae880interyield.jmp9.com', +'tennessean.us.intellitxt.com', +'tenzero.com', +'tenzing.fmpub.net', +'terms.reporo.net', +'terra.demdex.net', +'terraclicks.com', +'terrazzo.bnex.com', +'terren.cntv.cn', +'teryield.jmp9.com', +'tescostoresltd.tt.omtrdc.net', +'tesr.112.207.net', +'test.112.207.net', +'test.2cnt.net', +'test.adition.com', +'test.ajc.cimedia.com', +'test.applifier.com', +'test.coremetrics.com', +'test.doublepimp.com', +'test.livejasmin.com', +'test.reporo.net', +'test.scorecardresearch.com', +'test.superstats.com', +'test.yesadvertising.com', +'test.zedo.com', +'test1.lmsoft.cz', +'testadmin.cimedia.com', +'testandtarget.omniture.com', +'testserver121.webtrekk.net', +'testserver122.webtrekk.net', +'testsuite.adfarm1.adition.com', +'testsuite.adition.com', +'tex.ero-advertising.com', +'text-link-ads.com', +'text-o-matic.superstats.com', +'textad.net', +'textadvertising.adclickmedia.com', +'textlinkcash.de', +'textomatic.superstats.com', +'textron.vo.llnwd.net', +'tfl.d3.sc.omtrdc.net', +'tfn.das.tamedia.ch', +'tfncdn.thaflynation.com', +'tg.socdm.com', +'tga.csbew.com', +'tgp.pornsponsors.com', +'thaidigger.com', +'thaliaat02.webtrekk.net', +'thaliach02.webtrekk.net', +'thaliade02.webtrekk.net', +'thalliformxaujqbsq.website', +'thba.go2cloud.org', +'the-binary-trader.biz', +'the-counter.net', +'the-path-gateway.com', +'the.tracking.city', +'theaffiliate.us', +'theaffiliatepeople.com', +'theaffiliateprogram.com', +'theanswerto.com', +'theappwarrior.com', +'thebugs.ws', +'theclickmagnets.go2cloud.org', +'thecounter.com', +'theeldergeek.us.intellitxt.com', +'thefashionspot.us.intellitxt.com', +'thehitsusa.com', +'theinterwebs.space', +'theophanyujgxscs.download', +'theowgkkaj.download', +'thepoint.go2cloud.org', +'theslice.go2cloud.org', +'theta49.rtb.appier.net', +'theta57.rtb.appier.net', +'theta75.rtb.appier.net', +'thetechzone.us.intellitxt.com', +'thetradedesk-tags.s3.amazonaws.com', +'thevictorynetwork.com', +'theylike.org', +'thicksetchrzcu.download', +'thindivide.com', +'thing1.infolink.com', +'thing2.infolink.com', +'thinkgeek.112.2o7.net', +'thinkingmedia.net', +'thinklabs-ltd.de', +'thinknear-hosted.thinknearhub.com', +'thinknear.com', +'thirdparty.fmpub.net', +'thirdworld.magnify.net', +'this.content.served.by.adshuffle.com', +'this.content.served.by.adshuffle.com.11860.9035.302br.net', +'this.content.served.by.adshuffle.com.11861.9035.302br.net', +'this.content.served.by.adshuffle.com.11862.9035.302br.net', +'this.content.served.by.adshuffle.com.11866.9035.302br.net', +'this.content.served.by.adshuffle.com.11867.9035.302br.net', +'this.content.served.by.adshuffle.com.11868.9035.302br.net', +'this.content.served.by.adshuffle.com.11869.9035.302br.net', +'this.content.served.by.adshuffle.com.11870.9035.302br.net', +'this.content.served.by.adshuffle.com.12408.9035.302br.net', +'this.content.served.by.adshuffle.com.12417.9035.302br.net', +'thisbanner.com', +'thisteddagblad.dk', +'thliluxanplanet.review', +'thogethoffic.co', +'thor-cpa.com', +'thowelspegzmc.download', +'thrgo.pro', +'thruport.com', +'ths9j89.com', +'thumb.ero-advertising.com', +'thumbads.ero-advertising.com', +'thumbs.ero-advertising.com', +'thumbs.xlaces.ero-advertising.com', +'thumbs2.ero-advertising.com', +'tiads.time.com', +'ticks2.bugsense.com', +'tidalkqbvnxk.download', +'tidbit.co.in', +'tidbitlhztnnx.download', +'tidd.ly', +'tifosicsonoel.download', +'tigertext.com', +'tikrailijorj.com', +'til.go2cloud.org', +'tiller.co', +'timebus2.112.2o7.net', +'timecom.112.2o7.net', +'timefortune.112.2o7.net', +'timepeople.122.207.net', +'timepeople.122.2o7.net', +'timeslog.indiatimes.com', +'timeslogtn.timesnow.tv', +'timestrends.indiatimes.com', +'timestrends.timesnow.tv', +'timwedigitalsales.go2cloud.org', +'tinbuadserv.com', +'ting.7eer.net', +'tinybar.com', +'tinytracker.onion.com', +'tioweuuukcedarwood.review', +'tirebuyer.go2cloud.org', +'tiscali.ad.dotandad.com', +'tiser.com.au', +'titanads1.com', +'titanads3.com', +'titanads4.com', +'titanads5.com', +'titsbro.org', +'tiumbs.ero-advertising.com', +'tizer8.net', +'tizerclik.com', +'tizermy.net', +'tizernaya-reklama.ru', +'tizru.com', +'tj.phpwind.net', +'tk3.sbc60.com', +'tlehflrectus.review', +'tlkrvyuincommodes.review', +'tlvmedia.adk2.co', +'tlvmedia.com', +'tm.tradetracker.net', +'tmarket.tripod.com', +'tmgdigital.go2cloud.org', +'tminainc.go2affise.com', +'tml.clmbtech.com', +'tmobile-us.inq.com', +'tmp.dt00.net', +'tmscdn.coremetrics.com', +'tmtrck.com', +'tmz.vo.llnwd.net', +'tnjcars.go2cloud.org', +'tns-counter.ru', +'tns-cs.net', +'tns.simba.taobao.com', +'todacell.com', +'todayads.com', +'toggo.ivwbox.de', +'toi3.ivwbox.de', +'toics.2cnt.net', +'toivtest.2cnt.net', +'tom.302br.net', +'tom.vgwort.de', +'tomekas.com', +'toms.us.intellitxt.com', +'tonefuse.go2cloud.org', +'toolbar.aol.com', +'toolbarmodal.medialeopard.com', +'toolbox.contentspread.net', +'tools.bongacams.com', +'tools.bongacash.com', +'tools.gfcash.com', +'tools.hitbox.com', +'tools.kissmetrics.com', +'tools.mobpartner.mobi', +'tools.quicksprout.com', +'tools.runetki.com', +'tools2.hitbox.com', +'toolsa.hitbox.com', +'top-fwz1.mail.ru', +'top-ro.ro', +'top-viral-videos.com', +'top.addfreestats.com', +'top.chebra.lt', +'top.dkd.lt', +'top.elec.ru', +'top.list.ru', +'top.mail.ru', +'top.proext.com', +'top.wn.com', +'top100-images.rambler.ru', +'top100.mafia.ru', +'top100.rambler.ru', +'top20.com', +'top50.co.uk', +'topads.ero-advertising.com', +'topadvancedsearch.com', +'topbarh.box.sk', +'topbinaryaffiliates.ck-cdn.com', +'topfox.co.uk', +'toplist.cz', +'toplist.deluxestream.info', +'toplista.mw.hu', +'toprebates.com', +'topsafelist.net', +'topsky.go2cloud.org', +'topspot.go2cloud.org', +'topstat.com', +'topstat.ru', +'topstats.com', +'toptrafficsource.com', +'torcherxotnnqq.download', +'torerovdmsbvg.download', +'toroadvertisingmedia.com', +'torque.bittorrent.com', +'toruk.tanx.com', +'total-media.net', +'totaladperformance.com', +'totalping.com', +'totalsystemservices.112.2o7.net', +'totemcash.com', +'touchclarity.com', +'tours.imlive.com', +'towableohrhz.download', +'towerrecords.track4.com', +'toyota-com-tw.b.appier.net', +'toyota.112.2o7.net', +'toyota.vo.llnwd.net', +'tpc.googlesyndication.com', +'tpc.googlesyndication.com.proxy.c9w.net', +'tpcnc.googlesyndication.com', +'tpl1.realtracker.com', +'tpl2.realtracker.com', +'tppintext.com', +'tprmyslidden.review', +'tpu.2cnt.net', +'tr.bt.matrixspa.it', +'tr.cloud-media.fr', +'tr.contextweb.com', +'tr.etrxc.com', +'tr.ilius.net', +'tr.interlake.net', +'tr.newsletter.capdecision.fr', +'tr.sjc.contextweb.com', +'tr1.myroitracking.com', +'tr10.myroitracking.com', +'tr1035.myroitracking.com', +'tr11.myroitracking.com', +'tr1126.myroitracking.com', +'tr12.myroitracking.com', +'tr13.myroitracking.com', +'tr14.myroitracking.com', +'tr15.myroitracking.com', +'tr16.myroitracking.com', +'tr17.myroitracking.com', +'tr18.myroitracking.com', +'tr19.myroitracking.com', +'tr2.myroitracking.com', +'tr2.smarterremarketer.net', +'tr2.vttrack.com.br', +'tr20.myroitracking.com', +'tr3.myroitracking.com', +'tr4.myroitracking.com', +'tr5.myroitracking.com', +'tr553.com', +'tr6.myroitracking.com', +'tr7.myroitracking.com', +'tr8.myroitracking.com', +'tr9.myroitracking.com', +'trace.jdtracker.com', +'trace.qq.com', +'traceadmanager.com', +'tracemyip.org', +'tracer.blogads.com', +'track.007cpa.com', +'track.12trackway.com', +'track.99acres.com', +'track.actiplay-network.com', +'track.adbooth.net', +'track.adcocktail.com', +'track.adform.net', +'track.adintend.com', +'track.adnetwork.vn', +'track.adrevolver.com', +'track.adrpanel.es', +'track.adsushi.de', +'track.adtraction.com', +'track.adxmi.com', +'track.affiliate-b.com', +'track.affktch.com', +'track.ahury.com', +'track.appsflyer.com', +'track.ashley-george.com', +'track.atgstores.com', +'track.ballerft.site', +'track.bannerbridge.net', +'track.blamads.com', +'track.braincash.com', +'track.brucelead.com', +'track.byzon.swelen.net', +'track.cafemomstatic.com', +'track.campaignmonitor.com', +'track.catalogs.com', +'track.cbs.com', +'track.celtra.com', +'track.chanret.com', +'track.cinestar.de', +'track.clariad.com', +'track.clickbooth.com', +'track.cliqrr.com', +'track.cmllk1.info', +'track.createsend.com', +'track.cxdigitalmedia.com', +'track.dalenetwork.com', +'track.did-it.com', +'track.digitalriver.com', +'track.divx.com', +'track.easeus.com', +'track.effiliation.com', +'track.engagesciences.com', +'track.eovnx.com', +'track.flexlinks.com', +'track.floppybank.com', +'track.ft.com', +'track.fxstreet.com', +'track.games.la', +'track.gawker.com', +'track.grmtracking.com', +'track.homestead.com', +'track.hubspot.com', +'track.igg.com', +'track.ilovecpa.com', +'track.impactfive.com', +'track.interracialtgirlsex.com', +'track.jbtrax.net', +'track.jerkednetwork.com', +'track.juno.com', +'track.justcloud.com', +'track.leady.cz', +'track.lfstmedia.com', +'track.linksynergy.com', +'track.livestat.com', +'track.mdsmatch.com', +'track.mdsmatch2.com', +'track.monitis.com', +'track.myadshub.com', +'track.mypcbackup.com', +'track.mysavingsmedia.net', +'track.net', +'track.netshelter.net', +'track.netzero.net', +'track.ning.com', +'track.omgpl.com', +'track.oxcash.com', +'track.performtracking.com', +'track.pointroll.com', +'track.pornaccess.com', +'track.probolan50.it', +'track.pubmatic.com', +'track.qcri.org', +'track.qoof.com', +'track.ra.icast.cn', +'track.radins.com', +'track.realwhiznews.com', +'track.reasonablespread.com', +'track.rediff.com', +'track.reinvigorate.net', +'track.rejuvenate-lifestyles.com', +'track.right-ads.com', +'track.scanguard.com', +'track.scanmyphones.com', +'track.scorpiointeractive.com', +'track.searchignite.com', +'track.sexchangegirl.com', +'track.shop2market.com', +'track.slideshare.net', +'track.smcnetwork.net', +'track.spiceworks.com', +'track.strife.com', +'track.tagesanzeiger.ch', +'track.tastyfoodcombos.com', +'track.td3x.com', +'track.tesiteca.it', +'track.tracking85.com', +'track.trademail.fr', +'track.untd.com', +'track.v2.sslsecure1.com', +'track.webgains.com', +'track.websiteceo.com', +'track.webtrekk.net', +'track.wildblue.com', +'track.xtrasize.co.uk', +'track.xtrasize.com', +'track.xtrasize.de', +'track.xtrasize.pl', +'track.yieldmgr.com', +'track.zappos.com', +'track.zipalerts.com', +'track.zomato.com', +'track112.com', +'track2.dulingo.com', +'track2.homestead.com', +'track2.mycliplister.com', +'track4aff.go2cloud.org', +'trackads.com', +'trackalyzer.com', +'trackbacksecure.com', +'trackbar.go2cloud.org', +'trackbar.navigator.web.de', +'trackedclicks.com', +'tracker-api.my.com', +'tracker.adwingate.com', +'tracker.adxpansion.com', +'tracker.affility.com', +'tracker.alterwayhosting.fr', +'tracker.anandtech.com', +'tracker.averetek.com', +'tracker.babbel.com', +'tracker.bestshopping.com', +'tracker.brokeragecapital.com', +'tracker.bt.uol.com.br', +'tracker.btarena.org', +'tracker.buscape.com.br', +'tracker.calameo.com', +'tracker.cds-tracking.com', +'tracker.clicktrade.com', +'tracker.com', +'tracker.cztorrent.net', +'tracker.divvit.com', +'tracker.drippler.com', +'tracker.egora.fr', +'tracker.emailaptitude.com', +'tracker.ero-advertising.com', +'tracker.euroweb.net', +'tracker.infosender.in', +'tracker.iqnomy.com', +'tracker.jcstracker.net', +'tracker.joost.com', +'tracker.junbi-tracker.com', +'tracker.keywordintent.com', +'tracker.leadsius.com', +'tracker.lgcontent.cl', +'tracker.loadingfast.com', +'tracker.lomadee.com', +'tracker.marinsm.com', +'tracker.marinsoftware.com', +'tracker.mobile.biz.daum.net', +'tracker.msales.com', +'tracker.netmechanic.com', +'tracker.nmp1.com', +'tracker.peerclick.io', +'tracker.pinnaclesports.com', +'tracker.plan2.net', +'tracker.realclearpolitics.com', +'tracker.roitesting.com', +'tracker.scao.it', +'tracker.seoboost.net', +'tracker.smartcounter.de', +'tracker.timesgroup.com', +'tracker.trackerbox.com', +'tracker.tradedoubler.com', +'tracker.uprinting.com', +'tracker.winload.de', +'tracker.www.junbi-tracker.com', +'tracker1.leadiya.com', +'trackermodules.com', +'trackerstatistik.init-ag.de', +'trackertracker.com', +'trackicollect.ibase.fr', +'tracking.1moretoy.com', +'tracking.247search.com', +'tracking.4v4jfe79erfxfu8z8.com', +'tracking.actionads.ru', +'tracking.adjug.com', +'tracking.admarketplace.net', +'tracking.admobsphere.com', +'tracking.ads.ibibo.com', +'tracking.adserving.im', +'tracking.adsup.me', +'tracking.adtracker.ch', +'tracking.amazing-revenue.com', +'tracking.ancestry.com', +'tracking.applift.com', +'tracking.attractwomen.com', +'tracking.autoscout24.com', +'tracking.bafby.com', +'tracking.banners.meccahoo.com', +'tracking.base.de', +'tracking.battleon.com', +'tracking.bbinary.com', +'tracking.binarypromos.com', +'tracking.bloomberg.com', +'tracking.bol.com', +'tracking.bucksense.com', +'tracking.carsales.com.au', +'tracking.cat898.com', +'tracking.cdiscount.com', +'tracking.chacha.com', +'tracking.cmcigroup.com', +'tracking.cmgdigital.com', +'tracking.conduit.com', +'tracking.cp.ligatus.com', +'tracking.crobo.com', +'tracking.dealerwebwatcher.com', +'tracking.deepsearch.adlucent.com', +'tracking.directadsmedia.com', +'tracking.dolphinbrowser.com', +'tracking.drsfostersmith.com', +'tracking.dsmmadvantage.com', +'tracking.dzukk.com', +'tracking.ecookie.fr', +'tracking.ehavior.net', +'tracking.ero-advertising.com', +'tracking.euroads.fi', +'tracking.euroads.no', +'tracking.euroads.se', +'tracking.eurosport.com', +'tracking.everydayhealth.com', +'tracking.fathomseo.com', +'tracking.feedperfect.com', +'tracking.fits.me', +'tracking.foxnews.com', +'tracking.gammae.com', +'tracking.gfycat.com', +'tracking.godatafeed.com', +'tracking.goodgamestudios.com', +'tracking.groupon.com', +'tracking.gruppo.mps.it', +'tracking.ha.rueducommerce.fr', +'tracking.hannoversche.de', +'tracking.hi-pi.com', +'tracking.hostgator.com', +'tracking.hrs.de', +'tracking.hsn.com', +'tracking.hyde.ligatus.com', +'tracking.icotrack.com', +'tracking.immobilienscout24.de', +'tracking.infoninjas.net', +'tracking.instantcheckmate.com', +'tracking.interweave.com', +'tracking.inuvo.com', +'tracking.jotform.com', +'tracking.keywee.co', +'tracking.kissmyads.com', +'tracking.klickthru.com', +'tracking.ladies.de', +'tracking.lcleads.com', +'tracking.lenzmx.com', +'tracking.listhub.net', +'tracking.lunho.com', +'tracking.m6r.eu', +'tracking.maxcdn.com', +'tracking.melty.es', +'tracking.melty.fr', +'tracking.messagemates.com', +'tracking.mhlnk.com', +'tracking.mindshare.de', +'tracking.mlsat02.de', +'tracking.mobile.de', +'tracking.mobitracker.info', +'tracking.moneyam.com', +'tracking.moon-ray.com', +'tracking.moportals.com', +'tracking.musixmatch.com', +'tracking.mycapture.com', +'tracking.netbank.de', +'tracking.netrefer.com', +'tracking.netzathleten-media.de', +'tracking.olx-st.com', +'tracking.orixa-media.com', +'tracking.perfecttoolmedia.com', +'tracking.performancerevenues.com', +'tracking.plattformad.com', +'tracking.practicefusion.com', +'tracking.prmtracking.com', +'tracking.publicidees.com', +'tracking.quillion.com', +'tracking.resumecompanion.com', +'tracking.rtl.de', +'tracking.s24.com', +'tracking.searchmarketing.com', +'tracking.sekomedia.com', +'tracking.sembox.it', +'tracking.shopping-flux.com', +'tracking.si.com', +'tracking.smartclicksystem.com', +'tracking.sodta.com', +'tracking.softwareprojects.com', +'tracking.sokrati.com', +'tracking.sponsorpay.com', +'tracking.sport1.de', +'tracking.srv2.de', +'tracking.statravel.de', +'tracking.strongmail.west.mtvi.com', +'tracking.surveycheck.com', +'tracking.syncedvision.com', +'tracking.taptica.com', +'tracking.tchibo.de', +'tracking.teebik.com', +'tracking.theeword.co.uk', +'tracking.thehut.net', +'tracking.toroadvertising.com', +'tracking.trackor.net', +'tracking.traviangames.com', +'tracking.truthfinder.com', +'tracking.ukwm.co.uk', +'tracking.vcommission.com', +'tracking.veoxa.com', +'tracking.voltagesearch.com', +'tracking.w2mobile.com', +'tracking.waterfrontmedia.com', +'tracking.websitealive.com', +'tracking.wfnetwork.com', +'tracking.wisepops.com', +'tracking.worldmedia.net', +'tracking01.walmart.com', +'tracking1.aleadpay.com', +'tracking1.euroads.no', +'tracking101.com', +'tracking11.com', +'tracking1112.com', +'tracking2.interweave.com', +'tracking999.com', +'trackingdev.nixxie.com', +'trackingstatalytics.com', +'trackit.skyhighctr.com', +'tracklead.net', +'trackpm.shop2market.com', +'trackpromotion.net', +'tracks.arubamediamarketing.it', +'trackthatad.com', +'trackword.net', +'trackyourlinks.com', +'trackyourstats.com', +'tractionize.com', +'trade-in-value.com', +'tradeadexchange.com', +'tradearabia.advertserve.com', +'tradedoubler.com', +'tradeexpert.net', +'tradehall.com', +'tradelikeapro.justclick.ru', +'trademob.com', +'tradetraffic.com', +'tradingmarkets.us.intellitxt.com', +'traf.visit-x.net', +'traffboost.net', +'traffdaq.com', +'traffic-delivery.com', +'traffic-exchange.com', +'traffic-hits.com', +'traffic-supremacy.com', +'traffic.acwebconnecting.com', +'traffic.adxprts.com', +'traffic.adxprtz.com', +'traffic.alexa.com', +'traffic.bannerator.com', +'traffic.bokecc.com', +'traffic.buyservices.com', +'traffic.firstmobilelink.com', +'traffic.index.hu', +'traffic.moportals.com', +'traffic.ru', +'traffic.sexpillguru.com', +'traffic.trafficcompany.com', +'traffic.trafficposse.com', +'traffic.velvet.hu', +'traffic4you.de', +'trafficads.s3-website-us-west-1.amazonaws.com', +'trafficbroker.com', +'trafficcaptain.go2cloud.org', +'trafficcenter.com', +'trafficdiscount.com', +'trafficfactory.biz', +'trafficfile.com', +'trafficforce.com', +'traffichaus.com', +'traffichold.com', +'traffichome.de', +'trafficjammedia.go2cloud.org', +'trafficjuicer.com', +'trafficjunky.net', +'trafficjunky.xtube.com', +'trafficleader.com', +'trafficmagnet.com', +'trafficmanagers.nl', +'trafficmasterz.net', +'trafficmp.com', +'trafficparade.com', +'trafficpimps.com', +'trafficpoint.go2cloud.org', +'trafficpump.com', +'trafficshop.com', +'trafficspaces.net', +'trafficswarm.com', +'traffictrader.net', +'trafficundercontrol.com', +'trafficwave.net', +'trafficz.com', +'trafficzap.com', +'trafic-fr.com', +'trafic.ro', +'traficmax.fr', +'trafmag.com', +'trakksocial.googlecode.com', +'traktum.com', +'trans20120430.getjar.com', +'transact-can.cedexis.com', +'transact.justclick.ru', +'transferhit.com', +'transfermarkt01.wt-eu02.net', +'travel.netster.com', +'travel.travelocity.com', +'traveladvertising.com', +'travelmail.traveltek.net', +'travelocity.bfast.com', +'travelscream.com', +'travsoft.bfast.com', +'trax-ad.jp', +'trax.gamespot.com', +'tray-e-ex.tekblue.net', +'tray-w-ex.tekblue.net', +'trc.smtrcplatform.it', +'trc.taboola.com', +'trck.addiliate.com', +'trck.destidyll.com', +'trck.illimeet.com', +'trck.meexy.com', +'trcktm.net', +'treasure1.justclick.ru', +'treasuredome.com', +'treasuretrooper.com', +'treddleswdnnipx.download', +'tredirect.com', +'tree-pixel-log.s3.amazonaws.com', +'trefogli8.adulttargettrack.pw', +'trekblue.com', +'trekdata.com', +'tremblingskzymvgcu.download', +'tremorvideo.com', +'trends.revcontent.com', +'tresalacarta.2cnt.net', +'trhzc.com', +'triadmedianetwork.com', +'tribal.us.intellitxt.com', +'tribalfusion.com', +'tribalfusion.net', +'tribalfusion.speedera.net', +'tribeca.vidavee.com', +'tribuneinteractive.com', +'trickys.com', +'triggeredmail.appspot.com', +'triggertag.gorillanation.com', +'triolit.go2affise.com', +'trivia2mobile.com', +'trix.net', +'trk.1cpa.ru', +'trk.adbutter.net', +'trk.adtrkaa.com', +'trk.airproof.party', +'trk.anchtrk.com', +'trk.apperol.com', +'trk.atdmt.com', +'trk.blamads.com', +'trk.bluetrackmedia.com', +'trk.clmbtech.com', +'trk.dsv2trk.com', +'trk.kissmetrics.com', +'trk.m.libero.it', +'trk.mailtoward.com', +'trk.meacashtrk.com', +'trk.obix.pro', +'trk.pswec.com', +'trk.rrcpm.com', +'trk.trafficposse.com', +'trk.vidible.tv', +'trk.vindicosuite.com', +'trk.wdacashtrk.com', +'trk1.opanw.com', +'trk2it4.com', +'trk4.com', +'trkbin.com', +'trkclk.net', +'trkcpamedia.com', +'trkem.com', +'trker.com', +'trklnks.com', +'trks.us', +'trktrk020.com', +'trktrk026.com', +'trkuoy.com', +'trkur.com', +'trkur1.com', +'trkur5.com', +'trollzeweb.com', +'troopersiccy.bravejournal.com', +'tropo01.webtrekk.net', +'trovus.co.uk', +'trp.numergy.bench.cedexis.com', +'trs.webprospector.de', +'trtc.adspirit.de', +'tru.am', +'truedigitalmedia.go2cloud.org', +'truehits.in.th', +'truehits.net', +'truehits1.gits.net.th', +'truehits2.gits.net.th', +'truma.pitchonlev.org.il', +'trunktest.adition.com', +'truongton.net', +'trupanion.go2cloud.org', +'trustedads.adtrustmedia.com', +'trustedads.org', +'trustedmarketings.go2cloud.org', +'trw12.com', +'trx.mxmfb.com', +'ts-krone.2cnt.net', +'ts-oewa.2cnt.net', +'ts-orf.2cnt.net', +'ts.d.p.xpanama.net', +'ts.eu-west-1.p.xpanama.net', +'ts.eu.p.xpanama.net', +'ts.faz.net', +'ts.geo.p.xpanama.net', +'ts.istrack.com', +'ts.p.xpanama.net', +'ts.rtl.de', +'ts.us-east-1.p.xpanama.net', +'ts.us.p.xpanama.net', +'ts.videosz.com', +'ts1.hitbox.com', +'ts2.hitbox.com', +'ts777.com', +'tsog8.redirectvoluum.com', +'tsyuftaindignance.review', +'tt.omtrdc.net', +'ttlmodels.com', +'ttzmedia.com', +'tu.demdex.net', +'tu.moatads.com', +'tubatebunjrqzi.download', +'tuberewards.com', +'tucows.orangesoda.com', +'tufosex.com.br', +'tugads.go2cloud.org', +'tumblrprobes.cedexis.com', +'tumblrreports.cedexis.com', +'tunersyxofqeak.download', +'turn.com', +'turncoatsuxica.download', +'tutvp.com', +'tv.livejasmin.com', +'tv.sohu.com', +'tv4chan.com', +'tvdttzemicrotome.review', +'tvlistings3.zap2it.com', +'tvlistings4.zap2it.com', +'tvoy-mir.justclick.ru', +'tvseriesfinale.us.intellitxt.com', +'tw.adserver.yahoo.com', +'tw.api.vpon.com', +'tw.i.hulu.com', +'twci.coremetrics.com', +'twctsg.122.2o7.net', +'tweets.kissmetrics.com', +'twemyksybtripewomen.review', +'twilightdata.com', +'twinedigital.go2cloud.org', +'twitter-badges.s3.amazonaws.com', +'twqlnorqcmesquite.review', +'twsg21x6-22dcca05c0915aa0dad0a07273e7a3c5015ddc6d-am1.d.aa.online-metrix.net', +'txel.snmmd.nl', +'txn.ingest.crittercism.com', +'txtimpact.com', +'tynt.com', +'typiol.com', +'typo3.ero-advertising.com', +'tyroo.com', +'tyxo.bg', +'tyzqxseppukus.review', +'tzgcxofordid.review', +'tzigwosquniquely.review', +'tzpwyoyhfspaed.review', +'u-on.eu', +'u-porn.mp1.mobi', +'u.begun.ru', +'u.extreme-dm.com', +'u.heatmap.it', +'u.moatads.com', +'u.mobpartner.mobi', +'u.openx.net', +'u.optorb.com', +'u.outbrain.com', +'u.zeroredirect.com', +'u.zeroredirect1.com', +'u.zeroredirect2.com', +'u0.extreme-dm.com', +'u001.13.spylog.com', +'u001.22.spylog.com', +'u002.01.spylog.com', +'u002.31.spylog.com', +'u003.00.spylog.com', +'u003.52.spylog.com', +'u003.81.spylog.com', +'u004.39.spylog.com', +'u004.58.spylog.com', +'u004.83.spylog.com', +'u005.33.spylog.com', +'u006.15.spylog.com', +'u006.29.spylog.com', +'u006.78.spylog.com', +'u006.98.spylog.com', +'u007.06.spylog.com', +'u008.44.spylog.com', +'u008.47.spylog.com', +'u008.96.spylog.com', +'u010.42.spylog.com', +'u010.44.spylog.com', +'u010.60.spylog.com', +'u011.20.spylog.com', +'u011.22.spylog.com', +'u011.75.spylog.com', +'u013.04.spylog.com', +'u013.89.spylog.com', +'u014.73.spylog.com', +'u015.90.spylog.com', +'u016.25.spylog.com', +'u017.76.spylog.com', +'u017.94.spylog.com', +'u018.38.spylog.com', +'u019.29.spylog.com', +'u019.33.spylog.com', +'u020.39.spylog.com', +'u020.69.spylog.com', +'u022.39.spylog.com', +'u023.47.spylog.com', +'u023.82.spylog.com', +'u024.10.spylog.com', +'u025.73.spylog.com', +'u025.82.spylog.com', +'u025.89.spylog.com', +'u026.68.spylog.com', +'u026.81.spylog.com', +'u028.07.spylog.com', +'u028.35.spylog.com', +'u030.83.spylog.com', +'u031.54.spylog.com', +'u032.71.spylog.com', +'u033.20.spylog.com', +'u034.40.spylog.com', +'u034.55.spylog.com', +'u034.80.spylog.com', +'u036.48.spylog.com', +'u037.20.spylog.com', +'u037.26.spylog.com', +'u038.18.spylog.com', +'u039.10.spylog.com', +'u039.28.spylog.com', +'u039.30.spylog.com', +'u040.76.spylog.com', +'u043.32.spylog.com', +'u043.37.spylog.com', +'u044.09.spylog.com', +'u046.09.spylog.com', +'u046.67.spylog.com', +'u046.73.spylog.com', +'u049.45.spylog.com', +'u052.94.spylog.com', +'u053.14.spylog.com', +'u053.20.spylog.com', +'u053.24.spylog.com', +'u053.48.spylog.com', +'u054.94.spylog.com', +'u055.70.spylog.com', +'u058.03.spylog.com', +'u058.67.spylog.com', +'u059.14.spylog.com', +'u060.16.spylog.com', +'u060.28.spylog.com', +'u060.41.spylog.com', +'u060.92.spylog.com', +'u061.97.spylog.com', +'u062.01.spylog.com', +'u062.16.spylog.com', +'u062.47.spylog.com', +'u063.13.spylog.com', +'u066.62.spylog.com', +'u066.80.spylog.com', +'u066.84.spylog.com', +'u070.38.spylog.com', +'u070.54.spylog.com', +'u070.67.spylog.com', +'u071.47.spylog.com', +'u071.56.spylog.com', +'u071.93.spylog.com', +'u072.93.spylog.com', +'u074.03.spylog.com', +'u075.87.spylog.com', +'u075.94.spylog.com', +'u076.46.spylog.com', +'u081.83.spylog.com', +'u082.61.spylog.com', +'u082.84.spylog.com', +'u082.99.spylog.com', +'u085.95.spylog.com', +'u086.32.spylog.com', +'u088.23.spylog.com', +'u088.27.spylog.com', +'u090.44.spylog.com', +'u090.69.spylog.com', +'u090.78.spylog.com', +'u091.38.spylog.com', +'u091.75.spylog.com', +'u093.76.spylog.com', +'u094.14.spylog.com', +'u094.29.spylog.com', +'u094.35.spylog.com', +'u094.90.spylog.com', +'u095.38.spylog.com', +'u096.59.spylog.com', +'u098.24.spylog.com', +'u099.28.spylog.com', +'u099.40.spylog.com', +'u099.41.spylog.com', +'u099.42.spylog.com', +'u099.81.spylog.com', +'u099.84.spylog.com', +'u1.extreme-dm.com', +'u101.13.spylog.com', +'u101.29.spylog.com', +'u1025.77.spylog.com', +'u104.65.spylog.com', +'u105.77.spylog.com', +'u108.36.spylog.com', +'u108.95.spylog.com', +'u1080.31.spylog.com', +'u11.seoparts.net', +'u112.68.spylog.com', +'u113.63.spylog.com', +'u114.19.spylog.com', +'u114.76.spylog.com', +'u1147.60.spylog.com', +'u115.39.spylog.com', +'u115.46.spylog.com', +'u1157.21.spylog.com', +'u117.45.spylog.com', +'u117.95.spylog.com', +'u118.05.spylog.com', +'u118.11.spylog.com', +'u120.74.spylog.com', +'u121.83.spylog.com', +'u123.23.spylog.com', +'u125.28.spylog.com', +'u126.40.spylog.com', +'u127.62.spylog.com', +'u127.92.spylog.com', +'u128.04.spylog.com', +'u129.20.spylog.com', +'u129.65.spylog.com', +'u130.01.spylog.com', +'u130.83.spylog.com', +'u1308.54.spylog.com', +'u132.04.spylog.com', +'u132.08.spylog.com', +'u132.40.spylog.com', +'u134.81.spylog.com', +'u135.25.spylog.com', +'u136.07.spylog.com', +'u136.28.spylog.com', +'u136.91.spylog.com', +'u138.56.spylog.com', +'u139.75.spylog.com', +'u140.30.spylog.com', +'u140.32.spylog.com', +'u140.90.spylog.com', +'u144.05.spylog.com', +'u144.54.spylog.com', +'u145.33.spylog.com', +'u145.73.spylog.com', +'u147.14.spylog.com', +'u152.37.spylog.com', +'u152.45.spylog.com', +'u154.03.spylog.com', +'u155.50.spylog.com', +'u1569.61.spylog.com', +'u1598.51.spylog.com', +'u1617.87.spylog.com', +'u1617.91.spylog.com', +'u166.09.spylog.com', +'u166.27.spylog.com', +'u166.28.spylog.com', +'u166.32.spylog.com', +'u166.49.spylog.com', +'u166.56.spylog.com', +'u167.27.spylog.com', +'u167.51.spylog.com', +'u167.54.spylog.com', +'u167.78.spylog.com', +'u167.81.spylog.com', +'u167.86.spylog.com', +'u167.90.spylog.com', +'u168.06.spylog.com', +'u168.09.spylog.com', +'u168.38.spylog.com', +'u1695.55.spylog.com', +'u175.78.spylog.com', +'u1773.34.spylog.com', +'u178.75.spylog.com', +'u181.05.spylog.com', +'u1817.16.spylog.com', +'u184.04.spylog.com', +'u185.26.spylog.com', +'u187.18.spylog.com', +'u192.84.spylog.com', +'u1hw38x0.com', +'u206.36.spylog.com', +'u207.80.spylog.com', +'u212.91.spylog.com', +'u218.55.spylog.com', +'u218.73.spylog.com', +'u239.40.spylog.com', +'u245.27.spylog.com', +'u246.61.spylog.com', +'u249.15.spylog.com', +'u249.77.spylog.com', +'u252.80.spylog.com', +'u273.53.spylog.com', +'u289.06.spylog.com', +'u294.54.spylog.com', +'u2965.45.spylog.com', +'u2967.81.spylog.com', +'u2974.05.spylog.com', +'u3064.72.spylog.com', +'u3102.47.spylog.com', +'u311.79.spylog.com', +'u3123.29.spylog.com', +'u3129.10.spylog.com', +'u3197.42.spylog.com', +'u3215.97.spylog.com', +'u3239.08.spylog.com', +'u3305.71.spylog.com', +'u3417.93.spylog.com', +'u342.39.spylog.com', +'u3436.19.spylog.com', +'u3571.56.spylog.com', +'u3585.14.spylog.com', +'u3608.20.spylog.com', +'u385.24.spylog.com', +'u4056.56.spylog.com', +'u4122.70.spylog.com', +'u432.77.spylog.com', +'u4396.79.spylog.com', +'u4443.84.spylog.com', +'u4556.11.spylog.com', +'u4573.85.spylog.com', +'u4702.03.spylog.com', +'u5234.87.spylog.com', +'u5234.98.spylog.com', +'u5303.67.spylog.com', +'u539.34.spylog.com', +'u567.64.spylog.com', +'u5687.48.spylog.com', +'u574.07.spylog.com', +'u590.51.spylog.com', +'u592.05.spylog.com', +'u604.41.spylog.com', +'u6226.44.spylog.com', +'u6353.56.spylog.com', +'u649.63.spylog.com', +'u6504.70.spylog.com', +'u674.98.spylog.com', +'u7031.36.spylog.com', +'u707.53.spylog.com', +'u715381.sendgrid.org', +'u73801620533084.s.push-21.cdnsun.com', +'u790.60.spylog.com', +'u790.67.spylog.com', +'u899519.sendgrid.org', +'u904.62.spylog.com', +'u920.31.spylog.com', +'u972.03.spylog.com', +'u977.40.spylog.com', +'uac.advertising.com', +'uadx.com', +'ubermedia.com', +'ucaluco.com', +'uclick.com', +'ucounter.ucoz.net', +'ucoz.spotsniper.ru', +'udac.se', +'udarem.com', +'udc.msn.com', +'uddlywcatarrhs.review', +'udelivery.trademob.com', +'udf.staging.adition.com', +'udilova.justclick.ru', +'udm.scorecardresearch.com', +'udmserve.net', +'udns1.newdotnet.net', +'udorik.com', +'uebadu.com', +'uenetwork.go2cloud.org', +'uestat.video.qiyi.com', +'ueuerea.com', +'ueyqejwfyeither.review', +'ufohyfzt.download', +'ufraton.com', +'ugaral.com', +'ugo.tractionize.com', +'uhjfxgwrchronical.review', +'ui.avid.doublepimp.com', +'ui.bang.doublepimp.com', +'ui.doublepimp.com', +'ui.fling.doublepimp.com', +'ui.manwin.doublepimp.com', +'ui.partygaming.doublepimp.com', +'ui.phn.doublepimp.com', +'ui.rk.doublepimp.com', +'ui.streamate.doublepimp.com', +'ui.zanox-affiliate.de', +'ui.zanox.com', +'uim.adfarm1.adition.com', +'uim.adition.com', +'uim.image.adition.com', +'uim.tifbs.net', +'uir.uimserv.net', +'uk-ads.openx.net', +'uk.2.cqcounter.com', +'uk.adserver.yahoo.com', +'uk.cqcounter.com', +'uk.nedstat.net', +'uk.nedstatpro.net', +'uk.sitestat.com', +'uk1.siteimprove.com', +'ukaffiliates2.com', +'ukatoe.com', +'ukbanners.com', +'uktvandroid.2cnt.net', +'uktvdotcom.2cnt.net', +'uktvios.2cnt.net', +'ulock.it', +'ultimacash.go2cloud.org', +'ultimate-guitar.us.intellitxt.com', +'ultimategracelessness.info', +'ultimatelyreveal.com', +'ultraadserver.com', +'um.eqads.com', +'um.simpli.fi', +'umbel.com', +'umbs.ero-advertising.com', +'umeng.com', +'umprow.com', +'ums.adtech.de', +'unadvertising.info', +'unboxingdotfb.download', +'unbridlingdkkedavk.download', +'uncarefulwrhmgwje.download', +'uncoached.us.intellitxt.com', +'undefined.vindicosuite.com', +'underclick.ru', +'undertonenetworks.com', +'unfairnesstxucdbqiz.download', +'unfamedooxpcktdb.download', +'unfurled.com', +'unica.com', +'unicast.com', +'unicast.ign.com', +'unicume.com', +'unicume.go2cloud.org', +'union2.50bang.org', +'uniqueleads.com', +'uniquesurf.com', +'unisonsas.bravejournal.com', +'universal-traffic.com', +'unlck.net', +'unlimitads.go2affise.com', +'unlimitedtextads.com', +'unpacifiedeaecmq.download', +'unquietlyzyiwrvvao.download', +'unrightfuljfuqrbf.download', +'unrulymedia.com', +'unsisteredgajudros.download', +'unstaidblmgmsmpq.download', +'unsubscribe.rmv.so', +'untangledlkvhbhj.download', +'untendereduxqwgikf.download', +'unwealhdvfydj.download', +'unwellnessyttshyf.download', +'uob-com-sg.b.appier.net', +'uobsoe.com', +'uol-i3.servedbyopenx.com', +'up.cm.ksmobile.com', +'up.nytimes.com', +'upads.info', +'upahco.go2affise.com', +'upapps.go2cloud.org', +'upcnl.tt.omtrdc.net', +'upcuushogunates.review', +'update.moatads.com', +'updatewinrar.ru', +'upgrowsxdeyxj.download', +'upliftsearch.com', +'upload.kipa.co.il', +'upload.webtrends.com', +'upload.yeahmobi.com', +'upload.zedo.com', +'uploadedgnxjteu.download', +'upnorma.com', +'uponit.com', +'upraisegbczr.download', +'uproar.com', +'upsellit.com', +'upsight.com', +'upsnap.com', +'upstream.where.com', +'uptnzrhwainwright.review', +'uptpro.homestead.com', +'uptrck.com', +'upv4.moatads.com', +'uralap.com', +'urbanityadnetwork.com', +'urbo.2cnt.net', +'urc.taboolasyndication.com', +'urchin.com', +'urchin.estadao.com.br', +'urlaubspiraten.digidip.net', +'urlcash.net', +'urlcheck.hulu.com', +'urlstats.com', +'urlzzz.com', +'us-ads.openx.net', +'us-east-1.profile-api.ads.linkedin.com', +'us-gmtdmp.mookie1.com', +'us-nj-e10.traffictradinghub.com', +'us-nj-e2.traffictradinghub.com', +'us-u.openx.net', +'us.2.cqcounter.com', +'us.a1.yimg.com', +'us.a2.yimg.com', +'us.adserver.yahoo.com', +'us.cam4ads.com', +'us.cqcounter.com', +'us.i1.yimg.com', +'us.js.yimg.com', +'us.wa.ui-portal.com', +'us.webprodcdn.com', +'us.winninganswers.net', +'us.yimg.com', +'us0.adlibr.com', +'us01.lockview.cn', +'us02.lockview.cn', +'us03.lockview.cn', +'us2widget.nimblecommerce.com', +'us3widget.nimblecommerce.com', +'us5.campaign-archive1.com', +'us5.forward-to-friend.com', +'us5.forward-to-friend1.com', +'usa.bpath.com', +'usa.nedstat.com', +'usa.nedstat.net', +'usabilla.com', +'usachoice.net', +'usads.futurenet.nl', +'usage.trackjs.com', +'usarevenue.com', +'usbanners.com', +'usd.bravo-dog.com', +'usdtop.58.com', +'use.a.volvelle.tech', +'usearchmedia.com', +'usefb.adsrvr.org', +'usell.go2cloud.org', +'usenet.raidrush.org', +'user-disp.tidaltv.com', +'userlog.synapseip.tv', +'users.ero-advertising.com', +'users.marketleverage.com', +'uslbtest.cedexis.com', +'usr.dropkickmedia.com', +'usr.mgid.com', +'usun.112.2o7.net', +'usw.a.volvelle.tech', +'utarget.co.uk', +'uthenxxnoisemaker.review', +'utils.adadapter.netzathleten-media.de', +'utils.mediageneral.net', +'utm.myfuncards.com', +'utm.trk.myfuncards.com', +'utm.trk.popularscreensavers.com', +'utm.trk.webfetti.com', +'utm.webfetti.com', +'utm2.smileycentral.com', +'utmtrk2.smileycentral.com', +'utokapa.com', +'utopiad.com', +'utorido.com', +'utrade.com', +'uugpwdbtalaria.review', +'uur.at', +'uv.terra.com.br', +'uvyeoperistome.review', +'uy81rb.wraug5vv72b28fch.pro', +'uzekrs.com', +'uzhegovandrey.justclick.ru', +'uzomaxgcamel.review', +'uzotarak.com', +'v.amazon-adsystem.com', +'v.chartboost.com', +'v.duba.net', +'v.effectivemeasure.net', +'v.emedia.cn', +'v.extreme-dm.com', +'v.gfhdkse.com', +'v.movad.de', +'v.visitweb.com', +'v.wqsph.net', +'v.zedo.com', +'v.zeroredirect.com', +'v.zeroredirect1.com', +'v.zeroredirect2.com', +'v0.extreme-dm.com', +'v1.extreme-dm.com', +'v1.nedstatbasic.net', +'v2.adsbookie.com', +'v2.ipopup.ir', +'v2.popupsky.ir', +'v2.shareaholic.com', +'v2.visualwebsiteoptimizer.com', +'v3.adition.com', +'v3.come.to', +'v3.moatads.com', +'v4.moatads.com', +'v6exp3-ds.metric.gstatic.com', +'v6exp3-ds.metric.ipv6test.net', +'v6exp3-v4.metric.gstatic.com', +'v75.xiti.com', +'v75l.xiti.com', +'va.akamai.startappservice.com', +'va.marketer.lpsnmedia.net', +'va.origin.startappservice.com', +'vad.e-messenger.net', +'vad.mainentrypoint.com', +'vadoseyxcuekj.download', +'valf.atm.youku.com', +'valuead.com', +'valueclick.com', +'valueclickmedia.com', +'valuecommerce.com', +'valuecommerce.ne.jp', +'valuedopinions.co.uk', +'valuehit.com', +'valuepay.com', +'valuesponsor.com', +'vampiresofview.atdmt.com.706.9000.302br.net', +'vap2dfw1.lijit.com', +'vap2iad3.lijit.com', +'vaporprofits.go2cloud.org', +'variedlyewebwd.download', +'varsityads.directtrack.com', +'vassalagescafpum.download', +'vast.moatads.com', +'vastuchaedes.review', +'vastx.moatads.com', +'vatrack.hinet.net', +'vayavicio.com', +'vb1700.mgmt.somee.com', +'vbhoqfogey.review', +'vbutlvkmesially.review', +'vcbypttassel.review', +'vcm.go2cloud.org', +'vcom.go2cloud.org', +'vda.gtarcade.com', +'vdlayer.videodeals.com', +'vdopia.com', +'vdrn.redplum.com', +'vectormarketing.com', +'velismedia.go2cloud.org', +'velocity.go2cloud.org', +'velti.com', +'vemna.go2cloud.org', +'vendiblefqgmayr.download', +'venonita.com', +'venturead.com', +'verdict.abc.go.com', +'verio.122.2o7.net', +'verisign.bfast.com', +'verisign.tt.omtrdc.net', +'verisignwildcard.112.2o7.net', +'verisonwildcard.112.2o7.net', +'verivox.ivwbox.de', +'verizonwireless.tt.omtrdc.net', +'verkehrsportal.de.intellitxt.com', +'vermifugalvacqsw.download', +'vernalizesdoanrm.download', +'vertical-leap.co.uk', +'vertoz.go2affise.com', +'verumm.go2affise.com', +'vervemobile.com', +'vfd2dyn.vodafone.de', +'vfdeprod.amobee.com', +'vfqwpoxshelfroom.review', +'vg00.met.vgwort.de', +'vg01.met.vgwort.de', +'vg02.met.vgwort.de', +'vg03.met.vgwort.de', +'vg04.met.vgwort.de', +'vg05.met.vgwort.de', +'vg06.met.vgwort.de', +'vg07.met.vgwort.de', +'vg08.met.vgwort.de', +'vg09.met.vgwort.de', +'vgleqkbergamots.review', +'vh1com.112.2o7.net', +'vhnnicneovals.review', +'via.appia.com', +'viaden.com', +'viadeplayer.112.2o7.net', +'vialeads.com', +'viamichelin.ads.trafficjunky.net', +'viamichelin.ss.xxxmyself.com', +'viamtvcom.112.2o7.net', +'viamtvde.112.2o7.net', +'viavivade.112.2o7.net', +'vibrantmedia.com', +'vice-ads.s3.amazonaws.com', +'viciosityptktpdyq.download', +'vidego.multicastmedia.com', +'video-loader.com', +'video-stats.video.google.com', +'video.begun.ru', +'video.cld.startappexchange.com', +'video.digidip.net', +'video.moatads.com', +'video.oms.eu', +'video.unrulymedia.com', +'videoads.theonion.com', +'videocodezone.us.intellitxt.com', +'videofun.me', +'videoplus.vo.llnwd.net', +'videos.oms.eu', +'videostat-new.index.hu', +'videostat.index.hu', +'videostrip.2cnt.net', +'videotracker.washingtonpost.com', +'vidzur.com', +'view-ads.de', +'view.atdmt.com', +'view.atdmt.com.1000.302br.net', +'view.atdmt.com.10213.9002.302br.net', +'view.atdmt.com.10216.9002.302br.net', +'view.atdmt.com.10217.9002.302br.net', +'view.atdmt.com.10219.9002.302br.net', +'view.atdmt.com.10220.9002.302br.net', +'view.atdmt.com.10222.9002.302br.net', +'view.atdmt.com.10223.9002.302br.net', +'view.atdmt.com.10359.9023.302br.net', +'view.atdmt.com.10362.9023.302br.net', +'view.atdmt.com.10365.9023.302br.net', +'view.atdmt.com.10377.9023.302br.net', +'view.atdmt.com.10380.9023.302br.net', +'view.atdmt.com.10383.9023.302br.net', +'view.atdmt.com.10410.9023.302br.net', +'view.atdmt.com.10428.9023.302br.net', +'view.atdmt.com.10452.9023.302br.net', +'view.atdmt.com.1179.9011.302br.net', +'view.atdmt.com.1182.9011.302br.net', +'view.atdmt.com.1185.9011.302br.net', +'view.atdmt.com.12494.9043.302br.net', +'view.atdmt.com.12518.9043.302br.net', +'view.atdmt.com.12548.9043.302br.net', +'view.atdmt.com.12560.9043.302br.net', +'view.atdmt.com.13559.9050.302br.net', +'view.atdmt.com.13562.9050.302br.net', +'view.atdmt.com.13565.9050.302br.net', +'view.atdmt.com.13571.9050.302br.net', +'view.atdmt.com.13574.9050.302br.net', +'view.atdmt.com.13577.9050.302br.net', +'view.atdmt.com.14382.9067.302br.net', +'view.atdmt.com.14385.9067.302br.net', +'view.atdmt.com.14388.9067.302br.net', +'view.atdmt.com.16538.9094.302br.net', +'view.atdmt.com.16541.9094.302br.net', +'view.atdmt.com.16547.9094.302br.net', +'view.atdmt.com.16942.9102.302br.net', +'view.atdmt.com.16945.9102.302br.net', +'view.atdmt.com.16948.9102.302br.net', +'view.atdmt.com.16951.9102.302br.net', +'view.atdmt.com.16954.9102.302br.net', +'view.atdmt.com.16957.9102.302br.net', +'view.atdmt.com.16960.9102.302br.net', +'view.atdmt.com.16963.9102.302br.net', +'view.atdmt.com.16966.9102.302br.net', +'view.atdmt.com.16969.9103.302br.net', +'view.atdmt.com.16972.9103.302br.net', +'view.atdmt.com.16975.9103.302br.net', +'view.atdmt.com.1764.9020.302br.net', +'view.atdmt.com.1767.9020.302br.net', +'view.atdmt.com.1770.9020.302br.net', +'view.atdmt.com.1782.9020.302br.net', +'view.atdmt.com.1794.9020.302br.net', +'view.atdmt.com.1818.9020.302br.net', +'view.atdmt.com.1821.9020.302br.net', +'view.atdmt.com.1824.9020.302br.net', +'view.atdmt.com.20661.9121.302br.net', +'view.atdmt.com.20663.9121.302br.net', +'view.atdmt.com.20664.9121.302br.net', +'view.atdmt.com.20673.9121.302br.net', +'view.atdmt.com.20682.9121.302br.net', +'view.atdmt.com.20685.9121.302br.net', +'view.atdmt.com.20696.9121.302br.net', +'view.atdmt.com.20697.9121.302br.net', +'view.atdmt.com.20702.9121.302br.net', +'view.atdmt.com.20703.9121.302br.net', +'view.atdmt.com.20705.9121.302br.net', +'view.atdmt.com.20706.9121.302br.net', +'view.atdmt.com.20709.9121.302br.net', +'view.atdmt.com.20712.9121.302br.net', +'view.atdmt.com.20715.9121.302br.net', +'view.atdmt.com.20859.9122.302br.net', +'view.atdmt.com.20862.9122.302br.net', +'view.atdmt.com.20868.9122.302br.net', +'view.atdmt.com.20871.9122.302br.net', +'view.atdmt.com.2177.9023.302br.net', +'view.atdmt.com.22690.9002.302br.net', +'view.atdmt.com.22693.9002.302br.net', +'view.atdmt.com.22696.9002.302br.net', +'view.atdmt.com.22698.9002.302br.net', +'view.atdmt.com.22699.9002.302br.net', +'view.atdmt.com.22727.9141.302br.net', +'view.atdmt.com.22728.9141.302br.net', +'view.atdmt.com.22729.9141.302br.net', +'view.atdmt.com.22730.9141.302br.net', +'view.atdmt.com.22731.9141.302br.net', +'view.atdmt.com.22732.9141.302br.net', +'view.atdmt.com.22733.9141.302br.net', +'view.atdmt.com.22734.9141.302br.net', +'view.atdmt.com.22735.9141.302br.net', +'view.atdmt.com.22736.9141.302br.net', +'view.atdmt.com.22737.9141.302br.net', +'view.atdmt.com.22738.9141.302br.net', +'view.atdmt.com.22763.9133.302br.net', +'view.atdmt.com.22764.9133.302br.net', +'view.atdmt.com.22765.9133.302br.net', +'view.atdmt.com.22766.65.9133.302br.net', +'view.atdmt.com.22766.9133.302br.net', +'view.atdmt.com.22767.9133.302br.net', +'view.atdmt.com.22768.9133.302br.net', +'view.atdmt.com.22769.9133.302br.net', +'view.atdmt.com.22770.9133.302br.net', +'view.atdmt.com.22772.9133.302br.net', +'view.atdmt.com.22773.9133.302br.net', +'view.atdmt.com.22774.9133.302br.net', +'view.atdmt.com.22828.9121.302br.net', +'view.atdmt.com.22829.9121.302br.net', +'view.atdmt.com.22830.9121.302br.net', +'view.atdmt.com.22831.9121.302br.net', +'view.atdmt.com.22832.9121.302br.net', +'view.atdmt.com.22833.9121.302br.net', +'view.atdmt.com.22834.9121.302br.net', +'view.atdmt.com.22835.9121.302br.net', +'view.atdmt.com.22837.9121.302br.net', +'view.atdmt.com.22838.9121.302br.net', +'view.atdmt.com.22839.9121.302br.net', +'view.atdmt.com.22841.9121.302br.net', +'view.atdmt.com.22842.9121.302br.net', +'view.atdmt.com.22843.9121.302br.net', +'view.atdmt.com.22845.9121.302br.net', +'view.atdmt.com.22846.9121.302br.net', +'view.atdmt.com.22847.9121.302br.net', +'view.atdmt.com.22848.9121.302br.net', +'view.atdmt.com.22849.9121.302br.net', +'view.atdmt.com.22850.9121.302br.net', +'view.atdmt.com.22851.9121.302br.net', +'view.atdmt.com.22927.9146.302br.net', +'view.atdmt.com.22928.9146.302br.net', +'view.atdmt.com.22930.9146.302br.net', +'view.atdmt.com.22931.9146.302br.net', +'view.atdmt.com.22933.9146.302br.net', +'view.atdmt.com.22934.9146.302br.net', +'view.atdmt.com.22937.9146.302br.net', +'view.atdmt.com.22940.9146.302br.net', +'view.atdmt.com.22943.9146.302br.net', +'view.atdmt.com.23125.9161.302br.net', +'view.atdmt.com.23128.9161.302br.net', +'view.atdmt.com.23131.9161.302br.net', +'view.atdmt.com.23134.9161.302br.net', +'view.atdmt.com.23137.9161.302br.net', +'view.atdmt.com.23140.9161.302br.net', +'view.atdmt.com.23142.9161.302br.net', +'view.atdmt.com.23143.9161.302br.net', +'view.atdmt.com.23145.9161.302br.net', +'view.atdmt.com.23146.9161.302br.net', +'view.atdmt.com.23148.9161.302br.net', +'view.atdmt.com.23149.9161.302br.net', +'view.atdmt.com.23151.9161.302br.net', +'view.atdmt.com.23152.9161.302br.net', +'view.atdmt.com.23154.9161.302br.net', +'view.atdmt.com.23155.9161.302br.net', +'view.atdmt.com.23157.9161.302br.net', +'view.atdmt.com.23158.9161.302br.net', +'view.atdmt.com.23160.9161.302br.net', +'view.atdmt.com.23161.9161.302br.net', +'view.atdmt.com.23163.9161.302br.net', +'view.atdmt.com.23164.9161.302br.net', +'view.atdmt.com.23166.9161.302br.net', +'view.atdmt.com.23167.9161.302br.net', +'view.atdmt.com.23169.9161.302br.net', +'view.atdmt.com.23170.9161.302br.net', +'view.atdmt.com.23172.9161.302br.net', +'view.atdmt.com.23173.9161.302br.net', +'view.atdmt.com.23175.9161.302br.net', +'view.atdmt.com.23176.9161.302br.net', +'view.atdmt.com.23359.9133.302br.net', +'view.atdmt.com.23361.9133.302br.net', +'view.atdmt.com.23364.9133.302br.net', +'view.atdmt.com.23365.9133.302br.net', +'view.atdmt.com.23369.9133.302br.net', +'view.atdmt.com.23371.9133.302br.net', +'view.atdmt.com.23372.9133.302br.net', +'view.atdmt.com.23373.9133.302br.net', +'view.atdmt.com.23376.9133.302br.net', +'view.atdmt.com.23377.9133.302br.net', +'view.atdmt.com.23379.9133.302br.net', +'view.atdmt.com.23381.9133.302br.net', +'view.atdmt.com.23384.9133.302br.net', +'view.atdmt.com.23385.9133.302br.net', +'view.atdmt.com.23388.9133.302br.net', +'view.atdmt.com.23389.9133.302br.net', +'view.atdmt.com.23390.9133.302br.net', +'view.atdmt.com.23391.9133.302br.net', +'view.atdmt.com.23393.9133.302br.net', +'view.atdmt.com.23396.9133.302br.net', +'view.atdmt.com.23397.9133.302br.net', +'view.atdmt.com.23401.9133.302br.net', +'view.atdmt.com.23402.9161.302br.net', +'view.atdmt.com.23403.9161.302br.net', +'view.atdmt.com.23405.9161.302br.net', +'view.atdmt.com.23406.9161.302br.net', +'view.atdmt.com.23408.9161.302br.net', +'view.atdmt.com.23409.9161.302br.net', +'view.atdmt.com.23411.9161.302br.net', +'view.atdmt.com.23412.9161.302br.net', +'view.atdmt.com.23414.9161.302br.net', +'view.atdmt.com.23415.9161.302br.net', +'view.atdmt.com.23417.9161.302br.net', +'view.atdmt.com.23418.9161.302br.net', +'view.atdmt.com.23921.9133.302br.net', +'view.atdmt.com.24127.9169.302br.net', +'view.atdmt.com.24128.9169.302br.net', +'view.atdmt.com.24129.9169.302br.net', +'view.atdmt.com.24130.9169.302br.net', +'view.atdmt.com.24131.9169.302br.net', +'view.atdmt.com.24132.9169.302br.net', +'view.atdmt.com.24133.9169.302br.net', +'view.atdmt.com.24134.9169.302br.net', +'view.atdmt.com.24135.9169.302br.net', +'view.atdmt.com.24136.9169.302br.net', +'view.atdmt.com.24137.9169.302br.net', +'view.atdmt.com.24138.9169.302br.net', +'view.atdmt.com.24138.om.24137.9169.302br.net', +'view.atdmt.com.24142.9169.302br.net', +'view.atdmt.com.24144.9169.302br.net', +'view.atdmt.com.24146.9169.302br.net', +'view.atdmt.com.24148.9169.302br.net', +'view.atdmt.com.24150.9169.302br.net', +'view.atdmt.com.24153.9169.302br.net', +'view.atdmt.com.24154.9169.302br.net', +'view.atdmt.com.24155.9169.302br.net', +'view.atdmt.com.24156.9169.302br.net', +'view.atdmt.com.24157.9169.302br.net', +'view.atdmt.com.24158.9169.302br.net', +'view.atdmt.com.24159.9169.302br.net', +'view.atdmt.com.24160.9169.302br.net', +'view.atdmt.com.24161.9169.302br.net', +'view.atdmt.com.24162.9169.302br.net', +'view.atdmt.com.24175.9169.302br.net', +'view.atdmt.com.24176.9169.302br.net', +'view.atdmt.com.24177.9169.302br.net', +'view.atdmt.com.24178.9169.302br.net', +'view.atdmt.com.24179.9169.302br.net', +'view.atdmt.com.24180.9169.302br.net', +'view.atdmt.com.24181.9169.302br.net', +'view.atdmt.com.24182.9169.302br.net', +'view.atdmt.com.24184.9169.302br.net', +'view.atdmt.com.24185.9169.302br.net', +'view.atdmt.com.24186.9169.302br.net', +'view.atdmt.com.24187.9169.302br.net', +'view.atdmt.com.24188.9169.302br.net', +'view.atdmt.com.24189.9169.302br.net', +'view.atdmt.com.24190.9169.302br.net', +'view.atdmt.com.24191.9169.302br.net', +'view.atdmt.com.24192.9169.302br.net', +'view.atdmt.com.24193.9169.302br.net', +'view.atdmt.com.24194.9169.302br.net', +'view.atdmt.com.241w.atdmt.com.24137.9169.302br.net', +'view.atdmt.com.24208.9169.302br.net', +'view.atdmt.com.24211.9114.302br.net', +'view.atdmt.com.24219.9114.302br.net', +'view.atdmt.com.24220.9114.302br.net', +'view.atdmt.com.24225.9114.302br.net', +'view.atdmt.com.24226.9114.302br.net', +'view.atdmt.com.24229.9114.302br.net', +'view.atdmt.com.24231.9114.302br.net', +'view.atdmt.com.24232.9114.302br.net', +'view.atdmt.com.24287.9170.302br.net', +'view.atdmt.com.24290.9170.302br.net', +'view.atdmt.com.24292.9170.302br.net', +'view.atdmt.com.24293.9170.302br.net', +'view.atdmt.com.24296.9170.302br.net', +'view.atdmt.com.24299.9170.302br.net', +'view.atdmt.com.24302.9170.302br.net', +'view.atdmt.com.24305.9170.302br.net', +'view.atdmt.com.24308.9170.302br.net', +'view.atdmt.com.24311.9170.302br.net', +'view.atdmt.com.24314.9170.302br.net', +'view.atdmt.com.24317.9170.302br.net', +'view.atdmt.com.24320.9170.302br.net', +'view.atdmt.com.24491.9179.302br.net', +'view.atdmt.com.24492.9179.302br.net', +'view.atdmt.com.24494.9179.302br.net', +'view.atdmt.com.24495.9179.302br.net', +'view.atdmt.com.24497.9179.302br.net', +'view.atdmt.com.24498.9179.302br.net', +'view.atdmt.com.24498.91dm.302br.net', +'view.atdmt.com.24501.9179.302br.net', +'view.atdmt.com.24503.9179.302br.net', +'view.atdmt.com.24504.9179.302br.net', +'view.atdmt.com.24506.9179.302br.net', +'view.atdmt.com.24507.9179.302br.net', +'view.atdmt.com.24528.9180.302br.net.25148.9185.302br.net', +'view.atdmt.com.24531.9180.302br.net.25151.9185.302br.net', +'view.atdmt.com.24534.9180.302br.net.25154.9185.302br.net', +'view.atdmt.com.24537.9180.302br.net.25157.9185.302br.net', +'view.atdmt.com.24540.9180.302br.net.25160.9185.302br.net', +'view.atdmt.com.24543.9180.302br.net.25163.9185.302br.net', +'view.atdmt.com.24546.9180.302br.net.25166.9185.302br.net', +'view.atdmt.com.24549.9180.302br.net.25169.9185.302br.net', +'view.atdmt.com.24552.9180.302br.net.25172.9185.302br.net', +'view.atdmt.com.24555.9180.302br.net.25175.9185.302br.net', +'view.atdmt.com.24558.9180.302br.net.25178.9185.302br.net', +'view.atdmt.com.24561.9180.302br.net.25181.9185.302br.net', +'view.atdmt.com.24575.9180.302br.net.25195.9185.302br.net', +'view.atdmt.com.24576.9180.302br.net.25196.9185.302br.net', +'view.atdmt.com.24578.9180.302br.net.25198.9185.302br.net', +'view.atdmt.com.24579.9180.302br.net.25199.9185.302br.net', +'view.atdmt.com.24581.9180.302br.net.25201.9185.302br.net', +'view.atdmt.com.24582.9180.302br.net.25202.9185.302br.net', +'view.atdmt.com.24585.9180.302br.net.25205.9185.302br.net', +'view.atdmt.com.24588.9180.302br.net.25208.9185.302br.net', +'view.atdmt.com.24591.9180.302br.net.25211.9185.302br.net', +'view.atdmt.com.24594.9180.302br.net.25214.9185.302br.net', +'view.atdmt.com.24597.9180.302br.net.25217.9185.302br.net', +'view.atdmt.com.24882.9170.302br.net', +'view.atdmt.com.24885.9170.302br.net', +'view.atdmt.com.24888.9170.302br.net', +'view.atdmt.com.24900.9170.302br.net', +'view.atdmt.com.24903.9170.302br.net', +'view.atdmt.com.24906.9170.302br.net', +'view.atdmt.com.25148.9185.302br.net', +'view.atdmt.com.25151.9185.302br.net', +'view.atdmt.com.25154.9185.302br.net', +'view.atdmt.com.25157.9185.302br.net', +'view.atdmt.com.25160.9185.302br.net', +'view.atdmt.com.25163.9185.302br.net', +'view.atdmt.com.25166.9185.302br.net', +'view.atdmt.com.25169.9185.302br.net', +'view.atdmt.com.25172.9185.302br.net', +'view.atdmt.com.25175.9185.302br.net', +'view.atdmt.com.25178.9185.302br.net', +'view.atdmt.com.25181.9185.302br.net', +'view.atdmt.com.25196.9185.302br.net', +'view.atdmt.com.25198.9185.302br.net', +'view.atdmt.com.25199.9185.302br.net', +'view.atdmt.com.25201.9185.302br.net', +'view.atdmt.com.25202.9185.302br.net', +'view.atdmt.com.25205.9185.302br.net', +'view.atdmt.com.25208.9185.302br.net', +'view.atdmt.com.25211.9185.302br.net', +'view.atdmt.com.25214.9185.302br.net', +'view.atdmt.com.25217.9185.302br.net', +'view.atdmt.com.25217.9185.302br.net', +'view.atdmt.com.26099.9201.302br.net', +'view.atdmt.com.26102.9201.302br.net', +'view.atdmt.com.26105.9201.302br.net', +'view.atdmt.com.26107.9201.302br.net', +'view.atdmt.com.26108.9201.302br.net', +'view.atdmt.com.26110.9201.302br.net', +'view.atdmt.com.26111.9201.302br.net', +'view.atdmt.com.26113.9201.302br.net', +'view.atdmt.com.26114.9201.302br.net', +'view.atdmt.com.26116.9201.302br.net', +'view.atdmt.com.26117.9201.302br.net', +'view.atdmt.com.26119.9201.302br.net', +'view.atdmt.com.26120.9201.302br.net', +'view.atdmt.com.26122.9201.302br.net', +'view.atdmt.com.26123.9201.302br.net', +'view.atdmt.com.26125.9201.302br.net', +'view.atdmt.com.26126.9201.302br.net', +'view.atdmt.com.26128.9201.302br.net', +'view.atdmt.com.26129.9201.302br.net', +'view.atdmt.com.26132.9201.302br.net', +'view.atdmt.com.26135.9201.302br.net', +'view.atdmt.com.26136.9201.302br.net', +'view.atdmt.com.26137.9201.302br.net', +'view.atdmt.com.26139.9201.302br.net', +'view.atdmt.com.26140.9201.302br.net', +'view.atdmt.com.26141.9201.302br.net', +'view.atdmt.com.26142.9201.302br.net', +'view.atdmt.com.26143.9201.302br.net', +'view.atdmt.com.26144.9201.302br.net', +'view.atdmt.com.26145.9201.302br.net', +'view.atdmt.com.26146.9201.302br.net', +'view.atdmt.com.26147.9201.302br.net', +'view.atdmt.com.26149.9201.302br.net', +'view.atdmt.com.26150.9201.302br.net', +'view.atdmt.com.26151.9201.302br.net', +'view.atdmt.com.26153.9201.302br.net', +'view.atdmt.com.26155.9201.302br.net', +'view.atdmt.com.26157.9201.302br.net', +'view.atdmt.com.26159.9201.302br.net', +'view.atdmt.com.26161.9201.302br.net', +'view.atdmt.com.26163.9201.302br.net', +'view.atdmt.com.26165.9201.302br.net', +'view.atdmt.com.26167.9201.302br.net', +'view.atdmt.com.26169.9201.302br.net', +'view.atdmt.com.26170.9201.302br.net', +'view.atdmt.com.26171.9201.302br.net', +'view.atdmt.com.26173.9201.302br.net', +'view.atdmt.com.26175.9201.302br.net', +'view.atdmt.com.26177.9201.302br.net', +'view.atdmt.com.26178.9201.302br.net', +'view.atdmt.com.26179.9201.302br.net', +'view.atdmt.com.26181.9201.302br.net', +'view.atdmt.com.26182.9201.302br.net', +'view.atdmt.com.26183.9201.302br.net', +'view.atdmt.com.26185.9201.302br.net', +'view.atdmt.com.26187.9201.302br.net', +'view.atdmt.com.26188.9201.302br.net', +'view.atdmt.com.26189.9201.302br.net', +'view.atdmt.com.26191.9201.302br.net', +'view.atdmt.com.26193.9201.302br.net', +'view.atdmt.com.26195.9201.302br.net', +'view.atdmt.com.26197.9201.302br.net', +'view.atdmt.com.26198.9201.302br.net', +'view.atdmt.com.26199.9201.302br.net', +'view.atdmt.com.26200.9201.302br.net', +'view.atdmt.com.26201.9201.302br.net', +'view.atdmt.com.26203.9201.302br.net', +'view.atdmt.com.26205.9201.302br.net', +'view.atdmt.com.26218.9201.302br.net', +'view.atdmt.com.26219.9201.302br.net', +'view.atdmt.com.26220.9201.302br.net', +'view.atdmt.com.26221.9201.302br.net', +'view.atdmt.com.26222.9201.302br.net', +'view.atdmt.com.26223.9201.302br.net', +'view.atdmt.com.26224.9201.302br.net', +'view.atdmt.com.26225.9201.302br.net', +'view.atdmt.com.26226.9201.302br.net', +'view.atdmt.com.26227.9201.302br.net', +'view.atdmt.com.26228.9201.302br.net', +'view.atdmt.com.26229.9201.302br.net', +'view.atdmt.com.26285.9202.302br.net', +'view.atdmt.com.26288.9202.302br.net', +'view.atdmt.com.26291.9202.302br.net', +'view.atdmt.com.26294.9202.302br.net', +'view.atdmt.com.26297.9202.302br.net', +'view.atdmt.com.26300.9202.302br.net', +'view.atdmt.com.26303.9202.302br.net', +'view.atdmt.com.26306.9202.302br.net', +'view.atdmt.com.26309.9202.302br.net', +'view.atdmt.com.26621.9201.302br.net', +'view.atdmt.com.26624.9201.302br.net', +'view.atdmt.com.26627.9201.302br.net', +'view.atdmt.com.26630.9201.302br.net', +'view.atdmt.com.26633.9201.302br.net', +'view.atdmt.com.26635.9201.302br.net', +'view.atdmt.com.26636.9201.302br.net', +'view.atdmt.com.26639.9201.302br.net', +'view.atdmt.com.26642.9201.302br.net', +'view.atdmt.com.26645.9201.302br.net', +'view.atdmt.com.26647.9201.302br.net', +'view.atdmt.com.26648.9201.302br.net', +'view.atdmt.com.26651.9201.302br.net', +'view.atdmt.com.26654.9201.302br.net', +'view.atdmt.com.26657.9201.302br.net', +'view.atdmt.com.26660.9201.302br.net', +'view.atdmt.com.26663.9201.302br.net', +'view.atdmt.com.26665.9201.302br.net', +'view.atdmt.com.26666.9201.302br.net', +'view.atdmt.com.26669.9201.302br.net', +'view.atdmt.com.26672.9201.302br.net', +'view.atdmt.com.26675.9201.302br.net', +'view.atdmt.com.26677.9201.302br.net', +'view.atdmt.com.26678.9201.302br.net', +'view.atdmt.com.26680.9201.302br.net', +'view.atdmt.com.26681.9201.302br.net', +'view.atdmt.com.26684.9201.302br.net', +'view.atdmt.com.26687.9201.302br.net', +'view.atdmt.com.26690.9201.302br.net', +'view.atdmt.com.26692.9201.302br.net', +'view.atdmt.com.26693.9201.302br.net', +'view.atdmt.com.26696.9201.302br.net', +'view.atdmt.com.26698.9201.302br.net', +'view.atdmt.com.26699.9201.302br.net', +'view.atdmt.com.26702.9201.302br.net', +'view.atdmt.com.26705.9201.302br.net', +'view.atdmt.com.26708.9201.302br.net', +'view.atdmt.com.26710.9201.302br.net', +'view.atdmt.com.26711.9201.302br.net', +'view.atdmt.com.26714.9201.302br.net', +'view.atdmt.com.26717.9201.302br.net', +'view.atdmt.com.26720.9201.302br.net', +'view.atdmt.com.26722.9201.302br.net', +'view.atdmt.com.26723.9201.302br.net', +'view.atdmt.com.26726.9201.302br.net', +'view.atdmt.com.26728.9201.302br.net', +'view.atdmt.com.26729.9201.302br.net', +'view.atdmt.com.26731.9201.302br.net', +'view.atdmt.com.26732.9201.302br.net', +'view.atdmt.com.26734.9201.302br.net', +'view.atdmt.com.26735.9201.302br.net', +'view.atdmt.com.26737.9201.302br.net', +'view.atdmt.com.26738.9201.302br.net', +'view.atdmt.com.26740.9201.302br.net', +'view.atdmt.com.26741.9201.302br.net', +'view.atdmt.com.26743.9201.302br.net', +'view.atdmt.com.26744.9201.302br.net', +'view.atdmt.com.26759.9201.302br.net', +'view.atdmt.com.26762.9201.302br.net', +'view.atdmt.com.26765.9201.302br.net', +'view.atdmt.com.26777.9201.302br.net', +'view.atdmt.com.26780.9201.302br.net', +'view.atdmt.com.26783.9201.302br.net', +'view.atdmt.com.26795.9201.302br.net', +'view.atdmt.com.26798.9201.302br.net', +'view.atdmt.com.26801.9201.302br.net', +'view.atdmt.com.26804.9201.302br.net', +'view.atdmt.com.26807.9201.302br.net', +'view.atdmt.com.26809.9201.302br.net', +'view.atdmt.com.26810.9201.302br.net', +'view.atdmt.com.26812.9201.302br.net', +'view.atdmt.com.26813.9201.302br.net', +'view.atdmt.com.26816.9201.302br.net', +'view.atdmt.com.26819.9201.302br.net', +'view.atdmt.com.26821.9201.302br.net', +'view.atdmt.com.26822.9201.302br.net', +'view.atdmt.com.26824.9201.302br.net', +'view.atdmt.com.26825.9201.302br.net', +'view.atdmt.com.26828.9201.302br.net', +'view.atdmt.com.26831.9201.302br.net', +'view.atdmt.com.26834.9201.302br.net', +'view.atdmt.com.26837.9201.302br.net', +'view.atdmt.com.26839.9201.302br.net', +'view.atdmt.com.26840.9201.302br.net', +'view.atdmt.com.26841.9201.302br.net', +'view.atdmt.com.26842.9201.302br.net', +'view.atdmt.com.26843.9201.302br.net', +'view.atdmt.com.26844.9201.302br.net', +'view.atdmt.com.26845.9201.302br.net', +'view.atdmt.com.26846.9201.302br.net', +'view.atdmt.com.26847.9201.302br.net', +'view.atdmt.com.26848.9201.302br.net', +'view.atdmt.com.26849.9201.302br.net', +'view.atdmt.com.26850.9201.302br.net', +'view.atdmt.com.26851.9201.302br.net', +'view.atdmt.com.26852.9201.302br.net', +'view.atdmt.com.26854.9201.302br.net', +'view.atdmt.com.26855.9201.302br.net', +'view.atdmt.com.26856.9201.302br.net', +'view.atdmt.com.26858.9201.302br.net', +'view.atdmt.com.26859.9201.302br.net', +'view.atdmt.com.26860.9201.302br.net', +'view.atdmt.com.26862.9201.302br.net', +'view.atdmt.com.26863.9201.302br.net', +'view.atdmt.com.26864.9201.302br.net', +'view.atdmt.com.26866.9201.302br.net', +'view.atdmt.com.26868.9201.302br.net', +'view.atdmt.com.26870.9201.302br.net', +'view.atdmt.com.26872.9201.302br.net', +'view.atdmt.com.26874.9201.302br.net', +'view.atdmt.com.26875.9201.302br.net', +'view.atdmt.com.26876.9201.302br.net', +'view.atdmt.com.26877.9201.302br.net', +'view.atdmt.com.26878.9201.302br.net', +'view.atdmt.com.26880.9201.302br.net', +'view.atdmt.com.26882.9201.302br.net', +'view.atdmt.com.26883.9201.302br.net', +'view.atdmt.com.26884.9201.302br.net', +'view.atdmt.com.26885.9201.302br.net', +'view.atdmt.com.26886.9201.302br.net', +'view.atdmt.com.26888.9201.302br.net', +'view.atdmt.com.26889.9201.302br.net', +'view.atdmt.com.26890.9201.302br.net', +'view.atdmt.com.26891.9201.302br.net', +'view.atdmt.com.26892.9201.302br.net', +'view.atdmt.com.26893.9201.302br.net', +'view.atdmt.com.26894.9201.302br.net', +'view.atdmt.com.26896.9201.302br.net', +'view.atdmt.com.26897.9201.302br.net', +'view.atdmt.com.26898.9201.302br.net', +'view.atdmt.com.26899.9201.302br.net', +'view.atdmt.com.26900.9201.302br.net', +'view.atdmt.com.26901.9201.302br.net', +'view.atdmt.com.26902.9201.302br.net', +'view.atdmt.com.26903.9201.302br.net', +'view.atdmt.com.26904.9201.302br.net', +'view.atdmt.com.26905.9201.302br.net', +'view.atdmt.com.26906.9201.302br.net', +'view.atdmt.com.26908.9201.302br.net', +'view.atdmt.com.26909.9201.302br.net', +'view.atdmt.com.26910.9201.302br.net', +'view.atdmt.com.26911.9201.302br.net', +'view.atdmt.com.26912.9201.302br.net', +'view.atdmt.com.26914.9201.302br.net', +'view.atdmt.com.26915.9201.302br.net', +'view.atdmt.com.26916.9201.302br.net', +'view.atdmt.com.26917.9201.302br.net', +'view.atdmt.com.26918.9201.302br.net', +'view.atdmt.com.26919.9201.302br.net', +'view.atdmt.com.26920.9201.302br.net', +'view.atdmt.com.26921.9201.302br.net', +'view.atdmt.com.26922.9201.302br.net', +'view.atdmt.com.26923.9201.302br.net', +'view.atdmt.com.26924.9201.302br.net', +'view.atdmt.com.26925.9201.302br.net', +'view.atdmt.com.26926.9201.302br.net', +'view.atdmt.com.26939.9201.302br.net', +'view.atdmt.com.26940.9201.302br.net', +'view.atdmt.com.26941.9201.302br.net', +'view.atdmt.com.26942.9201.302br.net', +'view.atdmt.com.26943.9201.302br.net', +'view.atdmt.com.26944.9201.302br.net', +'view.atdmt.com.26945.9201.302br.net', +'view.atdmt.com.26946.9201.302br.net', +'view.atdmt.com.26947.9201.302br.net', +'view.atdmt.com.26948.9201.302br.net', +'view.atdmt.com.26949.9201.302br.net', +'view.atdmt.com.26950.9201.302br.net', +'view.atdmt.com.26963.9201.302br.net', +'view.atdmt.com.26964.9201.302br.net', +'view.atdmt.com.26965.9201.302br.net', +'view.atdmt.com.26966.9201.302br.net', +'view.atdmt.com.26968.9201.302br.net', +'view.atdmt.com.26969.9201.302br.net', +'view.atdmt.com.26970.9201.302br.net', +'view.atdmt.com.26971.9201.302br.net', +'view.atdmt.com.26972.9201.302br.net', +'view.atdmt.com.26974.9201.302br.net', +'view.atdmt.com.26975.9201.302br.net', +'view.atdmt.com.26976.9201.302br.net', +'view.atdmt.com.26977.9201.302br.net', +'view.atdmt.com.26978.9201.302br.net', +'view.atdmt.com.26979.9201.302br.net', +'view.atdmt.com.26980.9201.302br.net', +'view.atdmt.com.26982.9201.302br.net', +'view.atdmt.com.26983.9201.302br.net', +'view.atdmt.com.26984.9201.302br.net', +'view.atdmt.com.26985.9201.302br.net', +'view.atdmt.com.26986.9201.302br.net', +'view.atdmt.com.27059.9202.302br.net', +'view.atdmt.com.27060.9202.302br.net', +'view.atdmt.com.27062.9202.302br.net', +'view.atdmt.com.27063.9202.302br.net', +'view.atdmt.com.27065.9202.302br.net', +'view.atdmt.com.27066.9202.302br.net', +'view.atdmt.com.27068.9202.302br.net', +'view.atdmt.com.27069.9202.302br.net', +'view.atdmt.com.27071.9202.302br.net', +'view.atdmt.com.27072.9202.302br.net', +'view.atdmt.com.27074.9202.302br.net', +'view.atdmt.com.27075.9202.302br.net', +'view.atdmt.com.27078.9202.302br.net', +'view.atdmt.com.27081.9202.302br.net', +'view.atdmt.com.27084.9202.302br.net', +'view.atdmt.com.27087.9202.302br.net', +'view.atdmt.com.27090.9202.302br.net', +'view.atdmt.com.27093.9202.302br.net', +'view.atdmt.com.27096.9202.302br.net', +'view.atdmt.com.27099.9202.302br.net', +'view.atdmt.com.27102.9202.302br.net', +'view.atdmt.com.27105.9202.302br.net', +'view.atdmt.com.27108.9202.302br.net', +'view.atdmt.com.27111.9202.302br.net', +'view.atdmt.com.27114.9202.302br.net', +'view.atdmt.com.27116.9202.302br.net', +'view.atdmt.com.27117.9202.302br.net', +'view.atdmt.com.27119.9202.302br.net', +'view.atdmt.com.27120.9202.302br.net', +'view.atdmt.com.27123.9202.302br.net', +'view.atdmt.com.27126.9202.302br.net', +'view.atdmt.com.27129.9202.302br.net', +'view.atdmt.com.27131.9202.302br.net', +'view.atdmt.com.27132.9202.302br.net', +'view.atdmt.com.27135.9202.302br.net', +'view.atdmt.com.27138.9202.302br.net', +'view.atdmt.com.27141.9202.302br.net', +'view.atdmt.com.27144.9202.302br.net', +'view.atdmt.com.27147.9202.302br.net', +'view.atdmt.com.27150.9202.302br.net', +'view.atdmt.com.27152.9202.302br.net', +'view.atdmt.com.27153.9202.302br.net', +'view.atdmt.com.27156.9202.302br.net', +'view.atdmt.com.27159.9202.302br.net', +'view.atdmt.com.27162.9202.302br.net', +'view.atdmt.com.27165.9202.302br.net', +'view.atdmt.com.27168.9202.302br.net', +'view.atdmt.com.27171.9202.302br.net', +'view.atdmt.com.27174.9202.302br.net', +'view.atdmt.com.27177.9202.302br.net', +'view.atdmt.com.27179.9202.302br.net', +'view.atdmt.com.27180.9202.302br.net', +'view.atdmt.com.27186.9202.302br.net', +'view.atdmt.com.27189.9202.302br.net', +'view.atdmt.com.27192.9202.302br.net', +'view.atdmt.com.27195.9202.302br.net', +'view.atdmt.com.27198.9202.302br.net', +'view.atdmt.com.27204.9202.302br.net', +'view.atdmt.com.27206.9202.302br.net', +'view.atdmt.com.27207.9202.302br.net', +'view.atdmt.com.27209.9202.302br.net', +'view.atdmt.com.27210.9202.302br.net', +'view.atdmt.com.27213.9202.302br.net', +'view.atdmt.com.27215.9202.302br.net', +'view.atdmt.com.27216.9202.302br.net', +'view.atdmt.com.27218.9202.302br.net', +'view.atdmt.com.27219.9202.302br.net', +'view.atdmt.com.27222.9202.302br.net', +'view.atdmt.com.27225.9202.302br.net', +'view.atdmt.com.27228.9202.302br.net', +'view.atdmt.com.27231.9202.302br.net', +'view.atdmt.com.27234.9202.302br.net', +'view.atdmt.com.27237.9202.302br.net', +'view.atdmt.com.27240.9202.302br.net', +'view.atdmt.com.27243.9202.302br.net', +'view.atdmt.com.27246.9202.302br.net', +'view.atdmt.com.27249.9202.302br.net', +'view.atdmt.com.27252.9202.302br.net', +'view.atdmt.com.27255.9202.302br.net', +'view.atdmt.com.27258.9202.302br.net', +'view.atdmt.com.27264.9202.302br.net', +'view.atdmt.com.27267.9202.302br.net', +'view.atdmt.com.27270.9202.302br.net', +'view.atdmt.com.27273.9202.302br.net', +'view.atdmt.com.27276.9202.302br.net', +'view.atdmt.com.27279.9202.302br.net', +'view.atdmt.com.27282.9202.302br.net', +'view.atdmt.com.27288.9202.302br.net', +'view.atdmt.com.27291.9202.302br.net', +'view.atdmt.com.27294.9202.302br.net', +'view.atdmt.com.27297.9202.302br.net', +'view.atdmt.com.27300.9202.302br.net', +'view.atdmt.com.27311.9201.302br.net', +'view.atdmt.com.27314.9201.302br.net', +'view.atdmt.com.27317.9201.302br.net', +'view.atdmt.com.27320.9201.302br.net', +'view.atdmt.com.27326.9201.302br.net', +'view.atdmt.com.27329.9201.302br.net', +'view.atdmt.com.27332.9201.302br.net', +'view.atdmt.com.27337.9201.302br.net', +'view.atdmt.com.27338.9201.302br.net', +'view.atdmt.com.27344.9201.302br.net', +'view.atdmt.com.27347.9201.302br.net', +'view.atdmt.com.27350.9201.302br.net', +'view.atdmt.com.27352.9201.302br.net', +'view.atdmt.com.27353.9201.302br.net', +'view.atdmt.com.27359.9201.302br.net', +'view.atdmt.com.27362.9201.302br.net', +'view.atdmt.com.27364.9201.302br.net', +'view.atdmt.com.27365.9201.302br.net', +'view.atdmt.com.27488.9208.302br.net', +'view.atdmt.com.27491.9208.302br.net', +'view.atdmt.com.27650.9169.302br.net', +'view.atdmt.com.27651.9169.302br.net', +'view.atdmt.com.315.6000.302br.net', +'view.atdmt.com.317.6000.302br.net', +'view.atdmt.com.318.6000.302br.net', +'view.atdmt.com.319.6000.302br.net', +'view.atdmt.com.320.6000.302br.net', +'view.atdmt.com.324.6000.302br.net', +'view.atdmt.com.33330.9201.302br.net', +'view.atdmt.com.33331.9201.302br.net', +'view.atdmt.com.33332.9201.302br.net', +'view.atdmt.com.33333.9201.302br.net', +'view.atdmt.com.33334.9201.302br.net', +'view.atdmt.com.33335.9201.302br.net', +'view.atdmt.com.33336.9201.302br.net', +'view.atdmt.com.33337.9201.302br.net', +'view.atdmt.com.33338.9201.302br.net', +'view.atdmt.com.33339.9201.302br.net', +'view.atdmt.com.33340.9201.302br.net', +'view.atdmt.com.33341.9201.302br.net', +'view.atdmt.com.33342.9201.302br.net', +'view.atdmt.com.33343.9201.302br.net', +'view.atdmt.com.33345.9201.302br.net', +'view.atdmt.com.33346.9201.302br.net', +'view.atdmt.com.33347.9201.302br.net', +'view.atdmt.com.33348.9201.302br.net', +'view.atdmt.com.33349.9201.302br.net', +'view.atdmt.com.33350.9201.302br.net', +'view.atdmt.com.33351.9201.302br.net', +'view.atdmt.com.33352.9201.302br.net', +'view.atdmt.com.33353.9201.302br.net', +'view.atdmt.com.33354.9201.302br.net', +'view.atdmt.com.33355.9201.302br.net', +'view.atdmt.com.33356.9201.302br.net', +'view.atdmt.com.33357.9201.302br.net', +'view.atdmt.com.33359.9201.302br.net', +'view.atdmt.com.33361.9201.302br.net', +'view.atdmt.com.33363.9201.302br.net', +'view.atdmt.com.33365.9201.302br.net', +'view.atdmt.com.33367.9201.302br.net', +'view.atdmt.com.33369.9201.302br.net', +'view.atdmt.com.33371.9201.302br.net', +'view.atdmt.com.33373.9201.302br.net', +'view.atdmt.com.33375.9201.302br.net', +'view.atdmt.com.33377.9201.302br.net', +'view.atdmt.com.33379.9201.302br.net', +'view.atdmt.com.33381.9201.302br.net', +'view.atdmt.com.33383.9201.302br.net', +'view.atdmt.com.33385.9201.302br.net', +'view.atdmt.com.33387.9201.302br.net', +'view.atdmt.com.33388.9201.302br.net', +'view.atdmt.com.33389.9201.302br.net', +'view.atdmt.com.33390.9201.302br.net', +'view.atdmt.com.33391.9201.302br.net', +'view.atdmt.com.33392.9201.302br.net', +'view.atdmt.com.33393.9201.302br.net', +'view.atdmt.com.33394.9201.302br.net', +'view.atdmt.com.33395.9201.302br.net', +'view.atdmt.com.33396.9201.302br.net', +'view.atdmt.com.33397.9201.302br.net', +'view.atdmt.com.33401.9201.302br.net', +'view.atdmt.com.33403.9201.302br.net', +'view.atdmt.com.33405.9201.302br.net', +'view.atdmt.com.33407.9201.302br.net', +'view.atdmt.com.33409.9201.302br.net', +'view.atdmt.com.33411.9201.302br.net', +'view.atdmt.com.33413.9201.302br.net', +'view.atdmt.com.33417.9201.302br.net', +'view.atdmt.com.33418.9201.302br.net', +'view.atdmt.com.33419.9201.302br.net', +'view.atdmt.com.33420.9201.302br.net', +'view.atdmt.com.33421.9201.302br.net', +'view.atdmt.com.33423.9201.302br.net', +'view.atdmt.com.33425.9201.302br.net', +'view.atdmt.com.33427.9201.302br.net', +'view.atdmt.com.33428.9201.302br.net', +'view.atdmt.com.33429.9201.302br.net', +'view.atdmt.com.33430.9201.302br.net', +'view.atdmt.com.33431.9201.302br.net', +'view.atdmt.com.33432.9201.302br.net', +'view.atdmt.com.33433.9201.302br.net', +'view.atdmt.com.33434.9201.302br.net', +'view.atdmt.com.33435.9201.302br.net', +'view.atdmt.com.33436.9201.302br.net', +'view.atdmt.com.33437.9201.302br.net', +'view.atdmt.com.33438.9201.302br.net', +'view.atdmt.com.33439.9201.302br.net', +'view.atdmt.com.33441.9201.302br.net', +'view.atdmt.com.33443.9201.302br.net', +'view.atdmt.com.33445.9201.302br.net', +'view.atdmt.com.33447.9201.302br.net', +'view.atdmt.com.33448.9201.302br.net', +'view.atdmt.com.33449.9201.302br.net', +'view.atdmt.com.33451.9201.302br.net', +'view.atdmt.com.33453.9201.302br.net', +'view.atdmt.com.33455.9201.302br.net', +'view.atdmt.com.33457.9201.302br.net', +'view.atdmt.com.33459.9201.302br.net', +'view.atdmt.com.33461.9201.302br.net', +'view.atdmt.com.33463.9201.302br.net', +'view.atdmt.com.33465.9201.302br.net', +'view.atdmt.com.33467.9201.302br.net', +'view.atdmt.com.33469.9201.302br.net', +'view.atdmt.com.33471.9201.302br.net', +'view.atdmt.com.33473.9201.302br.net', +'view.atdmt.com.33475.9201.302br.net', +'view.atdmt.com.33476.9245.302br.net', +'view.atdmt.com.33477.9245.302br.net', +'view.atdmt.com.33479.9245.302br.net', +'view.atdmt.com.33480.9245.302br.net', +'view.atdmt.com.33482.9245.302br.net', +'view.atdmt.com.33483.9245.302br.net', +'view.atdmt.com.33485.9245.302br.net', +'view.atdmt.com.33486.9245.302br.net', +'view.atdmt.com.33489.9245.302br.net', +'view.atdmt.com.33492.9245.302br.net', +'view.atdmt.com.33497.9245.302br.net', +'view.atdmt.com.33498.9245.302br.net', +'view.atdmt.com.33500.9245.302br.net', +'view.atdmt.com.33501.9245.302br.net', +'view.atdmt.com.33581.9249.302br.net', +'view.atdmt.com.33582.9249.302br.net', +'view.atdmt.com.33583.9249.302br.net', +'view.atdmt.com.33584.9249.302br.net', +'view.atdmt.com.33585.9249.302br.net', +'view.atdmt.com.33586.9249.302br.net', +'view.atdmt.com.33718.9169.302br.net', +'view.atdmt.com.33719.9169.302br.net', +'view.atdmt.com.33720.9169.302br.net', +'view.atdmt.com.33721.9169.302br.net', +'view.atdmt.com.33722.9169.302br.net', +'view.atdmt.com.33723.9169.302br.net', +'view.atdmt.com.33724.9169.302br.net', +'view.atdmt.com.33726.9169.302br.net', +'view.atdmt.com.33727.9169.302br.net', +'view.atdmt.com.33728.9169.302br.net', +'view.atdmt.com.33861.9201.302br.net', +'view.atdmt.com.33862.9201.302br.net', +'view.atdmt.com.33864.9201.302br.net', +'view.atdmt.com.33865.9201.302br.net', +'view.atdmt.com.33866.9201.302br.net', +'view.atdmt.com.33898.9201.302br.net', +'view.atdmt.com.33900.9201.302br.net', +'view.atdmt.com.33902.9201.302br.net', +'view.atdmt.com.33922.9201.302br.net', +'view.atdmt.com.33924.9201.302br.net', +'view.atdmt.com.33926.9201.302br.net', +'view.atdmt.com.33980.9169.302br.net', +'view.atdmt.com.33982.9169.302br.net', +'view.atdmt.com.33984.9169.302br.net', +'view.atdmt.com.33986.9169.302br.net', +'view.atdmt.com.33988.9169.302br.net', +'view.atdmt.com.33989.9169.302br.net', +'view.atdmt.com.33990.9169.302br.net', +'view.atdmt.com.33991.9169.302br.net', +'view.atdmt.com.33992.9169.302br.net', +'view.atdmt.com.33993.9169.302br.net', +'view.atdmt.com.33994.9169.302br.net', +'view.atdmt.com.33995.9169.302br.net', +'view.atdmt.com.33996.9169.302br.net', +'view.atdmt.com.33997.9169.302br.net', +'view.atdmt.com.33998.9169.302br.net', +'view.atdmt.com.33999.9169.302br.net', +'view.atdmt.com.34000.9169.302br.net', +'view.atdmt.com.34486.9251.302br.net', +'view.atdmt.com.34489.9251.302br.net', +'view.atdmt.com.34503.9251.302br.net', +'view.atdmt.com.34504.9251.302br.net', +'view.atdmt.com.34519.9251.302br.net', +'view.atdmt.com.35013.9254.302br.net', +'view.atdmt.com.35014.9254.302br.net', +'view.atdmt.com.35016.9254.302br.net', +'view.atdmt.com.35017.9254.302br.net', +'view.atdmt.com.35019.9254.302br.net', +'view.atdmt.com.35020.9254.302br.net', +'view.atdmt.com.35067.9255.302br.net', +'view.atdmt.com.35068.9255.302br.net', +'view.atdmt.com.35069.9255.302br.net', +'view.atdmt.com.35070.9255.302br.net', +'view.atdmt.com.35071.9255.302br.net', +'view.atdmt.com.35072.9255.302br.net', +'view.atdmt.com.35073.9255.302br.net', +'view.atdmt.com.35074.9255.302br.net', +'view.atdmt.com.35075.9255.302br.net', +'view.atdmt.com.35076.9255.302br.net', +'view.atdmt.com.35077.9255.302br.net', +'view.atdmt.com.35078.9255.302br.net', +'view.atdmt.com.35079.9255.302br.net', +'view.atdmt.com.35080.9255.302br.net', +'view.atdmt.com.35081.9255.302br.net', +'view.atdmt.com.35082.9255.302br.net', +'view.atdmt.com.35083.9255.302br.net', +'view.atdmt.com.35084.9255.302br.net', +'view.atdmt.com.35085.9255.302br.net', +'view.atdmt.com.35086.9255.302br.net', +'view.atdmt.com.35087.9255.302br.net', +'view.atdmt.com.35088.9255.302br.net', +'view.atdmt.com.35089.9255.302br.net', +'view.atdmt.com.35090.9255.302br.net', +'view.atdmt.com.35091.9255.302br.net', +'view.atdmt.com.35092.9255.302br.net', +'view.atdmt.com.35093.9255.302br.net', +'view.atdmt.com.35094.9255.302br.net', +'view.atdmt.com.35095.9255.302br.net', +'view.atdmt.com.35096.9255.302br.net', +'view.atdmt.com.35097.9255.302br.net', +'view.atdmt.com.35098.9255.302br.net', +'view.atdmt.com.35099.9255.302br.net', +'view.atdmt.com.35100.9255.302br.net', +'view.atdmt.com.35178.9254.302br.net', +'view.atdmt.com.35179.9254.302br.net', +'view.atdmt.com.35181.9254.302br.net', +'view.atdmt.com.35182.9254.302br.net', +'view.atdmt.com.35184.9254.302br.net', +'view.atdmt.com.35185.9254.302br.net', +'view.atdmt.com.35187.9254.302br.net', +'view.atdmt.com.35188.9254.302br.net', +'view.atdmt.com.35190.9254.302br.net', +'view.atdmt.com.35191.9254.302br.net', +'view.atdmt.com.35193.9254.302br.net', +'view.atdmt.com.35194.9254.302br.net', +'view.atdmt.com.35353.9267.302br.net', +'view.atdmt.com.35354.9267.302br.net', +'view.atdmt.com.35357.9266.302br.net', +'view.atdmt.com.35372.9234.302br.net', +'view.atdmt.com.35381.9234.302br.net', +'view.atdmt.com.35384.9234.302br.net', +'view.atdmt.com.35411.9251.302br.net', +'view.atdmt.com.35413.9251.302br.net', +'view.atdmt.com.35622.9169.302br.net', +'view.atdmt.com.35623.9169.302br.net', +'view.atdmt.com.35624.9169.302br.net', +'view.atdmt.com.35625.9169.302br.net', +'view.atdmt.com.35626.9169.302br.net', +'view.atdmt.com.35627.9169.302br.net', +'view.atdmt.com.35628.9169.302br.net', +'view.atdmt.com.35629.9169.302br.net', +'view.atdmt.com.35630.9169.302br.net', +'view.atdmt.com.35631.9169.302br.net', +'view.atdmt.com.35632.9169.302br.net', +'view.atdmt.com.35633.9169.302br.net', +'view.atdmt.com.35757.9272.302br.net', +'view.atdmt.com.35766.9272.302br.net', +'view.atdmt.com.35769.9272.302br.net', +'view.atdmt.com.35775.9272.302br.net', +'view.atdmt.com.35778.9272.302br.net', +'view.atdmt.com.35972.9201.302br.net', +'view.atdmt.com.35973.9201.302br.net', +'view.atdmt.com.35980.9251.302br.net', +'view.atdmt.com.35981.9251.302br.net', +'view.atdmt.com.36272.9251.302br.net', +'view.atdmt.com.36273.9251.302br.net', +'view.atdmt.com.36315.9273.302br.net', +'view.atdmt.com.36318.9273.302br.net', +'view.atdmt.com.36321.9273.302br.net', +'view.atdmt.com.36324.9273.302br.net', +'view.atdmt.com.36330.9273.302br.net', +'view.atdmt.com.36333.9273.302br.net', +'view.atdmt.com.36336.9273.302br.net', +'view.atdmt.com.36339.9273.302br.net', +'view.atdmt.com.36342.9273.302br.net', +'view.atdmt.com.36345.9273.302br.net', +'view.atdmt.com.36348.9273.302br.net', +'view.atdmt.com.36891.9201.302br.net', +'view.atdmt.com.36892.9201.302br.net', +'view.atdmt.com.36893.9201.302br.net', +'view.atdmt.com.36894.9201.302br.net', +'view.atdmt.com.36895.9201.302br.net', +'view.atdmt.com.36896.9201.302br.net', +'view.atdmt.com.37929.9304.302br.net', +'view.atdmt.com.37932.9304.302br.net', +'view.atdmt.com.37935.9304.302br.net', +'view.atdmt.com.37947.9304.302br.net', +'view.atdmt.com.37950.9304.302br.net', +'view.atdmt.com.37953.9304.302br.net', +'view.atdmt.com.37965.9304.302br.net', +'view.atdmt.com.37968.9304.302br.net', +'view.atdmt.com.37971.9304.302br.net', +'view.atdmt.com.37983.9304.302br.net', +'view.atdmt.com.38004.9304.302br.net', +'view.atdmt.com.38007.9304.302br.net', +'view.atdmt.com.38019.9304.302br.net', +'view.atdmt.com.38022.9304.302br.net', +'view.atdmt.com.38025.9304.302br.net', +'view.atdmt.com.38037.9304.302br.net', +'view.atdmt.com.38040.9304.302br.net', +'view.atdmt.com.38043.9304.302br.net', +'view.atdmt.com.38055.9304.302br.net', +'view.atdmt.com.38058.9304.302br.net', +'view.atdmt.com.38061.9304.302br.net', +'view.atdmt.com.38073.9304.302br.net', +'view.atdmt.com.38076.9304.302br.net', +'view.atdmt.com.38079.9304.302br.net', +'view.atdmt.com.38094.9304.302br.net', +'view.atdmt.com.38097.9304.302br.net', +'view.atdmt.com.38127.9304.302br.net', +'view.atdmt.com.38130.9304.302br.net', +'view.atdmt.com.38145.9304.302br.net', +'view.atdmt.com.38148.9304.302br.net', +'view.atdmt.com.38151.9304.302br.net', +'view.atdmt.com.38163.9304.302br.net', +'view.atdmt.com.38166.9304.302br.net', +'view.atdmt.com.38169.9304.302br.net', +'view.atdmt.com.38181.9304.302br.net', +'view.atdmt.com.38184.9304.302br.net', +'view.atdmt.com.38187.9304.302br.net', +'view.atdmt.com.38199.9304.302br.net', +'view.atdmt.com.38202.9304.302br.net', +'view.atdmt.com.38205.9304.302br.net', +'view.atdmt.com.38217.9304.302br.net', +'view.atdmt.com.38220.9304.302br.net', +'view.atdmt.com.38223.9304.302br.net', +'view.atdmt.com.38235.9304.302br.net', +'view.atdmt.com.38238.9304.302br.net', +'view.atdmt.com.38241.9304.302br.net', +'view.atdmt.com.38253.9304.302br.net', +'view.atdmt.com.38256.9304.302br.net', +'view.atdmt.com.38274.9304.302br.net', +'view.atdmt.com.38289.9304.302br.net', +'view.atdmt.com.38292.9304.302br.net', +'view.atdmt.com.38295.9304.302br.net', +'view.atdmt.com.38307.9304.302br.net', +'view.atdmt.com.38310.9304.302br.net', +'view.atdmt.com.38313.9304.302br.net', +'view.atdmt.com.38316.9304.302br.net', +'view.atdmt.com.38319.9304.302br.net', +'view.atdmt.com.38322.9304.302br.net', +'view.atdmt.com.38334.9304.302br.net', +'view.atdmt.com.38337.9304.302br.net', +'view.atdmt.com.38340.9304.302br.net', +'view.atdmt.com.38352.9304.302br.net', +'view.atdmt.com.38355.9304.302br.net', +'view.atdmt.com.38358.9304.302br.net', +'view.atdmt.com.38370.9304.302br.net', +'view.atdmt.com.38373.9304.302br.net', +'view.atdmt.com.38376.9304.302br.net', +'view.atdmt.com.38388.9304.302br.net', +'view.atdmt.com.38391.9304.302br.net', +'view.atdmt.com.38394.9304.302br.net', +'view.atdmt.com.38406.9304.302br.net', +'view.atdmt.com.38409.9304.302br.net', +'view.atdmt.com.38412.9304.302br.net', +'view.atdmt.com.38424.9304.302br.net', +'view.atdmt.com.38427.9304.302br.net', +'view.atdmt.com.38430.9304.302br.net', +'view.atdmt.com.38445.9304.302br.net', +'view.atdmt.com.38463.9304.302br.net', +'view.atdmt.com.38466.9304.302br.net', +'view.atdmt.com.38468.9304.302br.net', +'view.atdmt.com.38469.9304.302br.net', +'view.atdmt.com.38471.9304.302br.net', +'view.atdmt.com.38472.9304.302br.net', +'view.atdmt.com.38474.9304.302br.net', +'view.atdmt.com.38475.9304.302br.net', +'view.atdmt.com.38478.9304.302br.net', +'view.atdmt.com.38481.9304.302br.net', +'view.atdmt.com.38484.9304.302br.net', +'view.atdmt.com.38487.9304.302br.net', +'view.atdmt.com.38490.9304.302br.net', +'view.atdmt.com.38493.9304.302br.net', +'view.atdmt.com.38495.9304.302br.net', +'view.atdmt.com.38496.9304.302br.net', +'view.atdmt.com.38498.9304.302br.net', +'view.atdmt.com.38499.9304.302br.net', +'view.atdmt.com.38501.9304.302br.net', +'view.atdmt.com.38502.9304.302br.net', +'view.atdmt.com.38514.9304.302br.net', +'view.atdmt.com.38517.9304.302br.net', +'view.atdmt.com.38520.9304.302br.net', +'view.atdmt.com.38532.9304.302br.net', +'view.atdmt.com.38535.9304.302br.net', +'view.atdmt.com.38541.9304.302br.net', +'view.atdmt.com.38544.9304.302br.net', +'view.atdmt.com.38547.9304.302br.net', +'view.atdmt.com.38559.9304.302br.net', +'view.atdmt.com.38562.9304.302br.net', +'view.atdmt.com.38565.9304.302br.net', +'view.atdmt.com.38586.9304.302br.net', +'view.atdmt.com.38589.9304.302br.net', +'view.atdmt.com.38592.9304.302br.net', +'view.atdmt.com.38595.9304.302br.net', +'view.atdmt.com.38598.9304.302br.net', +'view.atdmt.com.38601.9304.302br.net', +'view.atdmt.com.38604.9304.302br.net', +'view.atdmt.com.38607.9304.302br.net', +'view.atdmt.com.38610.9304.302br.net', +'view.atdmt.com.38613.9304.302br.net', +'view.atdmt.com.38616.9304.302br.net', +'view.atdmt.com.38619.9304.302br.net', +'view.atdmt.com.38622.9304.302br.net', +'view.atdmt.com.38625.9304.302br.net', +'view.atdmt.com.38628.9304.302br.net', +'view.atdmt.com.38631.9304.302br.net', +'view.atdmt.com.38634.9304.302br.net', +'view.atdmt.com.38637.9304.302br.net', +'view.atdmt.com.38649.9304.302br.net', +'view.atdmt.com.38652.9304.302br.net', +'view.atdmt.com.38655.9304.302br.net', +'view.atdmt.com.38676.9304.302br.net', +'view.atdmt.com.38678.9304.302br.net', +'view.atdmt.com.38679.9304.302br.net', +'view.atdmt.com.38681.9304.302br.net', +'view.atdmt.com.38682.9304.302br.net', +'view.atdmt.com.38688.9304.302br.net', +'view.atdmt.com.38694.9304.302br.net', +'view.atdmt.com.38697.9304.302br.net', +'view.atdmt.com.38700.9304.302br.net', +'view.atdmt.com.38703.9304.302br.net', +'view.atdmt.com.38706.9304.302br.net', +'view.atdmt.com.38712.9304.302br.net', +'view.atdmt.com.38715.9304.302br.net', +'view.atdmt.com.38718.9304.302br.net', +'view.atdmt.com.38721.9304.302br.net', +'view.atdmt.com.38724.9304.302br.net', +'view.atdmt.com.38727.9304.302br.net', +'view.atdmt.com.38733.9304.302br.net', +'view.atdmt.com.38736.9304.302br.net', +'view.atdmt.com.38739.9304.302br.net', +'view.atdmt.com.38742.9304.302br.net', +'view.atdmt.com.38745.9304.302br.net', +'view.atdmt.com.38748.9304.302br.net', +'view.atdmt.com.38754.9304.302br.net', +'view.atdmt.com.38757.9304.302br.net', +'view.atdmt.com.38760.9304.302br.net', +'view.atdmt.com.38763.9304.302br.net', +'view.atdmt.com.38766.9304.302br.net', +'view.atdmt.com.38769.9304.302br.net', +'view.atdmt.com.38772.9304.302br.net', +'view.atdmt.com.38784.9304.302br.net', +'view.atdmt.com.38787.9304.302br.net', +'view.atdmt.com.38790.9304.302br.net', +'view.atdmt.com.38793.9304.302br.net', +'view.atdmt.com.38796.9304.302br.net', +'view.atdmt.com.38799.9304.302br.net', +'view.atdmt.com.38801.9304.302br.net', +'view.atdmt.com.38802.9304.302br.net', +'view.atdmt.com.38804.9304.302br.net', +'view.atdmt.com.38805.9304.302br.net', +'view.atdmt.com.38807.9304.302br.net', +'view.atdmt.com.38808.9304.302br.net', +'view.atdmt.com.38811.9304.302br.net', +'view.atdmt.com.38814.9304.302br.net', +'view.atdmt.com.38817.9304.302br.net', +'view.atdmt.com.38829.9304.302br.net', +'view.atdmt.com.38832.9304.302br.net', +'view.atdmt.com.38835.9304.302br.net', +'view.atdmt.com.38853.9304.302br.net', +'view.atdmt.com.38856.9304.302br.net', +'view.atdmt.com.38859.9304.302br.net', +'view.atdmt.com.38862.9304.302br.net', +'view.atdmt.com.38874.9304.302br.net', +'view.atdmt.com.38904.9304.302br.net', +'view.atdmt.com.38907.9304.302br.net', +'view.atdmt.com.38936.9304.302br.net', +'view.atdmt.com.38937.9304.302br.net', +'view.atdmt.com.38939.9304.302br.net', +'view.atdmt.com.38940.9304.302br.net', +'view.atdmt.com.38942.9304.302br.net', +'view.atdmt.com.38943.9304.302br.net', +'view.atdmt.com.38981.9304.302br.net', +'view.atdmt.com.38982.9304.302br.net', +'view.atdmt.com.38984.9304.302br.net', +'view.atdmt.com.38985.9304.302br.net', +'view.atdmt.com.38987.9304.302br.net', +'view.atdmt.com.38988.9304.302br.net', +'view.atdmt.com.39026.9304.302br.net', +'view.atdmt.com.39027.9304.302br.net', +'view.atdmt.com.39029.9304.302br.net', +'view.atdmt.com.39030.9304.302br.net', +'view.atdmt.com.39032.9304.302br.net', +'view.atdmt.com.39033.9304.302br.net', +'view.atdmt.com.39071.9304.302br.net', +'view.atdmt.com.39072.9304.302br.net', +'view.atdmt.com.39074.9304.302br.net', +'view.atdmt.com.39075.9304.302br.net', +'view.atdmt.com.39077.9304.302br.net', +'view.atdmt.com.39078.9304.302br.net', +'view.atdmt.com.39116.9304.302br.net', +'view.atdmt.com.39117.9304.302br.net', +'view.atdmt.com.39119.9304.302br.net', +'view.atdmt.com.39120.9304.302br.net', +'view.atdmt.com.39122.9304.302br.net', +'view.atdmt.com.39123.9304.302br.net', +'view.atdmt.com.39161.9304.302br.net', +'view.atdmt.com.39162.9304.302br.net', +'view.atdmt.com.39164.9304.302br.net', +'view.atdmt.com.39165.9304.302br.net', +'view.atdmt.com.39167.9304.302br.net', +'view.atdmt.com.39168.9304.302br.net', +'view.atdmt.com.39206.9304.302br.net', +'view.atdmt.com.39207.9304.302br.net', +'view.atdmt.com.39209.9304.302br.net', +'view.atdmt.com.39210.9304.302br.net', +'view.atdmt.com.39212.9304.302br.net', +'view.atdmt.com.39213.9304.302br.net', +'view.atdmt.com.39252.9304.302br.net', +'view.atdmt.com.39254.9304.302br.net', +'view.atdmt.com.39255.9304.302br.net', +'view.atdmt.com.39258.9304.302br.net', +'view.atdmt.com.39296.9304.302br.net', +'view.atdmt.com.39297.9304.302br.net', +'view.atdmt.com.39299.9304.302br.net', +'view.atdmt.com.39300.9304.302br.net', +'view.atdmt.com.39302.9304.302br.net', +'view.atdmt.com.39303.9304.302br.net', +'view.atdmt.com.39341.9304.302br.net', +'view.atdmt.com.39342.9304.302br.net', +'view.atdmt.com.39344.9304.302br.net', +'view.atdmt.com.39345.9304.302br.net', +'view.atdmt.com.39347.9304.302br.net', +'view.atdmt.com.39348.9304.302br.net', +'view.atdmt.com.39372.9306.302br.net', +'view.atdmt.com.39373.9306.302br.net', +'view.atdmt.com.39374.9306.302br.net', +'view.atdmt.com.39375.9306.302br.net', +'view.atdmt.com.39376.9306.302br.net', +'view.atdmt.com.39377.9306.302br.net', +'view.atdmt.com.39378.9306.302br.net', +'view.atdmt.com.39380.9306.302br.net', +'view.atdmt.com.39382.9306.302br.net', +'view.atdmt.com.39384.9306.302br.net', +'view.atdmt.com.39385.9306.302br.net', +'view.atdmt.com.39386.9306.302br.net', +'view.atdmt.com.39388.9306.302br.net', +'view.atdmt.com.39389.9306.302br.net', +'view.atdmt.com.39390.9306.302br.net', +'view.atdmt.com.39391.9306.302br.net', +'view.atdmt.com.39392.9306.302br.net', +'view.atdmt.com.39393.9306.302br.net', +'view.atdmt.com.39394.9306.302br.net', +'view.atdmt.com.39404.9306.302br.net', +'view.atdmt.com.39406.9306.302br.net', +'view.atdmt.com.39407.9306.302br.net', +'view.atdmt.com.39408.9306.302br.net', +'view.atdmt.com.39410.9306.302br.net', +'view.atdmt.com.39420.9306.302br.net', +'view.atdmt.com.39422.9306.302br.net', +'view.atdmt.com.39424.9306.302br.net', +'view.atdmt.com.39426.9306.302br.net', +'view.atdmt.com.39438.9306.302br.net', +'view.atdmt.com.39945.88.302br.net', +'view.atdmt.com.39946.88.302br.net', +'view.atdmt.com.39947.88.302br.net', +'view.atdmt.com.39948.88.302br.net', +'view.atdmt.com.39949.88.302br.net', +'view.atdmt.com.39950.88.302br.net', +'view.atdmt.com.39951.88.302br.net', +'view.atdmt.com.39952.88.302br.net', +'view.atdmt.com.41248.9306.302br.net', +'view.atdmt.com.41250.9306.302br.net', +'view.atdmt.com.41252.9306.302br.net', +'view.atdmt.com.41253.9306.302br.net', +'view.atdmt.com.41254.9306.302br.net', +'view.atdmt.com.41258.9306.302br.net', +'view.atdmt.com.41260.9306.302br.net', +'view.atdmt.com.41262.9306.302br.net', +'view.atdmt.com.41264.9306.302br.net', +'view.atdmt.com.41266.9306.302br.net', +'view.atdmt.com.41268.9306.302br.net', +'view.atdmt.com.41270.9306.302br.net', +'view.atdmt.com.42099.9251.302br.net', +'view.atdmt.com.42101.9251.302br.net', +'view.atdmt.com.42102.9251.302br.net', +'view.atdmt.com.42105.9251.302br.net', +'view.atdmt.com.42497.9306.302br.net', +'view.atdmt.com.42499.9306.302br.net', +'view.atdmt.com.42509.9306.302br.net', +'view.atdmt.com.42511.9306.302br.net', +'view.atdmt.com.42513.9306.302br.net', +'view.atdmt.com.42514.9306.302br.net', +'view.atdmt.com.42515.9306.302br.net', +'view.atdmt.com.43133.9306.302br.net', +'view.atdmt.com.43134.9306.302br.net', +'view.atdmt.com.43136.9306.302br.net', +'view.atdmt.com.43138.9306.302br.net', +'view.atdmt.com.43140.9306.302br.net', +'view.atdmt.com.43142.9306.302br.net', +'view.atdmt.com.43144.9306.302br.net', +'view.atdmt.com.43146.9306.302br.net', +'view.atdmt.com.43148.9306.302br.net', +'view.atdmt.com.43341.9332.302br.net', +'view.atdmt.com.43342.9332.302br.net', +'view.atdmt.com.43344.9332.302br.net', +'view.atdmt.com.43345.9332.302br.net', +'view.atdmt.com.43348.9332.302br.net', +'view.atdmt.com.43350.9332.302br.net', +'view.atdmt.com.43351.9332.302br.net', +'view.atdmt.com.43353.9332.302br.net', +'view.atdmt.com.43354.9332.302br.net', +'view.atdmt.com.43356.9332.302br.net', +'view.atdmt.com.43357.9332.302br.net', +'view.atdmt.com.43359.9332.302br.net', +'view.atdmt.com.43360.9332.302br.net', +'view.atdmt.com.43362.9332.302br.net', +'view.atdmt.com.43363.9332.302br.net', +'view.atdmt.com.43365.9332.302br.net', +'view.atdmt.com.43366.9332.302br.net', +'view.atdmt.com.43368.9332.302br.net', +'view.atdmt.com.43369.9332.302br.net', +'view.atdmt.com.43372.9332.302br.net', +'view.atdmt.com.43374.9332.302br.net', +'view.atdmt.com.43375.9332.302br.net', +'view.atdmt.com.44728.9332.302br.net', +'view.atdmt.com.44730.9332.302br.net', +'view.atdmt.com.44731.9332.302br.net', +'view.atdmt.com.44733.9332.302br.net', +'view.atdmt.com.44734.9332.302br.net', +'view.atdmt.com.44737.9332.302br.net', +'view.atdmt.com.44739.9332.302br.net', +'view.atdmt.com.44740.9332.302br.net', +'view.atdmt.com.44742.9332.302br.net', +'view.atdmt.com.44743.9332.302br.net', +'view.atdmt.com.44745.9332.302br.net', +'view.atdmt.com.44746.9332.302br.net', +'view.atdmt.com.44749.9332.302br.net', +'view.atdmt.com.44751.9332.302br.net', +'view.atdmt.com.44752.9332.302br.net', +'view.atdmt.com.44755.9332.302br.net', +'view.atdmt.com.44757.9332.302br.net', +'view.atdmt.com.44758.9332.302br.net', +'view.atdmt.com.44761.9332.302br.net', +'view.atdmt.com.44763.9332.302br.net', +'view.atdmt.com.44764.9332.302br.net', +'view.atdmt.com.44767.9332.302br.net', +'view.atdmt.com.44770.9332.302br.net', +'view.atdmt.com.44773.9332.302br.net', +'view.atdmt.com.44776.9332.302br.net', +'view.atdmt.com.44779.9332.302br.net', +'view.atdmt.com.44782.9332.302br.net', +'view.atdmt.com.44785.9332.302br.net', +'view.atdmt.com.44788.9332.302br.net', +'view.atdmt.com.44791.9332.302br.net', +'view.atdmt.com.44793.9332.302br.net', +'view.atdmt.com.44794.9332.302br.net', +'view.atdmt.com.44797.9332.302br.net', +'view.atdmt.com.44800.9332.302br.net', +'view.atdmt.com.44805.9337.302br.net', +'view.atdmt.com.44806.9337.302br.net', +'view.atdmt.com.44947.9340.302br.net', +'view.atdmt.com.44950.9340.302br.net', +'view.atdmt.com.45053.9342.302br.net', +'view.atdmt.com.45055.9342.302br.net', +'view.atdmt.com.45058.9342.302br.net', +'view.atdmt.com.45060.9342.302br.net', +'view.atdmt.com.45064.9342.302br.net', +'view.atdmt.com.45066.9342.302br.net', +'view.atdmt.com.45067.9342.302br.net', +'view.atdmt.com.45069.9342.302br.net', +'view.atdmt.com.45072.9342.302br.net', +'view.atdmt.com.45073.9342.302br.net', +'view.atdmt.com.45076.9342.302br.net', +'view.atdmt.com.45077.9342.302br.net', +'view.atdmt.com.45080.9342.302br.net', +'view.atdmt.com.45081.9342.302br.net', +'view.atdmt.com.45084.9342.302br.net', +'view.atdmt.com.45086.9342.302br.net', +'view.atdmt.com.45087.9342.302br.net', +'view.atdmt.com.45090.9342.302br.net', +'view.atdmt.com.45092.9342.302br.net', +'view.atdmt.com.45093.9342.302br.net', +'view.atdmt.com.45098.9342.302br.net', +'view.atdmt.com.45099.9342.302br.net', +'view.atdmt.com.45102.9342.302br.net', +'view.atdmt.com.45103.9342.302br.net', +'view.atdmt.com.45105.9342.302br.net', +'view.atdmt.com.45110.9342.302br.net', +'view.atdmt.com.45112.9342.302br.net', +'view.atdmt.com.45115.9342.302br.net', +'view.atdmt.com.45118.9342.302br.net', +'view.atdmt.com.45119.9342.302br.net', +'view.atdmt.com.45121.9342.302br.net', +'view.atdmt.com.45124.9342.302br.net', +'view.atdmt.com.45128.9342.302br.net', +'view.atdmt.com.45129.9342.302br.net', +'view.atdmt.com.45133.9342.302br.net', +'view.atdmt.com.45136.9342.302br.net', +'view.atdmt.com.45139.9342.302br.net', +'view.atdmt.com.45142.9342.302br.net', +'view.atdmt.com.45145.9342.302br.net', +'view.atdmt.com.45148.9342.302br.net', +'view.atdmt.com.45151.9342.302br.net', +'view.atdmt.com.45154.9342.302br.net', +'view.atdmt.com.45157.9342.302br.net', +'view.atdmt.com.45160.9342.302br.net', +'view.atdmt.com.45163.9342.302br.net', +'view.atdmt.com.45166.9342.302br.net', +'view.atdmt.com.45169.9342.302br.net', +'view.atdmt.com.45172.9342.302br.net', +'view.atdmt.com.45175.9342.302br.net', +'view.atdmt.com.45178.9342.302br.net', +'view.atdmt.com.45181.9342.302br.net', +'view.atdmt.com.45184.9342.302br.net', +'view.atdmt.com.45187.9342.302br.net', +'view.atdmt.com.45190.9342.302br.net', +'view.atdmt.com.45192.9342.302br.net', +'view.atdmt.com.45193.9342.302br.net', +'view.atdmt.com.45196.9342.302br.net', +'view.atdmt.com.45198.9342.302br.net', +'view.atdmt.com.45199.9342.302br.net', +'view.atdmt.com.45201.9342.302br.net', +'view.atdmt.com.45202.9342.302br.net', +'view.atdmt.com.45205.9342.302br.net', +'view.atdmt.com.45208.9342.302br.net', +'view.atdmt.com.45211.9342.302br.net', +'view.atdmt.com.45214.9342.302br.net', +'view.atdmt.com.45217.9342.302br.net', +'view.atdmt.com.45220.9342.302br.net', +'view.atdmt.com.45223.9342.302br.net', +'view.atdmt.com.45226.9342.302br.net', +'view.atdmt.com.45229.9342.302br.net', +'view.atdmt.com.45231.9342.302br.net', +'view.atdmt.com.45232.9342.302br.net', +'view.atdmt.com.45234.9342.302br.net', +'view.atdmt.com.45235.9342.302br.net', +'view.atdmt.com.45238.9342.302br.net', +'view.atdmt.com.45241.9342.302br.net', +'view.atdmt.com.45243.9342.302br.net', +'view.atdmt.com.45244.9342.302br.net', +'view.atdmt.com.45247.9342.302br.net', +'view.atdmt.com.45250.9342.302br.net', +'view.atdmt.com.45253.9342.302br.net', +'view.atdmt.com.45256.9342.302br.net', +'view.atdmt.com.45259.9342.302br.net', +'view.atdmt.com.45262.9342.302br.net', +'view.atdmt.com.45265.9342.302br.net', +'view.atdmt.com.45267.9342.302br.net', +'view.atdmt.com.45268.9342.302br.net', +'view.atdmt.com.45270.9342.302br.net', +'view.atdmt.com.45271.9342.302br.net', +'view.atdmt.com.45273.9342.302br.net', +'view.atdmt.com.45274.9342.302br.net', +'view.atdmt.com.45277.9342.302br.net', +'view.atdmt.com.45280.9342.302br.net', +'view.atdmt.com.45283.9342.302br.net', +'view.atdmt.com.45286.9342.302br.net', +'view.atdmt.com.45289.9342.302br.net', +'view.atdmt.com.45292.9342.302br.net', +'view.atdmt.com.45295.9342.302br.net', +'view.atdmt.com.45298.9342.302br.net', +'view.atdmt.com.45301.9342.302br.net', +'view.atdmt.com.45304.9342.302br.net', +'view.atdmt.com.45307.9342.302br.net', +'view.atdmt.com.45309.9342.302br.net', +'view.atdmt.com.45310.9342.302br.net', +'view.atdmt.com.45311.9342.302br.net', +'view.atdmt.com.45312.9342.302br.net', +'view.atdmt.com.45313.9342.302br.net', +'view.atdmt.com.45314.9342.302br.net', +'view.atdmt.com.45316.9342.302br.net', +'view.atdmt.com.45317.9342.302br.net', +'view.atdmt.com.45318.9342.302br.net', +'view.atdmt.com.45320.9342.302br.net', +'view.atdmt.com.45321.9342.302br.net', +'view.atdmt.com.45322.9342.302br.net', +'view.atdmt.com.45323.9342.302br.net', +'view.atdmt.com.45324.9342.302br.net', +'view.atdmt.com.45325.9342.302br.net', +'view.atdmt.com.45326.9342.302br.net', +'view.atdmt.com.45328.9342.302br.net', +'view.atdmt.com.45330.9342.302br.net', +'view.atdmt.com.45332.9342.302br.net', +'view.atdmt.com.45340.9342.302br.net', +'view.atdmt.com.45342.9342.302br.net', +'view.atdmt.com.45344.9342.302br.net', +'view.atdmt.com.45352.9342.302br.net', +'view.atdmt.com.45354.9342.302br.net', +'view.atdmt.com.45356.9342.302br.net', +'view.atdmt.com.45358.9342.302br.net', +'view.atdmt.com.45359.9342.302br.net', +'view.atdmt.com.45360.9342.302br.net', +'view.atdmt.com.45361.9342.302br.net', +'view.atdmt.com.45362.9342.302br.net', +'view.atdmt.com.45364.9342.302br.net', +'view.atdmt.com.45366.9342.302br.net', +'view.atdmt.com.45368.9342.302br.net', +'view.atdmt.com.45370.9342.302br.net', +'view.atdmt.com.45372.9342.302br.net', +'view.atdmt.com.45374.9342.302br.net', +'view.atdmt.com.45376.9342.302br.net', +'view.atdmt.com.45378.9342.302br.net', +'view.atdmt.com.45380.9342.302br.net', +'view.atdmt.com.45382.9342.302br.net', +'view.atdmt.com.45384.9342.302br.net', +'view.atdmt.com.45388.9342.302br.net', +'view.atdmt.com.45390.9342.302br.net', +'view.atdmt.com.45392.9342.302br.net', +'view.atdmt.com.45393.9337.302br.net', +'view.atdmt.com.45394.9337.302br.net', +'view.atdmt.com.46297.9304.302br.net', +'view.atdmt.com.46300.9304.302br.net', +'view.atdmt.com.46303.9304.302br.net', +'view.atdmt.com.46306.9304.302br.net', +'view.atdmt.com.46309.9304.302br.net', +'view.atdmt.com.46312.9304.302br.net', +'view.atdmt.com.46315.9304.302br.net', +'view.atdmt.com.46318.9304.302br.net', +'view.atdmt.com.46321.9304.302br.net', +'view.atdmt.com.46324.9304.302br.net', +'view.atdmt.com.46327.9304.302br.net', +'view.atdmt.com.46330.9304.302br.net', +'view.atdmt.com.46333.9304.302br.net', +'view.atdmt.com.46336.9304.302br.net', +'view.atdmt.com.46339.9304.302br.net', +'view.atdmt.com.46342.9304.302br.net', +'view.atdmt.com.46345.9304.302br.net', +'view.atdmt.com.46348.9304.302br.net', +'view.atdmt.com.46351.9304.302br.net', +'view.atdmt.com.46354.9304.302br.net', +'view.atdmt.com.46357.9304.302br.net', +'view.atdmt.com.46360.9304.302br.net', +'view.atdmt.com.46363.9304.302br.net', +'view.atdmt.com.46366.9304.302br.net', +'view.atdmt.com.46369.9304.302br.net', +'view.atdmt.com.46372.9304.302br.net', +'view.atdmt.com.46375.9304.302br.net', +'view.atdmt.com.46378.9304.302br.net', +'view.atdmt.com.46381.9304.302br.net', +'view.atdmt.com.46384.9304.302br.net', +'view.atdmt.com.46387.9304.302br.net', +'view.atdmt.com.46390.9304.302br.net', +'view.atdmt.com.46393.9304.302br.net', +'view.atdmt.com.46396.9304.302br.net', +'view.atdmt.com.46399.9304.302br.net', +'view.atdmt.com.46402.9304.302br.net', +'view.atdmt.com.46405.9304.302br.net', +'view.atdmt.com.46408.9304.302br.net', +'view.atdmt.com.46411.9304.302br.net', +'view.atdmt.com.46414.9304.302br.net', +'view.atdmt.com.46417.9304.302br.net', +'view.atdmt.com.46420.9304.302br.net', +'view.atdmt.com.46423.9304.302br.net', +'view.atdmt.com.46426.9304.302br.net', +'view.atdmt.com.46429.9304.302br.net', +'view.atdmt.com.46432.9304.302br.net', +'view.atdmt.com.46435.9304.302br.net', +'view.atdmt.com.46438.9304.302br.net', +'view.atdmt.com.46440.9304.302br.net', +'view.atdmt.com.46441.9304.302br.net', +'view.atdmt.com.46443.9304.302br.net', +'view.atdmt.com.46444.9304.302br.net', +'view.atdmt.com.46447.9304.302br.net', +'view.atdmt.com.46450.9304.302br.net', +'view.atdmt.com.46452.9304.302br.net', +'view.atdmt.com.46453.9304.302br.net', +'view.atdmt.com.46455.9304.302br.net', +'view.atdmt.com.46456.9304.302br.net', +'view.atdmt.com.46459.9304.302br.net', +'view.atdmt.com.46462.9304.302br.net', +'view.atdmt.com.46468.9304.302br.net', +'view.atdmt.com.46470.9304.302br.net', +'view.atdmt.com.46471.9304.302br.net', +'view.atdmt.com.46473.9304.302br.net', +'view.atdmt.com.46474.9304.302br.net', +'view.atdmt.com.46477.9304.302br.net', +'view.atdmt.com.46480.9304.302br.net', +'view.atdmt.com.46483.9304.302br.net', +'view.atdmt.com.46485.9304.302br.net', +'view.atdmt.com.46486.9304.302br.net', +'view.atdmt.com.46488.9304.302br.net', +'view.atdmt.com.46489.9304.302br.net', +'view.atdmt.com.46492.9304.302br.net', +'view.atdmt.com.46494.9304.302br.net', +'view.atdmt.com.46495.9304.302br.net', +'view.atdmt.com.46498.9304.302br.net', +'view.atdmt.com.46501.9304.302br.net', +'view.atdmt.com.46503.9304.302br.net', +'view.atdmt.com.46504.9304.302br.net', +'view.atdmt.com.46506.9304.302br.net', +'view.atdmt.com.46507.9304.302br.net', +'view.atdmt.com.46510.9304.302br.net', +'view.atdmt.com.46512.9304.302br.net', +'view.atdmt.com.46513.9304.302br.net', +'view.atdmt.com.46515.9304.302br.net', +'view.atdmt.com.46516.9304.302br.net', +'view.atdmt.com.46519.9304.302br.net', +'view.atdmt.com.46521.9304.302br.net', +'view.atdmt.com.46522.9304.302br.net', +'view.atdmt.com.46525.9304.302br.net', +'view.atdmt.com.46528.9304.302br.net', +'view.atdmt.com.46530.9304.302br.net', +'view.atdmt.com.46531.9304.302br.net', +'view.atdmt.com.46534.9304.302br.net', +'view.atdmt.com.46537.9304.302br.net', +'view.atdmt.com.46540.9304.302br.net', +'view.atdmt.com.46543.9304.302br.net', +'view.atdmt.com.46546.9304.302br.net', +'view.atdmt.com.46549.9304.302br.net', +'view.atdmt.com.46552.9304.302br.net', +'view.atdmt.com.46555.9304.302br.net', +'view.atdmt.com.46558.9304.302br.net', +'view.atdmt.com.46561.9304.302br.net', +'view.atdmt.com.46564.9304.302br.net', +'view.atdmt.com.46567.9304.302br.net', +'view.atdmt.com.46570.9304.302br.net', +'view.atdmt.com.46573.9304.302br.net', +'view.atdmt.com.46576.9304.302br.net', +'view.atdmt.com.46579.9304.302br.net', +'view.atdmt.com.46582.9304.302br.net', +'view.atdmt.com.46588.9304.302br.net', +'view.atdmt.com.46591.9304.302br.net', +'view.atdmt.com.46594.9304.302br.net', +'view.atdmt.com.46597.9304.302br.net', +'view.atdmt.com.46600.9304.302br.net', +'view.atdmt.com.46603.9304.302br.net', +'view.atdmt.com.46606.9304.302br.net', +'view.atdmt.com.46609.9304.302br.net', +'view.atdmt.com.46611.9304.302br.net', +'view.atdmt.com.46612.9304.302br.net', +'view.atdmt.com.46614.9304.302br.net', +'view.atdmt.com.46615.9304.302br.net', +'view.atdmt.com.46617.9304.302br.net', +'view.atdmt.com.46618.9304.302br.net', +'view.atdmt.com.46620.9304.302br.net', +'view.atdmt.com.46621.9304.302br.net', +'view.atdmt.com.46623.9304.302br.net', +'view.atdmt.com.46624.9304.302br.net', +'view.atdmt.com.46626.9304.302br.net', +'view.atdmt.com.46627.9304.302br.net', +'view.atdmt.com.46629.9304.302br.net', +'view.atdmt.com.46630.9304.302br.net', +'view.atdmt.com.46632.9304.302br.net', +'view.atdmt.com.46633.9304.302br.net', +'view.atdmt.com.46635.9304.302br.net', +'view.atdmt.com.46636.9304.302br.net', +'view.atdmt.com.46638.9304.302br.net', +'view.atdmt.com.46639.9304.302br.net', +'view.atdmt.com.46641.9304.302br.net', +'view.atdmt.com.46642.9304.302br.net', +'view.atdmt.com.46644.9304.302br.net', +'view.atdmt.com.46645.9304.302br.net', +'view.atdmt.com.46647.9304.302br.net', +'view.atdmt.com.46648.9304.302br.net', +'view.atdmt.com.46650.9304.302br.net', +'view.atdmt.com.46651.9304.302br.net', +'view.atdmt.com.46653.9304.302br.net', +'view.atdmt.com.46654.9304.302br.net', +'view.atdmt.com.46656.9304.302br.net', +'view.atdmt.com.46657.9304.302br.net', +'view.atdmt.com.46659.9304.302br.net', +'view.atdmt.com.46660.9304.302br.net', +'view.atdmt.com.46662.9304.302br.net', +'view.atdmt.com.46663.9304.302br.net', +'view.atdmt.com.46665.9304.302br.net', +'view.atdmt.com.46666.9304.302br.net', +'view.atdmt.com.46668.9304.302br.net', +'view.atdmt.com.46669.9304.302br.net', +'view.atdmt.com.46671.9304.302br.net', +'view.atdmt.com.46672.9304.302br.net', +'view.atdmt.com.46675.9304.302br.net', +'view.atdmt.com.46678.9304.302br.net', +'view.atdmt.com.46680.9304.302br.net', +'view.atdmt.com.46681.9304.302br.net', +'view.atdmt.com.46683.9304.302br.net', +'view.atdmt.com.46684.9304.302br.net', +'view.atdmt.com.46687.9304.302br.net', +'view.atdmt.com.46690.9304.302br.net', +'view.atdmt.com.46693.9304.302br.net', +'view.atdmt.com.46696.9304.302br.net', +'view.atdmt.com.46699.9304.302br.net', +'view.atdmt.com.46702.9304.302br.net', +'view.atdmt.com.46705.9304.302br.net', +'view.atdmt.com.46708.9304.302br.net', +'view.atdmt.com.46711.9304.302br.net', +'view.atdmt.com.46714.9304.302br.net', +'view.atdmt.com.46716.9304.302br.net', +'view.atdmt.com.46717.9304.302br.net', +'view.atdmt.com.46720.9304.302br.net', +'view.atdmt.com.46723.9304.302br.net', +'view.atdmt.com.46726.9304.302br.net', +'view.atdmt.com.46729.9304.302br.net', +'view.atdmt.com.46732.9304.302br.net', +'view.atdmt.com.46735.9304.302br.net', +'view.atdmt.com.46738.9304.302br.net', +'view.atdmt.com.46741.9304.302br.net', +'view.atdmt.com.46744.9304.302br.net', +'view.atdmt.com.46747.9304.302br.net', +'view.atdmt.com.46750.9304.302br.net', +'view.atdmt.com.46753.9304.302br.net', +'view.atdmt.com.46756.9304.302br.net', +'view.atdmt.com.46759.9304.302br.net', +'view.atdmt.com.46762.9304.302br.net', +'view.atdmt.com.46765.9304.302br.net', +'view.atdmt.com.46768.9304.302br.net', +'view.atdmt.com.46771.9304.302br.net', +'view.atdmt.com.46774.9304.302br.net', +'view.atdmt.com.46777.9304.302br.net', +'view.atdmt.com.46780.9304.302br.net', +'view.atdmt.com.46783.9304.302br.net', +'view.atdmt.com.46786.9304.302br.net', +'view.atdmt.com.46789.9304.302br.net', +'view.atdmt.com.46792.9304.302br.net', +'view.atdmt.com.46795.9304.302br.net', +'view.atdmt.com.46798.9304.302br.net', +'view.atdmt.com.46801.9304.302br.net', +'view.atdmt.com.46804.9304.302br.net', +'view.atdmt.com.46807.9304.302br.net', +'view.atdmt.com.46810.9304.302br.net', +'view.atdmt.com.46813.9304.302br.net', +'view.atdmt.com.46816.9304.302br.net', +'view.atdmt.com.46819.9304.302br.net', +'view.atdmt.com.46822.9304.302br.net', +'view.atdmt.com.46825.9304.302br.net', +'view.atdmt.com.46828.9304.302br.net', +'view.atdmt.com.46831.9304.302br.net', +'view.atdmt.com.46834.9304.302br.net', +'view.atdmt.com.46837.9304.302br.net', +'view.atdmt.com.46840.9304.302br.net', +'view.atdmt.com.46843.9304.302br.net', +'view.atdmt.com.46846.9304.302br.net', +'view.atdmt.com.46849.9304.302br.net', +'view.atdmt.com.46852.9304.302br.net', +'view.atdmt.com.46855.9304.302br.net', +'view.atdmt.com.46858.9304.302br.net', +'view.atdmt.com.46861.9304.302br.net', +'view.atdmt.com.46864.9304.302br.net', +'view.atdmt.com.46867.9304.302br.net', +'view.atdmt.com.46870.9304.302br.net', +'view.atdmt.com.46873.9304.302br.net', +'view.atdmt.com.46876.9304.302br.net', +'view.atdmt.com.46879.9304.302br.net', +'view.atdmt.com.46882.9304.302br.net', +'view.atdmt.com.46885.9304.302br.net', +'view.atdmt.com.46888.9304.302br.net', +'view.atdmt.com.46891.9304.302br.net', +'view.atdmt.com.46894.9304.302br.net', +'view.atdmt.com.46897.9304.302br.net', +'view.atdmt.com.46900.9304.302br.net', +'view.atdmt.com.46903.9304.302br.net', +'view.atdmt.com.46906.9304.302br.net', +'view.atdmt.com.46909.9304.302br.net', +'view.atdmt.com.46912.9304.302br.net', +'view.atdmt.com.46915.9304.302br.net', +'view.atdmt.com.46918.9304.302br.net', +'view.atdmt.com.46921.9304.302br.net', +'view.atdmt.com.47642.9304.302br.net', +'view.atdmt.com.47645.9304.302br.net', +'view.atdmt.com.47648.9304.302br.net', +'view.atdmt.com.47651.9304.302br.net', +'view.atdmt.com.47654.9304.302br.net', +'view.atdmt.com.47657.9304.302br.net', +'view.atdmt.com.47660.9304.302br.net', +'view.atdmt.com.47663.9304.302br.net', +'view.atdmt.com.47666.9304.302br.net', +'view.atdmt.com.47668.9304.302br.net', +'view.atdmt.com.47669.9304.302br.net', +'view.atdmt.com.47671.9304.302br.net', +'view.atdmt.com.47672.9304.302br.net', +'view.atdmt.com.47675.9304.302br.net', +'view.atdmt.com.47678.9304.302br.net', +'view.atdmt.com.47681.9304.302br.net', +'view.atdmt.com.47684.9304.302br.net', +'view.atdmt.com.47686.9304.302br.net', +'view.atdmt.com.47687.9304.302br.net', +'view.atdmt.com.47689.9304.302br.net', +'view.atdmt.com.47690.9304.302br.net', +'view.atdmt.com.47692.9304.302br.net', +'view.atdmt.com.47693.9304.302br.net', +'view.atdmt.com.47696.9304.302br.net', +'view.atdmt.com.47699.9304.302br.net', +'view.atdmt.com.47702.9304.302br.net', +'view.atdmt.com.47704.9304.302br.net', +'view.atdmt.com.47705.9304.302br.net', +'view.atdmt.com.47708.9304.302br.net', +'view.atdmt.com.47711.9304.302br.net', +'view.atdmt.com.47714.9304.302br.net', +'view.atdmt.com.47717.9304.302br.net', +'view.atdmt.com.47720.9304.302br.net', +'view.atdmt.com.47723.9304.302br.net', +'view.atdmt.com.47726.9304.302br.net', +'view.atdmt.com.47729.9304.302br.net', +'view.atdmt.com.49584.9332.302br.net', +'view.atdmt.com.49586.9332.302br.net', +'view.atdmt.com.49587.9332.302br.net', +'view.atdmt.com.49590.9332.302br.net', +'view.atdmt.com.49592.9332.302br.net', +'view.atdmt.com.49593.9332.302br.net', +'view.atdmt.com.49596.9332.302br.net', +'view.atdmt.com.49598.9332.302br.net', +'view.atdmt.com.49599.9332.302br.net', +'view.atdmt.com.51322.9342.302br.net', +'view.atdmt.com.51324.9342.302br.net', +'view.atdmt.com.51872.9377.302br.net', +'view.atdmt.com.51874.9377.302br.net', +'view.atdmt.com.51876.9377.302br.net', +'view.atdmt.com.51878.9377.302br.net', +'view.atdmt.com.51880.9377.302br.net', +'view.atdmt.com.51882.9377.302br.net', +'view.atdmt.com.51884.9377.302br.net', +'view.atdmt.com.51886.9377.302br.net', +'view.atdmt.com.51888.9377.302br.net', +'view.atdmt.com.51890.9377.302br.net', +'view.atdmt.com.51892.9377.302br.net', +'view.atdmt.com.52832.9332.302br.net', +'view.atdmt.com.52833.9332.302br.net', +'view.atdmt.com.52835.9332.302br.net', +'view.atdmt.com.52836.9332.302br.net', +'view.atdmt.com.52839.9332.302br.net', +'view.atdmt.com.52841.9332.302br.net', +'view.atdmt.com.52842.9332.302br.net', +'view.atdmt.com.52845.9332.302br.net', +'view.atdmt.com.52847.9332.302br.net', +'view.atdmt.com.52848.9332.302br.net', +'view.atdmt.com.52905.9332.302br.net', +'view.atdmt.com.52907.9332.302br.net', +'view.atdmt.com.52908.9332.302br.net', +'view.atdmt.com.52910.9332.302br.net', +'view.atdmt.com.52911.9332.302br.net', +'view.atdmt.com.52914.9332.302br.net', +'view.atdmt.com.52917.9332.302br.net', +'view.atdmt.com.52920.9332.302br.net', +'view.atdmt.com.52923.9332.302br.net', +'view.atdmt.com.52926.9332.302br.net', +'view.atdmt.com.52929.9332.302br.net', +'view.atdmt.com.52932.9332.302br.net', +'view.atdmt.com.52934.9332.302br.net', +'view.atdmt.com.52935.9332.302br.net', +'view.atdmt.com.52937.9332.302br.net', +'view.atdmt.com.52938.9332.302br.net', +'view.atdmt.com.52940.9332.302br.net', +'view.atdmt.com.52941.9332.302br.net', +'view.atdmt.com.52947.9332.302br.net', +'view.atdmt.com.52950.9332.302br.net', +'view.atdmt.com.52952.9332.302br.net', +'view.atdmt.com.52953.9332.302br.net', +'view.atdmt.com.52956.9332.302br.net', +'view.atdmt.com.52959.9332.302br.net', +'view.atdmt.com.52962.9332.302br.net', +'view.atdmt.com.52964.9332.302br.net', +'view.atdmt.com.52965.9332.302br.net', +'view.atdmt.com.52968.9332.302br.net', +'view.atdmt.com.52970.9332.302br.net', +'view.atdmt.com.52971.9332.302br.net', +'view.atdmt.com.52974.9332.302br.net', +'view.atdmt.com.52976.9332.302br.net', +'view.atdmt.com.52977.9332.302br.net', +'view.atdmt.com.52998.9332.302br.net', +'view.atdmt.com.53000.9332.302br.net', +'view.atdmt.com.53001.9332.302br.net', +'view.atdmt.com.53003.9332.302br.net', +'view.atdmt.com.53004.9332.302br.net', +'view.atdmt.com.53007.9332.302br.net', +'view.atdmt.com.53009.9332.302br.net', +'view.atdmt.com.53010.9332.302br.net', +'view.atdmt.com.53012.9332.302br.net', +'view.atdmt.com.53013.9332.302br.net', +'view.atdmt.com.53015.9332.302br.net', +'view.atdmt.com.53016.9332.302br.net', +'view.atdmt.com.53019.9332.302br.net', +'view.atdmt.com.53021.9332.302br.net', +'view.atdmt.com.53022.9332.302br.net', +'view.atdmt.com.53025.9332.302br.net', +'view.atdmt.com.53028.9332.302br.net', +'view.atdmt.com.53030.9332.302br.net', +'view.atdmt.com.53031.9332.302br.net', +'view.atdmt.com.53034.9332.302br.net', +'view.atdmt.com.53037.9332.302br.net', +'view.atdmt.com.53040.9332.302br.net', +'view.atdmt.com.53042.9332.302br.net', +'view.atdmt.com.53043.9332.302br.net', +'view.atdmt.com.53045.9332.302br.net', +'view.atdmt.com.53046.9332.302br.net', +'view.atdmt.com.53049.9332.302br.net', +'view.atdmt.com.53051.9332.302br.net', +'view.atdmt.com.53052.9332.302br.net', +'view.atdmt.com.53055.9332.302br.net', +'view.atdmt.com.53058.9332.302br.net', +'view.atdmt.com.53060.9332.302br.net', +'view.atdmt.com.53061.9332.302br.net', +'view.atdmt.com.53063.9332.302br.net', +'view.atdmt.com.53064.9332.302br.net', +'view.atdmt.com.53066.9332.302br.net', +'view.atdmt.com.53067.9332.302br.net', +'view.atdmt.com.53069.9332.302br.net', +'view.atdmt.com.53070.9332.302br.net', +'view.atdmt.com.55641.9170.302br.net', +'view.atdmt.com.55644.9170.302br.net', +'view.atdmt.com.55647.9170.302br.net', +'view.atdmt.com.55682.9391.302br.net', +'view.atdmt.com.55684.9391.302br.net', +'view.atdmt.com.55686.9391.302br.net', +'view.atdmt.com.55688.9391.302br.net', +'view.atdmt.com.55690.9391.302br.net', +'view.atdmt.com.55692.9391.302br.net', +'view.atdmt.com.55696.9391.302br.net', +'view.atdmt.com.55706.9391.302br.net', +'view.atdmt.com.55708.9391.302br.net', +'view.atdmt.com.55710.9391.302br.net', +'view.atdmt.com.55718.9391.302br.net', +'view.atdmt.com.55720.9391.302br.net', +'view.atdmt.com.55722.9391.302br.net', +'view.atdmt.com.55724.9391.302br.net', +'view.atdmt.com.55726.9391.302br.net', +'view.atdmt.com.55728.9391.302br.net', +'view.atdmt.com.55730.9391.302br.net', +'view.atdmt.com.55732.9391.302br.net', +'view.atdmt.com.55734.9391.302br.net', +'view.atdmt.com.55736.9391.302br.net', +'view.atdmt.com.55748.9391.302br.net', +'view.atdmt.com.55750.9391.302br.net', +'view.atdmt.com.55752.9391.302br.net', +'view.atdmt.com.55754.9391.302br.net', +'view.atdmt.com.55756.9391.302br.net', +'view.atdmt.com.55758.9391.302br.net', +'view.atdmt.com.55760.9391.302br.net', +'view.atdmt.com.55772.9391.302br.net', +'view.atdmt.com.55774.9391.302br.net', +'view.atdmt.com.55777.9391.302br.net', +'view.atdmt.com.55778.9391.302br.net', +'view.atdmt.com.55779.9391.302br.net', +'view.atdmt.com.55780.9391.302br.net', +'view.atdmt.com.55781.9391.302br.net', +'view.atdmt.com.55782.9391.302br.net', +'view.atdmt.com.55783.9391.302br.net', +'view.atdmt.com.55784.9391.302br.net', +'view.atdmt.com.55785.9391.302br.net', +'view.atdmt.com.55786.9391.302br.net', +'view.atdmt.com.55787.9391.302br.net', +'view.atdmt.com.55788.9391.302br.net', +'view.atdmt.com.55789.9391.302br.net', +'view.atdmt.com.55790.9391.302br.net', +'view.atdmt.com.55791.9391.302br.net', +'view.atdmt.com.55792.9391.302br.net', +'view.atdmt.com.55793.9391.302br.net', +'view.atdmt.com.55794.9391.302br.net', +'view.atdmt.com.55917.9391.302br.net', +'view.atdmt.com.55919.9391.302br.net', +'view.atdmt.com.55921.9391.302br.net', +'view.atdmt.com.55923.9391.302br.net', +'view.atdmt.com.55925.9391.302br.net', +'view.atdmt.com.55927.9391.302br.net', +'view.atdmt.com.55929.9391.302br.net', +'view.atdmt.com.55931.9391.302br.net', +'view.atdmt.com.55933.9391.302br.net', +'view.atdmt.com.55935.9391.302br.net', +'view.atdmt.com.55937.9391.302br.net', +'view.atdmt.com.55939.9391.302br.net', +'view.atdmt.com.55941.9391.302br.net', +'view.atdmt.com.55945.9391.302br.net', +'view.atdmt.com.55947.9391.302br.net', +'view.atdmt.com.55949.9391.302br.net', +'view.atdmt.com.55951.9391.302br.net', +'view.atdmt.com.55953.9391.302br.net', +'view.atdmt.com.55955.9391.302br.net', +'view.atdmt.com.55957.9391.302br.net', +'view.atdmt.com.55959.9391.302br.net', +'view.atdmt.com.55961.9391.302br.net', +'view.atdmt.com.55963.9391.302br.net', +'view.atdmt.com.55965.9391.302br.net', +'view.atdmt.com.55967.9391.302br.net', +'view.atdmt.com.55969.9391.302br.net', +'view.atdmt.com.55971.9391.302br.net', +'view.atdmt.com.55973.9391.302br.net', +'view.atdmt.com.55975.9391.302br.net', +'view.atdmt.com.55977.9391.302br.net', +'view.atdmt.com.55979.9391.302br.net', +'view.atdmt.com.55981.9391.302br.net', +'view.atdmt.com.55983.9391.302br.net', +'view.atdmt.com.55985.9391.302br.net', +'view.atdmt.com.55987.9391.302br.net', +'view.atdmt.com.55988.9391.302br.net', +'view.atdmt.com.55989.9391.302br.net', +'view.atdmt.com.55990.9391.302br.net', +'view.atdmt.com.55991.9391.302br.net', +'view.atdmt.com.55992.9391.302br.net', +'view.atdmt.com.55993.9391.302br.net', +'view.atdmt.com.56400.9395.302br.net', +'view.atdmt.com.56402.9395.302br.net', +'view.atdmt.com.56403.9395.302br.net', +'view.atdmt.com.56406.9395.302br.net', +'view.atdmt.com.56412.9395.302br.net', +'view.atdmt.com.57073.9395.302br.net', +'view.atdmt.com.57074.9395.302br.net', +'view.atdmt.com.57094.9395.302br.net', +'view.atdmt.com.57095.9395.302br.net', +'view.atdmt.com.57097.9395.302br.net', +'view.atdmt.com.57098.9395.302br.net', +'view.atdmt.com.57100.9395.302br.net', +'view.atdmt.com.57101.9395.302br.net', +'view.atdmt.com.57104.9395.302br.net', +'view.atdmt.com.6000.302br.net', +'view.atdmt.com.60370.9201.302br.net', +'view.atdmt.com.60371.9201.302br.net', +'view.atdmt.com.60413.9342.302br.net', +'view.atdmt.com.60416.9342.302br.net', +'view.atdmt.com.60419.9342.302br.net', +'view.atdmt.com.60480.9433.302br.net', +'view.atdmt.com.60481.9433.302br.net', +'view.atdmt.com.60643.9391.302br.net', +'view.atdmt.com.63029.9391.302br.net', +'view.atdmt.com.63031.9391.302br.net', +'view.atdmt.com.63033.9391.302br.net', +'view.atdmt.com.63035.9391.302br.net', +'view.atdmt.com.63037.9391.302br.net', +'view.atdmt.com.63039.9391.302br.net', +'view.atdmt.com.63041.9391.302br.net', +'view.atdmt.com.63043.9391.302br.net', +'view.atdmt.com.63045.9391.302br.net', +'view.atdmt.com.63429.9488.302br.net', +'view.atdmt.com.63430.9488.302br.net', +'view.atdmt.com.63508.9489.302br.net', +'view.atdmt.com.63511.9489.302br.net', +'view.atdmt.com.63532.9489.302br.net', +'view.atdmt.com.63534.9489.302br.net', +'view.atdmt.com.63535.9489.302br.net', +'view.atdmt.com.63537.9489.302br.net', +'view.atdmt.com.63538.9489.302br.net', +'view.atdmt.com.63540.9489.302br.net', +'view.atdmt.com.63541.9489.302br.net', +'view.atdmt.com.63544.9489.302br.net', +'view.atdmt.com.63547.9489.302br.net', +'view.atdmt.com.63549.9489.302br.net', +'view.atdmt.com.63550.9489.302br.net', +'view.atdmt.com.63552.9489.302br.net', +'view.atdmt.com.63553.9489.302br.net', +'view.atdmt.com.63555.9489.302br.net', +'view.atdmt.com.63556.9489.302br.net', +'view.atdmt.com.63558.9489.302br.net', +'view.atdmt.com.63559.9489.302br.net', +'view.atdmt.com.63561.9489.302br.net', +'view.atdmt.com.63562.9489.302br.net', +'view.atdmt.com.63564.9489.302br.net', +'view.atdmt.com.63565.9489.302br.net', +'view.atdmt.com.63567.9489.302br.net', +'view.atdmt.com.63568.9489.302br.net', +'view.atdmt.com.63570.9489.302br.net', +'view.atdmt.com.63571.9489.302br.net', +'view.atdmt.com.63573.9489.302br.net', +'view.atdmt.com.63574.9489.302br.net', +'view.atdmt.com.63576.9489.302br.net', +'view.atdmt.com.63577.9489.302br.net', +'view.atdmt.com.63579.9489.302br.net', +'view.atdmt.com.63580.9489.302br.net', +'view.atdmt.com.63582.9489.302br.net', +'view.atdmt.com.63583.9489.302br.net', +'view.atdmt.com.63585.9489.302br.net', +'view.atdmt.com.63586.9489.302br.net', +'view.atdmt.com.63588.9489.302br.net', +'view.atdmt.com.63589.9489.302br.net', +'view.atdmt.com.63591.9489.302br.net', +'view.atdmt.com.63592.9489.302br.net', +'view.atdmt.com.63594.9489.302br.net', +'view.atdmt.com.63595.9489.302br.net', +'view.atdmt.com.63598.9489.302br.net', +'view.atdmt.com.63601.9489.302br.net', +'view.atdmt.com.63628.9489.302br.net', +'view.atdmt.com.63630.9489.302br.net', +'view.atdmt.com.63631.9489.302br.net', +'view.atdmt.com.63633.9489.302br.net', +'view.atdmt.com.63634.9489.302br.net', +'view.atdmt.com.63636.9489.302br.net', +'view.atdmt.com.63637.9489.302br.net', +'view.atdmt.com.63676.9489.302br.net', +'view.atdmt.com.63678.9489.302br.net', +'view.atdmt.com.63679.9489.302br.net', +'view.atdmt.com.63681.9489.302br.net', +'view.atdmt.com.63682.9489.302br.net', +'view.atdmt.com.63693.9489.302br.net', +'view.atdmt.com.63694.9489.302br.net', +'view.atdmt.com.63695.9489.302br.net', +'view.atdmt.com.63696.9489.302br.net', +'view.atdmt.com.63697.9489.302br.net', +'view.atdmt.com.63698.9489.302br.net', +'view.atdmt.com.63699.9489.302br.net', +'view.atdmt.com.63700.9489.302br.net', +'view.atdmt.com.63702.9491.302br.net', +'view.atdmt.com.63705.9491.302br.net', +'view.atdmt.com.63708.9491.302br.net', +'view.atdmt.com.63711.9491.302br.net', +'view.atdmt.com.63714.9491.302br.net', +'view.atdmt.com.63716.9491.302br.net', +'view.atdmt.com.63717.9491.302br.net', +'view.atdmt.com.63719.9491.302br.net', +'view.atdmt.com.63720.9491.302br.net', +'view.atdmt.com.63722.9491.302br.net', +'view.atdmt.com.63723.9491.302br.net', +'view.atdmt.com.63725.9491.302br.net', +'view.atdmt.com.63726.9491.302br.net', +'view.atdmt.com.63728.9491.302br.net', +'view.atdmt.com.63729.9491.302br.net', +'view.atdmt.com.63731.9491.302br.net', +'view.atdmt.com.63732.9491.302br.net', +'view.atdmt.com.63734.9491.302br.net', +'view.atdmt.com.63735.9491.302br.net', +'view.atdmt.com.63737.9491.302br.net', +'view.atdmt.com.63738.9491.302br.net', +'view.atdmt.com.63740.9491.302br.net', +'view.atdmt.com.63741.9491.302br.net', +'view.atdmt.com.63743.9491.302br.net', +'view.atdmt.com.63744.9491.302br.net', +'view.atdmt.com.63746.9491.302br.net', +'view.atdmt.com.63747.9491.302br.net', +'view.atdmt.com.63749.9491.302br.net', +'view.atdmt.com.63750.9491.302br.net', +'view.atdmt.com.63752.9491.302br.net', +'view.atdmt.com.63753.9491.302br.net', +'view.atdmt.com.63755.9491.302br.net', +'view.atdmt.com.63756.9491.302br.net', +'view.atdmt.com.63759.9491.302br.net', +'view.atdmt.com.63761.9491.302br.net', +'view.atdmt.com.63762.9491.302br.net', +'view.atdmt.com.66717.9517.302br.net', +'view.atdmt.com.66720.9517.302br.net', +'view.atdmt.com.66723.9517.302br.net', +'view.atdmt.com.66725.9517.302br.net', +'view.atdmt.com.66726.9517.302br.net', +'view.atdmt.com.66728.9517.302br.net', +'view.atdmt.com.66729.9517.302br.net', +'view.atdmt.com.66731.9517.302br.net', +'view.atdmt.com.66732.9517.302br.net', +'view.atdmt.com.66734.9517.302br.net', +'view.atdmt.com.66735.9517.302br.net', +'view.atdmt.com.66737.9517.302br.net', +'view.atdmt.com.66738.9517.302br.net', +'view.atdmt.com.66740.9517.302br.net', +'view.atdmt.com.66741.9517.302br.net', +'view.atdmt.com.66743.9517.302br.net', +'view.atdmt.com.66744.9517.302br.net', +'view.atdmt.com.66747.9517.302br.net', +'view.atdmt.com.66749.9517.302br.net', +'view.atdmt.com.66750.9517.302br.net', +'view.atdmt.com.66753.9517.302br.net', +'view.atdmt.com.66756.9517.302br.net', +'view.atdmt.com.66759.9517.302br.net', +'view.atdmt.com.66762.9517.302br.net', +'view.atdmt.com.66765.9517.302br.net', +'view.atdmt.com.66768.9517.302br.net', +'view.atdmt.com.66771.9517.302br.net', +'view.atdmt.com.66774.9517.302br.net', +'view.atdmt.com.66777.9517.302br.net', +'view.atdmt.com.66780.9517.302br.net', +'view.atdmt.com.66783.9517.302br.net', +'view.atdmt.com.66786.9517.302br.net', +'view.atdmt.com.66789.9517.302br.net', +'view.atdmt.com.66792.9517.302br.net', +'view.atdmt.com.66794.9517.302br.net', +'view.atdmt.com.66795.9517.302br.net', +'view.atdmt.com.66797.9517.302br.net', +'view.atdmt.com.66798.9517.302br.net', +'view.atdmt.com.66800.9517.302br.net', +'view.atdmt.com.66801.9517.302br.net', +'view.atdmt.com.66803.9517.302br.net', +'view.atdmt.com.66804.9517.302br.net', +'view.atdmt.com.66806.9517.302br.net', +'view.atdmt.com.66807.9517.302br.net', +'view.atdmt.com.66809.9517.302br.net', +'view.atdmt.com.66810.9517.302br.net', +'view.atdmt.com.66812.9517.302br.net', +'view.atdmt.com.66813.9517.302br.net', +'view.atdmt.com.66815.9517.302br.net', +'view.atdmt.com.66816.9517.302br.net', +'view.atdmt.com.66818.9517.302br.net', +'view.atdmt.com.66819.9517.302br.net', +'view.atdmt.com.66821.9517.302br.net', +'view.atdmt.com.66822.9517.302br.net', +'view.atdmt.com.66825.9517.302br.net', +'view.atdmt.com.66827.9517.302br.net', +'view.atdmt.com.66828.9517.302br.net', +'view.atdmt.com.66830.9517.302br.net', +'view.atdmt.com.66831.9517.302br.net', +'view.atdmt.com.66833.9517.302br.net', +'view.atdmt.com.66834.9517.302br.net', +'view.atdmt.com.66836.9517.302br.net', +'view.atdmt.com.66837.9517.302br.net', +'view.atdmt.com.66839.9517.302br.net', +'view.atdmt.com.66840.9517.302br.net', +'view.atdmt.com.66842.9517.302br.net', +'view.atdmt.com.66843.9517.302br.net', +'view.atdmt.com.66845.9517.302br.net', +'view.atdmt.com.66846.9517.302br.net', +'view.atdmt.com.66848.9517.302br.net', +'view.atdmt.com.66849.9517.302br.net', +'view.atdmt.com.66851.9517.302br.net', +'view.atdmt.com.66852.9517.302br.net', +'view.atdmt.com.66854.9517.302br.net', +'view.atdmt.com.66855.9517.302br.net', +'view.atdmt.com.66857.9517.302br.net', +'view.atdmt.com.66858.9517.302br.net', +'view.atdmt.com.66879.9517.302br.net', +'view.atdmt.com.66882.9517.302br.net', +'view.atdmt.com.66885.9517.302br.net', +'view.atdmt.com.66888.9517.302br.net', +'view.atdmt.com.66891.9517.302br.net', +'view.atdmt.com.66894.9517.302br.net', +'view.atdmt.com.66897.9517.302br.net', +'view.atdmt.com.66900.9517.302br.net', +'view.atdmt.com.66903.9517.302br.net', +'view.atdmt.com.66905.9517.302br.net', +'view.atdmt.com.66906.9517.302br.net', +'view.atdmt.com.66908.9517.302br.net', +'view.atdmt.com.66909.9517.302br.net', +'view.atdmt.com.66911.9519.302br.net', +'view.atdmt.com.66912.9519.302br.net', +'view.atdmt.com.66913.9519.302br.net', +'view.atdmt.com.66914.9519.302br.net', +'view.atdmt.com.66915.9519.302br.net', +'view.atdmt.com.66916.9519.302br.net', +'view.atdmt.com.66917.9519.302br.net', +'view.atdmt.com.66918.9519.302br.net', +'view.atdmt.com.66919.9519.302br.net', +'view.atdmt.com.66920.9519.302br.net', +'view.atdmt.com.66921.9519.302br.net', +'view.atdmt.com.66922.9519.302br.net', +'view.atdmt.com.66989.9519.302br.net', +'view.atdmt.com.66990.9519.302br.net', +'view.atdmt.com.66991.9519.302br.net', +'view.atdmt.com.66992.9519.302br.net', +'view.atdmt.com.66993.9519.302br.net', +'view.atdmt.com.66994.9519.302br.net', +'view.atdmt.com.67614.9491.302br.net', +'view.atdmt.com.67617.9491.302br.net', +'view.atdmt.com.67620.9491.302br.net', +'view.atdmt.com.67623.9491.302br.net', +'view.atdmt.com.67626.9491.302br.net', +'view.atdmt.com.67629.9491.302br.net', +'view.atdmt.com.67632.9491.302br.net', +'view.atdmt.com.67635.9491.302br.net', +'view.atdmt.com.67638.9491.302br.net', +'view.atdmt.com.67641.9519.302br.net', +'view.atdmt.com.67644.9519.302br.net', +'view.atdmt.com.67647.9519.302br.net', +'view.atdmt.com.67650.9519.302br.net', +'view.atdmt.com.67653.9519.302br.net', +'view.atdmt.com.67656.9519.302br.net', +'view.atdmt.com.67659.9519.302br.net', +'view.atdmt.com.67662.9519.302br.net', +'view.atdmt.com.67665.9519.302br.net', +'view.atdmt.com.67668.9519.302br.net', +'view.atdmt.com.67671.9519.302br.net', +'view.atdmt.com.67674.9519.302br.net', +'view.atdmt.com.67676.9524.302br.net', +'view.atdmt.com.67677.9524.302br.net', +'view.atdmt.com.67679.9524.302br.net', +'view.atdmt.com.67680.9524.302br.net', +'view.atdmt.com.67682.9524.302br.net', +'view.atdmt.com.67683.9524.302br.net', +'view.atdmt.com.67686.9519.302br.net', +'view.atdmt.com.67689.9519.302br.net', +'view.atdmt.com.67692.9519.302br.net', +'view.atdmt.com.67695.9519.302br.net', +'view.atdmt.com.67698.9519.302br.net', +'view.atdmt.com.67701.9519.302br.net', +'view.atdmt.com.67704.9519.302br.net', +'view.atdmt.com.67707.9519.302br.net', +'view.atdmt.com.67710.9519.302br.net', +'view.atdmt.com.67713.9519.302br.net', +'view.atdmt.com.67716.9519.302br.net', +'view.atdmt.com.67719.9519.302br.net', +'view.atdmt.com.67722.9519.302br.net', +'view.atdmt.com.67725.9519.302br.net', +'view.atdmt.com.67728.9519.302br.net', +'view.atdmt.com.67731.9519.302br.net', +'view.atdmt.com.67734.9519.302br.net', +'view.atdmt.com.67737.9519.302br.net', +'view.atdmt.com.67740.9519.302br.net', +'view.atdmt.com.67743.9519.302br.net', +'view.atdmt.com.67746.9519.302br.net', +'view.atdmt.com.67749.9519.302br.net', +'view.atdmt.com.67752.9519.302br.net', +'view.atdmt.com.67755.9519.302br.net', +'view.atdmt.com.67758.9519.302br.net', +'view.atdmt.com.67761.9519.302br.net', +'view.atdmt.com.67764.9519.302br.net', +'view.atdmt.com.67767.9519.302br.net', +'view.atdmt.com.67770.9519.302br.net', +'view.atdmt.com.67773.9519.302br.net', +'view.atdmt.com.67775.9306.302br.net', +'view.atdmt.com.67776.9306.302br.net', +'view.atdmt.com.67777.9306.302br.net', +'view.atdmt.com.67778.9306.302br.net', +'view.atdmt.com.67779.9306.302br.net', +'view.atdmt.com.67780.9306.302br.net', +'view.atdmt.com.67781.9306.302br.net', +'view.atdmt.com.67782.9306.302br.net', +'view.atdmt.com.67783.9306.302br.net', +'view.atdmt.com.67784.9306.302br.net', +'view.atdmt.com.67785.9306.302br.net', +'view.atdmt.com.67786.9306.302br.net', +'view.atdmt.com.67787.9306.302br.net', +'view.atdmt.com.67788.9306.302br.net', +'view.atdmt.com.67789.9306.302br.net', +'view.atdmt.com.67790.9306.302br.net', +'view.atdmt.com.67791.9306.302br.net', +'view.atdmt.com.67792.9306.302br.net', +'view.atdmt.com.67794.9306.302br.net', +'view.atdmt.com.67796.9306.302br.net', +'view.atdmt.com.67798.9306.302br.net', +'view.atdmt.com.67800.9306.302br.net', +'view.atdmt.com.67802.9306.302br.net', +'view.atdmt.com.67804.9306.302br.net', +'view.atdmt.com.67806.9306.302br.net', +'view.atdmt.com.67808.9306.302br.net', +'view.atdmt.com.67810.9306.302br.net', +'view.atdmt.com.67812.9306.302br.net', +'view.atdmt.com.67814.9306.302br.net', +'view.atdmt.com.67816.9306.302br.net', +'view.atdmt.com.67818.9306.302br.net', +'view.atdmt.com.67820.9306.302br.net', +'view.atdmt.com.67822.9306.302br.net', +'view.atdmt.com.67824.9306.302br.net', +'view.atdmt.com.67826.9306.302br.net', +'view.atdmt.com.67828.9306.302br.net', +'view.atdmt.com.67830.9306.302br.net', +'view.atdmt.com.67832.9306.302br.net', +'view.atdmt.com.67834.9306.302br.net', +'view.atdmt.com.67835.9306.302br.net', +'view.atdmt.com.67836.9306.302br.net', +'view.atdmt.com.67837.9306.302br.net', +'view.atdmt.com.67838.9306.302br.net', +'view.atdmt.com.67839.9306.302br.net', +'view.atdmt.com.67840.9306.302br.net', +'view.atdmt.com.67841.9306.302br.net', +'view.atdmt.com.67842.9306.302br.net', +'view.atdmt.com.67843.9306.302br.net', +'view.atdmt.com.67844.9306.302br.net', +'view.atdmt.com.67845.9306.302br.net', +'view.atdmt.com.67846.9306.302br.net', +'view.atdmt.com.67847.9306.302br.net', +'view.atdmt.com.67848.9306.302br.net', +'view.atdmt.com.67849.9306.302br.net', +'view.atdmt.com.67850.9306.302br.net', +'view.atdmt.com.67851.9306.302br.net', +'view.atdmt.com.67852.9306.302br.net', +'view.atdmt.com.67853.9306.302br.net', +'view.atdmt.com.67854.9306.302br.net', +'view.atdmt.com.67856.9526.302br.net', +'view.atdmt.com.67859.9526.302br.net', +'view.atdmt.com.67862.9526.302br.net', +'view.atdmt.com.67865.9526.302br.net', +'view.atdmt.com.67868.9526.302br.net', +'view.atdmt.com.67870.9526.302br.net', +'view.atdmt.com.67871.9526.302br.net', +'view.atdmt.com.67873.9526.302br.net', +'view.atdmt.com.67874.9526.302br.net', +'view.atdmt.com.67876.9526.302br.net', +'view.atdmt.com.67877.9526.302br.net', +'view.atdmt.com.67889.9526.302br.net', +'view.atdmt.com.67892.9526.302br.net', +'view.atdmt.com.67894.9526.302br.net', +'view.atdmt.com.67895.9526.302br.net', +'view.atdmt.com.67897.9526.302br.net', +'view.atdmt.com.67898.9526.302br.net', +'view.atdmt.com.67900.9526.302br.net', +'view.atdmt.com.67901.9526.302br.net', +'view.atdmt.com.67903.9526.302br.net', +'view.atdmt.com.67904.9526.302br.net', +'view.atdmt.com.67906.9526.302br.net', +'view.atdmt.com.67907.9526.302br.net', +'view.atdmt.com.67909.9526.302br.net', +'view.atdmt.com.67910.9526.302br.net', +'view.atdmt.com.67912.9526.302br.net', +'view.atdmt.com.67913.9526.302br.net', +'view.atdmt.com.67927.9528.302br.net', +'view.atdmt.com.67928.9528.302br.net', +'view.atdmt.com.67930.9528.302br.net', +'view.atdmt.com.67931.9528.302br.net', +'view.atdmt.com.67933.9528.302br.net', +'view.atdmt.com.67934.9528.302br.net', +'view.atdmt.com.67936.9528.302br.net', +'view.atdmt.com.67937.9528.302br.net', +'view.atdmt.com.67939.9528.302br.net', +'view.atdmt.com.67940.9528.302br.net', +'view.atdmt.com.67942.9528.302br.net', +'view.atdmt.com.67943.9528.302br.net', +'view.atdmt.com.67946.9528.302br.net', +'view.atdmt.com.67949.9528.302br.net', +'view.atdmt.com.67952.9528.302br.net', +'view.atdmt.com.67964.9528.302br.net', +'view.atdmt.com.67967.9528.302br.net', +'view.atdmt.com.67970.9528.302br.net', +'view.atdmt.com.67982.9528.302br.net', +'view.atdmt.com.67985.9528.302br.net', +'view.atdmt.com.67988.9528.302br.net', +'view.atdmt.com.67991.9528.302br.net', +'view.atdmt.com.67994.9528.302br.net', +'view.atdmt.com.67996.9528.302br.net', +'view.atdmt.com.67997.9528.302br.net', +'view.atdmt.com.67999.9528.302br.net', +'view.atdmt.com.68000.9528.302br.net', +'view.atdmt.com.68003.9528.302br.net', +'view.atdmt.com.68006.9528.302br.net', +'view.atdmt.com.68009.9528.302br.net', +'view.atdmt.com.68012.9528.302br.net', +'view.atdmt.com.68014.9528.302br.net', +'view.atdmt.com.68015.9528.302br.net', +'view.atdmt.com.68017.9528.302br.net', +'view.atdmt.com.68018.9528.302br.net', +'view.atdmt.com.68020.9528.302br.net', +'view.atdmt.com.68021.9528.302br.net', +'view.atdmt.com.68023.9528.302br.net', +'view.atdmt.com.68024.9528.302br.net', +'view.atdmt.com.68026.9528.302br.net', +'view.atdmt.com.68027.9528.302br.net', +'view.atdmt.com.68029.9528.302br.net', +'view.atdmt.com.68030.9528.302br.net', +'view.atdmt.com.68032.9528.302br.net', +'view.atdmt.com.68033.9528.302br.net', +'view.atdmt.com.68035.9528.302br.net', +'view.atdmt.com.68036.9528.302br.net', +'view.atdmt.com.68190.9541.302br.net', +'view.atdmt.com.68191.9541.302br.net', +'view.atdmt.com.68193.9541.302br.net', +'view.atdmt.com.68194.9541.302br.net', +'view.atdmt.com.68196.9541.302br.net', +'view.atdmt.com.68197.9541.302br.net', +'view.atdmt.com.68218.9541.302br.net', +'view.atdmt.com.68221.9541.302br.net', +'view.atdmt.com.68224.9541.302br.net', +'view.atdmt.com.68226.9541.302br.net', +'view.atdmt.com.68227.9541.302br.net', +'view.atdmt.com.68229.9541.302br.net', +'view.atdmt.com.68230.9541.302br.net', +'view.atdmt.com.68232.9541.302br.net', +'view.atdmt.com.68233.9541.302br.net', +'view.atdmt.com.68236.9541.302br.net', +'view.atdmt.com.68239.9541.302br.net', +'view.atdmt.com.68242.9541.302br.net', +'view.atdmt.com.68245.9541.302br.net', +'view.atdmt.com.68247.9541.302br.net', +'view.atdmt.com.68248.9541.302br.net', +'view.atdmt.com.68250.9541.302br.net', +'view.atdmt.com.68251.9541.302br.net', +'view.atdmt.com.68254.9541.302br.net', +'view.atdmt.com.68257.9541.302br.net', +'view.atdmt.com.68260.9541.302br.net', +'view.atdmt.com.68262.9541.302br.net', +'view.atdmt.com.68263.9541.302br.net', +'view.atdmt.com.68265.9541.302br.net', +'view.atdmt.com.68266.9541.302br.net', +'view.atdmt.com.68268.9541.302br.net', +'view.atdmt.com.68269.9541.302br.net', +'view.atdmt.com.68271.9541.302br.net', +'view.atdmt.com.68272.9541.302br.net', +'view.atdmt.com.68274.9541.302br.net', +'view.atdmt.com.68275.9541.302br.net', +'view.atdmt.com.68277.9541.302br.net', +'view.atdmt.com.68278.9541.302br.net', +'view.atdmt.com.68281.9541.302br.net', +'view.atdmt.com.68284.9541.302br.net', +'view.atdmt.com.68287.9541.302br.net', +'view.atdmt.com.68416.9546.302br.net', +'view.atdmt.com.68417.9546.302br.net', +'view.atdmt.com.68419.9546.302br.net', +'view.atdmt.com.68420.9546.302br.net', +'view.atdmt.com.68422.9546.302br.net', +'view.atdmt.com.68423.9546.302br.net', +'view.atdmt.com.68438.9546.302br.net', +'view.atdmt.com.68441.9546.302br.net', +'view.atdmt.com.68444.9546.302br.net', +'view.atdmt.com.68447.9546.302br.net', +'view.atdmt.com.68450.9546.302br.net', +'view.atdmt.com.68452.9546.302br.net', +'view.atdmt.com.68453.9546.302br.net', +'view.atdmt.com.68456.9546.302br.net', +'view.atdmt.com.68459.9546.302br.net', +'view.atdmt.com.68462.9546.302br.net', +'view.atdmt.com.68464.9546.302br.net', +'view.atdmt.com.68465.9546.302br.net', +'view.atdmt.com.68468.9546.302br.net', +'view.atdmt.com.68471.9546.302br.net', +'view.atdmt.com.68557.9549.302br.net', +'view.atdmt.com.68566.9549.302br.net', +'view.atdmt.com.68569.9549.302br.net', +'view.atdmt.com.68572.9549.302br.net', +'view.atdmt.com.68575.9549.302br.net', +'view.atdmt.com.68578.9549.302br.net', +'view.atdmt.com.68581.9549.302br.net', +'view.atdmt.com.69411.9557.302br.net', +'view.atdmt.com.69412.9557.302br.net', +'view.atdmt.com.69413.9557.302br.net', +'view.atdmt.com.69414.9557.302br.net', +'view.atdmt.com.69415.9557.302br.net', +'view.atdmt.com.69416.9557.302br.net', +'view.atdmt.com.69417.9557.302br.net', +'view.atdmt.com.69418.9557.302br.net', +'view.atdmt.com.69419.9557.302br.net', +'view.atdmt.com.69420.9557.302br.net', +'view.atdmt.com.69421.9557.302br.net', +'view.atdmt.com.69422.9557.302br.net', +'view.atdmt.com.701.9000.302br.net', +'view.atdmt.com.704.9000.302br.net', +'view.atdmt.com.70475.9596.302br.net', +'view.atdmt.com.70477.9596.302br.net', +'view.atdmt.com.70479.9596.302br.net', +'view.atdmt.com.70481.9596.302br.net', +'view.atdmt.com.70483.9596.302br.net', +'view.atdmt.com.70485.9596.302br.net', +'view.atdmt.com.70487.9596.302br.net', +'view.atdmt.com.70489.9596.302br.net', +'view.atdmt.com.70491.9596.302br.net', +'view.atdmt.com.70493.9596.302br.net', +'view.atdmt.com.70518.9546.302br.net', +'view.atdmt.com.70519.9546.302br.net', +'view.atdmt.com.70520.9546.302br.net', +'view.atdmt.com.70521.9546.302br.net', +'view.atdmt.com.70522.9546.302br.net', +'view.atdmt.com.70523.9546.302br.net', +'view.atdmt.com.70524.9546.302br.net', +'view.atdmt.com.70525.9546.302br.net', +'view.atdmt.com.70526.9546.302br.net', +'view.atdmt.com.70527.9546.302br.net', +'view.atdmt.com.70530.9546.302br.net', +'view.atdmt.com.70531.9546.302br.net', +'view.atdmt.com.70532.9546.302br.net', +'view.atdmt.com.70533.9546.302br.net', +'view.atdmt.com.70534.9546.302br.net', +'view.atdmt.com.70535.9546.302br.net', +'view.atdmt.com.70536.9546.302br.net', +'view.atdmt.com.70537.9546.302br.net', +'view.atdmt.com.70538.9546.302br.net', +'view.atdmt.com.70539.9546.302br.net', +'view.atdmt.com.70540.9546.302br.net', +'view.atdmt.com.70541.9546.302br.net', +'view.atdmt.com.70542.9546.302br.net', +'view.atdmt.com.70543.9546.302br.net', +'view.atdmt.com.70545.9546.302br.net', +'view.atdmt.com.70547.9546.302br.net', +'view.atdmt.com.70549.9546.302br.net', +'view.atdmt.com.70551.9546.302br.net', +'view.atdmt.com.70553.9546.302br.net', +'view.atdmt.com.70555.9546.302br.net', +'view.atdmt.com.70557.9519.302br.net', +'view.atdmt.com.70558.9519.302br.net', +'view.atdmt.com.70559.9519.302br.net', +'view.atdmt.com.70560.9519.302br.net', +'view.atdmt.com.70561.9519.302br.net', +'view.atdmt.com.70562.9519.302br.net', +'view.atdmt.com.70563.9519.302br.net', +'view.atdmt.com.70565.9519.302br.net', +'view.atdmt.com.70567.9519.302br.net', +'view.atdmt.com.70568.9519.302br.net', +'view.atdmt.com.70569.9519.302br.net', +'view.atdmt.com.70571.9519.302br.net', +'view.atdmt.com.70572.9519.302br.net', +'view.atdmt.com.70573.9519.302br.net', +'view.atdmt.com.70574.9519.302br.net', +'view.atdmt.com.70575.9519.302br.net', +'view.atdmt.com.70577.9519.302br.net', +'view.atdmt.com.70579.9519.302br.net', +'view.atdmt.com.706.9000.302br.net', +'view.atdmt.com.70631.9528.302br.net', +'view.atdmt.com.70632.9528.302br.net', +'view.atdmt.com.70633.9528.302br.net', +'view.atdmt.com.70634.9528.302br.net', +'view.atdmt.com.70635.9528.302br.net', +'view.atdmt.com.70636.9528.302br.net', +'view.atdmt.com.70637.9528.302br.net', +'view.atdmt.com.70638.9528.302br.net', +'view.atdmt.com.70639.9528.302br.net', +'view.atdmt.com.70640.9528.302br.net', +'view.atdmt.com.70641.9528.302br.net', +'view.atdmt.com.70642.9528.302br.net', +'view.atdmt.com.70643.9528.302br.net', +'view.atdmt.com.70644.9528.302br.net', +'view.atdmt.com.70645.9528.302br.net', +'view.atdmt.com.70646.9528.302br.net', +'view.atdmt.com.70647.9528.302br.net', +'view.atdmt.com.70648.9528.302br.net', +'view.atdmt.com.70649.9528.302br.net', +'view.atdmt.com.70650.9528.302br.net', +'view.atdmt.com.70651.9528.302br.net', +'view.atdmt.com.70652.9528.302br.net', +'view.atdmt.com.70653.9528.302br.net', +'view.atdmt.com.70654.9528.302br.net', +'view.atdmt.com.70656.9528.302br.net', +'view.atdmt.com.70658.9528.302br.net', +'view.atdmt.com.70660.9528.302br.net', +'view.atdmt.com.70662.9528.302br.net', +'view.atdmt.com.70664.9528.302br.net', +'view.atdmt.com.70666.9528.302br.net', +'view.atdmt.com.70668.9528.302br.net', +'view.atdmt.com.70670.9528.302br.net', +'view.atdmt.com.70672.9528.302br.net', +'view.atdmt.com.70674.9596.302br.net', +'view.atdmt.com.70676.9596.302br.net', +'view.atdmt.com.70678.9596.302br.net', +'view.atdmt.com.70680.9596.302br.net', +'view.atdmt.com.70681.9541.302br.net', +'view.atdmt.com.70682.9541.302br.net', +'view.atdmt.com.70683.9541.302br.net', +'view.atdmt.com.70684.9541.302br.net', +'view.atdmt.com.70685.9541.302br.net', +'view.atdmt.com.70686.9541.302br.net', +'view.atdmt.com.70687.9541.302br.net', +'view.atdmt.com.70688.9541.302br.net', +'view.atdmt.com.70689.9541.302br.net', +'view.atdmt.com.70690.9541.302br.net', +'view.atdmt.com.70691.9541.302br.net', +'view.atdmt.com.70692.9541.302br.net', +'view.atdmt.com.70693.9541.302br.net', +'view.atdmt.com.70694.9541.302br.net', +'view.atdmt.com.70695.9541.302br.net', +'view.atdmt.com.70696.9541.302br.net', +'view.atdmt.com.70697.9541.302br.net', +'view.atdmt.com.70698.9541.302br.net', +'view.atdmt.com.70699.9541.302br.net', +'view.atdmt.com.707.9000.302br.net', +'view.atdmt.com.70700.9541.302br.net', +'view.atdmt.com.70701.9541.302br.net', +'view.atdmt.com.70702.9541.302br.net', +'view.atdmt.com.70703.9541.302br.net', +'view.atdmt.com.70704.9541.302br.net', +'view.atdmt.com.70705.9541.302br.net', +'view.atdmt.com.70706.9541.302br.net', +'view.atdmt.com.70707.9541.302br.net', +'view.atdmt.com.70708.9541.302br.net', +'view.atdmt.com.70709.9541.302br.net', +'view.atdmt.com.70710.9541.302br.net', +'view.atdmt.com.70711.9541.302br.net', +'view.atdmt.com.70712.9541.302br.net', +'view.atdmt.com.70713.9541.302br.net', +'view.atdmt.com.70714.9541.302br.net', +'view.atdmt.com.70715.9541.302br.net', +'view.atdmt.com.70716.9541.302br.net', +'view.atdmt.com.70718.9541.302br.net', +'view.atdmt.com.70720.9541.302br.net', +'view.atdmt.com.70722.9541.302br.net', +'view.atdmt.com.70724.9541.302br.net', +'view.atdmt.com.70726.9541.302br.net', +'view.atdmt.com.70728.9541.302br.net', +'view.atdmt.com.70729.9541.302br.net', +'view.atdmt.com.70730.9541.302br.net', +'view.atdmt.com.70731.9541.302br.net', +'view.atdmt.com.70732.9541.302br.net', +'view.atdmt.com.70733.9541.302br.net', +'view.atdmt.com.70734.9541.302br.net', +'view.atdmt.com.70735.9541.302br.net', +'view.atdmt.com.70736.9541.302br.net', +'view.atdmt.com.70737.9541.302br.net', +'view.atdmt.com.70738.9541.302br.net', +'view.atdmt.com.70739.9541.302br.net', +'view.atdmt.com.70740.9541.302br.net', +'view.atdmt.com.70741.9541.302br.net', +'view.atdmt.com.70742.9541.302br.net', +'view.atdmt.com.70743.9541.302br.net', +'view.atdmt.com.70744.9541.302br.net', +'view.atdmt.com.70745.9541.302br.net', +'view.atdmt.com.70746.9541.302br.net', +'view.atdmt.com.70747.9541.302br.net', +'view.atdmt.com.70748.9541.302br.net', +'view.atdmt.com.70750.9541.302br.net', +'view.atdmt.com.70752.9541.302br.net', +'view.atdmt.com.70756.9596.302br.net', +'view.atdmt.com.70757.9596.302br.net', +'view.atdmt.com.70758.9596.302br.net', +'view.atdmt.com.70759.9596.302br.net', +'view.atdmt.com.70760.9596.302br.net', +'view.atdmt.com.70761.9596.302br.net', +'view.atdmt.com.70762.9596.302br.net', +'view.atdmt.com.70763.9596.302br.net', +'view.atdmt.com.70764.9596.302br.net', +'view.atdmt.com.70765.9596.302br.net', +'view.atdmt.com.70766.9596.302br.net', +'view.atdmt.com.70767.9596.302br.net', +'view.atdmt.com.70768.9596.302br.net', +'view.atdmt.com.70769.9596.302br.net', +'view.atdmt.com.70770.9596.302br.net', +'view.atdmt.com.70771.9596.302br.net', +'view.atdmt.com.70772.9596.302br.net', +'view.atdmt.com.70773.9596.302br.net', +'view.atdmt.com.70774.9596.302br.net', +'view.atdmt.com.70775.9596.302br.net', +'view.atdmt.com.70776.9596.302br.net', +'view.atdmt.com.70777.9596.302br.net', +'view.atdmt.com.70778.9596.302br.net', +'view.atdmt.com.70779.9596.302br.net', +'view.atdmt.com.70780.9546.302br.net', +'view.atdmt.com.70781.9546.302br.net', +'view.atdmt.com.70782.9546.302br.net', +'view.atdmt.com.70783.9546.302br.net', +'view.atdmt.com.70784.9546.302br.net', +'view.atdmt.com.70785.9546.302br.net', +'view.atdmt.com.70786.9541.302br.net', +'view.atdmt.com.70787.9541.302br.net', +'view.atdmt.com.70788.9541.302br.net', +'view.atdmt.com.70789.9541.302br.net', +'view.atdmt.com.70790.9541.302br.net', +'view.atdmt.com.70791.9541.302br.net', +'view.atdmt.com.70792.9541.302br.net', +'view.atdmt.com.70793.9541.302br.net', +'view.atdmt.com.70794.9541.302br.net', +'view.atdmt.com.70795.9541.302br.net', +'view.atdmt.com.70796.9541.302br.net', +'view.atdmt.com.70797.9541.302br.net', +'view.atdmt.com.70798.9528.302br.net', +'view.atdmt.com.70799.9528.302br.net', +'view.atdmt.com.70800.9528.302br.net', +'view.atdmt.com.70801.9528.302br.net', +'view.atdmt.com.70802.9528.302br.net', +'view.atdmt.com.70803.9528.302br.net', +'view.atdmt.com.70804.9528.302br.net', +'view.atdmt.com.70805.9528.302br.net', +'view.atdmt.com.70806.9528.302br.net', +'view.atdmt.com.70807.9528.302br.net', +'view.atdmt.com.70808.9528.302br.net', +'view.atdmt.com.70809.9528.302br.net', +'view.atdmt.com.70810.9528.302br.net', +'view.atdmt.com.70811.9528.302br.net', +'view.atdmt.com.70812.9528.302br.net', +'view.atdmt.com.70813.9528.302br.net', +'view.atdmt.com.70814.9528.302br.net', +'view.atdmt.com.70815.9528.302br.net', +'view.atdmt.com.70822.9519.302br.net', +'view.atdmt.com.70823.9519.302br.net', +'view.atdmt.com.70824.9519.302br.net', +'view.atdmt.com.70825.9519.302br.net', +'view.atdmt.com.70826.9519.302br.net', +'view.atdmt.com.70827.9519.302br.net', +'view.atdmt.com.70828.9519.302br.net', +'view.atdmt.com.70829.9519.302br.net', +'view.atdmt.com.70830.9519.302br.net', +'view.atdmt.com.70831.9519.302br.net', +'view.atdmt.com.70832.9519.302br.net', +'view.atdmt.com.70833.9519.302br.net', +'view.atdmt.com.70834.9519.302br.net', +'view.atdmt.com.70835.9519.302br.net', +'view.atdmt.com.70836.9519.302br.net', +'view.atdmt.com.70837.9519.302br.net', +'view.atdmt.com.70838.9519.302br.net', +'view.atdmt.com.70839.9519.302br.net', +'view.atdmt.com.70841.9519.302br.net', +'view.atdmt.com.70843.9519.302br.net', +'view.atdmt.com.70844.9519.302br.net', +'view.atdmt.com.70845.9519.302br.net', +'view.atdmt.com.70846.9519.302br.net', +'view.atdmt.com.70847.9519.302br.net', +'view.atdmt.com.70848.9519.302br.net', +'view.atdmt.com.70849.9519.302br.net', +'view.atdmt.com.70850.9519.302br.net', +'view.atdmt.com.70851.9519.302br.net', +'view.atdmt.com.70852.9519.302br.net', +'view.atdmt.com.70853.9519.302br.net', +'view.atdmt.com.70854.9519.302br.net', +'view.atdmt.com.70855.9519.302br.net', +'view.atdmt.com.70856.9519.302br.net', +'view.atdmt.com.70857.9519.302br.net', +'view.atdmt.com.70858.9519.302br.net', +'view.atdmt.com.70859.9519.302br.net', +'view.atdmt.com.70860.9519.302br.net', +'view.atdmt.com.70861.9519.302br.net', +'view.atdmt.com.70862.9519.302br.net', +'view.atdmt.com.70863.9519.302br.net', +'view.atdmt.com.70864.9519.302br.net', +'view.atdmt.com.70865.9519.302br.net', +'view.atdmt.com.70866.9519.302br.net', +'view.atdmt.com.70867.9519.302br.net', +'view.atdmt.com.70868.9519.302br.net', +'view.atdmt.com.70869.9519.302br.net', +'view.atdmt.com.70870.9519.302br.net', +'view.atdmt.com.70871.9519.302br.net', +'view.atdmt.com.70872.9519.302br.net', +'view.atdmt.com.70873.9519.302br.net', +'view.atdmt.com.70874.9519.302br.net', +'view.atdmt.com.70875.9519.302br.net', +'view.atdmt.com.70876.9519.302br.net', +'view.atdmt.com.70877.9519.302br.net', +'view.atdmt.com.70878.9519.302br.net', +'view.atdmt.com.70879.9519.302br.net', +'view.atdmt.com.70880.9519.302br.net', +'view.atdmt.com.70881.9519.302br.net', +'view.atdmt.com.70882.9519.302br.net', +'view.atdmt.com.70883.9519.302br.net', +'view.atdmt.com.70884.9519.302br.net', +'view.atdmt.com.70885.9519.302br.net', +'view.atdmt.com.70886.9519.302br.net', +'view.atdmt.com.70887.9519.302br.net', +'view.atdmt.com.70888.9519.302br.net', +'view.atdmt.com.70889.9519.302br.net', +'view.atdmt.com.70890.9519.302br.net', +'view.atdmt.com.70891.9519.302br.net', +'view.atdmt.com.70892.9519.302br.net', +'view.atdmt.com.70893.9519.302br.net', +'view.atdmt.com.70894.9519.302br.net', +'view.atdmt.com.70895.9519.302br.net', +'view.atdmt.com.70896.9519.302br.net', +'view.atdmt.com.70897.9519.302br.net', +'view.atdmt.com.70898.9519.302br.net', +'view.atdmt.com.70899.9519.302br.net', +'view.atdmt.com.70900.9519.302br.net', +'view.atdmt.com.70901.9519.302br.net', +'view.atdmt.com.70902.9519.302br.net', +'view.atdmt.com.70903.9519.302br.net', +'view.atdmt.com.70904.9519.302br.net', +'view.atdmt.com.70905.9519.302br.net', +'view.atdmt.com.70907.9519.302br.net', +'view.atdmt.com.70908.9519.302br.net', +'view.atdmt.com.70909.9519.302br.net', +'view.atdmt.com.70910.9519.302br.net', +'view.atdmt.com.70911.9519.302br.net', +'view.atdmt.com.70912.9519.302br.net', +'view.atdmt.com.70913.9519.302br.net', +'view.atdmt.com.70914.9519.302br.net', +'view.atdmt.com.70915.9519.302br.net', +'view.atdmt.com.70916.9519.302br.net', +'view.atdmt.com.70917.9519.302br.net', +'view.atdmt.com.70918.9519.302br.net', +'view.atdmt.com.70919.9519.302br.net', +'view.atdmt.com.70920.9519.302br.net', +'view.atdmt.com.70921.9519.302br.net', +'view.atdmt.com.70922.9519.302br.net', +'view.atdmt.com.70923.9519.302br.net', +'view.atdmt.com.70924.9526.302br.net', +'view.atdmt.com.70925.9526.302br.net', +'view.atdmt.com.70926.9526.302br.net', +'view.atdmt.com.70927.9526.302br.net', +'view.atdmt.com.70928.9526.302br.net', +'view.atdmt.com.70929.9526.302br.net', +'view.atdmt.com.70930.9526.302br.net', +'view.atdmt.com.70931.9526.302br.net', +'view.atdmt.com.70932.9526.302br.net', +'view.atdmt.com.70933.9526.302br.net', +'view.atdmt.com.70934.9526.302br.net', +'view.atdmt.com.70935.9526.302br.net', +'view.atdmt.com.70936.9526.302br.net', +'view.atdmt.com.70937.9526.302br.net', +'view.atdmt.com.70938.9526.302br.net', +'view.atdmt.com.70939.9526.302br.net', +'view.atdmt.com.70941.9526.302br.net', +'view.atdmt.com.70942.9526.302br.net', +'view.atdmt.com.70943.9526.302br.net', +'view.atdmt.com.70944.9526.302br.net', +'view.atdmt.com.70945.9526.302br.net', +'view.atdmt.com.70946.9526.302br.net', +'view.atdmt.com.70947.9526.302br.net', +'view.atdmt.com.70948.9526.302br.net', +'view.atdmt.com.70949.9526.302br.net', +'view.atdmt.com.70950.9526.302br.net', +'view.atdmt.com.70951.9526.302br.net', +'view.atdmt.com.70952.9526.302br.net', +'view.atdmt.com.70953.9526.302br.net', +'view.atdmt.com.70954.9526.302br.net', +'view.atdmt.com.70955.9526.302br.net', +'view.atdmt.com.70956.9526.302br.net', +'view.atdmt.com.70957.9526.302br.net', +'view.atdmt.com.70958.9526.302br.net', +'view.atdmt.com.70959.9526.302br.net', +'view.atdmt.com.70960.9526.302br.net', +'view.atdmt.com.70961.9526.302br.net', +'view.atdmt.com.70962.9526.302br.net', +'view.atdmt.com.70963.9526.302br.net', +'view.atdmt.com.71226.9517.302br.net', +'view.atdmt.com.71228.9517.302br.net', +'view.atdmt.com.71230.9517.302br.net', +'view.atdmt.com.71232.9517.302br.net', +'view.atdmt.com.71234.9517.302br.net', +'view.atdmt.com.71236.9517.302br.net', +'view.atdmt.com.71237.9517.302br.net', +'view.atdmt.com.71238.9517.302br.net', +'view.atdmt.com.71239.9517.302br.net', +'view.atdmt.com.71240.9517.302br.net', +'view.atdmt.com.71241.9517.302br.net', +'view.atdmt.com.71242.9517.302br.net', +'view.atdmt.com.71243.9517.302br.net', +'view.atdmt.com.71244.9517.302br.net', +'view.atdmt.com.71245.9517.302br.net', +'view.atdmt.com.71246.9517.302br.net', +'view.atdmt.com.71247.9517.302br.net', +'view.atdmt.com.71248.9517.302br.net', +'view.atdmt.com.71249.9517.302br.net', +'view.atdmt.com.71250.9517.302br.net', +'view.atdmt.com.71251.9517.302br.net', +'view.atdmt.com.71252.9517.302br.net', +'view.atdmt.com.71253.9517.302br.net', +'view.atdmt.com.71254.9517.302br.net', +'view.atdmt.com.71255.9517.302br.net', +'view.atdmt.com.71256.9517.302br.net', +'view.atdmt.com.71257.9517.302br.net', +'view.atdmt.com.71258.9517.302br.net', +'view.atdmt.com.71259.9517.302br.net', +'view.atdmt.com.71260.9517.302br.net', +'view.atdmt.com.71261.9517.302br.net', +'view.atdmt.com.71262.9517.302br.net', +'view.atdmt.com.71263.9517.302br.net', +'view.atdmt.com.71264.9517.302br.net', +'view.atdmt.com.71265.9517.302br.net', +'view.atdmt.com.71266.9517.302br.net', +'view.atdmt.com.71267.9517.302br.net', +'view.atdmt.com.71268.9517.302br.net', +'view.atdmt.com.71269.9517.302br.net', +'view.atdmt.com.71270.9517.302br.net', +'view.atdmt.com.71271.9517.302br.net', +'view.atdmt.com.71272.9517.302br.net', +'view.atdmt.com.71273.9517.302br.net', +'view.atdmt.com.71274.9517.302br.net', +'view.atdmt.com.71275.9517.302br.net', +'view.atdmt.com.71276.9517.302br.net', +'view.atdmt.com.71277.9517.302br.net', +'view.atdmt.com.71278.9517.302br.net', +'view.atdmt.com.71279.9517.302br.net', +'view.atdmt.com.71280.9517.302br.net', +'view.atdmt.com.71281.9517.302br.net', +'view.atdmt.com.71282.9517.302br.net', +'view.atdmt.com.71283.9517.302br.net', +'view.atdmt.com.71284.9517.302br.net', +'view.atdmt.com.71285.9517.302br.net', +'view.atdmt.com.71286.9517.302br.net', +'view.atdmt.com.71287.9517.302br.net', +'view.atdmt.com.71288.9517.302br.net', +'view.atdmt.com.71289.9517.302br.net', +'view.atdmt.com.71290.9517.302br.net', +'view.atdmt.com.71291.9517.302br.net', +'view.atdmt.com.71292.9517.302br.net', +'view.atdmt.com.71293.9517.302br.net', +'view.atdmt.com.71294.9517.302br.net', +'view.atdmt.com.71295.9517.302br.net', +'view.atdmt.com.71296.9517.302br.net', +'view.atdmt.com.71297.9517.302br.net', +'view.atdmt.com.71298.9517.302br.net', +'view.atdmt.com.71299.9517.302br.net', +'view.atdmt.com.71300.9517.302br.net', +'view.atdmt.com.71301.9517.302br.net', +'view.atdmt.com.71302.9517.302br.net', +'view.atdmt.com.71303.9517.302br.net', +'view.atdmt.com.71304.9517.302br.net', +'view.atdmt.com.71305.9517.302br.net', +'view.atdmt.com.71306.9517.302br.net', +'view.atdmt.com.71307.9517.302br.net', +'view.atdmt.com.71308.9517.302br.net', +'view.atdmt.com.71309.9517.302br.net', +'view.atdmt.com.71310.9517.302br.net', +'view.atdmt.com.71311.9517.302br.net', +'view.atdmt.com.71312.9517.302br.net', +'view.atdmt.com.71313.9517.302br.net', +'view.atdmt.com.71314.9517.302br.net', +'view.atdmt.com.71315.9517.302br.net', +'view.atdmt.com.71316.9517.302br.net', +'view.atdmt.com.71317.9517.302br.net', +'view.atdmt.com.71318.9517.302br.net', +'view.atdmt.com.71319.9517.302br.net', +'view.atdmt.com.71320.9517.302br.net', +'view.atdmt.com.71321.9517.302br.net', +'view.atdmt.com.71322.9517.302br.net', +'view.atdmt.com.71323.9517.302br.net', +'view.atdmt.com.71324.9517.302br.net', +'view.atdmt.com.71325.9517.302br.net', +'view.atdmt.com.71326.9517.302br.net', +'view.atdmt.com.71327.9517.302br.net', +'view.atdmt.com.71328.9517.302br.net', +'view.atdmt.com.71329.9517.302br.net', +'view.atdmt.com.71330.9517.302br.net', +'view.atdmt.com.71331.9517.302br.net', +'view.atdmt.com.71332.9517.302br.net', +'view.atdmt.com.71333.9517.302br.net', +'view.atdmt.com.71334.9517.302br.net', +'view.atdmt.com.71335.9517.302br.net', +'view.atdmt.com.71336.9517.302br.net', +'view.atdmt.com.71337.9517.302br.net', +'view.atdmt.com.71338.9517.302br.net', +'view.atdmt.com.71339.9517.302br.net', +'view.atdmt.com.71340.9517.302br.net', +'view.atdmt.com.71341.9517.302br.net', +'view.atdmt.com.71342.9517.302br.net', +'view.atdmt.com.71343.9517.302br.net', +'view.atdmt.com.71344.9517.302br.net', +'view.atdmt.com.71351.9517.302br.net', +'view.atdmt.com.71352.9517.302br.net', +'view.atdmt.com.71353.9517.302br.net', +'view.atdmt.com.71354.9517.302br.net', +'view.atdmt.com.71356.9489.302br.net', +'view.atdmt.com.71358.9489.302br.net', +'view.atdmt.com.71372.9489.302br.net', +'view.atdmt.com.71373.9489.302br.net', +'view.atdmt.com.71374.9489.302br.net', +'view.atdmt.com.71377.9489.302br.net', +'view.atdmt.com.71378.9489.302br.net', +'view.atdmt.com.71379.9489.302br.net', +'view.atdmt.com.71380.9489.302br.net', +'view.atdmt.com.71381.9489.302br.net', +'view.atdmt.com.71382.9489.302br.net', +'view.atdmt.com.71383.9489.302br.net', +'view.atdmt.com.71384.9489.302br.net', +'view.atdmt.com.71385.9489.302br.net', +'view.atdmt.com.71386.9489.302br.net', +'view.atdmt.com.71387.9489.302br.net', +'view.atdmt.com.71388.9489.302br.net', +'view.atdmt.com.71389.9489.302br.net', +'view.atdmt.com.71390.9489.302br.net', +'view.atdmt.com.71391.9489.302br.net', +'view.atdmt.com.71392.9489.302br.net', +'view.atdmt.com.71393.9489.302br.net', +'view.atdmt.com.71394.9489.302br.net', +'view.atdmt.com.71395.9489.302br.net', +'view.atdmt.com.71396.9489.302br.net', +'view.atdmt.com.71397.9489.302br.net', +'view.atdmt.com.71398.9489.302br.net', +'view.atdmt.com.71399.9489.302br.net', +'view.atdmt.com.71400.9489.302br.net', +'view.atdmt.com.71401.9489.302br.net', +'view.atdmt.com.71402.9489.302br.net', +'view.atdmt.com.71403.9489.302br.net', +'view.atdmt.com.71404.9489.302br.net', +'view.atdmt.com.71405.9489.302br.net', +'view.atdmt.com.71406.9489.302br.net', +'view.atdmt.com.71407.9489.302br.net', +'view.atdmt.com.71408.9489.302br.net', +'view.atdmt.com.71409.9489.302br.net', +'view.atdmt.com.71410.9489.302br.net', +'view.atdmt.com.71411.9489.302br.net', +'view.atdmt.com.71412.9489.302br.net', +'view.atdmt.com.71413.9489.302br.net', +'view.atdmt.com.71414.9489.302br.net', +'view.atdmt.com.71415.9489.302br.net', +'view.atdmt.com.71416.9489.302br.net', +'view.atdmt.com.71417.9489.302br.net', +'view.atdmt.com.71418.9489.302br.net', +'view.atdmt.com.71419.9489.302br.net', +'view.atdmt.com.71420.9489.302br.net', +'view.atdmt.com.71421.9489.302br.net', +'view.atdmt.com.71422.9489.302br.net', +'view.atdmt.com.71423.9489.302br.net', +'view.atdmt.com.71424.9489.302br.net', +'view.atdmt.com.71425.9489.302br.net', +'view.atdmt.com.71426.9489.302br.net', +'view.atdmt.com.71443.9491.302br.net', +'view.atdmt.com.71444.9491.302br.net', +'view.atdmt.com.71445.9491.302br.net', +'view.atdmt.com.71446.9491.302br.net', +'view.atdmt.com.71447.9491.302br.net', +'view.atdmt.com.71448.9491.302br.net', +'view.atdmt.com.71449.9491.302br.net', +'view.atdmt.com.71450.9491.302br.net', +'view.atdmt.com.71451.9491.302br.net', +'view.atdmt.com.71452.9491.302br.net', +'view.atdmt.com.71453.9491.302br.net', +'view.atdmt.com.71454.9491.302br.net', +'view.atdmt.com.71455.9491.302br.net', +'view.atdmt.com.71456.9491.302br.net', +'view.atdmt.com.71457.9491.302br.net', +'view.atdmt.com.71458.9491.302br.net', +'view.atdmt.com.71459.9491.302br.net', +'view.atdmt.com.71460.9491.302br.net', +'view.atdmt.com.71461.9491.302br.net', +'view.atdmt.com.71462.9491.302br.net', +'view.atdmt.com.71463.9491.302br.net', +'view.atdmt.com.71464.9491.302br.net', +'view.atdmt.com.71465.9491.302br.net', +'view.atdmt.com.71466.9491.302br.net', +'view.atdmt.com.71467.9491.302br.net', +'view.atdmt.com.71468.9491.302br.net', +'view.atdmt.com.71469.9491.302br.net', +'view.atdmt.com.71470.9491.302br.net', +'view.atdmt.com.71472.9491.302br.net', +'view.atdmt.com.71474.9491.302br.net', +'view.atdmt.com.71476.9491.302br.net', +'view.atdmt.com.71477.9491.302br.net', +'view.atdmt.com.71478.9491.302br.net', +'view.atdmt.com.71479.9491.302br.net', +'view.atdmt.com.71480.9491.302br.net', +'view.atdmt.com.71481.9491.302br.net', +'view.atdmt.com.71482.9491.302br.net', +'view.atdmt.com.71483.9491.302br.net', +'view.atdmt.com.71484.9491.302br.net', +'view.atdmt.com.71485.9491.302br.net', +'view.atdmt.com.71486.9491.302br.net', +'view.atdmt.com.71489.9491.302br.net', +'view.atdmt.com.71490.9491.302br.net', +'view.atdmt.com.71491.9491.302br.net', +'view.atdmt.com.71492.9491.302br.net', +'view.atdmt.com.71493.9491.302br.net', +'view.atdmt.com.71494.9491.302br.net', +'view.atdmt.com.71495.9491.302br.net', +'view.atdmt.com.71496.9491.302br.net', +'view.atdmt.com.71497.9491.302br.net', +'view.atdmt.com.71498.9491.302br.net', +'view.atdmt.com.71499.9491.302br.net', +'view.atdmt.com.71500.9491.302br.net', +'view.atdmt.com.71501.9491.302br.net', +'view.atdmt.com.71502.9491.302br.net', +'view.atdmt.com.71503.9491.302br.net', +'view.atdmt.com.71504.9491.302br.net', +'view.atdmt.com.71505.9491.302br.net', +'view.atdmt.com.71506.9491.302br.net', +'view.atdmt.com.71507.9491.302br.net', +'view.atdmt.com.71508.9491.302br.net', +'view.atdmt.com.71509.9491.302br.net', +'view.atdmt.com.71510.9491.302br.net', +'view.atdmt.com.71511.9491.302br.net', +'view.atdmt.com.71512.9491.302br.net', +'view.atdmt.com.71513.9491.302br.net', +'view.atdmt.com.71514.9491.302br.net', +'view.atdmt.com.71585.9600.302br.net', +'view.atdmt.com.71586.9599.302br.net', +'view.atdmt.com.71587.9599.302br.net', +'view.atdmt.com.71589.9597.302br.net', +'view.atdmt.com.71590.9597.302br.net', +'view.atdmt.com.71825.9528.302br.net', +'view.atdmt.com.71826.9528.302br.net', +'view.atdmt.com.71827.9528.302br.net', +'view.atdmt.com.71828.9528.302br.net', +'view.atdmt.com.71829.9528.302br.net', +'view.atdmt.com.71830.9528.302br.net', +'view.atdmt.com.71831.9528.302br.net', +'view.atdmt.com.71832.9528.302br.net', +'view.atdmt.com.71833.9528.302br.net', +'view.atdmt.com.71834.9528.302br.net', +'view.atdmt.com.71835.9528.302br.net', +'view.atdmt.com.71836.9528.302br.net', +'view.atdmt.com.71839.9528.302br.net', +'view.atdmt.com.71840.9528.302br.net', +'view.atdmt.com.71841.9528.302br.net', +'view.atdmt.com.71842.9528.302br.net', +'view.atdmt.com.71843.9528.302br.net', +'view.atdmt.com.71844.9528.302br.net', +'view.atdmt.com.71852.9304.302br.net', +'view.atdmt.com.71855.9304.302br.net', +'view.atdmt.com.71858.9304.302br.net', +'view.atdmt.com.71861.9304.302br.net', +'view.atdmt.com.71864.9304.302br.net', +'view.atdmt.com.71867.9304.302br.net', +'view.atdmt.com.71870.9304.302br.net', +'view.atdmt.com.71873.9304.302br.net', +'view.atdmt.com.71879.9304.302br.net', +'view.atdmt.com.71882.9304.302br.net', +'view.atdmt.com.71885.9304.302br.net', +'view.atdmt.com.71888.9304.302br.net', +'view.atdmt.com.71891.9304.302br.net', +'view.atdmt.com.71894.9304.302br.net', +'view.atdmt.com.71897.9304.302br.net', +'view.atdmt.com.71900.9304.302br.net', +'view.atdmt.com.71903.9304.302br.net', +'view.atdmt.com.71906.9304.302br.net', +'view.atdmt.com.71909.9304.302br.net', +'view.atdmt.com.71912.9304.302br.net', +'view.atdmt.com.71915.9304.302br.net', +'view.atdmt.com.71918.9304.302br.net', +'view.atdmt.com.71921.9304.302br.net', +'view.atdmt.com.71924.9304.302br.net', +'view.atdmt.com.71927.9304.302br.net', +'view.atdmt.com.71930.9304.302br.net', +'view.atdmt.com.71933.9304.302br.net', +'view.atdmt.com.71936.9304.302br.net', +'view.atdmt.com.71938.9304.302br.net', +'view.atdmt.com.71939.9304.302br.net', +'view.atdmt.com.71941.9304.302br.net', +'view.atdmt.com.71942.9304.302br.net', +'view.atdmt.com.71944.9304.302br.net', +'view.atdmt.com.71945.9304.302br.net', +'view.atdmt.com.71947.9304.302br.net', +'view.atdmt.com.71948.9304.302br.net', +'view.atdmt.com.71950.9304.302br.net', +'view.atdmt.com.71951.9304.302br.net', +'view.atdmt.com.71954.9304.302br.net', +'view.atdmt.com.71956.9304.302br.net', +'view.atdmt.com.71957.9304.302br.net', +'view.atdmt.com.71960.9304.302br.net', +'view.atdmt.com.71963.9304.302br.net', +'view.atdmt.com.71965.9304.302br.net', +'view.atdmt.com.71966.9304.302br.net', +'view.atdmt.com.71969.9304.302br.net', +'view.atdmt.com.71972.9304.302br.net', +'view.atdmt.com.71975.9304.302br.net', +'view.atdmt.com.71978.9304.302br.net', +'view.atdmt.com.71981.9304.302br.net', +'view.atdmt.com.71984.9304.302br.net', +'view.atdmt.com.71990.9304.302br.net', +'view.atdmt.com.71993.9304.302br.net', +'view.atdmt.com.71996.9304.302br.net', +'view.atdmt.com.71999.9304.302br.net', +'view.atdmt.com.72002.9304.302br.net', +'view.atdmt.com.72005.9304.302br.net', +'view.atdmt.com.72008.9304.302br.net', +'view.atdmt.com.72011.9304.302br.net', +'view.atdmt.com.72023.9304.302br.net', +'view.atdmt.com.72281.9491.302br.net', +'view.atdmt.com.72283.9491.302br.net', +'view.atdmt.com.72661.9596.302br.net', +'view.atdmt.com.72663.9596.302br.net', +'view.atdmt.com.72665.9596.302br.net', +'view.atdmt.com.72667.9596.302br.net', +'view.atdmt.com.72669.9596.302br.net', +'view.atdmt.com.72671.9596.302br.net', +'view.atdmt.com.72823.9517.302br.net', +'view.atdmt.com.72825.9517.302br.net', +'view.atdmt.com.72827.9517.302br.net', +'view.atdmt.com.72829.9517.302br.net', +'view.atdmt.com.72831.9517.302br.net', +'view.atdmt.com.72833.9517.302br.net', +'view.atdmt.com.72888.9596.302br.net', +'view.atdmt.com.72889.9596.302br.net', +'view.atdmt.com.72890.9596.302br.net', +'view.atdmt.com.72891.9596.302br.net', +'view.atdmt.com.72892.9596.302br.net', +'view.atdmt.com.72893.9596.302br.net', +'view.atdmt.com.72894.9596.302br.net', +'view.atdmt.com.72895.9596.302br.net', +'view.atdmt.com.72896.9596.302br.net', +'view.atdmt.com.72897.9596.302br.net', +'view.atdmt.com.72898.9596.302br.net', +'view.atdmt.com.72899.9596.302br.net', +'view.atdmt.com.72900.9596.302br.net', +'view.atdmt.com.72901.9596.302br.net', +'view.atdmt.com.72902.9596.302br.net', +'view.atdmt.com.72903.9596.302br.net', +'view.atdmt.com.72904.9596.302br.net', +'view.atdmt.com.72905.9596.302br.net', +'view.atdmt.com.72906.9596.302br.net', +'view.atdmt.com.72907.9596.302br.net', +'view.atdmt.com.72908.9596.302br.net', +'view.atdmt.com.72909.9596.302br.net', +'view.atdmt.com.72910.9596.302br.net', +'view.atdmt.com.72911.9596.302br.net', +'view.atdmt.com.72913.9517.302br.net', +'view.atdmt.com.72916.9517.302br.net', +'view.atdmt.com.72919.9517.302br.net', +'view.atdmt.com.72922.9517.302br.net', +'view.atdmt.com.72925.9517.302br.net', +'view.atdmt.com.72928.9517.302br.net', +'view.atdmt.com.72931.9517.302br.net', +'view.atdmt.com.72934.9517.302br.net', +'view.atdmt.com.72937.9517.302br.net', +'view.atdmt.com.72940.9517.302br.net', +'view.atdmt.com.72943.9517.302br.net', +'view.atdmt.com.72946.9517.302br.net', +'view.atdmt.com.72971.9546.302br.net', +'view.atdmt.com.72972.9546.302br.net', +'view.atdmt.com.72983.9541.302br.net', +'view.atdmt.com.72984.9541.302br.net', +'view.atdmt.com.72985.9541.302br.net', +'view.atdmt.com.72986.9541.302br.net', +'view.atdmt.com.72987.9541.302br.net', +'view.atdmt.com.72988.9541.302br.net', +'view.atdmt.com.72989.9541.302br.net', +'view.atdmt.com.72990.9541.302br.net', +'view.atdmt.com.73006.9549.302br.net', +'view.atdmt.com.73009.9489.302br.net', +'view.atdmt.com.73011.9489.302br.net', +'view.atdmt.com.73013.9489.302br.net', +'view.atdmt.com.73015.9489.302br.net', +'view.atdmt.com.73018.9489.302br.net', +'view.atdmt.com.73021.9489.302br.net', +'view.atdmt.com.73024.9489.302br.net', +'view.atdmt.com.73027.9489.302br.net', +'view.atdmt.com.73030.9489.302br.net', +'view.atdmt.com.73033.9489.302br.net', +'view.atdmt.com.73036.9489.302br.net', +'view.atdmt.com.73039.9489.302br.net', +'view.atdmt.com.73050.9615.302br.net', +'view.atdmt.com.73051.9615.302br.net', +'view.atdmt.com.73052.9615.302br.net', +'view.atdmt.com.73053.9615.302br.net', +'view.atdmt.com.73054.9615.302br.net', +'view.atdmt.com.73055.9615.302br.net', +'view.atdmt.com.73056.9615.302br.net', +'view.atdmt.com.73057.9615.302br.net', +'view.atdmt.com.73059.9615.302br.net', +'view.atdmt.com.73060.9615.302br.net', +'view.atdmt.com.73061.9615.302br.net', +'view.atdmt.com.73062.9615.302br.net', +'view.atdmt.com.73063.9615.302br.net', +'view.atdmt.com.73064.9615.302br.net', +'view.atdmt.com.73065.9615.302br.net', +'view.atdmt.com.73066.9615.302br.net', +'view.atdmt.com.73067.9615.302br.net', +'view.atdmt.com.73068.9615.302br.net', +'view.atdmt.com.73069.9615.302br.net', +'view.atdmt.com.73071.9615.302br.net', +'view.atdmt.com.73073.9615.302br.net', +'view.atdmt.com.73075.9615.302br.net', +'view.atdmt.com.73077.9615.302br.net', +'view.atdmt.com.73078.9615.302br.net', +'view.atdmt.com.73079.9615.302br.net', +'view.atdmt.com.73080.9615.302br.net', +'view.atdmt.com.73081.9615.302br.net', +'view.atdmt.com.73082.9615.302br.net', +'view.atdmt.com.73083.9615.302br.net', +'view.atdmt.com.73084.9615.302br.net', +'view.atdmt.com.73085.9615.302br.net', +'view.atdmt.com.73086.9615.302br.net', +'view.atdmt.com.73087.9615.302br.net', +'view.atdmt.com.73088.9615.302br.net', +'view.atdmt.com.73089.9615.302br.net', +'view.atdmt.com.73090.9615.302br.net', +'view.atdmt.com.73091.9615.302br.net', +'view.atdmt.com.73093.9615.302br.net', +'view.atdmt.com.73094.9615.302br.net', +'view.atdmt.com.73095.9615.302br.net', +'view.atdmt.com.73096.9615.302br.net', +'view.atdmt.com.73097.9615.302br.net', +'view.atdmt.com.73098.9615.302br.net', +'view.atdmt.com.73099.9615.302br.net', +'view.atdmt.com.73874.9623.302br.net', +'view.atdmt.com.73875.9623.302br.net', +'view.atdmt.com.73876.9623.302br.net', +'view.atdmt.com.73877.9623.302br.net', +'view.atdmt.com.73878.9623.302br.net', +'view.atdmt.com.73879.9623.302br.net', +'view.atdmt.com.73880.9623.302br.net', +'view.atdmt.com.73881.9623.302br.net', +'view.atdmt.com.73882.9623.302br.net', +'view.atdmt.com.73883.9623.302br.net', +'view.atdmt.com.73884.9623.302br.net', +'view.atdmt.com.73885.9623.302br.net', +'view.atdmt.com.73886.9623.302br.net', +'view.atdmt.com.73887.9623.302br.net', +'view.atdmt.com.73888.9623.302br.net', +'view.atdmt.com.73889.9623.302br.net', +'view.atdmt.com.73890.9623.302br.net', +'view.atdmt.com.73891.9623.302br.net', +'view.atdmt.com.75262.9615.302br.net', +'view.atdmt.com.75263.9615.302br.net', +'view.atdmt.com.75264.9615.302br.net', +'view.atdmt.com.75265.9615.302br.net', +'view.atdmt.com.75266.9615.302br.net', +'view.atdmt.com.75267.9615.302br.net', +'view.atdmt.com.75268.9615.302br.net', +'view.atdmt.com.75269.9615.302br.net', +'view.atdmt.com.75270.9615.302br.net', +'view.atdmt.com.75271.9615.302br.net', +'view.atdmt.com.75272.9615.302br.net', +'view.atdmt.com.75273.9615.302br.net', +'view.atdmt.com.75274.9623.302br.net', +'view.atdmt.com.75275.9623.302br.net', +'view.atdmt.com.75276.9623.302br.net', +'view.atdmt.com.75277.9623.302br.net', +'view.atdmt.com.75278.9623.302br.net', +'view.atdmt.com.75279.9623.302br.net', +'view.atdmt.com.75280.9623.302br.net', +'view.atdmt.com.75281.9623.302br.net', +'view.atdmt.com.75282.9623.302br.net', +'view.atdmt.com.75283.9623.302br.net', +'view.atdmt.com.75284.9623.302br.net', +'view.atdmt.com.75285.9623.302br.net', +'view.atdmt.com.76197.9615.302br.net', +'view.atdmt.com.76198.9615.302br.net', +'view.atdmt.com.76199.9615.302br.net', +'view.atdmt.com.76200.9615.302br.net', +'view.atdmt.com.76202.9615.302br.net', +'view.atdmt.com.76203.9615.302br.net', +'view.atdmt.com.76204.9615.302br.net', +'view.atdmt.com.76206.9615.302br.net', +'view.atdmt.com.76207.9615.302br.net', +'view.atdmt.com.76208.9615.302br.net', +'view.atdmt.com.76550.9645.302br.net', +'view.atdmt.com.76551.9645.302br.net', +'view.atdmt.com.76552.9645.302br.net', +'view.atdmt.com.76553.9645.302br.net', +'view.atdmt.com.76554.9645.302br.net', +'view.atdmt.com.76555.9645.302br.net', +'view.atdmt.com.76556.9645.302br.net', +'view.atdmt.com.76557.9645.302br.net', +'view.atdmt.com.76558.9645.302br.net', +'view.atdmt.com.76559.9645.302br.net', +'view.atdmt.com.76560.9645.302br.net', +'view.atdmt.com.76561.9645.302br.net', +'view.atdmt.com.76562.9645.302br.net', +'view.atdmt.com.76563.9645.302br.net', +'view.atdmt.com.76564.9645.302br.net', +'view.atdmt.com.76565.9645.302br.net', +'view.atdmt.com.76566.9645.302br.net', +'view.atdmt.com.76567.9645.302br.net', +'view.atdmt.com.77580.9519.302br.net', +'view.atdmt.com.77581.9519.302br.net', +'view.atdmt.com.77586.9661.302br.net', +'view.atdmt.com.77587.9661.302br.net', +'view.atdmt.com.77588.9661.302br.net', +'view.atdmt.com.77589.9661.302br.net', +'view.atdmt.com.77590.9661.302br.net', +'view.atdmt.com.77591.9661.302br.net', +'view.atdmt.com.77592.9661.302br.net', +'view.atdmt.com.77593.9661.302br.net', +'view.atdmt.com.77594.9661.302br.net', +'view.atdmt.com.77595.9661.302br.net', +'view.atdmt.com.77596.9661.302br.net', +'view.atdmt.com.77597.9661.302br.net', +'view.atdmt.com.77598.9661.302br.net', +'view.atdmt.com.77599.9661.302br.net', +'view.atdmt.com.77600.9661.302br.net', +'view.atdmt.com.77601.9661.302br.net', +'view.atdmt.com.77602.9661.302br.net', +'view.atdmt.com.77603.9661.302br.net', +'view.atdmt.com.77604.9661.302br.net', +'view.atdmt.com.77605.9661.302br.net', +'view.atdmt.com.77606.9661.302br.net', +'view.atdmt.com.77607.9661.302br.net', +'view.atdmt.com.77608.9661.302br.net', +'view.atdmt.com.77609.9661.302br.net', +'view.atdmt.com.77610.9661.302br.net', +'view.atdmt.com.77611.9661.302br.net', +'view.atdmt.com.77612.9661.302br.net', +'view.atdmt.com.77613.9661.302br.net', +'view.atdmt.com.77614.9661.302br.net', +'view.atdmt.com.77615.9661.302br.net', +'view.atdmt.com.77616.9661.302br.net', +'view.atdmt.com.77617.9661.302br.net', +'view.atdmt.com.77618.9661.302br.net', +'view.atdmt.com.77619.9661.302br.net', +'view.atdmt.com.77620.9661.302br.net', +'view.atdmt.com.77621.9661.302br.net', +'view.atdmt.com.77622.9661.302br.net', +'view.atdmt.com.77623.9661.302br.net', +'view.atdmt.com.77624.9661.302br.net', +'view.atdmt.com.77625.9661.302br.net', +'view.atdmt.com.77626.9661.302br.net', +'view.atdmt.com.77627.9661.302br.net', +'view.atdmt.com.77629.9661.302br.net', +'view.atdmt.com.77630.9661.302br.net', +'view.atdmt.com.77631.9661.302br.net', +'view.atdmt.com.77633.9661.302br.net', +'view.atdmt.com.77635.9661.302br.net', +'view.atdmt.com.77636.9661.302br.net', +'view.atdmt.com.77637.9661.302br.net', +'view.atdmt.com.78134.9597.302br.net', +'view.atdmt.com.78135.9597.302br.net', +'view.atdmt.com.78137.9670.302br.net', +'view.atdmt.com.78139.9670.302br.net', +'view.atdmt.com.78141.9670.302br.net', +'view.atdmt.com.78143.9670.302br.net', +'view.atdmt.com.78144.9670.302br.net', +'view.atdmt.com.78145.9670.302br.net', +'view.atdmt.com.78146.9670.302br.net', +'view.atdmt.com.78147.9670.302br.net', +'view.atdmt.com.78149.9670.302br.net', +'view.atdmt.com.78150.9670.302br.net', +'view.atdmt.com.78151.9670.302br.net', +'view.atdmt.com.78152.9670.302br.net', +'view.atdmt.com.78153.9670.302br.net', +'view.atdmt.com.78154.9670.302br.net', +'view.atdmt.com.78155.9670.302br.net', +'view.atdmt.com.78156.9670.302br.net', +'view.atdmt.com.78157.9670.302br.net', +'view.atdmt.com.78158.9670.302br.net', +'view.atdmt.com.78159.9670.302br.net', +'view.atdmt.com.78160.9670.302br.net', +'view.atdmt.com.78161.9670.302br.net', +'view.atdmt.com.78162.9670.302br.net', +'view.atdmt.com.78163.9670.302br.net', +'view.atdmt.com.78202.9623.302br.net', +'view.atdmt.com.78203.9623.302br.net', +'view.atdmt.com.78204.9623.302br.net', +'view.atdmt.com.78205.9623.302br.net', +'view.atdmt.com.78206.9623.302br.net', +'view.atdmt.com.78207.9623.302br.net', +'view.atdmt.com.78527.9541.302br.net', +'view.atdmt.com.78889.9623.302br.net', +'view.atdmt.com.78890.9623.302br.net', +'view.atdmt.com.78891.9623.302br.net', +'view.atdmt.com.78892.9623.302br.net', +'view.atdmt.com.78893.9623.302br.net', +'view.atdmt.com.78894.9623.302br.net', +'view.atdmt.com.79593.9546.302br.net', +'view.atdmt.com.79594.9546.302br.net', +'view.atdmt.com.79595.9546.302br.net', +'view.atdmt.com.79596.9546.302br.net', +'view.atdmt.com.79597.9546.302br.net', +'view.atdmt.com.79598.9546.302br.net', +'view.atdmt.com.79840.9489.302br.net', +'view.atdmt.com.79841.9489.302br.net', +'view.atdmt.com.79842.9489.302br.net', +'view.atdmt.com.79843.9489.302br.net', +'view.atdmt.com.79844.9489.302br.net', +'view.atdmt.com.79845.9489.302br.net', +'view.atdmt.com.79846.9489.302br.net', +'view.atdmt.com.79847.9489.302br.net', +'view.atdmt.com.79867.9491.302br.net', +'view.atdmt.com.79869.9491.302br.net', +'view.atdmt.com.79871.9491.302br.net', +'view.atdmt.com.79873.9491.302br.net', +'view.atdmt.com.79875.9491.302br.net', +'view.atdmt.com.801.8000.302br.net', +'view.atdmt.com.804.8000.302br.net', +'view.atdmt.com.857.9002.302br.net', +'view.atdmt.com.859.9002.302br.net', +'view.atdmt.com.861.9002.302br.net', +'view.atdmt.com.867.9002.302br.net', +'view.atdmt.com.871.9002.302br.net', +'view.atdmt.com.873.9002.302br.net', +'view.atdmt.com.917.9004.302br.net', +'view.atdmt.com.919.9004.302br.net', +'view.atdmt.com.920.9004.302br.net', +'view.atdmt.com.923.9004.302br.net', +'view.atdmt.coom.70635.9528.302br.net', +'view.atdmt.net', +'view.atdmtcaya.2186.9023.302br.net', +'view.autoscout24.de', +'view.binlayer.com', +'view.ilove.de', +'view4cash.de', +'viewbix.com', +'viewhttp.atdmt.com.70777.9596.302br.net', +'viewsecure.net', +'viewstat.hotstat.nl', +'vig.tynt.com', +'vigapi.tynt.com', +'viglink.com', +'vignette.com', +'vikingtrck.com', +'villsacsma.download', +'vimage.com', +'vimages.videoprofessor.com', +'vintacom.112.2o7.net', +'vip.adstatic.com', +'vipadshares.com', +'viplogin.553.clicksurecpa.com', +'vippay.c.duba.net', +'vipplaza-co-id.b.appier.net', +'virads.com', +'virtual-person.com', +'virtualnet.co.uk', +'visit.dealspwn.com', +'visit.digidip.net', +'visit.geocities.jp', +'visit.mobot.net', +'visit.webhosting.yahoo.com', +'visitor.benchmarkemail.com', +'visitorbarscript.com', +'visitorcontact.com', +'visitorpath.com', +'visitorprofiler.com', +'visitors.sourcingmap.com', +'visitorvoice.etracker.com', +'visitweb.com', +'visualdna-widgets.mirror.co.uk', +'visuallyxvnxqhr.download', +'visualnetworks.com', +'visualrevenue.com', +'vitacost.tt.omtrdc.net', +'vitax.abc-sms.de', +'vitrade02.webtrekk.net', +'viziomothersday.brandmovers.net', +'vizisense.komli.net', +'vjnehfcprozymite.review', +'vk.cblevt.com', +'vladtv.us.intellitxt.com', +'vlbalash.justclick.ru', +'vlexokrako.com', +'vlog.leadformix.com', +'vlogic.ak-networks.com', +'vmco.adk2.co', +'vml-127.com', +'vmp.boldchat.com', +'vmss.boldchat.com', +'vocalistgixybeoj.download', +'vod-s.kinetonetwork.com', +'vod.mobile-abc.com', +'vod.mobvid.mobi', +'vodafone.inq.com', +'vogo-vogo.ru', +'voluum.redirecting.site', +'volvelle-ads-cdn.azureedge.net', +'voodooparking.com', +'vop.sundaysky.com', +'voradu.com', +'vorcu.go2cloud.org', +'vorlon.ferretsoft.com', +'vortex-sandbox.data.microsoft.com', +'vortex-win.data.microsoft.com', +'vortex.data.microsoft.com', +'vortextraffic.com', +'vowjnembargoing.review', +'voyages-sncf.com.122.207.net', +'vp-www.addthis.com', +'vp2-www.addthis.com', +'vpb0.moatads.com', +'vpos.bnex.com', +'vps.zeptolab.com', +'vq91811.com', +'vra.outbrain.com', +'vrp.outbrain.com', +'vrt-chidc2-only.outbrain.com', +'vrt.outbrain.com', +'vrts.doublepimp.com', +'vs.dmtracker.com', +'vs.target.com', +'vs.webtrekk.net', +'vsc.send.microad.jp', +'vseprogroshi.justclick.ru', +'vserv.bc.cdn.bitgravity.com', +'vserv.mobi', +'vsevjednom.cz', +'vsii.spinbox.net', +'vst.c.appier.net', +'vstats.net', +'vstrk.com', +'vt.adition.com', +'vtot.proxy.aol.com', +'vtrack.larvtrk.com', +'vtrack.wdavtrk.com', +'vtracking.in.com', +'vtrtl.de', +'vu.moatads.com', +'vu.veoxa.com', +'vulcan.doublepimp.com', +'vulgarizexemdqzmr.download', +'vumeujlug.download', +'vungle.com', +'vviii.ru', +'vw.masterstats.com', +'vwr1.hitbox.com', +'vygeirghpedaller.review', +'vznetzme.ivwbox.de', +'vznetzst.ivwbox.de', +'vztd3.adition.com', +'w.atdmt.com.1000.302br.net', +'w.cm.ksmobile.com', +'w.estat.com', +'w.extreme-dm.com', +'w.goprkcdn.com', +'w.hypercomments.com', +'w.mlv-cdn.com', +'w.online-verlag-freiburg.de', +'w.sharethis.com', +'w.shoopadoo.com', +'w.tr553.com', +'w.uptolike.com', +'w.usabilla.com', +'w.zeroredirect.com', +'w.zeroredirect1.com', +'w.zeroredirect2.com', +'w0.extreme-dm.com', +'w00tpublishers.wootmedia.net', +'w1.ax.xrea.com', +'w1.extreme-dm.com', +'w1.hitbox.com', +'w1.luckyorange.com', +'w1.mozzi.com', +'w10.hitbox.com', +'w100.hitbox.com', +'w101.hitbox.com', +'w102.hitbox.com', +'w103.hitbox.com', +'w104.hitbox.com', +'w105.hitbox.com', +'w106.hitbox.com', +'w107.hitbox.com', +'w108.hitbox.com', +'w109.hitbox.com', +'w11.hitbox.com', +'w110.hitbox.com', +'w111.hitbox.com', +'w112.hitbox.com', +'w113.hitbox.com', +'w114.hitbox.com', +'w115.hitbox.com', +'w116.hitbox.com', +'w117.hitbox.com', +'w118.hitbox.com', +'w119.hitbox.com', +'w12.hitbox.com', +'w120.hitbox.com', +'w121.hitbox.com', +'w122.hitbox.com', +'w123.hitbox.com', +'w124.hitbox.com', +'w126.hitbox.com', +'w128.hitbox.com', +'w129.hitbox.com', +'w13.hitbox.com', +'w130.hitbox.com', +'w131.hitbox.com', +'w132.hitbox.com', +'w133.hitbox.com', +'w135.hitbox.com', +'w136.hitbox.com', +'w137.hitbox.com', +'w138.hitbox.com', +'w139.hitbox.com', +'w14.hitbox.com', +'w140.hitbox.com', +'w141.hitbox.com', +'w144.hitbox.com', +'w147.hitbox.com', +'w15.hitbox.com', +'w153.hitbox.com', +'w154.hitbox.com', +'w155.hitbox.com', +'w157.hitbox.com', +'w159.hitbox.com', +'w16.hitbox.com', +'w161.hitbox.com', +'w162.hitbox.com', +'w167.hitbox.com', +'w168.hitbox.com', +'w17.hitbox.com', +'w170.hitbox.com', +'w175.hitbox.com', +'w18.hitbox.com', +'w19.hitbox.com', +'w2-ver.adprofile.net', +'w2.hitbox.com', +'w20.hitbox.com', +'w20.iit.guru', +'w21.hitbox.com', +'w22.hitbox.com', +'w23.hitbox.com', +'w24.hitbox.com', +'w25.hitbox.com', +'w26.hitbox.com', +'w27.hitbox.com', +'w28.hitbox.com', +'w29.hitbox.com', +'w2mobile.go2cloud.org', +'w3.bitterstrawberry.com', +'w3.hitbox.com', +'w30.hitbox.com', +'w31.hitbox.com', +'w32.hitbox.com', +'w33.hitbox.com', +'w36.hitbox.com', +'w3nation.com', +'w4.hitbox.com', +'w5.hitbox.com', +'w6.bitterstrawberry.com', +'w6.hitbox.com', +'w7.hitbox.com', +'w8.hitbox.com', +'w88.go.com', +'w88.m.espn.go.com', +'w9.hitbox.com', +'wa.and.co.uk', +'wa.metro.co.uk', +'wa.ui-portal.de', +'wac.658e.edgecastcdn.net', +'wac.a164.edgecastcdn.net', +'wac.a164.taucdn.net', +'wackoqczwjds.download', +'wagerersivrvnemu.download', +'wahoha.com', +'waiads.com', +'wakapita.com', +'walkingsgzezhx.download', +'wallstreet.2cnt.net', +'wallstreetprep.go2cloud.org', +'walmartcom.112.2o7.net', +'walmartsavingscatcher.com', +'wamfebdvsabotier.review', +'wan.duba.net', +'wap-click.com', +'wap.advertising.com', +'wap.chatwalk.com', +'wap.co.il', +'wapp2de.mobimaniac.com', +'wapp4de.brickoffers.com', +'wapplanet.org', +'wapstart.ru', +'warcry.us.intellitxt.com', +'warentest01.webtrekk.net', +'warmongersgyuszzudy.download', +'warnerbros.112.207.net', +'warnerbros.112.2o7.net', +'warnerbrosads.112.2o7.net', +'warp.ly', +'warp.prnewswire.co.uk', +'warp2search.us.intellitxt.com', +'warsport.timesink.com', +'washesqydoigavu.download', +'watch.stream4know.com', +'watchever.bild.de', +'watchfree.flv.in', +'watchlivestream.me.uk', +'watson.live.com', +'watson.microsoft.com', +'watson.ppe.telemetry.microsoft.com', +'watson.telemetry.microsoft.com', +'waudeesestew.com', +'wbf.go2cloud.org', +'wblasti.go2cloud.org', +'wct.link', +'wctrack.go2cloud.org', +'wd-edge.sharethis.com', +'wd.sharethis.com', +'wda.com', +'wdata.ero-advertising.com', +'wdc.mediation.nexage.com', +'wdig.vo.llnwd.net', +'wdm.map24.com', +'wdxcyber.us.intellitxt.com', +'weakentipjxv.download', +'web-jp.ad-v.jp', +'web-stat.com', +'web-t.9gag.com', +'web-track.telekom-dienste.de', +'web.adblade.com', +'web.adknowledge.com', +'web.blogads.com', +'web.mobpartner.com', +'web.mxradon.com', +'web.secmedia.de', +'web.softonic-analytics.net', +'web1.51.la', +'web1.realtracker.com', +'web1.voodoo.com', +'web10.voodoo.com', +'web1000.com', +'web11.voodoo.com', +'web12.voodoo.com', +'web13.voodoo.com', +'web14.voodoo.com', +'web15.voodoo.com', +'web16.voodoo.com', +'web17.voodoo.com', +'web18.voodoo.com', +'web19.voodoo.com', +'web2.deja.com', +'web2.realtracker.com', +'web2.voodoo.com', +'web20.voodoo.com', +'web21.voodoo.com', +'web22.voodoo.com', +'web23.voodoo.com', +'web24.voodoo.com', +'web25.voodoo.com', +'web26.voodoo.com', +'web27.voodoo.com', +'web28.voodoo.com', +'web29.voodoo.com', +'web3.voodoo.com', +'web30.voodoo.com', +'web31.voodoo.com', +'web32.voodoo.com', +'web33.voodoo.com', +'web34.voodoo.com', +'web35.voodoo.com', +'web36.voodoo.com', +'web37.voodoo.com', +'web38.voodoo.com', +'web39.voodoo.com', +'web4.realtracker.com', +'web4.voodoo.com', +'web40.voodoo.com', +'web4friends.com', +'web5.voodoo.com', +'web6.voodoo.com', +'web63.jumptap.com', +'web64.jumptap.com', +'web65.jumptap.com', +'web7.voodoo.com', +'web8.voodoo.com', +'web9.voodoo.com', +'webad1.adsoftware.com', +'webads.co.nz', +'webads.com', +'webads.nl', +'webaffiliate.covad.com', +'webartsbrack.tt.omtrdc.net', +'webaudit.hu', +'webcare.byside.com', +'webcontrolling.com', +'webcounter.cc', +'webcounter.co.za', +'webcounter.com', +'webcounter.cz', +'webcounter.goweb.de', +'webcounter.together.net', +'webd.francite.com', +'webd.home.news.cn', +'webdiva3001.bravejournal.com', +'webforensics.co.uk', +'webglobaltraffic.info', +'webgozar.com', +'webgozar.ir', +'webhit.snd.no', +'webhitcounter.com', +'webhits.de', +'webindicator.siteheart.com', +'webinline-usage.streamesh.net', +'webinline.look4like.com', +'webiq-cdn.appspot.com', +'webiq-warp.appspot.com', +'weblemon.pl', +'webload101.hitbox.com', +'weblog.blogads.com', +'weblog.com.ua', +'weblog.livesport.eu', +'weblog.strawberrynet.com', +'weblogger-dynamic-lb.playdom.com', +'webmail.adsender.us', +'webmail.leadbolt.com', +'webmail.mobpartner.mobi', +'webmail.performancerevenues.com', +'webmail.yeahmobi.com', +'webmaster.erotik.com', +'webmasters.hugetraffic.com', +'webmasters.nastydollars.com', +'webmasters.tubealliance.com', +'webmedia.co.il', +'webmedia.pl', +'webnooze.com', +'webodu.com', +'weborama.fr', +'webpagescripts.net', +'webperformance.it', +'webpower.com', +'webprovider.com', +'webprowire.com', +'webproworld.com', +'webr.emv2.com', +'websatpub.fth.net', +'webservices.aptwords.net', +'webservices.ecn5.com', +'webservices.sub2tech.com', +'webservices.websitepros.com', +'webservis.gen.tr', +'website-designs.com', +'websitefinancing.com', +'websitehome.co.uk', +'websitepromoserver.com', +'websitepromote.com', +'websitesponsor.de', +'websitetrafficreport.com', +'webspace.webhoster.de', +'webspectator.com', +'websponsors.com', +'webstars2000.com', +'webstat.com', +'webstat.kuwo.cn', +'webstat.net', +'webstat.no', +'webstatistieken.xs4all.nl', +'webstatistik.odav.de', +'webstats.adspaces.ero-advertising.com', +'webstats.com.br', +'webstats.perfectworld.com', +'webstats.sapo.pt', +'webstats.seoinc.com', +'webtools.homestead.com', +'webtrac.bluecherry.com', +'webtrace.exapaq.com', +'webtrack-brickstreetconnect-bau-prd.hsbc.com.hk', +'webtrack-brickstreetconnect-mkt-prd.hsbc.com.hk', +'webtrack.jwgrant.co.uk', +'webtracker.educationconnection.com', +'webtrackerplus.com', +'webtracking.touchclarity.com', +'webtraffic.ttinet.com', +'webtrafficllc.co', +'webtraxx.de', +'webtrekk.com', +'webtrekk.de', +'webtrekk.net', +'webtrends.com', +'webtrends.de', +'webtrends.org', +'webtrends.thisis.co.uk', +'webtrendslive.com', +'webtrening.justclick.ru', +'webts.adac.de', +'webuytraffic.com', +'webxu.go2cloud.org', +'weddings.searchwho.com', +'wee.co.il', +'weecia.7173.clicksurecpa.com', +'weedoit.fr', +'weeklyad.target.com', +'weesh.co.uk', +'weevermedia.go2affise.com', +'wehasoffers.go2cloud.org', +'welcome.openx.com', +'welcomeworld.justclick.ru', +'welkingmkscrmgc.download', +'weltbild01.webtrekk.net', +'weltbild02-de.webtrekk.net', +'weltonline01.webtrekk.net', +'wemfbox.ch', +'wemftest0.2cnt.net', +'wemftest1.2cnt.net', +'wemftest2.2cnt.net', +'wemftest3.2cnt.net', +'wemftest4.2cnt.net', +'wemfvtest.2cnt.net', +'werbemittel.adshot.de', +'werbung.mediaplex.com', +'werbung.xfind.de', +'wes.df.telemetry.microsoft.com', +'wesell.co.il', +'westeins.2cnt.net', +'westernereoednyj.download', +'westeros.go2cloud.org', +'wetrack.it', +'wfnetwork.go2cloud.org', +'wfpscripts.webspectator.com', +'wfs01.wapka.mobi', +'whainteryield.jmp9.com', +'whatifholdings.go2cloud.org', +'whatinteryield.jmp9.com', +'whatismyip.akamai.com', +'whatrunswhere.go2cloud.org', +'whatseek.com', +'whenu.com', +'whereuntomzrpo.download', +'whickerxsxnz.download', +'whinteryield.jmp9.com', +'whirlerssrmbf.download', +'whisk.com', +'whispa.com', +'whistleout.s3.amazonaws.com', +'who.knows.com', +'wholebodyresearch.go2cloud.org', +'whoopalook.com', +'whos.amung.us', +'whoson.smcorp.com', +'whosread.com', +'whydowork.com', +'whyfame.us.intellitxt.com', +'wibiya-actions.conduit-data.com', +'wibiya-june-new-log.conduit-data.com', +'widget.apptap.com', +'widget.breakingburner.com', +'widget.cheki.com.ng', +'widget.dihitt.com.br', +'widget.embedarticle.com', +'widget.foodieblogroll.com', +'widget.getsatisfaction.com', +'widget.hypercomments.com', +'widget.imshopping.com', +'widget.marktjagd.de', +'widget.perfectmarket.com', +'widget.sharecash.org', +'widget.siteheart.com', +'widget.stagram.com', +'widget.supercounters.com', +'widget.weibo.com', +'widget.yavli.com', +'widgetadvertising.biz', +'widgetbucks.com', +'widgetcf.adviceiq.com', +'widgetcontent.net', +'widgetdigital.info', +'widgets-cdn.rpxnow.com', +'widgets.amung.us', +'widgets.cam-content.com', +'widgets.comcontent.net', +'widgets.digg.com', +'widgets.digitalmediacommunications.com', +'widgets.fccinteractive.com', +'widgets.getglue.com', +'widgets.goldankauf123.de', +'widgets.kiosked.com', +'widgets.markosweb.com', +'widgets.mobilelocalnews.com', +'widgets.mozo.com.au', +'widgets.outbrain.com', +'widgets.privateproperty.com.ng', +'widgets.progrids.com', +'widgets.sprinkletxt.com', +'widgetssec.cam-content.com', +'widgettool.net', +'wiki.adition.com', +'wiki.adspaces.ero-advertising.com', +'wiki.ero-advertising.com', +'wildrhino.com', +'wiliestmbpgakdno.download', +'willhab.oewabox.at', +'win.bannersbucket.xyz', +'win.openvn.com', +'win7affiliates.com', +'windgallsxsnxcqt.download', +'window.nixnet.cz', +'windowslive.tt.omtrdc.net', +'winfaq.de.intellitxt.com', +'wingatemedia.go2cloud.org', +'wingoads.com', +'wingowin.com', +'winmpmain.112.2o7.net', +'winneronline.com', +'winteryield.jmp9.com', +'wintotal.de.intellitxt.com', +'wireless.ign.us.intellitxt.com', +'wirelessforums.us.intellitxt.com', +'wirelessidea.go2cloud.org', +'wisemen.go2cloud.org', +'wisewire.com', +'wisti.adulte3g.com', +'witbe.net', +'wizard.bannerforge.com', +'wizfitness.go2cloud.org', +'wks.ero-advertising.com', +'wlmfortunepartners.adsrv.eacdn.com', +'wlwt01.opentext.com', +'wm-space.youero.com', +'wmadv.go2cloud.org', +'wmedia.adk2x.com', +'wmfqmxqwsurgeries.review', +'wmp-forumde.digidip.net', +'wms-eu.amazon-adsystem.com', +'wms-fe.amazon-adsystem.com', +'wms.assoc-amazon.com', +'wms.assoc-amazon.de', +'wmtrackinglink.com', +'wmtrafficentry.com', +'wn.pos.baidu.com', +'wnpcdn.com', +'wodizapt.com', +'womansanga.justclick.ru', +'womanwithinsweepstakes2013.brandmovers.net', +'womensforum.us.intellitxt.com', +'won.images.streamray.com', +'wondrousvalue.com', +'woopra.com', +'wordwatch.go2cloud.org', +'woredi.com', +'workflowboard.com', +'workingonline.com', +'worksbest.freeservers.com', +'world.eliteserverconnect.xyz', +'worldbannerexchange.com', +'worldprofitassociates.com', +'worldwidesolution.go2cloud.org', +'wouralistvdmttom.download', +'wovxriqartworks.review', +'wow.ero-advertising.com', +'wowanalytics.co.uk', +'wowtrk.go2cloud.org', +'wp.hit.gemius.pl', +'wpmimkheartfelt.review', +'wpni.tt.omtrdc.net', +'wptag.net', +'wqdtzhdstabler.review', +'wrackgdnkgwg.download', +'wrb.pornme.com', +'wrestling.searchwho.com', +'wrt.mtr-4uk.com', +'wrxviatrhzoists.review', +'ws-eu.amazon-adsystem.com', +'ws-na.amazon-adsystem.com', +'ws.00zasdf.pw', +'ws.abbp1.pw', +'ws.amazon.com', +'ws.plmokn.pw', +'ws.routehero.com', +'ws.sharethis.com', +'ws.tapjoyads.com', +'ws1.surf-town.net', +'ws10.surf-town.net', +'ws11.surf-town.net', +'ws12.surf-town.net', +'ws13.surf-town.net', +'ws14.surf-town.net', +'ws15.surf-town.net', +'ws16.surf-town.net', +'ws17.surf-town.net', +'ws18.surf-town.net', +'ws19.surf-town.net', +'ws2.surf-town.net', +'ws20.surf-town.net', +'ws21.surf-town.net', +'ws22.surf-town.net', +'ws23.surf-town.net', +'ws24.surf-town.net', +'ws25.surf-town.net', +'ws26.surf-town.net', +'ws27.surf-town.net', +'ws28.surf-town.net', +'ws29.surf-town.net', +'ws3.surf-town.net', +'ws4.surf-town.net', +'ws5.surf-town.net', +'ws6.surf-town.net', +'ws7.surf-town.net', +'ws8.surf-town.net', +'ws9.surf-town.net', +'wsb1.surf-town.net', +'wsb2.surf-town.net', +'wsb3.surf-town.net', +'wsb4.surf-town.net', +'wsb5.surf-town.net', +'wsb6.surf-town.net', +'wsb7.surf-town.net', +'wsb8.surf-town.net', +'wsb9.surf-town.net', +'wsc.ehost-services.com', +'wsc1.surf-town.net', +'wsc1.webspectator.com', +'wsg.abbp1.pw', +'wsi1.surf-town.net', +'wsknjzjwlyrically.review', +'wsod.com', +'wsp1.surf-town.net', +'wsq.umeng.com', +'wsstatic.govmetric.com', +'wstat.wibiya.com', +'wsw.ero-advertising.com', +'wsw1.surf-town.net', +'wsw2.surf-town.net', +'wsw3.surf-town.net', +'wsw4.surf-town.net', +'wsw5.surf-town.net', +'wsw6.surf-town.net', +'wswb1.surf-town.net', +'wswb3.surf-town.net', +'wt.o.nytimes.com', +'wt.socialsex.biz', +'wt01.webtrekk.net', +'wta.ero-advertising.com', +'wtlive.com', +'wtpn.twenga.co.uk', +'wtpn.twenga.de', +'wundercounter.com', +'wutlar.fortumo.com', +'wv.inner-active.mobi', +'wvwr1.hitbox.com', +'ww.cj.com', +'ww.tr553.com', +'ww1.contaprime.com', +'ww1.hitbox.com', +'ww1.searchhelper.com', +'ww1.smartadserver.com', +'ww1082.smartadserver.com', +'ww129.smartadserver.com', +'ww13.smartadserver.com', +'ww14.smartadserver.com', +'ww2.ero-advertising.com', +'ww2.hitbox.com', +'ww2.instafinder.com', +'ww2.lostwebtracker.com', +'ww234.smartadserver.com', +'ww251.bz-berlin.de', +'ww251.smartadserver.com', +'ww264.smartadserver.com', +'ww276.smartadserver.com', +'ww3.hitbox.com', +'ww302.smartadserver.com', +'ww362.smartadserver.com', +'ww370.smartadserver.com', +'ww38.smartadserver.com', +'ww381.smartadserver.com', +'ww392.smartadserver.com', +'ww50.smartadserver.com', +'ww55.smartadserver.com', +'ww57.smartadserver.com', +'ww651.smartadserver.com', +'ww684.smartadserver.com', +'ww690.smartadserver.com', +'ww84.smartadserver.com', +'ww856.smartadserver.com', +'ww881.smartadserver.com', +'wwa.dateformore.de', +'wwa.ero-advertising.com', +'wwa.hitbox.com', +'wwa.only-dates.de', +'wwbanners2.ero-advertising.com', +'wwc.hitbox.com', +'wwd.hitbox.com', +'wweconsumer.112.2o7.net', +'wwm.adspirit.de', +'wws.ero-advertising.com', +'wwv4ez0n.com', +'www-banner.chat.ru', +'www-beta.statcounter.com', +'www-obdesign-com-tw.b.appier.net', +'www-shard02-a.justclick.ru', +'www-shard04-cef.justclick.ru', +'www-shard05-ghi.justclick.ru', +'www-shard07-jm.justclick.ru', +'www-shard09-s.justclick.ru', +'www-shard11-vwxyz.justclick.ru', +'www.005.free-counter.co.uk', +'www.006.free-counter.co.uk', +'www.007.free-counter.co.uk', +'www.008.free-counter.co.uk', +'www.0hna.com', +'www.100webads.com', +'www.123count.com', +'www.123counter.superstats.com', +'www.123spill.no', +'www.123stat.com', +'www.123webmarketing.com', +'www.1414.de', +'www.160tracker.com', +'www.17k.originalsafteyredir.com', +'www.1ad.de', +'www.1clickdownloader.com', +'www.1empiredirect.com', +'www.1worldmarket.com', +'www.2.livejasmin.com', +'www.247media.com', +'www.247media.net', +'www.247realmedia.com', +'www.2ad.de', +'www.2gtstrk.com', +'www.2o7.net', +'www.302br.net', +'www.360adshost.net', +'www.49535.com', +'www.4qsurvey.com', +'www.4ur.click', +'www.51yes.com', +'www.526633146.redpop.pro', +'www.600z.com', +'www.718unlimited.com', +'www.863c4c0c521.se', +'www.a-ads.com', +'www.a.ero-advertising.com', +'www.a.volvelle.tech', +'www.a4dtracker.com', +'www.a6ba.com', +'www.a9.com', +'www.aaddzz.com', +'www.abacidcqfrjju.download', +'www.abcjmp.com', +'www.abe.com.au', +'www.abidinglynsygto.download', +'www.abmr.net', +'www.abmr2.net', +'www.accipiter.com', +'www.acclaimimages.com', +'www.accurately-locate.com', +'www.acecounter.com', +'www.aceratezhoytlh.download', +'www.achmedia.com', +'www.acint.net', +'www.acinusqiwjwzl.download', +'www.acotrk.com', +'www.acquinityinteractive.com', +'www.acronymbxruv.download', +'www.acs3.com', +'www.actionteaser.ru', +'www.activatesubhrle.download', +'www.actonsoftware.com', +'www.actvtrack.com', +'www.acxiom.com', +'www.acxtrk.com', +'www.ad-agent.com', +'www.ad-board.com', +'www.ad-guru.com', +'www.ad-host.com', +'www.ad-lister.co.uk', +'www.ad-listings.com', +'www.ad-lite.com', +'www.ad-maker.net', +'www.ad-media.org', +'www.ad-search.com', +'www.ad-solutions.com', +'www.ad-space.net', +'www.ad-staff.com', +'www.ad-style.com', +'www.ad-visor.com', +'www.ad-x.co.uk', +'www.ad.admitad.com', +'www.ad.doubleclick.net.60532.9279.302br.net', +'www.ad.doubleclick.net.68390.9544.302br.net', +'www.ad.doubleclick.net.73285.9423.302br.net', +'www.ad.doubleclick.net.76530.9544.302br.net', +'www.ad.infoseek.com', +'www.ad.preferences.net', +'www.ad2games.com', +'www.ad4games.com', +'www.adadvisor.net', +'www.adaos-ads.net', +'www.adap.tv', +'www.adatom.com', +'www.adbit.co', +'www.adblade.com', +'www.adbrands.co.il', +'www.adbutler.com', +'www.adbuyer.com', +'www.adcash.com', +'www.adcdnx.com', +'www.adcenter.net', +'www.adcentriconline.com', +'www.adchoices.com.vn', +'www.adclickxpress.com', +'www.adclix.com', +'www.adclub.net', +'www.adcron.com', +'www.addinto.com', +'www.addme.com', +'www.addressingbxmqasxix.download', +'www.addthis.com', +'www.adexc.net', +'www.adexce.net', +'www.adexchangeperformance.com', +'www.adexcite.com', +'www.adexm.com', +'www.adexten.com', +'www.adfest.com', +'www.adfluence.net', +'www.adfoc.us', +'www.adforce.ru', +'www.adforgames.com', +'www.adfornepal.com', +'www.adfusion.com', +'www.adgatemedia.com', +'www.adgear.com', +'www.adgebra.co.in', +'www.adgebra.in', +'www.adgroups.com', +'www.adgroups.net', +'www.adhall.com', +'www.adhitprofits.com', +'www.adhood.com', +'www.adhubz.com', +'www.adify.com', +'www.adimages.beeb.com', +'www.adinterax.com', +'www.adipics.com', +'www.adition.com', +'www.adjug.com', +'www.adjuggler.com', +'www.adlead.com', +'www.adlock.in', +'www.admailtiser.com', +'www.adman.gr', +'www.admantic.ru', +'www.admarketplace.net', +'www.admaya.in', +'www.admaym.com', +'www.admedo.com', +'www.admeld.com', +'www.admitad.com', +'www.admyapp.net', +'www.adnetworkperformance.com', +'www.adnxs1.com', +'www.adocean.pl', +'www.adopshost1.com', +'www.adotsolution.com', +'www.adprudence.com', +'www.adreadytractions.com', +'www.adrevmedia.com', +'www.adroz.com', +'www.adrtrklnk.com', +'www.ads.bitservices.no', +'www.ads.ero-advertising.com', +'www.ads1.advance.de', +'www.ads180.com', +'www.ads2.advance.de', +'www.ads3.advance.de', +'www.ads4.advance.de', +'www.ads4links.com', +'www.ads80.com', +'www.adsalvo.com', +'www.adsbookie.com', +'www.adscendmedia.com', +'www.adscoops.com', +'www.adsdelight.com', +'www.adsender.us', +'www.adsensecamp.com', +'www.adserver.brandilitynetwork.de', +'www.adserver.cz.cc', +'www.adserverplus.com', +'www.adserverxxl.de', +'www.adserving.pro', +'www.adservone.com', +'www.adshiftmedia.com', +'www.adshooter.com', +'www.adshot.de', +'www.adskeeper.co.uk', +'www.adsmarketgroup.com', +'www.adsmeans.com', +'www.adsniper.ru', +'www.adsoogle.com', +'www.adspaces.ero-advertising.com', +'www.adsphinx.com', +'www.adspics.com', +'www.adspinner.com', +'www.adsplay.in', +'www.adspserving.com', +'www.adsuperstar.com', +'www.adsview.com', +'www.adtech.com', +'www.adtegrity.com', +'www.adternal.com', +'www.adthrive.com', +'www.adti.me', +'www.adtilt.com', +'www.adtoll.com', +'www.adtrack1.pl', +'www.adtredo.com', +'www.adtwirl.com', +'www.aducash.com', +'www.adult-banner-ads.com', +'www.adultbannerexchange.de', +'www.adultblogtoplist.com', +'www.adv-adserver.com', +'www.adv.co.il', +'www.adv679854.ru', +'www.advancedad.com', +'www.advancets.org', +'www.advconversion.com', +'www.adventori.com', +'www.adventuresinnetmarketing.com', +'www.advenueplatform.com', +'www.advernet.co.il', +'www.adversalservers.com', +'www.adverticus.de', +'www.advertisegame.com', +'www.advertiserjob.com', +'www.advertising-software.com', +'www.advertising-world.com', +'www.advertising.com', +'www.advertserve.com', +'www.advertstream.com', +'www.advertzer.com', +'www.advido.com', +'www.adview.cn', +'www.adviews-sponsor.de', +'www.advm10.com', +'www.advnet.xyz', +'www.advolution.de', +'www.advombat.ru', +'www.advserver.xyz', +'www.adworkmedia.com', +'www.adworkmedia.net', +'www.adworks.com', +'www.adx1.com', +'www.adzly.com', +'www.adzones.com', +'www.aecidiamldalomt.download', +'www.affbeat.com', +'www.affbuzzads.com', +'www.affiliate.net', +'www.affiliatefuel.com', +'www.affiliatefuture.co.uk', +'www.affiliateguide.com', +'www.affiliateharvest.com', +'www.affiliatematch.com', +'www.affiliatemoneytree.com', +'www.affiliatequality.com', +'www.affiliateshop.com', +'www.affiliateshowcase.com', +'www.affiliatetracking.com', +'www.affiliatetracking.net', +'www.affiliatewindow.com', +'www.affiliatezone.com', +'www.affirmedzwvnkh.download', +'www.affise.com', +'www.affsharkoffer.com', +'www.afftrack.com', +'www.afftracker.info', +'www.afftrackinglinks.com', +'www.afftrackr.com', +'www.affyield.com', +'www.afgr2.com', +'www.afiliati.ro', +'www.afsanalytics.com', +'www.afterdownload.com', +'www.afterview.ru', +'www.agmtrk.com', +'www.agnstaging.com', +'www.aideslihks.download', +'www.airpush.com', +'www.ajjtgubginkgoes.review', +'www.ajwantjtkrn.download', +'www.akqhhiqteunuchise.review', +'www.alienationxjbqjennn.download', +'www.alijaextort.review', +'www.alladvantage.com', +'www.alliancesqcqet.download', +'www.allosponsor.com', +'www.alloydigital.com', +'www.allsolutionsnetwork.com', +'www.alltereg0.ru', +'www.alltraff.ru', +'www.almonriesdocerjqcc.download', +'www.alphagirlz.mobi', +'www.amanitaswtzshxp.download', +'www.amazingcounters.com', +'www.amazinglyjvrucwx.download', +'www.amclicks.com', +'www.amidmostewbvqcji.download', +'www.amusive.com', +'www.amylaseyaxvh.download', +'www.analytics.theminersunion.com', +'www.anapaestsgekcc.download', +'www.anatomiseddybglcuku.download', +'www.androtify.com', +'www.annuncio.com.do', +'www.anomicpcwgrml.download', +'www.anonymousads.com', +'www.answermedia.com', +'www.anurousxaeazghbz.download', +'www.any.gs', +'www.anymanga.com', +'www.apmebf.com', +'www.apodemjyoqhwc.download', +'www.apophygeneafuk.download', +'www.app-authority.com', +'www.app-ratings.com', +'www.apparitorvlipqjiz.download', +'www.appetencyelain.com', +'www.appflood.com', +'www.appfoxes.com', +'www.appia.com', +'www.appliedsemantics.com', +'www.applifier.com', +'www.applift.com', +'www.apposersdamxq.download', +'www.appraisingemfxg.download', +'www.apps-infor.com', +'www.apptornado.com', +'www.apptv.com', +'www.appyet.com', +'www.apqixzxxgoverstayed.review', +'www.aptrk.com', +'www.aptrk5.com', +'www.apture.com', +'www.apxadtracking.net', +'www.areasnap.com', +'www.armstrongsystems.bizland.com', +'www.arrestspkqtg.download', +'www.artificecvtogvnt.download', +'www.ashiestsdznwfbsd.download', +'www.aspartamerpzyyzyn.download', +'www.ass4all.com', +'www.assoc-amazon.com', +'www.assoc-amazon.de', +'www.associeta.com', +'www.associmg.com', +'www.assonantsvqqxpr.download', +'www.atdmt.com', +'www.atemda.com', +'www.athanorjjvdyu.download', +'www.atmospherebfrufumzi.download', +'www.atropismlsuttxa.download', +'www.auctionads.com', +'www.auctionarysrnbyfiqd.download', +'www.audienceinsights.net', +'www.audiopal.com', +'www.aufxbejwdnkn.download', +'www.aulosyhydzitxb.download', +'www.aureolasfdoqu.download', +'www.auto-ping.com', +'www.automaticsystem.com', +'www.automrxowsdxm.download', +'www.autopilothq.com', +'www.avatraffic.com', +'www.avazudsp.net', +'www.aviderlutcinvv.download', +'www.aweber.com', +'www.axesiiyuqtfa.download', +'www.axf8.net', +'www.axpraqxjdikes.review', +'www.axtrhasenegas.review', +'www.ayrqdtroglodyte.review', +'www.ayx.soundharborredirect.com', +'www.azads.net', +'www.azalead.com', +'www.b1060no8673u5l58vi150ofyri.hop.clickbank.net', +'www.baccajxzumht.download', +'www.bacillemiaujtpcij.download', +'www.baciotti.com', +'www.backtype.com', +'www.badoink.com', +'www.bafflesitfjtxan.download', +'www.bahuvrihisjcdqhbfv.download', +'www.bakler.net', +'www.baleron.com', +'www.bango.co.uk', +'www.bango.com', +'www.bango.net', +'www.bangtuoc.vn', +'www.banner-rotation.com', +'www.bannerbank.ru', +'www.bannercenter.net', +'www.bannerforge.com', +'www.bannerpro.tk', +'www.banners.ero-advertising.com', +'www.banners2.ero-advertising.com', +'www.banners2.eroadvertising.com', +'www.bar.hit-counter.udub.com', +'www.bardzomedia.com', +'www.bargainingayzgdp.download', +'www.barnyardszjvrvndj.download', +'www.barrelfulstwhxuuum.download', +'www.barruletoleehtcz.download', +'www.bastardlystydflko.download', +'www.bastionedqpaugac.download', +'www.bathyliticlkjwh.download', +'www.bazingandroid.com', +'www.bcast.pw', +'www.bcsrciccspermatic.review', +'www.bdex.com', +'www.beadngmke.download', +'www.beanstockmedia.com', +'www.becontext.com', +'www.bee-ads.com', +'www.bekissedxpyno.download', +'www.beliesqhmsin.download', +'www.belstat.be', +'www.belstat.fr', +'www.belstat.nl', +'www.benchbrands.com', +'www.benderswaojb.download', +'www.bespatehwxslkoz.download', +'www.bestdealconnector.com', +'www.bestfwdservice.com', +'www.bestwebnutfunblack.biz', +'www.besuchercounter.de', +'www.bettermail.ca', +'www.bettingmarket.com', +'www.bettraf.com', +'www.beyourownaffiliate.com', +'www.bfiqlohtombic.review', +'www.bfpildlmcolatitude.review', +'www.bigad.com.au', +'www.bigamypuabg.download', +'www.bigfatbaby.com', +'www.biglinkext.xyz', +'www.bilbowtunxjujc.download', +'www.bill-info.com', +'www.bimm.in', +'www.bingsclspe.download', +'www.bit.do', +'www.bitcoinadvertisers.com', +'www.bitterstrawberry.com', +'www.bitvisitor.com', +'www.bizzclick.com', +'www.bkrtx.com', +'www.blacklightimages.com', +'www.blamads.com', +'www.blankrefer.com', +'www.blazedlvlwzwt.download', +'www.blkget6.com', +'www.blog-hits.com', +'www.blogads.com', +'www.blueheart.org', +'www.blueseek.com', +'www.bluesq.com', +'www.bluetrackmedia.com', +'www.blumi.to', +'www.bmetrack.com', +'www.bmkolkvhunotifies.review', +'www.bnbaz.eb2a.com', +'www.bnex.com', +'www.bnhtml.com', +'www.boaaabsdcsubtends.review', +'www.boards2go.com', +'www.bogeymanpbbgzoi.download', +'www.boldcenter.com', +'www.boldchat.com', +'www.bongacash.com', +'www.bookcorps.com', +'www.boomingsbzboqfg.download', +'www.boomottkr.download', +'www.bopsgoxon.download', +'www.borageytjly.download', +'www.borwgskshrinks.review', +'www.bounceexchange.com', +'www.bourgeonujprvxf.download', +'www.bpath.com', +'www.bqukvgnash.review', +'www.braincash.com', +'www.brashnessgujqtmt.download', +'www.bratwurstsktrllgfj.download', +'www.bravenetmedianetwork.com', +'www.breeksboikac.download', +'www.bricklehtezjtjfi.download', +'www.brightadnetwork.com', +'www.brightshare.com', +'www.brokertraffic.com', +'www.browser-statistik.de', +'www.bsitm3.com', +'www.btdirectnav.com', +'www.btnativedirect.com', +'www.btnativenav.com', +'www.btprmnav.com', +'www.btvkojstaenioid.review', +'www.bullseye-network.com', +'www.bullseye-network.net', +'www.bungeysswkhiug.download', +'www.bunnyaqsuze.download', +'www.burbledchxtg.download', +'www.burrowmkoylvrnd.download', +'www.burstnet.com', +'www.burweednxakod.download', +'www.buttcandy.com', +'www.buyhitscheap.com', +'www.buytraf.ru', +'www.buzzadnetwork.com', +'www.bvgszzfifing.review', +'www.bwin90.com', +'www.bwlwtdevilings.review', +'www.bwzqltlcfprimacies.review', +'www.bzpibgazalternant.review', +'www.c-on-text.com', +'www.c2path.com', +'www.c3onlinemarketing.com', +'www.c5k.site', +'www.caartoonnetwork.com', +'www.cabernetdzzafeak.download', +'www.cabgdhscnubbier.review', +'www.cafarducqhonk.download', +'www.cagilycgkwt.download', +'www.calfxvpqle.download', +'www.cam-traffic.com', +'www.camisekwqhbehs.download', +'www.campaignmonitor.com', +'www.campaigntracking01.com', +'www.candlingbploxcq.download', +'www.cantatricekrwutrlj.download', +'www.cantedmxcndjhm.download', +'www.canvas-advert.ru', +'www.capsizalsoxdxke.download', +'www.carambo.la', +'www.carhopyewiqzlmz.download', +'www.carmunity.de', +'www.cartonetwork.com', +'www.cartoonnrtwork.com', +'www.casalemedia.com', +'www.casalparis.cat', +'www.cash-duck.com', +'www.cash4files.com', +'www.cash4webmaster.de', +'www.cashassociate.com', +'www.cashcount.com', +'www.cashdorado.de', +'www.cashforsurveys.com', +'www.cashforsurveys.net', +'www.cashfromhome.com', +'www.cashlayer.com', +'www.cashmylinks.com', +'www.catalogizeagvztfrmt.download', +'www.catheterpokfwbwp.download', +'www.catoonetwork.com', +'www.cavalcadesvmrkjv.download', +'www.cbeckads.com', +'www.cbgoto.com', +'www.cbpassiveincome.com', +'www.cbsmarket.com', +'www.cdlqzpenearer.review', +'www.celebrity-image.com', +'www.certified-email.com', +'www.cetrk.com', +'www.cfifsfsbsower.review', +'www.cgzudintercom.review', +'www.chainmychonga.com', +'www.chalkpitqqjpwis.download', +'www.chango.com', +'www.channeltraffic.net', +'www.chartboost.com', +'www.chayaoyaui.download', +'www.checkm8.com', +'www.chillinessfjnvbh.download', +'www.chippingswbhhaxf.download', +'www.chokoladsrv.net', +'www.chronicleddxsilskp.download', +'www.chutneysrkcmkwrqb.download', +'www.ciliolateefgntk.download', +'www.cistycsoyceif.download', +'www.cityads.com', +'www.cityads.com.br', +'www.cityads.ru', +'www.cityadspix.com', +'www.cityredirect.com', +'www.cityviplink.com', +'www.civicscience.com', +'www.cj.com', +'www.cknsoyunwrought.review', +'www.clarinetsfulrjwphb.download', +'www.claspedhjkyehhf.download', +'www.classroomchvpagg.download', +'www.clck.ru', +'www.cldsecure.info', +'www.clear-reports.com', +'www.clearspring.com', +'www.clearwebstats.com', +'www.click-ice.com', +'www.click2site.co', +'www.clickadscounter.com', +'www.clickansave.net', +'www.clickauditor.net', +'www.clickchecker.co.uk', +'www.clickdensity.com', +'www.clickice.com', +'www.clickon.co.il', +'www.clickriver.com', +'www.clickshield.net', +'www.clicksor.com', +'www.clicksor.net', +'www.clicksrvr.co', +'www.clickstotrack.com', +'www.clicksurecpa.com', +'www.clicksyndicatetracking.com', +'www.clickterra.net', +'www.clicktracksolutions.com', +'www.clicktraffix.com', +'www.clicktrough.com', +'www.clickv.com', +'www.clickwinks.com', +'www.clickxchange.com', +'www.clicz.com', +'www.cliximages.com', +'www.clixsense.com', +'www.clk.im', +'www.clkdeals.com', +'www.clkerr.com', +'www.clkmg.com', +'www.clkmon.com', +'www.clkmr.com', +'www.clkrev.com', +'www.clksite.com', +'www.clktag.com', +'www.clottingsuoxiz.download', +'www.cloudixconnection.com', +'www.cms2.net', +'www.cnt.my', +'www.cnzz.com', +'www.codilladtqjizvrh.download', +'www.cogtree.com', +'www.coheredqdsurfq.download', +'www.coiffedvsyitd.download', +'www.coinurl.com', +'www.coinvisitor.com', +'www.collegerqdieq.download', +'www.collidingsgmwsx.download', +'www.colligatepygpdqk.download', +'www.com-wkejf32ljd23409system.net', +'www.comagic.ru', +'www.comfm.com', +'www.commercedjbppce.download', +'www.commissionmonster.com', +'www.commonssearch.com', +'www.companiedhhplrdpp.download', +'www.compete.com', +'www.competeinc.com', +'www.comscore.com', +'www.comunedeicittadini.it', +'www.concealedffvqfx.download', +'www.concinnousaepwnh.download', +'www.condonenawphf.download', +'www.connectlinking1.com', +'www.connectlinking10.com', +'www.connectlinking12.com', +'www.connectlinking2.com', +'www.connectlinking3.com', +'www.connectlinking4.com', +'www.connectlinking5.com', +'www.connectlinking6.com', +'www.connectlinking7.com', +'www.connectlinking8.com', +'www.connectlinking9.com', +'www.connexionsecure.com', +'www.connextra.com', +'www.connotenrrvlxq.download', +'www.consonancetkumk.download', +'www.consumesldpmue.download', +'www.contador-de-visitas.com', +'www.contendersuudvsxwq.download', +'www.content-ad.com', +'www.contentlockingnetworks.com', +'www.contextuads.com', +'www.contextweb.com', +'www.control.123banners.com', +'www.conversionruler.com', +'www.copesetticxobdnn.download', +'www.coreg-feed.fr', +'www.coremetrics.com', +'www.cornhuskerypyvjzplr.download', +'www.correctiongnarfj.download', +'www.cortoonnetwork.com', +'www.cossiesnkycsr.download', +'www.cotylebijnutawn.download', +'www.count.im', +'www.count24.de', +'www.counter-gratis.com', +'www.counter-kostenlos.net', +'www.counter.bloke.com', +'www.counter.superstats.com', +'www.counter1.sextracker.be', +'www.counter10.sextracker.be', +'www.counter11.sextracker.be', +'www.counter12.sextracker.be', +'www.counter13.sextracker.be', +'www.counter14.sextracker.be', +'www.counter15.sextracker.be', +'www.counter16.sextracker.be', +'www.counter160.com', +'www.counter2.sextracker.be', +'www.counter3.sextracker.be', +'www.counter4.sextracker.be', +'www.counter5.sextracker.be', +'www.counter6.sextracker.be', +'www.counter7.sextracker.be', +'www.counter8.sextracker.be', +'www.counter9.sextracker.be', +'www.counterguide.com', +'www.counters4u.com', +'www.counting4free.com', +'www.countomat.com', +'www.countonline3.de', +'www.countz.com', +'www.coverletsnmqnylq.download', +'www.covetkqoex.download', +'www.coxds.com', +'www.cpa.ly', +'www.cpadna1.com', +'www.cpadoc.com', +'www.cpagrip.com', +'www.cpapointer.com', +'www.cpatrac.com', +'www.cpatrackr.com', +'www.cpayard.com', +'www.cpd8.net', +'www.cpm-plus.com', +'www.cpm.biz', +'www.cpm10.com', +'www.cpmaffiliation.com', +'www.cpmfun.com', +'www.cpmland.com', +'www.cpmleader.com', +'www.cpmtips.com', +'www.cpmtown.com', +'www.cpolixyndenisles.review', +'www.cpv2tracking.com', +'www.cpxcenter.com', +'www.cpxinteractive.com', +'www.cqcounter.com', +'www.crabbierfnffe.download', +'www.createsend.com', +'www.creative-mobile.com', +'www.creoads.com', +'www.cringersredtdw.download', +'www.crittercism.com', +'www.croondezztg.download', +'www.crossbeamstnmjmmh.download', +'www.crowdgather.com', +'www.crowdscience.com', +'www.crummockskubhke.download', +'www.crunchroll.com', +'www.crushads.com', +'www.crwdcntrl.net', +'www.cstrk.net', +'www.cubismfdzqnurt.download', +'www.cuccu.me', +'www.cullenderzsqemhqfz.download', +'www.culturaltpnxpr.download', +'www.cur.lv', +'www.curbstonexxteskqxv.download', +'www.customads.net', +'www.cutterbuck.com', +'www.cvbgjnunslain.review', +'www.cwahi.net', +'www.cyberwavemedia.com', +'www.cycleuniverseupdate.com', +'www.cyclothymewlheoh.download', +'www.cyonix.to', +'www.cypcxeqocolluvies.review', +'www.d1.c6.b3.a0.top.list.ru', +'www.d16.net', +'www.daily-traffic.com', +'www.dairyingsmorbjo.download', +'www.dampnesscoczbh.download', +'www.data-ero-advertising.com', +'www.data-eroadvertising.com', +'www.daylogs.com', +'www.dazeurbht.download', +'www.dcvnupudgiest.review', +'www.dcw.1592878.com', +'www.ddefvibhjwoolfat.review', +'www.dealcent.com', +'www.dealsfor.me', +'www.debenturessqpwls.download', +'www.debsfunpages.com', +'www.deepervbjacffg.download', +'www.deerberrynveztw.download', +'www.default-homepage-network.com', +'www.defeatismbmakiplm.download', +'www.degivuladles.review', +'www.deignsgcngub.download', +'www.delishows.com', +'www.deloton.com', +'www.delta-search.com', +'www.demandbase.com', +'www.demdex.net', +'www.demotionstjjrntd.download', +'www.dentaliumseeldbz.download', +'www.dermadoctoraffiliates.com', +'www.desalinateorixnpf.download', +'www.desistancetslsdgppv.download', +'www.desmoidqqzopi.download', +'www.deucodialytic.review', +'www.dfccgatkeoverworks.review', +'www.dh956.com', +'www.dianomi.com', +'www.dictyqijwr.download', +'www.dicynodonttglahbvl.download', +'www.did-it.com', +'www.didit.com', +'www.digitalngo.com', +'www.digits.com', +'www.dihitt.com', +'www.dimorphicbwwjmwvh.download', +'www.dinclinx.com', +'www.dingecraitos.download', +'www.diplozoonhswtvx.download', +'www.directadvert.ru', +'www.directbrand.com', +'www.directtrack.com', +'www.dirtnaprecs.com', +'www.discloserwdojtmjb.download', +'www.discoverexactly.com', +'www.disgustingsjnhmuv.download', +'www.disjoiningjfdxyogp.download', +'www.dismalitydbjmfaux.download', +'www.displacedijnnd.download', +'www.distortiveecynxpidy.download', +'www.dltags.com', +'www.dmtracker.com', +'www.dnps.com', +'www.dntx.com', +'www.doctortrusted.org', +'www.dodderssbsczsaao.download', +'www.dodkinlsautvfo.download', +'www.dohillright.com', +'www.doldrumspijyzkdx.download', +'www.doll.home.ro', +'www.domainsponsor.com', +'www.domanialtmiqjsrc.download', +'www.donkeymails.com', +'www.dorsiflexzobyojlh.download', +'www.doubleclick.com', +'www.doubleclick.de', +'www.doubleclick.ne.jp', +'www.doubleclick.net', +'www.downbursteefxriuvb.download', +'www.downloadcounter.de', +'www.dprtb.com', +'www.drabbersgpauijt.download', +'www.dragonballzhomeland.com', +'www.drivotracker.com', +'www.droguevnmkkti.download', +'www.drtserver.com', +'www.dsct1.com', +'www.dsmmadvantage.com', +'www.dsnr.net', +'www.dsnrmg.com', +'www.dsosvbpuhw.download', +'www.dsply.com', +'www.dtrck.xyz', +'www.duba.net', +'www.dumbfoundrurjldk.download', +'www.dumedia.ru', +'www.duramenswaxsjhmqt.download', +'www.dwin2.com', +'www.e-tracker.de', +'www.e-trends.com', +'www.e-zeeinternet.com', +'www.eadexchange.com', +'www.eads.com', +'www.easilyask.com', +'www.easilytrack.com', +'www.easycounter.com', +'www.easyhitcounters.com', +'www.easyhits4u.com', +'www.eatthis.com', +'www.ebtmarketing.com', +'www.eclkmpbn.com', +'www.eclkmpsa.com', +'www.ecnxsufmoshing.review', +'www.economizerfmtwfqxv.download', +'www.ecpmrocks.com', +'www.ectropionqybhnovh.download', +'www.edge.quantserve.com', +'www.edomz.com', +'www.eeczfihelicopter.review', +'www.effeminatejfghoxdji.download', +'www.eightfoldlogic.com', +'www.ekingkrmxzfpml.download', +'www.elded.eu', +'www.electorelyjs.download', +'www.elflockskmewxdzsq.download', +'www.elitemarketing.net', +'www.elitepartners.ru', +'www.eloqua.com', +'www.elpais.es', +'www.eltrafiko.com', +'www.email-marketing.net', +'www.email666.com', +'www.emailaccount.com', +'www.emailmarketingleads.com', +'www.emailserving.com', +'www.emarketers.com', +'www.embarkingsztwot.download', +'www.embloomedobjqwpc.download', +'www.emjcd.com', +'www.empathizewjrclcsh.download', +'www.employeestnmsy.download', +'www.emptinesslzajbffo.download', +'www.emsvr.com', +'www.encomiumsenttlzhwt.download', +'www.enforcertiuvhklj.download', +'www.englobingoopmzqu.download', +'www.enlacedpwcuphe.download', +'www.enliven.com', +'www.enscl.com', +'www.enzjptkr.com', +'www.enzxpkist.review', +'www.epicgameads.com', +'www.epitaphistnyemzvxw.download', +'www.epotjriebeckite.review', +'www.eqlhpcyzarosolios.review', +'www.equitymarketingsolutions.com', +'www.eratrf.com', +'www.ercva.com', +'www.ero-adverising.com.ero-advertising.com', +'www.ero-advertising.co.uk', +'www.ero-advertising.com', +'www.ero-advertising.de', +'www.ero-advertising.org', +'www.eroadvertising.com', +'www.eroadvertising.info', +'www.eroadvertising.nl', +'www.eroanalysis.com', +'www.escalatenetwork.com', +'www.espousershcota.download', +'www.estat.com', +'www.et-code.ru', +'www.etahub.com', +'www.ethn.io', +'www.etracker.com', +'www.etracker.de', +'www.eucainemkjwgw.download', +'www.eulogiumalezquc.download', +'www.euroclick.com', +'www.eurocounter.com', +'www.euros4click.de', +'www.eventi.co.il', +'www.everestjs.net', +'www.everstring.com', +'www.everyscape.com', +'www.everythinghsrpple.download', +'www.ewordofmouth.com', +'www.exactadvertising.com', +'www.exactinstall.com', +'www.exacttarget.com', +'www.excelqjmtypxbd.download', +'www.exchange-it.com', +'www.exchangead.com', +'www.exchangebanner.com', +'www.exclaimsmwdgsle.download', +'www.exct.net', +'www.exelator.com', +'www.exfgumodulated.review', +'www.exit-ad.de', +'www.exitdevil.com', +'www.exitingihrjdmytt.download', +'www.exoclick.com', +'www.exodusesnkkvycngt.download', +'www.exogamichkstnksb.download', +'www.expandsearchanswers.com', +'www.expansilehsnpjlpb.download', +'www.expert-offers.com', +'www.exporterfpkvxr.download', +'www.extolmentstsxocupq.download', +'www.extreme-dm.com', +'www.extremetracking.com', +'www.extzbxocracknels.review', +'www.eyeblaster.com', +'www.eyeglassesmlldb.download', +'www.ez-poll.superstats.com', +'www.ez-polls.superstats.com', +'www.ezdirectory.com', +'www.ezpoll.superstats.com', +'www.ezpolls.superstats.com', +'www.f8350e7c1.se', +'www.fablingsmmidmlm.download', +'www.faldagehvvbwm.download', +'www.fangcffsne.download', +'www.faradsfmbrdiejz.download', +'www.fast-route.com', +'www.fastadvert.com', +'www.fastcashathome.homestead.com', +'www.fastclick.net', +'www.fasteasytraffic.com', +'www.fastlinkfinder.com', +'www.fastonlinefinder.com', +'www.favoritismkwaqmz.download', +'www.fcvjhuzdcached.review', +'www.featousvzgzfinst.download', +'www.feedblitz.com', +'www.feedjit.com', +'www.fegariesupzxx.download', +'www.felicityofxmgzq.download', +'www.felliesgrlzafjb.download', +'www.ferdy.org', +'www.festeryfjejya.download', +'www.festologyqueudknaa.download', +'www.festoonedkyskjtmxv.download', +'www.fhserve.com', +'www.fideismmbertleo.download', +'www.fiesta-game.com', +'www.filecm.net', +'www.finalizehmnzdo.download', +'www.findalternate.com', +'www.findlisted.com', +'www.finduses.com', +'www.finickingzepkzyw.download', +'www.firecash.org', +'www.firecpa.com', +'www.firetrck.com', +'www.firmingqubvlnepw.download', +'www.firstload.com', +'www.firstlook.com', +'www.firstsnfmlmlohq.download', +'www.fixin.de', +'www.fkref.com', +'www.flagads.net', +'www.flagstickidiambxee.download', +'www.flash-counter.com', +'www.flashvortex.com', +'www.flensingiyflh.download', +'www.fleshlight.com', +'www.flexoffers.com', +'www.flixfacts.co.uk', +'www.floctwuupgrowing.review', +'www.flowgo.com', +'www.flurry.com', +'www.flvmoviesdownloader.com', +'www.flycast.com', +'www.flyinads.com', +'www.fmpub.net', +'www.fncnet1.com', +'www.fodderingcuyrwzrwq.download', +'www.folksierkfxqlpc.download', +'www.fomentingbuutbsdi.download', +'www.forefeetwsjgg.download', +'www.forelook.com', +'www.foreseeresults.com', +'www.fossilisedboxbkshj.download', +'www.fossilisesgcjrfazlr.download', +'www.foxarmedia.com', +'www.foxgloveslyukq.download', +'www.foy4a.trackvoluum.com', +'www.fpcplugs.com', +'www.fpctraffic.com', +'www.fraisenyvno.download', +'www.frdupsdittays.review', +'www.freakingdwobhfh.download', +'www.freddyman.com', +'www.free-banners.com', +'www.freeadposting.com', +'www.freecamdollars.com', +'www.freecountersnow.com', +'www.freehomepages.com', +'www.freelogs.com', +'www.freeonescams.com', +'www.freeresultsguide.com', +'www.freerotator.com', +'www.freestats.com', +'www.freeviral.com', +'www.freewha.com', +'www.fremescentptwvzl.download', +'www.fricasseeidjcd.download', +'www.friendlyduck.com', +'www.frizzingaqrpioyby.download', +'www.frontingfjwpsvis.download', +'www.frontletsvuesv.download', +'www.frontwardsxizrhchs.download', +'www.fsvxdwaggeries.review', +'www.fucktubenetwork.com', +'www.fullqurandownload.com', +'www.fun-hits.de', +'www.fun-town.com', +'www.funklicks.com', +'www.funniesslvqb.download', +'www.funny-postcards10.home.ro', +'www.funnygreetings.com', +'www.funstun.com', +'www.fusespot.com', +'www.futurecard.com', +'www.fwdservice.com', +'www.fxnvsyupprovender.review', +'www.fxstyle.net', +'www.gabia.com', +'www.gallsrpvzalfr.download', +'www.game-advertising-online.com', +'www.gameadexchange.com', +'www.gamecity.net', +'www.gameleads.ru', +'www.gamescpc.com', +'www.gamingblast.com', +'www.ganoinihrjk.download', +'www.garnishersqcltox.download', +'www.garrigueatcuw.download', +'www.gatewaytracker.com', +'www.gaxsumshicksa.review', +'www.gbotvisit.com', +'www.gcumuobqjbullfight.review', +'www.geegawmpuvidd.download', +'www.gelidlycupaq.download', +'www.gentleygupqmdpm.download', +'www.geoplugin.net', +'www.geovisites.com', +'www.get-answers-fast.com', +'www.get-information.com', +'www.getdirect.ru', +'www.getfreebl.com', +'www.getmetrical.com', +'www.getmycell.com', +'www.gigletcirjy.download', +'www.gimmickedofpkjfxln.download', +'www.gipigbzfortes.review', +'www.girdinguyqfqwehf.download', +'www.girlsofvs.com', +'www.girthingbeypvmxb.download', +'www.gkugzxfmjargonised.review', +'www.glauconitexwgsr.download', +'www.glb.livejasmin.com', +'www.glffogrmnpareses.review', +'www.global-adsrv.com', +'www.globirank.com', +'www.glomsflablwiv.download', +'www.glugjbygh.download', +'www.gmkxougopsonin.review', +'www.gmtracker.com', +'www.go.by', +'www.go2web20.net', +'www.gobbetsdjgjnyc.download', +'www.goblemam.com', +'www.gogousenet.com', +'www.golfcountryhomes.com', +'www.gooddata.com', +'www.goodsavingtips.com', +'www.goodtraffic.net', +'www.google-analytics.com', +'www.google.com.1.302br.net', +'www.googleadservices.com', +'www.googletagmanager.com', +'www.googletagservices.com', +'www.gooool.com', +'www.gopuralverslakf.download', +'www.goreal.at', +'www.gospycash.com', +'www.gostats.com', +'www.gostats.de', +'www.gostats.ir', +'www.gostats.pl', +'www.gostats.ro', +'www.gostats.ru', +'www.gostats.vn', +'www.gotlaughs.com', +'www.goviralnetwork.com', +'www.goviralnetwork.net', +'www.gpkjxgsginfallible.review', +'www.gprapps.com', +'www.gqfysspiracles.review', +'www.gqsrirsleazes.review', +'www.grabanapptrk.com', +'www.gramashgbbjqbzy.download', +'www.graptolitezcmxrfe.download', +'www.gravitateszwcxvb.download', +'www.greatcarrates.com', +'www.gregoryvjvbd.download', +'www.gridironjhkdbypz.download', +'www.gripfile.net', +'www.grosskjlkwccna.download', +'www.grouchiestopszo.download', +'www.group-mail.com', +'www.grousingkvjtblhj.download', +'www.gtedtnebrises.review', +'www.guestbook.superstats.com', +'www.gugaswrjegxix.download', +'www.guid.org', +'www.guidagedhgperv.download', +'www.gunnedagcsg.download', +'www.hab3n.trackvoluum.com', +'www.habilatoryphyjf.download', +'www.hadecpjvwytpy.download', +'www.handworkedwguqhhqpj.download', +'www.handyseek.com', +'www.harassedlyayeigwq.download', +'www.hasoffers.com', +'www.hastrk1.com', +'www.hastrk2.com', +'www.hastrk3.com', +'www.hatchmentstnddqlfba.download', +'www.hatelive.site', +'www.hatertoupfrcz.download', +'www.hawkbitsirbzmvsf.download', +'www.health.searchwho.com', +'www.heeziewljxpyk.download', +'www.heiringlxsna.download', +'www.heliometernxwpu.download', +'www.helmsstikizg.download', +'www.henbaneypgvxgt.download', +'www.herbalaffiliateprogram.com', +'www.herbisttjojeo.download', +'www.herborizeabruj.download', +'www.herdsgtqbsn.download', +'www.hgmjnsnddaydream.review', +'www.hgzlpbfluent.review', +'www.hicpm5.com', +'www.hide.io', +'www.highcharts.com', +'www.highcpms.com', +'www.highspeedtesting.com', +'www.hijackedzdupdb.download', +'www.hipersushiads.com', +'www.hipmarket.com', +'www.histriodqxmtbztd.download', +'www.hit-counter.info', +'www.hit-parade.com', +'www.hitbox.com', +'www.hitcounter.ru', +'www.hitcpm.com', +'www.hitfarm.com', +'www.hitmeter.ru', +'www.hitslink.com', +'www.hitsniffer.com', +'www.hitwebcounter.com', +'www.hitwise.co.uk', +'www.hitx.net', +'www.hjplocoheavier.review', +'www.hkjhwrhogwash.review', +'www.hlserve.com', +'www.holystonesobrzuasu.download', +'www.home.ro', +'www.homebusinessgo.com', +'www.homecareersearch.com', +'www.homedepoy.com', +'www.homedepto.com', +'www.homeearthlink.net', +'www.homeeq.com', +'www.homeloan.tr.cx', +'www.homepage.ru', +'www.homepageware.com', +'www.homesidelendinginc.com', +'www.homestad.com', +'www.homevisions.com', +'www.homonymyhnovvlnkz.download', +'www.honourwkuowjaj.download', +'www.hoofprintsjvogd.download', +'www.hooqy.com', +'www.hoptopboy.com', +'www.hopurl.org', +'www.hordesvavxlom.download', +'www.host-tracker.com', +'www.host.clicksor.com', +'www.hotheadedwrkqqsm.download', +'www.hotjar.com', +'www.hotlog.ru', +'www.hpqvvpfloatage.review', +'www.hpwtrpizecrowned.review', +'www.hrfdpodunwarlike.review', +'www.hrukxtcqmosaics.review', +'www.hsbolewhzbaffs.review', +'www.hsykmnzsdogskins.review', +'www.htimepyvhbondstone.review', +'www.html-email-marketing.com', +'www.html5zombo.com', +'www.htmlcounter.com', +'www.htmonster.com', +'www.hubtraffic.com', +'www.humanclick.com', +'www.humdrumsqflyl.download', +'www.hummumsutjuwal.download', +'www.humourqyizg.download', +'www.hurricanedigitalmedia.com', +'www.hvaevqkprtumorous.review', +'www.hyalinizeslskzyp.download', +'www.hybridview.co.kr', +'www.hyperbanner.net', +'www.hyperlinksecure.com', +'www.hyphenszypdywo.download', +'www.hypocistksmukkiy.download', +'www.hzvtbypisdeejays.review', +'www.hzwurfzsmouches.review', +'www.iads.com.np', +'www.iagsgypeavy.review', +'www.iaspromotes.com', +'www.ib.adnxs.com', +'www.iballs.nl', +'www.ibario.com', +'www.ibroadband.com', +'www.ibrtpbaroscope.review', +'www.ibsys.com', +'www.ichabodbvtxqb.download', +'www.iconifyingkjlzag.download', +'www.icontact.com', +'www.icount.com', +'www.icptrack.com', +'www.ideaworks.com', +'www.idioticxellutv.download', +'www.idirect.com', +'www.idritracker.com', +'www.ientry.com', +'www.ientrymail.com', +'www.ientrynetwork.net', +'www.iergzsqungod.review', +'www.ierofsymphylous.review', +'www.ifjcpbcontessas.review', +'www.ifsmarketing.com', +'www.igain-mail.co.uk', +'www.ignitad.com', +'www.igogoshare.com', +'www.iicdn.com', +'www.ijxaxlacapacitors.review', +'www.ilgm-deals.com', +'www.illicitlyyyzmvq.download', +'www.ilovecookies.co', +'www.imads.ero-advertising.com', +'www.image-map.com', +'www.imageers.com', +'www.imagenes.de', +'www.imagine-inc.com', +'www.imbof.com', +'www.imgclck.com', +'www.imiclk.com', +'www.impluviawtqydlbbi.download', +'www.imptestrm.com', +'www.imtrck.com', +'www.inbeingsfmjfup.download', +'www.inboxpounds.co.uk', +'www.inboxpounds.com', +'www.incentaclick.com', +'www.indicative.com', +'www.indoorspkacwv.download', +'www.inebriatesqmwpaz.download', +'www.inedo.com', +'www.ineedhits.com', +'www.inetlog.com', +'www.inetlog.ru', +'www.ingluvialqsbjgerp.download', +'www.inhumatesiwqkd.download', +'www.inkinesspjjpli.download', +'www.inmobi.com', +'www.innn.site', +'www.inspectlet.com', +'www.inspectorclick.com', +'www.instantdownloaderpro.com', +'www.instanterzxjgftfip.download', +'www.instinctiveads.com', +'www.intangiblegrnokiq.download', +'www.integrate.com', +'www.inteletrack.com', +'www.intelli-direct.com', +'www.intelli-tracker.com', +'www.intellicampaign.com', +'www.intellicontact.com', +'www.intelligentkid.com', +'www.intellitxt.com', +'www.interludenbaabaim.download', +'www.internetmedia.com.au', +'www.internetworks.org', +'www.interunionieyyq.download', +'www.interupload.com', +'www.intext.de', +'www.intextdirect.com', +'www.intimistsoqitkh.download', +'www.intouchmediagroup.com', +'www.intredo.com', +'www.intredomedia.com', +'www.invariancewnbfwwro.download', +'www.inviterdczpqji.download', +'www.ioam.de', +'www.iperceptions.com', +'www.ipfingerprint.com', +'www.ipfovdeqdenaries.review', +'www.ipnwombonefish.review', +'www.ipqualityscore.com', +'www.ipstat.com', +'www.ireel.com', +'www.irepdeliver.com', +'www.irqnaphizzes.review', +'www.isobaresumrzh.download', +'www.isobarevdwtaol.download', +'www.isoclinicvzlcj.download', +'www.ispeakvideo.com', +'www.istats.nl', +'www.istrack.com', +'www.itrckr.com', +'www.ituwnqfhoimpresari.review', +'www.iusfpiadefunction.review', +'www.ivoriessrjwoctu.download', +'www.ivwbox.de', +'www.iwmhtnexbthwartly.review', +'www.ixzvhxrithripses.review', +'www.iycmeworlds.review', +'www.iyfnzgb.com', +'www.izrtyzjvarememberer.review', +'www.jadina-counter.de', +'www.jafvcwmrfespousing.review', +'www.jaggiestlydumv.download', +'www.jaildxlhdnvo.download', +'www.jalbum.net', +'www.jampanimxygdwkim.download', +'www.javdict.disqus.com', +'www.jayde.com', +'www.jcount.com', +'www.jd-mail.co.uk', +'www.jdoqocy.com', +'www.jebtrack.com', +'www.jennetsywjfwy.download', +'www.jetpad.com', +'www.jfqsgonveglandules.review', +'www.jirkinetsaxjjdegyp.download', +'www.jjinviczbountiful.review', +'www.jkmiepojqatmolyse.review', +'www.jlyse.net', +'www.jmp9.com', +'www.jmpgo.com', +'www.jmplink.com', +'www.jmqqopacmilligram.review', +'www.jmyyyjhnzpeaching.review', +'www.joelnhfuabrim.review', +'www.jollingymkovt.download', +'www.jowarinzqmiak.download', +'www.jptybcinnamonic.review', +'www.jscount.com', +'www.jscripts.org', +'www.jspy.ru', +'www.jtqhcgndrawlers.review', +'www.jubilationqeeau.download', +'www.juiceadv.com', +'www.juispsvgtproselytes.review', +'www.jumpinessrhbijjq.download', +'www.jumptap.com', +'www.junbi-tracker.com', +'www.jupuxbmavoguish.review', +'www.jurymastgewtdwcw.download', +'www.justclick.ru', +'www.justsaywow.com', +'www.jvz5.com', +'www.jvz7.com', +'www.jvz8.com', +'www.jvz9.com', +'www.jvzoo.com', +'www.jwljj.adsb4track.com', +'www.jwtznloxywadsets.review', +'www.jxksprlogging.review', +'www.jxydvhslucifer.review', +'www.jxzxqaauplaybooks.review', +'www.jzdqksgennets.review', +'www.kampongsnylsyoa.download', +'www.kamsinseuexlw.download', +'www.karakulszmlyttq.download', +'www.kcsbaujgynaecia.review', +'www.kdfveporphyry.review', +'www.kdqsasmacker.review', +'www.kdukvh.com', +'www.kecksesualnfr.download', +'www.kecwxhifheyestalks.review', +'www.keen.io', +'www.kelshpjmntongues.review', +'www.kerningrsxwpoc.download', +'www.kewlrank.com', +'www.keyoptimize.com', +'www.keywordblocks.com', +'www.keywordmax.com', +'www.kfngqabkeinfallibly.review', +'www.khutbahleqzaer.download', +'www.kilobytebokrfnbvp.download', +'www.kilopog.com', +'www.kilovoltsqychaubi.download', +'www.kinocash.com', +'www.kinostok.tv', +'www.kissmetrics.com', +'www.kissmyads.com', +'www.kizash.com', +'www.kkhopguserenate.review', +'www.kliktrek.com', +'www.kljcwpqarevealers.review', +'www.klybugvdsbugwort.review', +'www.kneecappedgmlviym.download', +'www.knnomeuaustringer.review', +'www.komoona.com', +'www.kontera.com', +'www.koocash.com', +'www.kosoft-ads.com', +'www.koxrqrpnroundlet.review', +'www.kpdxchvxydeepest.review', +'www.kpicentral.com', +'www.kqqfxfortlets.review', +'www.kqzyfj.com', +'www.kronerrtyqgofq.download', +'www.krullerkzouw.download', +'www.kryptoads.com', +'www.kryptobanners.com', +'www.kscrudiscepted.review', +'www.ksqoglpledgeable.review', +'www.kstmnfmdaphilologue.review', +'www.ktxtkvolitient.review', +'www.lacodeworks.com', +'www.lacquerersdfnkejwkz.download', +'www.lacqueyiiwkr.download', +'www.laminarianxvdcl.download', +'www.lanternedhreszxvw.download', +'www.lapoo.net', +'www.latest-460050.ebeda.info', +'www.latest-461069.dochyedu.info', +'www.launch1.co', +'www.launchbit.com', +'www.layer-ad.org', +'www.lddthjbooboos.review', +'www.leadbolt.com', +'www.leadclick.com', +'www.leadformix.com', +'www.leadhound.com', +'www.leadlander.com', +'www.leadtrackgo.com', +'www.leastsuuhyh.download', +'www.lecternxqlgvbl.download', +'www.leeringsmxcgbra.download', +'www.legatoeweyxn.download', +'www.legendsqevxiaxbh.download', +'www.legitfreecounters.com', +'www.lewderkltrw.download', +'www.lexiconsahzdcver.download', +'www.lfiofptxserows.review', +'www.lfstmedia.com', +'www.liczniki.org', +'www.ligatus.com', +'www.lightedpages.com', +'www.lijit.com', +'www.likebtn.com', +'www.limmaocijq.download', +'www.link.ac', +'www.link4link.com', +'www.linkads.de', +'www.linkbucksmedia.com', +'www.linkconnector.com', +'www.linkcounter.com', +'www.linkexchange.nl', +'www.linkexchange.org', +'www.linkreferral.com', +'www.links2u.com', +'www.linkscout.com', +'www.linksmile.com', +'www.linksredirect.com', +'www.linkstation.de', +'www.linktarget.com', +'www.linkwithin.com', +'www.linkwords.net', +'www.linkworld.ws', +'www.linkxchanger.com', +'www.linkxchanger.info', +'www.linkybank.com', +'www.linkz.com', +'www.liqwid.net', +'www.listbot.com', +'www.listenloop.com', +'www.litiumo.com', +'www.live3s.me', +'www.liveadexchanger.com', +'www.livecounter.dk', +'www.liveinternet.ru', +'www.livejasmin.com', +'www.livesearchnow.com', +'www.livestat.com', +'www.ljteas.com', +'www.lkqd.net', +'www.lllezpalebucks.review', +'www.lloogg.com', +'www.llyebbsouthpaws.review', +'www.lmlttrack.com', +'www.lnkgo.com', +'www.lnkgt.com', +'www.lnkxfer8.com', +'www.lnx.lu', +'www.lobstersctero.download', +'www.lognormal.net', +'www.lokhlp.com', +'www.lolfun.com', +'www.lookest.win', +'www.looksmart.com', +'www.looksmartclicks.com', +'www.lostwebtracker.com', +'www.lotame.com', +'www.lowndestdhlpcpo.download', +'www.loxtk.com', +'www.lrrtslskippers.review', +'www.lslfrhpqarechating.review', +'www.luminate.com', +'www.lummeslwusp.download', +'www.m.loading-content.net', +'www.maarentkeaels.download', +'www.macaddictads.snv.futurenet.nl', +'www.madblast.com', +'www.madisonlogic.com', +'www.madmax53.stellar.cpa.clicksure.com', +'www.madmimi.com', +'www.madnet.ru', +'www.magentanews.com', +'www.magicads.nl', +'www.magicmail.co.nz', +'www.mahuaswcspi.download', +'www.mail-to-a-friend.com', +'www.mailchimp.com', +'www.mailmenrkgzquz.download', +'www.mailtrack.me', +'www.mainstreamadvertising.com', +'www.majoringmcaiynfa.download', +'www.makersfile.com', +'www.mandolinefchscpmft.download', +'www.manuelu.com', +'www.maple-team.com', +'www.mapmyuser.com', +'www.marketbiz.com', +'www.marketgid.com', +'www.marketing-internet.com', +'www.marketing.com.ar', +'www.marketingsecrets.com', +'www.marketingtips.com', +'www.marketingwithpostcards.com', +'www.marketingx.com', +'www.marketo.com', +'www.marketsurveys.com', +'www.massetersspaeu.download', +'www.mastercount.net', +'www.matchbin.com', +'www.matchetbpvgzvo.download', +'www.mathtag.com', +'www.matomy.com', +'www.matomygroup.com', +'www.matomymail.com', +'www.matomymarket.com', +'www.matomymax.com', +'www.matomymedia.com', +'www.matomymediagroup.com', +'www.matomymobile.com', +'www.maxbounty.com', +'www.maxtrust.ru', +'www.mb01.com', +'www.mb103.com', +'www.mb104.com', +'www.mb89-live.com', +'www.mbixuxsfeoutfields.review', +'www.mbotvisit.com', +'www.mckygschalalled.review', +'www.mcpvkhoven.review', +'www.mcssl.com', +'www.media-clic.com', +'www.media-code.info', +'www.media.net', +'www.media970.com', +'www.mediabreakaway.com', +'www.mediaforce.com', +'www.medialytics.com', +'www.mediamath.com', +'www.mediamind.com', +'www.mediaplex.com', +'www.mediaroi.go2cloud.org', +'www.mediasheva.com', +'www.mediatisedevkrumfkc.download', +'www.mediawhirl.net', +'www.meethotties.mobi', +'www.megacounter.de', +'www.megapopads.com', +'www.melanitesmuawsxxw.download', +'www.mellowads.com', +'www.meltwater.com', +'www.meltwaternews.com', +'www.memopumpkin.com', +'www.menato.ru', +'www.meshbean.com', +'www.metacount.com', +'www.metalliselwgtj.download', +'www.metopesjdsrau.download', +'www.metricskey.net', +'www.mgcash.com', +'www.mgcashgate.com', +'www.mgid.com', +'www.mgnjmsxycosta.review', +'www.midwayjfpvbvwuy.download', +'www.migpay.com', +'www.migrantsyyorzkm.download', +'www.miildoos.ru', +'www.milesaway.oracle.cpa.clicksure.com', +'www.milliremsfpscyd.download', +'www.mim.io', +'www.minimusespdjglnek.download', +'www.mirrorad.com', +'www.misbfskterrellas.review', +'www.missuitzyvtjtq.download', +'www.mixpanel.com', +'www.mjgxsidsixes.review', +'www.mkonyvjesnorkelled.review', +'www.ml8m.com', +'www.mlinktracker.com', +'www.mmftpf.com', +'www.mmnetwork.mobi', +'www.mmo123.co', +'www.mmotraffic.com', +'www.mmtracking.com', +'www.mmtrkmc.com', +'www.mnetads.com', +'www.mnetads.net', +'www.moatads.com', +'www.mobfox.com', +'www.mobi-mobi.info', +'www.mobiadtrk.com', +'www.mobile-abc.com', +'www.mobile.adnxs.com', +'www.mobileandinternetadvertising.com', +'www.mobilelandings.com', +'www.mobisystems.com', +'www.mobitracker.info', +'www.mobpartner.com', +'www.mobpartner.mobi', +'www.mobvid.mobi', +'www.moceanmobile.com', +'www.modelatos.com', +'www.mojiva.com', +'www.mokono.com', +'www.mondainefpjwdelvr.download', +'www.monetisevideo.com', +'www.money4exit.de', +'www.moneymakercdn.com', +'www.mongoosemetrics.com', +'www.monteyxnmhx.download', +'www.moonmarketing.com', +'www.mousselinehkhnrrnlq.download', +'www.movieads.ero-advertising.com', +'www.moviepulp.eu', +'www.movise.site', +'www.mowburnsexrzvcbvq.download', +'www.mp-success.com', +'www.mpression.net', +'www.mprptrk.com', +'www.mracqblihahas.review', +'www.mrhcyagrouchily.review', +'www.mridangastrtki.download', +'www.msnhome.com', +'www.msnhomepage.com', +'www.msnnetwork.com', +'www.multicounter.de', +'www.muntussejbnk.download', +'www.muricatedhslitves.download', +'www.mvakbserenates.review', +'www.my-dirty-hobby.com', +'www.my-etracker.com', +'www.my-linker.com', +'www.myad.no', +'www.myadmarket.com', +'www.myadtrack.com', +'www.myadvertisingpays.com', +'www.myaffiliateads.com', +'www.myaffiliateprogram.com', +'www.myapp.com', +'www.myetracker.com', +'www.myforum365.com', +'www.myiframe.com', +'www.mymobcn.com', +'www.myosotisvkrzovi.download', +'www.myseostats.com', +'www.mysuperpharm.com', +'www.myswitchads.com', +'www.mytds.pr.vc', +'www.mytiwi.com', +'www.mytogolinks.com', +'www.mytrafficbuilder.info', +'www.myvpn.pro', +'www.mywebstats.org', +'www.n.popclck.org', +'www.n60adserv.com', +'www.n63adserv.com', +'www.n64adserv.com', +'www.n65adserv.com', +'www.n69adserv.com', +'www.n72adserv.com', +'www.n79adserv.com', +'www.nannyingeuzcxae.download', +'www.nanoadexchange.com', +'www.nappieseummiroso.download', +'www.nastinessprndnz.download', +'www.nativeadx.net', +'www.navteq.com', +'www.nbjmp.com', +'www.nctymqrcplanular.review', +'www.nedstat.co.uk', +'www.nedstat.com', +'www.nedstat.nl', +'www.neemfmujqqz.download', +'www.neobux.com', +'www.netdirect.nl', +'www.netlinktrack.com', +'www.nettown.com', +'www.network22.com', +'www.networkadvertising.org', +'www.networkcommerce.com', +'www.networksolutionsaffiliates.com', +'www.networkwestvirginia.com', +'www.networkwestvirginia.net', +'www.netzathleten.de', +'www.neutrinokhdii.download', +'www.newsroomsolsnkww.download', +'www.nextoptim.com', +'www.ngbn.net', +'www.ngludvfyaspiration.review', +'www.nicotianavcajdyyq.download', +'www.nihilistlhaeieykb.download', +'www.nitratedffwtprxdo.download', +'www.njyshuopawas.review', +'www.nlrbucstales.review', +'www.nltlgufalsies.review', +'www.nndxcyybailliage.review', +'www.nomogramsopptw.download', +'www.nonames.tk', +'www.noowho.com', +'www.nrsadrefects.review', +'www.nurno.com', +'www.nvtrak.com', +'www.nwxpdqczwighting.review', +'www.nxsrv1.com', +'www.o2onbusiness.de', +'www.oascentral.blogher.org.12468.9030.302br.net', +'www.oascentral.blogher.org.12470.9030.302br.net', +'www.oatcakehcewr.download', +'www.observantsumzcl.download', +'www.oceango.net', +'www.ocybtztforth.review', +'www.odttrilkocement.review', +'www.offerdeliver.com', +'www.offeredby.net', +'www.offerx.co.uk', +'www.ogdocggdermas.review', +'www.ohgipscavenging.review', +'www.ojbrnmoowoold.review', +'www.ojolink.com', +'www.ojrq.net', +'www.olizyr.com', +'www.omarsys.com', +'www.omnaling.com', +'www.omniata.com', +'www.omniture.com', +'www.omtrdc.net', +'www.onclickads.net', +'www.onclickmax.com', +'www.onclickpredictiv.com', +'www.onclkds.com', +'www.oncqpdpmerosomes.review', +'www.oneandonlynetwork.com', +'www.onelouder.com', +'www.onestat.com', +'www.onestatfree.com', +'www.onlineemailmarketing.com', +'www.onlinetraffic.info', +'www.only-dates.de', +'www.onwkmbhucalthaeas.review', +'www.oofywoeynt.download', +'www.openadserving.com', +'www.opentracker.net', +'www.openvn.com', +'www.openx.net', +'www.openxmedia.com', +'www.operationfabulous.com', +'www.opportunity-tracking.com', +'www.opt-media.com', +'www.optimum-hits.com', +'www.optmd.com', +'www.oqhdujtcharrier.review', +'www.oqzwmbeliefs.review', +'www.otherprofit.com', +'www.otkyfxmassifs.review', +'www.otmsrv.com', +'www.otologistxyrdfmy.download', +'www.otracking.com', +'www.outerpages.com', +'www.outlyingveburydd.download', +'www.outsolesevkcifol.download', +'www.outspeaksisfjto.download', +'www.outtalkedxtypmjjbh.download', +'www.overawingksapsofy.download', +'www.overroastiklcrpyn.download', +'www.oversee.net', +'www.ovhomes.com', +'www.ovxvhtext.review', +'www.oxosurf.eu', +'www.p.de', +'www.p3marketing.com', +'www.padv.co.il', +'www.paid-work-at-home.com', +'www.paid2mobi.com', +'www.paidclick.ro', +'www.paidsurveysfree.com', +'www.paletotseeyzubqr.download', +'www.palimashop.com', +'www.pandectxfszuufr.download', +'www.paranoicbarhuhw.download', +'www.pareticpaypdtpq.download', +'www.parkingcrew.net', +'www.parse.ly', +'www.parship.co.uk', +'www.partnercash.com', +'www.passinst.com', +'www.pastilon.com', +'www.paycounter.com', +'www.paymonsters.biz', +'www.payperclick.co.il', +'www.paypersaleadvertising.com', +'www.pbnwiecwfpaltrier.review', +'www.pdpdsromlaconical.review', +'www.pdsqopgtdiphyodont.review', +'www.pe.n-mobile.net', +'www.peakclick.com', +'www.peakcounter.dk', +'www.pejorationkgoibtbvp.download', +'www.penneroqqwnqz.download', +'www.people-group.su', +'www.performanceadexchange.com', +'www.performancerevenues.com', +'www.persevered.com', +'www.persianstat.com', +'www.pflexads.com', +'www.pgmopcongruity.review', +'www.phenomcrm.com', +'www.phmgtrfqxreesting.review', +'www.photoshop-master.org', +'www.phpbbex.com', +'www.phylesonqjkilk.download', +'www.picreel.com', +'www.pigment-adv.co.il', +'www.pillowywdgpchl.download', +'www.pinfishmabev.download', +'www.ping-fast.com', +'www.pinguinqeslaj.download', +'www.piumrtfasiv.download', +'www.pivotnetworks.com', +'www.pixazza.com', +'www.pixel.watch', +'www.pixeleze.com', +'www.placehold.it', +'www.pleadshvzek.download', +'www.pleasewaitlonger.com', +'www.plocia.com', +'www.ploppingppoqqgq.download', +'www.plug-media.com', +'www.plus500.com', +'www.po.st', +'www.pointroll.com', +'www.pointshop.dk', +'www.polishedsvcxddsy.download', +'www.pongoresume.com', +'www.popads.ero-advertising.com', +'www.popadscdn.net', +'www.popcash.net', +'www.popelingmltdiidyr.download', +'www.poponclick.com', +'www.popstrap.com', +'www.poptm.com', +'www.popunder.net', +'www.popunder.ru', +'www.popzila.com', +'www.pornland.mobi', +'www.pornlist.mobi', +'www.pornsponsors.com', +'www.postads24.com', +'www.potionoxfrtmzvr.download', +'www.ppcindo.com', +'www.ppsxqapwsurcoats.review', +'www.pptrk.com', +'www.praptkppltraditors.review', +'www.prchecker.info', +'www.predictivadvertising.com', +'www.prehensivetvrie.download', +'www.premiumhdv.com', +'www.prepareriblef.download', +'www.preplannedpbxggguv.download', +'www.primosearch.com', +'www.pringotrack.com', +'www.prishla.info', +'www.probux.com', +'www.products-and-services.com', +'www.profitreload.com', +'www.projectcounter.org', +'www.projectwonderful.com', +'www.promolnk.com', +'www.promomasters.at', +'www.promotions.yahoo.com', +'www.pronatingwdlurtut.download', +'www.propellerpops.com', +'www.proratepgehzyd.download', +'www.prosperent.com', +'www.protectsebuwflgm.download', +'www.prtracker.com', +'www.psyimjyctimeliness.review', +'www.ptp22.com', +'www.ptp4ever.fr', +'www.pubdirecte.com', +'www.publicizedrtgtvj.download', +'www.pubx.co', +'www.puggareeslshty.download', +'www.pureadexchange.com', +'www.pushdoglucoside.review', +'www.pvcteegjdrecombine.review', +'www.pwgrkcxuescaped.review', +'www.pyqnmtgtsrouleaux.review', +'www.pyracanthahiiiy.download', +'www.pyrolyzesgykddf.download', +'www.pyrrhousabowdw.download', +'www.pyrroleqkoaob.download', +'www.pywatur.biz', +'www.pyxqbzdwemuteness.review', +'www.qadabra.com', +'www.qajtgdsulfate.review', +'www.qdibdzannvauntings.review', +'www.qdigital.co.il', +'www.qdildryypitapat.review', +'www.qfrirscauterises.review', +'www.qjfbjuyvuazotizing.review', +'www.qpfumxmsxvoars.review', +'www.qqc.co', +'www.qualaroo.com', +'www.qualigo.de', +'www.qualigo.net', +'www.qualityclickcontrol.com', +'www.qualitylegion.com', +'www.quantcount.com', +'www.quantserve.com', +'www.qubitproducts.com', +'www.queerestxyxlws.download', +'www.questionmarket.com', +'www.quick-torrent.com', +'www.quinolaerbnj.download', +'www.quizilla.com', +'www.quotestream.com', +'www.qwiklnk.com', +'www.rackshack-affiliates.net', +'www.raconteurnvlwsc.download', +'www.radar11ab.co.uk', +'www.radarurl.com', +'www.rankseller.de', +'www.ranksider.com', +'www.rapleaf.com', +'www.rasedbdhczr.download', +'www.rasius.pro', +'www.raygun.io', +'www.rddywd.com', +'www.real-marketing.com', +'www.realcounter.eu', +'www.realtracker.com', +'www.reamerskltzgimoz.download', +'www.recommendedpreview.com', +'www.recorded-email.com', +'www.recreativ.ru', +'www.recrossedmuwiemq.download', +'www.redcounter.net', +'www.redirect.com', +'www.reduxmediia.com', +'www.reedingxgxwiet.download', +'www.reformal.ru', +'www.rehungekmar.download', +'www.rejectclick.com', +'www.relap.io', +'www.remercyingynfycoay.download', +'www.renouncecvtqbkx.download', +'www.repricebkbakkrxq.download', +'www.research-artisan.com', +'www.resolingvmvkfqrq.download', +'www.resolvedlyecyduwkv.download', +'www.resultanthixic.download', +'www.retargetpro.net', +'www.return.to', +'www.revdepo.com', +'www.revenue.net', +'www.revmob.com', +'www.revmobmobileadnetwork.com', +'www.rewardsflow.com', +'www.rextopia.com', +'www.rgadvert.com', +'www.rhapsodespzamgepzf.download', +'www.rhodonitexnwpvf.download', +'www.rhtag.com', +'www.ricinoleicqnvzzrqnk.download', +'www.ricksticksidperh.download', +'www.ridiculeojlipf.download', +'www.ringmenbnfkg.download', +'www.rinsesqpppqbd.download', +'www.ripenesscamuhceu.download', +'www.rivcash.com', +'www.rlcdn.com', +'www.rmbn.ru', +'www.rmv.so', +'www.roars.com', +'www.robotreplay.com', +'www.roiliernoqgxdj.download', +'www.roilsqbquh.download', +'www.roitracker.com', +'www.ropnqabtmaths.review', +'www.rotrk.com', +'www.rotunddpgyiagb.download', +'www.rovelrpphyrua.download', +'www.rowdyishtnhlgiax.download', +'www.roxyaffiliates.com', +'www.rpylvksecants.review', +'www.rrglxwvflpropensely.review', +'www.rsmrttracking.com', +'www.rt-ns.ru', +'www.rtraccoin1.com', +'www.rtrcoin1.com', +'www.rtrinstcap1.com', +'www.rtrk.com', +'www.rtrpropcoin1.com', +'www.rtsg.com', +'www.rtvhalearn.review', +'www.ruclicks.com', +'www.runnergamesch.com', +'www.runnergameshk.com', +'www.ruralworkforcecenter.com', +'www.rushdktwu.download', +'www.safelinking.net', +'www.safelinktracker.com', +'www.sarrazinsxkkkyv.download', +'www.sassolitesffuzwmv.download', +'www.sassvodetba.download', +'www.satyridsochasuzk.download', +'www.savethis.clickability.com', +'www.savings-galleria.com', +'www.saxoniesiqolqoh.download', +'www.sbrjgqeppcarbuncle.review', +'www.sc.pages02.net', +'www.scarabaeidpiiwuw.download', +'www.scarthspnckx.download', +'www.sccqbcwwuoerlikon.review', +'www.schizopodviicvxvtr.download', +'www.scleromanongsf.download', +'www.scluvkzgdowel.review', +'www.scorecardresearch.com', +'www.scrawliestliopa.download', +'www.scrawlymecmxobp.download', +'www.scribol.com', +'www.scriptshead.com', +'www.scytalesezqaxxr.download', +'www.search-images.com', +'www.search-results.com', +'www.search-results.mobi', +'www.search-tracker.com', +'www.search.us.com', +'www.searchesinteractive.com', +'www.searchfusion.com', +'www.searchingresult.com', +'www.searchinquire.com', +'www.searchpeack.com', +'www.searchproduction.com', +'www.searchswitch.com', +'www.searchwebresults.com', +'www.sebgomokos.review', +'www.sebowelarger.review', +'www.secoptim.com', +'www.secrets40.com', +'www.secureadcenter.com', +'www.securejump.net', +'www.securepaths.com', +'www.securestudies.com', +'www.sedotracker.com', +'www.sedotracker.de', +'www.seducemvjbklpqi.download', +'www.seedingsllobt.download', +'www.seethisinaction.com', +'www.seevolution.com', +'www.segment.com', +'www.segment.io', +'www.sekindo.co.il', +'www.sekindo.com', +'www.self-destructing-email.com', +'www.self-destructing.com', +'www.self-destructingemail.com', +'www.selfdestructing.com', +'www.selfdestructingemail.com', +'www.selfdestructingmessage.com', +'www.selfnetwork.com', +'www.sellads.eu', +'www.semrush.com', +'www.send4fun.com', +'www.sengreensbaxsovax.download', +'www.senseiproducts.com', +'www.seotoolscentral.com', +'www.separatingvqeikpmhz.download', +'www.serializedwzrxrhw.download', +'www.serpanel.com', +'www.servedbyadbutler.com', +'www.seselisgqpobnny.download', +'www.setihome.com', +'www.sevnhcdshops.review', +'www.sexsponsors.com', +'www.sfgybrfoveracting.review', +'www.sfippa.com', +'www.sgiegeexposture.review', +'www.sgiz.mobi', +'www.sgizmo.com', +'www.shareasale.com', +'www.sheetedgfypgdtws.download', +'www.shellersyheaefm.download', +'www.shinystat.com', +'www.shinystat.it', +'www.shopexplorer.com', +'www.showm3.com', +'www.showroomvip.com', +'www.shtuppingxpacoed.download', +'www.sibylipmxs.download', +'www.sichtbarkeitsindex.de', +'www.silverpush.com', +'www.similezfzycz.download', +'www.simonsearch.com', +'www.simpailoppvw.download', +'www.simplistssxshrgh.download', +'www.siteauikozph.download', +'www.sitemeter.com', +'www.sitepal.com', +'www.sitestat.com', +'www.sitetracker.com', +'www.skimlinks.com', +'www.sklentedjibkmbouo.download', +'www.skwheunderlines.review', +'www.skyenetmedia.com', +'www.skyhookwireless.com', +'www.skyligh.co', +'www.slfnmzblblowsy.review', +'www.slingersdlbrbhjs.download', +'www.slushingfcikpfvjt.download', +'www.slzppcgzheuristic.review', +'www.smart-ip.net', +'www.smart-scripts.com', +'www.smartcj.com', +'www.smartclick.net', +'www.smartlog.ru', +'www.smilepop.com', +'www.smirchedsapkthxmy.download', +'www.smjmp.net', +'www.smockingbjyvmh.download', +'www.smoochjmxptj.download', +'www.smoothedqwcpw.download', +'www.smoothscrollapp.com', +'www.smurringdimmv.download', +'www.snapengage.com', +'www.snowmenwwrotgud.download', +'www.socialize-it.com', +'www.sociomantic.com', +'www.soclock.com', +'www.sofia.ai', +'www.softcash.biz', +'www.soogiedsoafm.download', +'www.soothsitlppfwm.download', +'www.sororiallyfdnstbxp.download', +'www.soundstation.dk', +'www.sousquywpscd.download', +'www.spanksvrfvabcuq.download', +'www.sparkimg.com', +'www.specificmedia.com', +'www.spectato.com', +'www.speedclicks.ero-advertising.com', +'www.sperse.com', +'www.spinbox.com', +'www.spinbox.net', +'www.splashpageadvertising.com', +'www.splatzmmkvu.download', +'www.sponsorads.de', +'www.spotsniper.ru', +'www.springboardplatform.com', +'www.spycash.biz', +'www.spyingjplnda.download', +'www.spylog.com', +'www.spylog.ru', +'www.sq2trk2.com', +'www.squarenessqyecvdn.download', +'www.squashyrsewa.download', +'www.srv2trking.com', +'www.srvpub.com', +'www.ssangyong.co.il', +'www.starchedlyyvlbyt.download', +'www.stargamesaffiliate.com', +'www.starsads.com', +'www.startappexchange.com', +'www.statcount.com', +'www.statcounter.com', +'www.stateresolver.link', +'www.static.mb89-live.com', +'www.stats4all.com', +'www.stats4you.com', +'www.statuncore.com', +'www.stayinhomeandlovinit.com', +'www.steakafka.pro', +'www.stepstone.112.2o7.net', +'www.stiltyulrmms.download', +'www.storedsearch.com', +'www.stream4u.me', +'www.streamcastnetworks.com', +'www.stretchywrrbzwg.download', +'www.strookepvwkv.download', +'www.stroutstlwvrss.download', +'www.stubbierrjdassboo.download', +'www.su600.com', +'www.subchanterpjiyqc.download', +'www.subeditorsoqltcxf.download', +'www.subfuscsoweaucss.download', +'www.subsoilsolvhikahb.download', +'www.suncountryair.com', +'www.sunnssgybqn.download', +'www.sunopenoffice.112.2o7.net', +'www.superfish.com', +'www.supersonicads.com', +'www.sureonlinefind.com', +'www.surfernetwork.com', +'www.surfers.ro', +'www.surgelesssomdpninp.download', +'www.surphace.com', +'www.surveynetworks.com', +'www.swaggeredvflzknyhf.download', +'www.sweeneyxuumfdw.download', +'www.swellisholupo.download', +'www.swiftad.com', +'www.swimsuitnetwork.com', +'www.syllabusqhlloohss.download', +'www.tackledoyuzsfx.download', +'www.tag4arm.com', +'www.taggstar.com', +'www.tagjunction.com', +'www.takyake.ru', +'www.talkingdata.com', +'www.talkingdata.net', +'www.tangibledownload.com', +'www.tantrack.info', +'www.tapenowmskndjn.download', +'www.tapfortap.com', +'www.targad.com', +'www.targetmarketingusa.com', +'www.tasseledalcktk.download', +'www.tassellingnmwczavi.download', +'www.tayppqgouaches.review', +'www.tbgilthmonticulus.review', +'www.td553.com', +'www.tdeiggbfmetamers.review', +'www.teasermedia.net', +'www.teasernet.com', +'www.tegulaenasqffvn.download', +'www.teilsidhobehqy.download', +'www.temperersgelvhakyk.download', +'www.tenantrymishdg.download', +'www.tenzero.com', +'www.terraads.net', +'www.terraclicks.com', +'www.tesimages.com', +'www.text-link-ads.com', +'www.textad.net', +'www.tgpmanager.com', +'www.thaidigger.com', +'www.thalliformxaujqbsq.website', +'www.theaffiliate.us', +'www.theaffiliatepeople.com', +'www.theappwarrior.com', +'www.thecounter.com', +'www.thehitsusa.com', +'www.theophanyujgxscs.download', +'www.theowgkkaj.download', +'www.thetrafficstat.net', +'www.thicksetchrzcu.download', +'www.thindivide.com', +'www.thisteddagblad.dk', +'www.thliluxanplanet.review', +'www.thogethoffic.co', +'www.thor-cpa.com', +'www.thowelspegzmc.download', +'www.thrgo.pro', +'www.ths9j89.com', +'www.thumb.ero-advertising.com', +'www.tickerassist.co.uk', +'www.tickerland.com', +'www.tidalkqbvnxk.download', +'www.tidbitlhztnnx.download', +'www.tifosicsonoel.download', +'www.tiller.co', +'www.tinbuadserv.com', +'www.tioweuuukcedarwood.review', +'www.titanads1.com', +'www.titanads3.com', +'www.titanads4.com', +'www.titanads5.com', +'www.tizernaya-reklama.ru', +'www.tlehflrectus.review', +'www.tlkrvyuincommodes.review', +'www.tlvmedia.com', +'www.tmtrck.com', +'www.tns-counter.ru', +'www.toolbarcounter.com', +'www.top-ro.ro', +'www.topadvancedsearch.com', +'www.toplist.cz', +'www.topstat.ru', +'www.toptrafficsource.com', +'www.torcherxotnnqq.download', +'www.torerovdmsbvg.download', +'www.total-media.net', +'www.totaladperformance.com', +'www.totalping.com', +'www.towableohrhz.download', +'www.tprmyslidden.review', +'www.tracemyip.org', +'www.track.net', +'www.track112.com', +'www.track4.com', +'www.trackalyzer.com', +'www.trackbacksecure.com', +'www.trackedclicks.com', +'www.tracker.peerclick.io', +'www.trackermodules.com', +'www.trackhost.com', +'www.trackimpression.com', +'www.tracking.mobitracker.info', +'www.tracking.w2mobile.com', +'www.tracking999.com', +'www.trackingclick.net', +'www.trackingstatalytics.com', +'www.tracklead.net', +'www.trackvoluum.com', +'www.trackyourstats.com', +'www.tradeadexchange.com', +'www.tradetraffic.com', +'www.trading.dianomi.com', +'www.traffdaq.com', +'www.traffe.eu', +'www.traffic4you.de', +'www.trafficads.com', +'www.trafficcenter.com', +'www.trafficfactory.biz', +'www.trafficfile.com', +'www.traffichold.com', +'www.trafficjunky.net', +'www.trafficmagnet.com', +'www.trafficmonster.com', +'www.trafficmp.com', +'www.trafficoasis.com', +'www.trafficswarm.com', +'www.traffictrader.net', +'www.trafic.ro', +'www.traficmax.fr', +'www.transferhit.com', +'www.trcktm.net', +'www.treddleswdnnipx.download', +'www.tremblingskzymvgcu.download', +'www.trhzc.com', +'www.tribalfusion.com', +'www.trivia2mobile.com', +'www.trkroi.com', +'www.trkuoy.com', +'www.trkur.com', +'www.trkur1.com', +'www.trkur5.com', +'www.trollzeweb.com', +'www.truetraffic4u.com', +'www.truongton.net', +'www.trw12.com', +'www.tsyuftaindignance.review', +'www.tubatebunjrqzi.download', +'www.tudoparablogs2.hpg.com.br', +'www.tunersyxofqeak.download', +'www.turncoatsuxica.download', +'www.tv4chan.com', +'www.tvdttzemicrotome.review', +'www.tvsquad.com', +'www.twemyksybtripewomen.review', +'www.twqlnorqcmesquite.review', +'www.tynt.com', +'www.typepad.com', +'www.typiol.com', +'www.tyxo.bg', +'www.tyzqxseppukus.review', +'www.tzgcxofordid.review', +'www.tzigwosquniquely.review', +'www.tzpwyoyhfspaed.review', +'www.uclick.com', +'www.uddlywcatarrhs.review', +'www.udmserve.net', +'www.ueyqejwfyeither.review', +'www.ufohyfzt.download', +'www.ugdturner.com', +'www.uhjfxgwrchronical.review', +'www.ukbanners.com', +'www.ulock.it', +'www.ultimatelyreveal.com', +'www.ultraadserver.com', +'www.umeng.com', +'www.unadvertising.info', +'www.unboxingdotfb.download', +'www.unbridlingdkkedavk.download', +'www.uncarefulwrhmgwje.download', +'www.unfairnesstxucdbqiz.download', +'www.unfamedooxpcktdb.download', +'www.universal-traffic.com', +'www.unlck.net', +'www.unpacifiedeaecmq.download', +'www.unquietlyzyiwrvvao.download', +'www.unrightfuljfuqrbf.download', +'www.unsisteredgajudros.download', +'www.unstaidblmgmsmpq.download', +'www.untangledlkvhbhj.download', +'www.untendereduxqwgikf.download', +'www.unwealhdvfydj.download', +'www.unwellnessyttshyf.download', +'www.upcuushogunates.review', +'www.upgrowsxdeyxj.download', +'www.uploadedgnxjteu.download', +'www.uponit.com', +'www.upraisegbczr.download', +'www.upsellit.com', +'www.uptnzrhwainwright.review', +'www.upv4.moatads.com', +'www.urlstats.com', +'www.urlzzz.com', +'www.urmediazone.com', +'www.usabilla.com', +'www.usarevenue.com', +'www.usd.bravo-dog.com', +'www.usearchmedia.com', +'www.uthenxxnoisemaker.review', +'www.uugpwdbtalaria.review', +'www.uur.at', +'www.uvyeoperistome.review', +'www.uzomaxgcamel.review', +'www.vadoseyxcuekj.download', +'www.valueclickmedia.com', +'www.valuesponsor.com', +'www.variedlyewebwd.download', +'www.vassalagescafpum.download', +'www.vastuchaedes.review', +'www.vayavicio.com', +'www.vbhoqfogey.review', +'www.vbutlvkmesially.review', +'www.vcbypttassel.review', +'www.vectormarketing.com', +'www.vendiblefqgmayr.download', +'www.venturead.com', +'www.vermifugalvacqsw.download', +'www.vernalizesdoanrm.download', +'www.veruta.com', +'www.vfqwpoxshelfroom.review', +'www.vgleqkbergamots.review', +'www.vhnnicneovals.review', +'www.vibrantmedia.com', +'www.viciosityptktpdyq.download', +'www.video-loader.com', +'www.view.atdmt.com.35354.9267.302br.net', +'www.viewbix.com', +'www.viewsecure.net', +'www.viglink.com', +'www.vignette.com', +'www.villsacsma.download', +'www.vinceandjoesmarket.com', +'www.vipadshares.com', +'www.virads.com', +'www.virtual-person.com', +'www.visitorbarscript.com', +'www.visitorpath.com', +'www.visitorprofiler.com', +'www.visitweb.com', +'www.visuallyxvnxqhr.download', +'www.visualrevenue.com', +'www.vjnehfcprozymite.review', +'www.vml-127.com', +'www.vocalistgixybeoj.download', +'www.voodooparking.com', +'www.vowjnembargoing.review', +'www.vq91811.com', +'www.vsevjednom.cz', +'www.vstats.net', +'www.vstrk.com', +'www.vulgarizexemdqzmr.download', +'www.vumeujlug.download', +'www.vviii.ru', +'www.vxcash.net', +'www.vygeirghpedaller.review', +'www.w.shoopadoo.com', +'www.wackoqczwjds.download', +'www.wagerersivrvnemu.download', +'www.wahoha.com', +'www.walkingsgzezhx.download', +'www.walmartsavingscatcher.com', +'www.wamfebdvsabotier.review', +'www.wantstraffic.com', +'www.wap.co.il', +'www.wapplanet.org', +'www.warmongersgyuszzudy.download', +'www.washesqydoigavu.download', +'www.watchlivestream.me.uk', +'www.wct.link', +'www.weakentipjxv.download', +'www.web-controlling.com', +'www.web-counter.5u.com', +'www.web-marketing.8m.com', +'www.web-stat.com', +'www.webattack.com', +'www.webcontrolling.com', +'www.webcontrolling.net', +'www.webcounter.cc', +'www.webcounter.com', +'www.webglobaltraffic.info', +'www.webgozar.com', +'www.webgozar.ir', +'www.webhitcounter.com', +'www.webhits.de', +'www.weblemon.pl', +'www.webpagescripts.net', +'www.webprowire.com', +'www.webproworld.com', +'www.websitefinancing.com', +'www.websitehome.co.uk', +'www.websponsors.com', +'www.webstat.com', +'www.webstat.net', +'www.webstat.no', +'www.webtrafficllc.co', +'www.webtrends.com', +'www.webtrends.net', +'www.webtrendslive.com', +'www.wee.co.il', +'www.weebecash.com', +'www.weedoit.fr', +'www.welkingmkscrmgc.download', +'www.wesell.co.il', +'www.westernereoednyj.download', +'www.wgiftcard.com', +'www.whatseek.com', +'www.whereuntomzrpo.download', +'www.whickerxsxnz.download', +'www.whirlerssrmbf.download', +'www.whosread.com', +'www.whydowork.com', +'www.widgetadvertising.biz', +'www.widgetcontent.net', +'www.widgetdigital.info', +'www.widgettool.net', +'www.wildrhino.com', +'www.wiliestmbpgakdno.download', +'www.win7affiliates.com', +'www.windgallsxsnxcqt.download', +'www.wingoads.com', +'www.witchlab.com', +'www.wmfqmxqwsurgeries.review', +'www.wondrousvalue.com', +'www.wopnersoft.com', +'www.workflowboard.com', +'www.workfromhome.org', +'www.workingonline.com', +'www.workzip.it', +'www.worldupdates.in', +'www.wouralistvdmttom.download', +'www.wovxriqartworks.review', +'www.wpmimkheartfelt.review', +'www.wqdtzhdstabler.review', +'www.wrackgdnkgwg.download', +'www.wrxviatrhzoists.review', +'www.wsknjzjwlyrically.review', +'www.wundercounter.com', +'www.wwwdiscounthotel.com', +'www.wwwdishnetwork.com', +'www.wwwetracker.com', +'www.wwwfoodnetwork.com', +'www.wwwthesharperimage.com', +'www.wxubrlotdguineas.review', +'www.wytpxpnhflavin.review', +'www.wyvoimulligrubs.review', +'www.x19network.com', +'www.xblpizjejunum.review', +'www.xeanon.com', +'www.xiti.com', +'www.xivphnipressings.review', +'www.xkcaivkoheeding.review', +'www.xl415.com', +'www.xml.admetix.com', +'www.xratedtracking.com', +'www.xrevtrk.com', +'www.xstat.pl', +'www.xxrwdgucdnibblingly.review', +'www.xxxcounter.com', +'www.xxxcounter.de', +'www.xykhbtobligant.review', +'www.ybotvisit.com', +'www.yceml.net', +'www.yeahmobi.com', +'www.yearcast.com', +'www.yemobiads.com', +'www.yepdigital.adk2x.com', +'www.yesadvertising.com', +'www.yesno.co.il', +'www.yestupjldo.download', +'www.yesupmicro.com', +'www.yesupseo.com', +'www.yfxnajdodamasks.review', +'www.yhmpiboweanel.review', +'www.yieldersoogjabsb.download', +'www.ykujsrbdcbridemaid.review', +'www.yllix.com', +'www.you2mail.com', +'www.younglingsbcjzvozva.download', +'www.youradexchange.com', +'www.yourcartoons.com', +'www.yourhitstats.com', +'www.youyield.com', +'www.ytubevideoqualitymanager.com', +'www.yzpvcwaelunker.review', +'www.z5x.net', +'www.za-ads.de', +'www.zanox-affiliate.de', +'www.zedo.com', +'www.zedoadnetwork.com', +'www.zemoumisfortune.review', +'www.zeptolab.com', +'www.zergnet.com', +'www.zeroredirect1.com', +'www.zetatrk.com', +'www.zhanzhang.net', +'www.zhurqeyscbidet.review', +'www.zokjlyraphide.review', +'www.zombo.com', +'www.zoomorphicylxvmnz.download', +'www.zqojpysorkiddiewink.review', +'www.ztapobanefuller.review', +'www.ztrack.net', +'www.ztrack.pw', +'www.zxtrace.com', +'www.zyiztazhfprochain.review', +'www.zzptzdhugavot.review', +'www1.clickdownloader.com', +'www1.counter.bloke.com', +'www1.effectivemeasure.net', +'www1.freestats.com', +'www1.ivwbox.de', +'www1.kliks.nl', +'www1.mpnrs.com', +'www1.mystats.nl', +'www1.oratosaeron.com', +'www1.perf.overture.com', +'www1.runnergameshk.com', +'www1.track4.com', +'www1.yesadvertising.com', +'www1.zedo.com', +'www10.indiads.com', +'www10.mystats.nl', +'www10.overture.com', +'www10.yesadvertising.com', +'www11.yesadvertising.com', +'www12.yesadvertising.com', +'www14.a8.net', +'www14.yesadvertising.com', +'www2.addfreestats.com', +'www2.adhost.com', +'www2.alloydigital.com', +'www2.applifier.com', +'www2.arielrebel.com', +'www2.bubblesmedia.ru', +'www2.buttonware.net', +'www2.clustrmaps.com', +'www2.counter.bloke.com', +'www2.cqcounter.com', +'www2.crittercism.com', +'www2.dealtime.com', +'www2.delta-search.com', +'www2.doubleclick.com', +'www2.doubleclick.net', +'www2.effectivemeasure.net', +'www2.flowgo.com', +'www2.freestats.com', +'www2.glam.com', +'www2.hitslink.com', +'www2.ivwbox.de', +'www2.kliks.nl', +'www2.mpnrs.com', +'www2.pardot.com', +'www2.skyhookwireless.com', +'www2.smartadserver.com', +'www2.survey-poll.com', +'www2.surveyfocus.com', +'www2.telemarque.com', +'www2.track4.com', +'www21.a8.net', +'www22.a8.net', +'www24.a8.net', +'www26.a8.net', +'www28.a8.net', +'www3.adhost.com', +'www3.adireland.com', +'www3.clustrmaps.com', +'www3.counter.bloke.com', +'www3.delta-search.com', +'www3.doubleclick.com', +'www3.doubleclick.net', +'www3.effectivemeasure.net', +'www3.mpnrs.com', +'www3.mystats.nl', +'www3.smartadserver.com', +'www3.track4.com', +'www3.webhostingtalk.com', +'www3.yesadvertising.com', +'www35.glam.com', +'www3secure.com', +'www4.addfreestats.com', +'www4.clustrmaps.com', +'www4.counter.bloke.com', +'www4.delta-search.com', +'www4.directrdr.com', +'www4.effectivemeasure.net', +'www4.freestats.com', +'www4.glam.com', +'www4.mystats.nl', +'www4.shiftlock.com', +'www4.smartadserver.com', +'www4.trix.net', +'www4.yesadvertising.com', +'www5.addfreestats.com', +'www5.cj.com', +'www5.counter.bloke.com', +'www5.effectivemeasure.net', +'www5.freestats.com', +'www5.mystats.nl', +'www5.overture.com', +'www5.yesadvertising.com', +'www6.addfreestats.com', +'www6.counter.bloke.com', +'www6.effectivemeasure.net', +'www6.glam.com', +'www6.mystats.nl', +'www60.overture.com', +'www61.overture.com', +'www7.addfreestats.com', +'www7.bannerspace.com', +'www7.cbox.ws', +'www7.counter.bloke.com', +'www7.effectivemeasure.net', +'www7.glam.com', +'www7.mystats.nl', +'www7.overture.com', +'www7.yesadvertising.com', +'www8.addfreestats.com', +'www8.counter.bloke.com', +'www8.effectivemeasure.net', +'www8.glam.com', +'www8.mystats.nl', +'www9.counter.bloke.com', +'www9.effectivemeasure.net', +'www9.glam.com', +'www9.mystats.nl', +'www9.overture.com', +'wwwdiscounthotel.com', +'wwwdishnetwork.com', +'wwwetracker.com', +'wwwfoodnetwork.com', +'wwwimlive.com', +'wwwpromoter.com', +'wwwtest.timesink.com', +'wwwthesharperimage.com', +'wwwview.atdmt.com.1520.302br.net', +'wwwview.atdmt.com.801.8000.302br.net', +'wwww.cj.com', +'wwww.woolik.com', +'wxdownloadmanager.com', +'wxubrlotdguineas.review', +'wytpxpnhflavin.review', +'wyvoimulligrubs.review', +'wz.tynt.com', +'x.about.com', +'x.bloggurat.net', +'x.castanet.net', +'x.cnt.my', +'x.dpstatic.com', +'x.go.com', +'x.myspace.com', +'x.myspace.edgesuite.net', +'x.skimresources.com', +'x.vindicosuite.com', +'x.weather.com', +'x.zedo.com', +'x.zeroredirect.com', +'x.zeroredirect1.com', +'x.zeroredirect2.com', +'x1.ifdef.jp', +'x1.yamanoha.com', +'x10.com', +'x10.ifdef.jp', +'x11.ifdef.jp', +'x12.ifdef.jp', +'x13.ifdef.jp', +'x14.ifdef.jp', +'x15.ifdef.jp', +'x16.ifdef.jp', +'x17.ifdef.jp', +'x18.ifdef.jp', +'x19.ifdef.jp', +'x19network.com', +'x2.ifdef.jp', +'x2.vindicosuite.com', +'x2.yamanoha.com', +'x20.ifdef.jp', +'x3.extreme-dm.com', +'x3.ifdef.jp', +'x3.xclicks.net', +'x3.yamanoha.com', +'x4.ifdef.jp', +'x4.yamanoha.com', +'x5.ifdef.jp', +'x5.yamanoha.com', +'x6.ifdef.jp', +'x6.yamanoha.com', +'x7.hebiichigo.com', +'x7.ifdef.jp', +'x7.yamanoha.com', +'x8.ifdef.jp', +'x8.yamanoha.com', +'x9.ifdef.jp', +'xad.com', +'xads.zedo.com', +'xapi.juicyads.com', +'xaxis.2cnt.net', +'xb11776.com', +'xban.walla.co.il', +'xblpizjejunum.review', +'xbox.ign.us.intellitxt.com', +'xbox.visits.lt', +'xbox360.ign.us.intellitxt.com', +'xbridge.122.207.net', +'xeanon.com', +'xebadu.com', +'xenec.stol.it', +'xeontopa.com', +'xerox.elicitapp.com', +'xfinder.staging.adition.com', +'xhealthmobiltools.112.2o7.net', +'xhr.ajkelra.com', +'xhr.avalhukof.com', +'xhr.bahaimlo.com', +'xhr.beglorena.com', +'xhr.bokilora.com', +'xhr.bondinra.com', +'xhr.bonjikoa.com', +'xhr.botiviga.com', +'xhr.chukalapopi.com', +'xhr.ciridola.com', +'xhr.civitik.com', +'xhr.d.mojigaga.com', +'xhr.dagasaka.com', +'xhr.daghashmal.com', +'xhr.dontibar.com', +'xhr.dorapodorasham.com', +'xhr.drogomet.com', +'xhr.dulderbulder.com', +'xhr.egolina.com', +'xhr.ekolamis.com', +'xhr.erogaliv.com', +'xhr.farfarida.com', +'xhr.foditgoz.com', +'xhr.forkitz.com', +'xhr.fulhudhoo.com', +'xhr.golizoli.com', +'xhr.haklopar.com', +'xhr.hariqavi.com', +'xhr.hirovivi.com', +'xhr.horheloopo.com', +'xhr.humuseliyahu.com', +'xhr.jadizayo.com', +'xhr.jandolav.com', +'xhr.jingavot.com', +'xhr.jquerycdn.co.il', +'xhr.jquerymin.co.il', +'xhr.kalmloda.com', +'xhr.kilomansa.com', +'xhr.kilorama.com', +'xhr.kuchebraska.com', +'xhr.liktirov.com', +'xhr.lokipodi.com', +'xhr.measurementaz.com', +'xhr.milparota.com', +'xhr.mozefakt.com', +'xhr.mujilora.com', +'xhr.muligov.com', +'xhr.namitol.com', +'xhr.niholaev.com', +'xhr.niklesrov.com', +'xhr.nimdinb.com', +'xhr.pipilida.com', +'xhr.pitatagata.com', +'xhr.pompazilla.com', +'xhr.poratav.com', +'xhr.prikolizdesa.com', +'xhr.qawiman.com', +'xhr.quavomi.com', +'xhr.ratkalol.com', +'xhr.reqpostanza.com', +'xhr.roritabo.com', +'xhr.rotibald.com', +'xhr.scrappykoko.com', +'xhr.senolati.com', +'xhr.shmonekisot.com', +'xhr.shokala.com', +'xhr.shulhanafuh.com', +'xhr.tantella.com', +'xhr.tenlokif.com', +'xhr.tijorari.com', +'xhr.tikodala.com', +'xhr.tikrailijorj.com', +'xhr.udorik.com', +'xhr.ufraton.com', +'xhr.ukatoe.com', +'xhr.upnorma.com', +'xhr.uralap.com', +'xhr.utorido.com', +'xhr.uzekrs.com', +'xhr.uzotarak.com', +'xhr.venonita.com', +'xhr.wakapita.com', +'xhr.wodizapt.com', +'xhr.yaboshadi.com', +'xhr.yallboen.com', +'xhr.yeshhaod.com', +'xhr.yorilada.com', +'xhr.yuituityula.com', +'xhr.zepozipo.com', +'xhr.zinovila.com', +'xhr.zonolali.com', +'xhr.zorbikala.com', +'xhr.zortinah.com', +'xiazai.duba.net', +'xiti.com', +'xivphnipressings.review', +'xkcaivkoheeding.review', +'xl.topstat.com', +'xl415.com', +'xlite.counterpath.com', +'xml.admeridian.com', +'xml.admetix.com', +'xml.adservme.com', +'xml.adtech.fr', +'xml.clickredirection.com', +'xml.explorads.com', +'xml.ezmob.com', +'xml.ioam.de', +'xml.online-adnetwork.com', +'xml.sahcdn.com', +'xml.trafficsyndicate.com', +'xml.vokut.com', +'xml.xmlwizard.com', +'xml2.trafficsyndicate.com', +'xmpie.vo.llnwd.net', +'xmts.net', +'xn--adspace-kvg.ero-advertising.com', +'xn--ryield-heqxb4671gshxg.jmp9.com', +'xn--ryield-hqmh5974xb8yg.jmp9.com', +'xns1.vignette.com', +'xobor.miranus.com', +'xoredi.com', +'xp1.zedo.com', +'xp2.zedo.com', +'xratedtracking.com', +'xrevtrk.com', +'xslt.alexa.com', +'xsltcache.alexa.com', +'xstat.pl', +'xtra.co.nz', +'xwne.wcdn.co.il', +'xxladu.com', +'xxrwdgucdnibblingly.review', +'xxx.cqcounter.com', +'xxxadu.com', +'xxxconnect.com', +'xxxcounter.com', +'xykhbtobligant.review', +'xyz.freelogs.com', +'xz.duba.net', +'xz6h6zj3.com', +'y.extreme-dm.com', +'y.ibsys.com', +'y.jmp9.com', +'y.moatads.com', +'y.net-games.co.il', +'y.zedo.com', +'y.zeroredirect.com', +'y.zeroredirect1.com', +'y.zeroredirect2.com', +'y0.extreme-dm.com', +'y1.extreme-dm.com', +'y3.ifengimg.com', +'y72yuyr9.com', +'yaboshadi.com', +'yada.com', +'yadro.ru', +'yads.zedo.com', +'yahoo-s.nuggad.net', +'yahoo.ivwbox.de', +'yahoo.nuggad.net', +'yahoo.serving-sys.com', +'yakezienetwork.go2cloud.org', +'yallboen.com', +'yandexadexchange.net', +'yang.hitbox.com', +'yast.rutube.ru', +'yb.torchbrowser.com', +'ybotvisit.com', +'yc-ads.s3.amazonaws.com', +'ycv.secoptim.com', +'yeahmobi.com', +'yeahmobi.go2cloud.org', +'yeahmobi.hasoffers.com', +'yearcast.com', +'yeas.yahoo.co.jp', +'yebadu.com', +'yellgroup.122.2o7.net', +'yello-de01.webtrekk.net', +'yellostrom.webtrekk.net', +'yemobiads.com', +'yen.appsfire.net', +'yepdigital.adk2x.com', +'yepdigital.go2cloud.org', +'yesadvertising.com', +'yeshhaod.com', +'yesno.co.il', +'yestupjldo.download', +'yesup.net', +'yesupmicro.com', +'yesupseo.com', +'yfxnajdodamasks.review', +'yhmpiboweanel.review', +'yield.jmp9.com', +'yieldersoogjabsb.download', +'yieldmanager.adbooth.com', +'yieldmanager.com', +'yieldmgr.com', +'ying.hitbox.com', +'yj.moatads.com', +'ykujsrbdcbridemaid.review', +'yllix.com', +'ylu7k4i2o7.s.ad6media.fr', +'yoc-performance.com', +'yoclub.waphall.com', +'yostatic.net', +'yotefiles.com', +'yottos.com', +'you2mail.com', +'youmi.net', +'younglingsbcjzvozva.download', +'your.365advert.com', +'youradexchange.com', +'yourcartoons.com', +'yourhitstats.com', +'yourlondonbridge.go2cloud.org', +'yoursubdomain.bravediary.com', +'youspacko.com', +'youtrack.co', +'youtube.2cnt.net', +'youyield.com', +'ypn-jscs.overture.com', +'yrkdsp.112.2o7.net', +'yrkeve.112.2o7.net', +'ysm.hauchi.com.tw', +'ytubevideoqualitymanager.com', +'yuilop.com', +'yuituityula.com', +'yume.com', +'yuppy.2cnt.net', +'yvap.query.yahoo.com', +'yx-ads6.com', +'yxo.warmportrait.com', +'yz0fi.voluumtrk.com', +'yzpvcwaelunker.review', +'yzus09by.com', +'z-na.amazon-adsystem.com', +'z.adcpm.com', +'z.blogads.com', +'z.extreme-dm.com', +'z.moatads.com', +'z.on.aol.com', +'z.zedo.com', +'z.zeroredirect.com', +'z.zeroredirect1.com', +'z.zeroredirect2.com', +'z0.extreme-dm.com', +'z1.extreme-dm.com', +'z1.zedo.com', +'z1.zeroredirect1.com', +'z2.zeroredirect1.com', +'z3.zeroredirect1.com', +'z4.zeroredirect1.com', +'z5.zeroredirect1.com', +'z5x.net', +'z6.zeroredirect1.com', +'z7.zeroredirect1.com', +'z7ale.go2cloud.org', +'z8.zeroredirect1.com', +'z9.zeroredirect1.com', +'za.delta-boa.com', +'za.zeroredirect1.com', +'za1.delta-boa.com', +'za2.delta-boa.com', +'za3.delta-boa.com', +'za4.delta-boa.com', +'za5.delta-boa.com', +'za6.delta-boa.com', +'za7.delta-boa.com', +'za8.delta-boa.com', +'za9.delta-boa.com', +'zalando01.webtrekk.net', +'zalorasea.go2cloud.org', +'zangocash.com', +'zanox-affiliate.de', +'zanox.com', +'zapads.zapak.com', +'zb.zeroredirect1.com', +'zc.zeroredirect1.com', +'zc.zeroredirect2.com', +'zc2.quebec-bin.com', +'zd.zeroredirect1.com', +'zdau-builder.122.2o7.net', +'zdau-zdnetau.122.2o7.net', +'zdbb.net', +'zdf.de.edgesuite.net', +'zdf.ivwbox.de', +'zdorovayaspina.justclick.ru', +'ze.zeroredirect1.com', +'zeads.com', +'zedo.com', +'zedoadnetwork.com', +'zeepmedia.com', +'zeit.met.vgwort.de', +'zeit01.webtrekk.net', +'zeitonl.ivwbox.de', +'zemoumisfortune.review', +'zenent.go2cloud.org', +'zenithperformance.go2cloud.org', +'zenkreka.com', +'zepozipo.com', +'zerezas.com', +'zeroredirect.com', +'zeroredirect1.com', +'zetatrk.com', +'zeus.timesink.com', +'zeuscpa.go2affise.com', +'zeuscpa.go2cloud.org', +'zf.zeroredirect1.com', +'zg.zeroredirect1.com', +'zh.zeroredirect1.com', +'zhanzhang.net', +'zhcn.admob.com', +'zhurqeyscbidet.review', +'zi.zeroredirect1.com', +'ziffdavisglobal.112.2o7.net', +'ziflx.redirectvoluum.com', +'ziflx.trackvoluum.com', +'ziinga.go2cloud.org', +'zillow.go2cloud.org', +'zinovila.com', +'zinturax.com', +'zipcity.com', +'zipovoma.com', +'zipropyl.com', +'zipzap.go2cloud.org', +'zj.dcys.ksmobile.com', +'zj.zeroredirect1.com', +'zk.zeroredirect1.com', +'zk1.zeroredirect1.com', +'zk10.zeroredirect1.com', +'zk2.zeroredirect1.com', +'zk3.zeroredirect1.com', +'zk4.zeroredirect1.com', +'zk5.zeroredirect1.com', +'zk6.zeroredirect1.com', +'zk7.zeroredirect1.com', +'zk8.zeroredirect1.com', +'zk9.zeroredirect1.com', +'zl.zeroredirect1.com', +'zm.zeroredirect1.com', +'zmedia.com', +'zn.zeroredirect1.com', +'zn0cjgsju6439lcsd-microsoft.siteintercept.qualtrics.com', +'zn87b2gchqlbyp0jn-viacom.siteintercept.qualtrics.com', +'zn_0xssfnnsxmogd01-cbs.siteintercept.qualtrics.com', +'zn_9nquvazst1xipkt-cbs.siteintercept.qualtrics.com', +'zn_b4q1adq70amqdth-citrix.siteintercept.qualtrics.com', +'zn_brp7urzdaj4xmxn-edhealth.siteintercept.qualtrics.com', +'zo.zeroredirect1.com', +'zokidif.com', +'zokjlyraphide.review', +'zombo.com', +'zone28.hotwords.com.br', +'zonolali.com', +'zoom.go2cloud.org', +'zoomdirect.com.au', +'zoomorphicylxvmnz.download', +'zorbikala.com', +'zortinah.com', +'zp.zeroredirect1.com', +'zq.zeroredirect1.com', +'zqojpysorkiddiewink.review', +'zr.zeroredirect1.com', +'zs.dhl.de', +'zs.ffshrine.org', +'zs.zeroredirect1.com', +'zs0s5xfe.com', +'zt.1rx.io', +'zt.zeroredirect1.com', +'ztapobanefuller.review', +'ztrack.net', +'ztrack.pw', +'zu.zeroredirect1.com', +'zulu.go2cloud.org', +'zulumob.go2cloud.org', +'zv.zeroredirect1.com', +'zw.zeroredirect1.com', +'zww.ero-advertising.com', +'zx.zeroredirect1.com', +'zxtrace.com', +'zxypenguin.people-group.su', +'zy.zeroredirect1.com', +'zyiztazhfprochain.review', +'zyngawithfriends.com', +'zz.cqcounter.com', +'zz.zeroredirect1.com', +'zzptzdhugavot.review', +'zzz.clickbank.net', +'_thums.ero-advertising.com', +]; \ No newline at end of file diff --git a/docs/tests/index.html b/docs/tests/index.html new file mode 100644 index 0000000000000..b0558c156ca7e --- /dev/null +++ b/docs/tests/index.html @@ -0,0 +1,22 @@ + + + + + +uBlock Origin -- Tests + + +

uBlock Origin tests

+

Some of the pages below are hosted on raw.githack.com in order to ensure some of the secondary resources can be properly loaded (specifically, the WebAssembly modules, as they require to be loaded using same-origin policy).

+ + + diff --git a/docs/tests/procedural-cosmetic-filters.html b/docs/tests/procedural-cosmetic-filters.html new file mode 100644 index 0000000000000..4de93db9ef624 --- /dev/null +++ b/docs/tests/procedural-cosmetic-filters.html @@ -0,0 +1,230 @@ + + + + + +Procedural cosmetic filters + + + +

Procedural cosmetic filters

+

Back +

+

Filters

+
+ +

Tests

+
+ +
+
+ .fail:has(b) +
+ +
+
+ .fail:has(> a > b) +
+ +
+
+ .fail:has(+ a > b) +
+ +
+
+ .fail:has(:scope + a > b) +
+ +
+
+ .fail:has(:is(.pass a > b)) +
+ +
+
+ .fail:not(:has(c)) +
+ +
+ + .fail:has-text(needle) +
+ +
+ + .fail:has-text(/NEEDLE/i) +
+ +
+ + .fail:not(:has-text(haystack)) +
+ +
+
+ .fail:matches-css(position: absolute) +
+ +
+
+ .fail:has(a:matches-css-before(opacity: 0)) +
+ +
+
+ .fail:has(b:matches-css-after(opacity: 0)) +
+ +
+
+ .fail > a > b:nth-ancestor(2) +
+ +
+
+ :xpath(.//b/../..) +
+ + + +
+
+ .pass > a:has(b) + .fail +
+ +
+
+ .pass > a:has(b) + .fail:has(b) +
+ +
+
+ .pass:watch-attr(class) > .fail:has(b.notok) + +
+ +
+
+ .fail:has(+ a) +
+ +
+
+ .fail:has(~ a:has(b)) +
+ +
+
+ .fail:remove() +
+ +
+
+ b:upward(2) +
+ +
+
+ b:upward(.fail) +
+ +
+
+ b:upward(.fail):style(visibility: hidden !important) +
+ +
+ + + + diff --git a/docs/tests/procedural-html-filters.html b/docs/tests/procedural-html-filters.html new file mode 100644 index 0000000000000..23d7f017ef140 --- /dev/null +++ b/docs/tests/procedural-html-filters.html @@ -0,0 +1,169 @@ + + + + + +Procedural HTML filters + + + +

Procedural HTML filters

+

Back +

+

Filters

+
+ +

Tests

+
+ +
+
+ ^#phf #a1 .fail:has(b) +
+ +
+
+ ^#phf #a2 .fail:has(> a > b) +
+ +
+
+ ^#phf #a3 .fail:not(:has(c)) +
+ +
+ + ^#phf #a4 .fail:has-text(needle) +
+ +
+ + ^#phf #a5 .fail:has-text(/NEEDLE/i) +
+ +
+ + ^#phf #a6 .fail:not(:has-text(haystack)) +
+ +
+
+ ^#phf #a7 .fail > a > b:nth-ancestor(2) +
+ +
+
+ ^#phf #a8:xpath(.//b/../..) +
+ + + +
+
+ ^#phf #a10 .pass > a:has(b) + .fail +
+ +
+
+ ^#phf #a11 .pass > a:has(b) + .fail:has(b) +
+ +
+
+ ^#phf #a12 .fail:has(+ a) +
+ +
+
+ ^#phf #a13 .fail:has(~ a:has(b)) +
+ +
+
+ ^#phf #a14 b:upward(2) +
+ +
+
+ ^#phf #a15 b:upward(.fail) +
+ +
+ + + + diff --git a/docs/tests/scriptlet-injection-filters-1.html b/docs/tests/scriptlet-injection-filters-1.html new file mode 100644 index 0000000000000..61368c929dfd1 --- /dev/null +++ b/docs/tests/scriptlet-injection-filters-1.html @@ -0,0 +1,194 @@ + + + + + +Scriptlet injection filters / no-setTimeout-if + + + +

Scriptlet injection filters / no-setTimeout-if

+

Back +

+

Filters

+

The filters below must be tried one by one, not all at the same +time. When you try a filter, ensure the result is what is expected.

+ + +
FilterExpected +
None     +
+ +

Results

+
+ + + + +
+
+ bad, 33 + +
+ +
+
+ bad, 66 + +
+ +
+
+ good, 33 + +
+ +
+
+ good, 66 + +
+ +
+ + + + diff --git a/docs/tests/static-filtering-parser-checklist.txt b/docs/tests/static-filtering-parser-checklist.txt new file mode 100644 index 0000000000000..c77baf2ee3ba5 --- /dev/null +++ b/docs/tests/static-filtering-parser-checklist.txt @@ -0,0 +1,123 @@ +! Title: Static Filtering Parser Checklist +! Homepage: https://github.com/gorhill/uBlock +! Licence: https://github.com/gorhill/uBlock/blob/master/LICENSE.txt +! +! Description: +! To verify that the static filtering parser is properly parsing valid and +! invalid cases, by typically adding the list to uBO, disabling the list, +! and viewing it in uBO's asset viewer. +! +! Feel free to add more entries to more thoroughly validate the static +! filtering parser, submit the changes in your fork of uBO by opening an +! issue at https://github.com/uBlockOrigin/uBlock-issues/issues + + + + +!----------------------- +! Parsing should succeed +!----------------------- + +! valid patterns +a* +*$xhr +|*$xhr +|$xhr +||*$xhr +||$xhr +||*|$xhr + +! valid hosts file entries +:: ab +:: AB +:: ab # comment + +! valid hosts file entries +0.0.0.0 0.0.0.0.example.com +0.0.0.0 localhost.example.com +0.0.0.0 local-host.example.com +0.0.0.0 local.com +0.0.0.0 localhost.com +0.0.0.0 local-host.com + +! valid options +$script,redirect=noop.js +*$redirect=noop.js +*$empty +*$xhr,empty +*$xhr,redirect=empty + +*$csp=default-src 'none' + +*$all,~document +*$all,~popup +*$all,~inline-script +*$all,~inline-font + +! valid domain option values +*$domain=toto.com|toto.*|~toto.com|~toto.*|tôtó.ça|tôtó.*|~tôtó.ça|[ff00::0]|1.1.1.1 + +! valid denyallow option values +*$denyallow=toto.com|tôtó.ça|[ff00::0]|1.1.1.1,domain=toto.com + + + + +!-------------------- +! Parsing should fail +!-------------------- + +! bad patterns +a +| +|| +$ +* +|* +||* +||*| + +! bad hosts file entries +:: a +:: ab/ +:: ab/ # comment +::/ ab +:: ab$ + +! ignored hosts file entries +0.0.0.0 0.0.0.0 +0.0.0.0 local +0.0.0.0 localhost + +! bad regex +/(abc|def/$xhr + +! non-redirectable types +*$beacon,redirect-rule=empty +*$ping,redirect-rule=empty +*$websocket,redirect-rule=empty +*$ghide,redirect=noop.js + +! can't mix csp with other types or redirect directives +*$csp=default-src 'none',empty +*$csp=default-src 'none',redirect=empty +*$redirect=empty,csp=default-src 'none' +*$csp=default-src 'none',xhr +*$csp=default-src 'none',ghide +*$csp=default-src 'none',csp=script-src 'none' + +! https://github.com/gorhill/uBlock/issues/2385#issuecomment-494078763 +*$~document +*$~popup +*$~inline-script +*$~inline-font + +! invalidity of IP addresses is browser-dependent +! invalid domain= option values +*$domain=.toto.com|toto.com.|[ff00::00000]|1.1.1.1111 + +! invalid denyallow= option values +*$denyallow=.toto.com|toto.com.|toto.*|~toto.com|~toto.*|[ff00::00000]|1.1.1.1111,domain=toto.com + +! denyallow= requires a domain= option +*$script,denyallow=toto.com diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000000000..f9bdca1ca9cd2 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,51 @@ +import js from "@eslint/js"; +import globals from "globals"; +import json from "@eslint/json"; + +import { includeIgnoreFile } from "@eslint/compat"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const gitignorePath = path.resolve(__dirname, ".gitignore"); + +export default [ includeIgnoreFile(gitignorePath), { + files: ["**/*.js", "**/*.mjs"], + ...js.configs.recommended, +}, { + files: ["**/*.js", "**/*.mjs"], + languageOptions: { + globals: { + ...globals.browser, + browser: "readonly", + chrome: "readonly", + vAPI: "readonly", + }, + sourceType: "module", + }, + rules: { + eqeqeq: ["warn", "always"], + indent: ["error", 4, { + ignoredNodes: [ + "Program > BlockStatement", + "Program > ExpressionStatement > CallExpression > ArrowFunctionExpression > BlockStatement", + "Program > ExpressionStatement > CallExpression > FunctionExpression > BlockStatement", + "Program > IfStatement > BlockStatement", + "Program > VariableDeclaration > VariableDeclarator > CallExpression > ArrowFunctionExpression > BlockStatement", + "CallExpression > MemberExpression", + "ArrayExpression > *", + "ObjectExpression > *", + ], + }], + "no-control-regex": "off", + "no-empty": "off", + "sort-imports": "error", + "strict": "error", + }, +}, { + files: ["**/*.json"], + ignores: ["package-lock.json"], + language: "json/json", + ...json.configs.recommended, +} ]; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000000..4adeb6246f4d1 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1163 @@ +{ + "name": "uBlock", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "uBlock", + "version": "1.0.0", + "license": "GPLv3", + "devDependencies": { + "@eslint/compat": "^1.2.4", + "@eslint/js": "^9.17.0", + "@eslint/json": "^0.13.1", + "eslint": "^9.34.0", + "eslint-formatter-compact": "^8.40.0", + "globals": "^15.14.0" + }, + "engines": { + "node": ">=22", + "npm": ">=11" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "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": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/compat": { + "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": "^8.40 || 9" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/config-array": { + "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.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "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.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": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "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.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/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.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": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "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": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/momoa": { + "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": { + "node": ">=18" + } + }, + "node_modules/@humanwhocodes/retry": { + "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": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@types/estree": { + "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" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/acorn": { + "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": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "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": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "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.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.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.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", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-formatter-compact": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/eslint-formatter-compact/-/eslint-formatter-compact-8.40.0.tgz", + "integrity": "sha512-cwGUs113TgmTQXecx5kfRjB7m0y2wkDLSadPTE2pK6M/wO4N8PjmUaoWOFNCP9MHgsiZwgqd5bZFnDCnszC56Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-scope": { + "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": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "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": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "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.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "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" + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "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": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "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": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000000000..456b526f2b967 --- /dev/null +++ b/package.json @@ -0,0 +1,32 @@ +{ + "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" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/gorhill/uBlock.git" + }, + "author": "Raymond Hill", + "license": "GPLv3", + "bugs": { + "url": "https://github.com/gorhill/uBlock/issues" + }, + "homepage": "https://github.com/gorhill/uBlock#readme", + "engines": { + "node": ">=22", + "npm": ">=11" + }, + "devDependencies": { + "@eslint/compat": "^1.2.4", + "@eslint/js": "^9.17.0", + "@eslint/json": "^0.13.1", + "eslint": "^9.34.0", + "eslint-formatter-compact": "^8.40.0", + "globals": "^15.14.0" + } +} diff --git a/platform/chromium/img/browsericons/icon19-off.png b/platform/chromium/img/browsericons/icon19-off.png deleted file mode 100644 index 79fb3b823faa1..0000000000000 Binary files a/platform/chromium/img/browsericons/icon19-off.png and /dev/null differ diff --git a/platform/chromium/img/browsericons/icon19.png b/platform/chromium/img/browsericons/icon19.png deleted file mode 100644 index e6d57bdda9a31..0000000000000 Binary files a/platform/chromium/img/browsericons/icon19.png and /dev/null differ diff --git a/platform/chromium/img/browsericons/icon38-off.png b/platform/chromium/img/browsericons/icon38-off.png deleted file mode 100644 index a1b5c00bf32b7..0000000000000 Binary files a/platform/chromium/img/browsericons/icon38-off.png and /dev/null differ diff --git a/platform/chromium/img/browsericons/icon38.png b/platform/chromium/img/browsericons/icon38.png deleted file mode 100644 index 09a57d2ffb6e3..0000000000000 Binary files a/platform/chromium/img/browsericons/icon38.png and /dev/null differ diff --git a/platform/chromium/is-webrtc-supported.html b/platform/chromium/is-webrtc-supported.html index 15c155583b91e..58238b9469250 100644 --- a/platform/chromium/is-webrtc-supported.html +++ b/platform/chromium/is-webrtc-supported.html @@ -1,8 +1,9 @@ + - + diff --git a/platform/chromium/is-webrtc-supported.js b/platform/chromium/is-webrtc-supported.js index 5a3eea1e7f25f..263bb686bf99a 100644 --- a/platform/chromium/is-webrtc-supported.js +++ b/platform/chromium/is-webrtc-supported.js @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin - a comprehensive, efficient content blocker Copyright (C) 2015 Raymond Hill This program is free software: you can redistribute it and/or modify @@ -21,7 +21,7 @@ // https://github.com/gorhill/uBlock/issues/533#issuecomment-164292868 // If WebRTC is supported, there won't be an exception if we -// try to instanciate a peer connection object. +// try to instantiate a peer connection object. // https://github.com/gorhill/uBlock/issues/533#issuecomment-168097594 // Because Chromium leaks WebRTC connections after they have been closed @@ -30,11 +30,9 @@ // collected. (function() { - 'use strict'; - - var pc = null; + let pc = null; try { - var PC = self.RTCPeerConnection || self.webkitRTCPeerConnection; + const PC = self.RTCPeerConnection || self.webkitRTCPeerConnection; if ( PC ) { pc = new PC(null); } diff --git a/platform/chromium/managed_storage.json b/platform/chromium/managed_storage.json deleted file mode 100644 index d3f2c864f9adf..0000000000000 --- a/platform/chromium/managed_storage.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-03/schema#", - "type": "object", - "properties": { - "adminSettings": { - "title": "A valid JSON string compliant with uBO's backup format.", - "description": "All entries present will overwrite local settings.", - "type": "string" - } - } -} diff --git a/platform/chromium/manifest.json b/platform/chromium/manifest.json index 3115064945f97..0b4095a049bee 100644 --- a/platform/chromium/manifest.json +++ b/platform/chromium/manifest.json @@ -1,64 +1,118 @@ { - "manifest_version": 2, - - "name": "uBlock Origin", - "version": "1.9.15.3", - - "default_locale": "en", - "description": "__MSG_extShortDesc__", - "icons": { - "16": "img/icon_16.png", - "128": "img/icon_128.png" + "author": "Raymond Hill & contributors", + "background": { + "page": "background.html" + }, + "browser_action": { + "default_icon": { + "16": "img/icon_16.png", + "32": "img/icon_32.png", + "64": "img/icon_64.png" }, - - "browser_action": { - "default_icon": { - "19": "img/browsericons/icon19.png", - "38": "img/browsericons/icon38.png" - }, - "default_title": "uBlock Origin", - "default_popup": "popup.html" + "default_title": "uBlock Origin", + "default_popup": "popup-fenix.html" + }, + "commands": { + "launch-element-zapper": { + "description": "__MSG_popupTipZapper__" }, - - "author": "All uBlock Origin contributors", - "background": { - "page": "background.html" + "launch-element-picker": { + "description": "__MSG_popupTipPicker__" }, - "content_scripts": [ - { - "matches": ["http://*/*", "https://*/*"], - "js": ["js/vapi-client.js", "js/contentscript.js"], - "run_at": "document_start", - "all_frames": true - }, - { - "matches": ["http://*/*", "https://*/*"], - "js": ["js/scriptlets/subscriber.js"], - "run_at": "document_idle", - "all_frames": false - } - ], - "incognito": "split", - "minimum_chrome_version": "26.0", - "optional_permissions": [ "file:///*" ], - "options_page": "dashboard.html", - "options_ui": { - "page": "options_ui.html" + "launch-logger": { + "description": "__MSG_popupTipLog__" }, - "permissions": [ - "contextMenus", - "privacy", - "storage", - "tabs", - "unlimitedStorage", - "webNavigation", - "webRequest", - "webRequestBlocking", + "open-dashboard": { + "description": "__MSG_popupTipDashboard__" + }, + "relax-blocking-mode": { + "description": "__MSG_relaxBlockingMode__" + }, + "toggle-cosmetic-filtering": { + "description": "__MSG_toggleCosmeticFiltering__" + }, + "toggle-javascript": { + "description": "__MSG_toggleJavascript__" + } + }, + "content_scripts": [ + { + "matches": [ "http://*/*", "https://*/*" - ], - "short_name": "uBlock₀", - "storage": { - "managed_schema": "managed_storage.json" + ], + "js": [ + "/js/vapi.js", + "/js/vapi-client.js", + "/js/contentscript.js" + ], + "all_frames": true, + "match_about_blank": true, + "run_at": "document_start" + }, + { + "matches": [ + "https://easylist.to/*", + "https://*.fanboy.co.nz/*", + "https://filterlists.com/*", + "https://forums.lanik.us/*", + "https://github.com/*", + "https://*.github.io/*" + ], + "js": [ + "/js/scriptlets/subscriber.js" + ], + "run_at": "document_idle", + "all_frames": false + }, + { + "matches": [ + "https://github.com/uBlockOrigin/*", + "https://ublockorigin.github.io/*", + "https://*.reddit.com/r/uBlockOrigin/*" + ], + "js": [ + "/js/scriptlets/updater.js" + ], + "run_at": "document_idle", + "all_frames": false } + ], + "content_security_policy": "script-src 'self'; object-src 'self'", + "default_locale": "en", + "description": "__MSG_extShortDesc__", + "icons": { + "16": "img/icon_16.png", + "32": "img/icon_32.png", + "64": "img/icon_64.png", + "128": "img/icon_128.png" + }, + "incognito": "split", + "manifest_version": 2, + "minimum_chrome_version": "93.0", + "name": "uBlock Origin", + "options_ui": { + "page": "dashboard.html", + "open_in_tab": true + }, + "permissions": [ + "alarms", + "contextMenus", + "privacy", + "storage", + "tabs", + "unlimitedStorage", + "webNavigation", + "webRequest", + "webRequestBlocking", + "" + ], + "short_name": "uBlock₀", + "storage": { + "managed_schema": "managed_storage.json" + }, + "version": "1.15.11.0", + "web_accessible_resources": [ + "/web_accessible_resources/*" + ] } diff --git a/platform/chromium/options_ui.html b/platform/chromium/options_ui.html deleted file mode 100644 index d94c001efb4b5..0000000000000 --- a/platform/chromium/options_ui.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - -Dashboard - - diff --git a/platform/chromium/options_ui.js b/platform/chromium/options_ui.js deleted file mode 100644 index 1e7f552b12bd9..0000000000000 --- a/platform/chromium/options_ui.js +++ /dev/null @@ -1,47 +0,0 @@ -/******************************************************************************* - - µBlock - a browser extension to block requests. - Copyright (C) 2015 The µBlock authors - - 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 -*/ - -/******************************************************************************/ - -(function() { - -/******************************************************************************/ - -'use strict'; - -vAPI.messaging.send( - 'default', - { - what: 'gotoURL', - details: { - url: 'dashboard.html', - select: true, - index: -1 - } - } -); -window.close(); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff --git a/platform/chromium/polyfill.js b/platform/chromium/polyfill.js deleted file mode 100644 index ca8d82cd28b80..0000000000000 --- a/platform/chromium/polyfill.js +++ /dev/null @@ -1,214 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2014-2016 The uBlock Origin authors - - 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 -*/ - -// For background page or non-background pages - -'use strict'; - -/******************************************************************************/ -/******************************************************************************/ - -// https://github.com/gorhill/uBlock/issues/1067 -// https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith -// Firefox 17/Chromium 41 supports `startsWith`. - -if ( String.prototype.startsWith instanceof Function === false ) { - String.prototype.startsWith = function(needle, pos) { - if ( typeof pos !== 'number' ) { - pos = 0; - } - return this.lastIndexOf(needle, pos) === pos; - }; -} - -/******************************************************************************/ - -// https://github.com/gorhill/uBlock/issues/1067 -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith -// Firefox 17/Chromium 41 supports `endsWith`. - -if ( String.prototype.endsWith instanceof Function === false ) { - String.prototype.endsWith = function(needle, pos) { - if ( typeof pos !== 'number' ) { - pos = this.length; - } - pos -= needle.length; - return this.indexOf(needle, pos) === pos; - }; -} - -/******************************************************************************/ - -// https://github.com/gorhill/uBlock/issues/1070 -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set#Browser_compatibility -// This polyfill is designed to fulfill *only* what uBlock Origin needs -- this -// is not an accurate API of the real Set() type. - -if ( self.Set instanceof Function === false ) { - self.Set = function(iter) { - this.clear(); - if ( Array.isArray(iter) ) { - for ( var i = 0, n = iter.length; i < n; i++ ) { - this.add(iter[i]); - } - return; - } - }; - - self.Set.polyfill = true; - - self.Set.prototype.clear = function() { - this._set = Object.create(null); - this.size = 0; - // Iterator stuff - this._values = undefined; - this._i = undefined; - this.value = undefined; - this.done = true; - }; - - self.Set.prototype.add = function(k) { - if ( this._set[k] === undefined ) { - this._set[k] = true; - this.size += 1; - } - return this; - }; - - self.Set.prototype.delete = function(k) { - if ( this._set[k] !== undefined ) { - delete this._set[k]; - this.size -= 1; - return true; - } - return false; - }; - - self.Set.prototype.has = function(k) { - return this._set[k] !== undefined; - }; - - self.Set.prototype.next = function() { - if ( this._i < this.size ) { - this.value = this._values[this._i++]; - } else { - this._values = undefined; - this.value = undefined; - this.done = true; - } - return this; - }; - - self.Set.prototype.values = function() { - this._values = Object.keys(this._set); - this._i = 0; - this.value = undefined; - this.done = false; - return this; - }; -} - -/******************************************************************************/ - -// https://github.com/gorhill/uBlock/issues/1070 -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set#Browser_compatibility -// This polyfill is designed to fulfill *only* what uBlock Origin needs -- this -// is not an accurate API of the real Map() type. - -if ( self.Map instanceof Function === false ) { - self.Map = function(iter) { - this.clear(); - if ( Array.isArray(iter) ) { - for ( var i = 0, n = iter.length, entry; i < n; i++ ) { - entry = iter[i]; - this.set(entry[0], entry[1]); - } - return; - } - }; - - self.Map.polyfill = true; - - self.Map.prototype.clear = function() { - this._map = Object.create(null); - this.size = 0; - // Iterator stuff - this._keys = undefined; - this._i = undefined; - this.value = undefined; - this.done = true; - }; - - self.Map.prototype.delete = function(k) { - if ( this._map[k] !== undefined ) { - delete this._map[k]; - this.size -= 1; - return true; - } - return false; - }; - - self.Map.prototype.entries = function() { - this._keys = Object.keys(this._map); - this._i = 0; - this.value = [ undefined, undefined ]; - this.done = false; - return this; - }; - - self.Map.prototype.get = function(k) { - return this._map[k]; - }; - - self.Map.prototype.has = function(k) { - return this._map[k] !== undefined; - }; - - self.Map.prototype.next = function() { - if ( this._i < this.size ) { - var key = this._keys[this._i++]; - this.value[0] = key; - this.value[1] = this._map[key]; - } else { - this._keys = undefined; - this.value = undefined; - this.done = true; - } - return this; - }; - - self.Map.prototype.set = function(k, v) { - if ( v !== undefined ) { - if ( this._map[k] === undefined ) { - this.size += 1; - } - this._map[k] = v; - } else { - if ( this._map[k] !== undefined ) { - this.size -= 1; - } - delete this._map[k]; - } - return this; - }; -} - -/******************************************************************************/ diff --git a/platform/chromium/vapi-background-ext.js b/platform/chromium/vapi-background-ext.js new file mode 100644 index 0000000000000..193b7fe6fa0fc --- /dev/null +++ b/platform/chromium/vapi-background-ext.js @@ -0,0 +1,251 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2017-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 +*/ + +/******************************************************************************/ + +// https://github.com/uBlockOrigin/uBlock-issues/issues/1659 +// Chromium fails to dispatch onCreatedNavigationTarget() events sometimes, +// so we synthetize these missing events when this happens. +// https://github.com/uBlockOrigin/uAssets/issues/10323 +// Also mind whether the new tab is launched from an external application. +// https://github.com/uBlockOrigin/uBlock-issues/issues/2227 +// Revert commit related to issue above. + +vAPI.Tabs = class extends vAPI.Tabs { + constructor() { + super(); + this.tabIds = new Set(); + browser.tabs.onCreated.addListener(tab => { + this.onCreatedHandler(tab); + }); + } + + onCreatedHandler(tab) { + if ( typeof tab.openerTabId === 'number' ) { return; } + if ( tab.index !== 0 ) { return; } + if ( tab.url !== '' ) { return; } + this.tabIds.add(tab.id); + } + + onCreatedNavigationTargetHandler(details) { + this.tabIds.delete(details.tabId); + super.onCreatedNavigationTargetHandler(details); + } + + onCommittedHandler(details) { + if ( details.frameId === 0 ) { + this.synthesizeNavigationTargetEvent(details); + } + super.onCommittedHandler(details); + } + + onRemovedHandler(tabId, details) { + this.tabIds.delete(tabId); + super.onRemovedHandler(tabId, details); + } + + synthesizeNavigationTargetEvent(details) { + if ( this.tabIds.has(details.tabId) === false ) { return; } + this.tabIds.delete(details.tabId); + const isClientRedirect = + Array.isArray(details.transitionQualifiers) && + details.transitionQualifiers.includes('client_redirect'); + if ( isClientRedirect === false ) { return; } + this.onCreatedNavigationTargetHandler({ + tabId: details.tabId, + sourceTabId: details.tabId, + sourceFrameId: 0, + url: details.url, + }); + } +}; + +/******************************************************************************/ + +{ + const extToTypeMap = new Map([ + ['eot','font'],['otf','font'],['svg','font'],['ttf','font'],['woff','font'],['woff2','font'], + ['mp3','media'],['mp4','media'],['webm','media'], + ['gif','image'],['ico','image'],['jpeg','image'],['jpg','image'],['png','image'],['webp','image'] + ]); + + const parsedURL = new URL('https://www.example.org/'); + + // Extend base class to normalize as per platform + + vAPI.Net = class extends vAPI.Net { + normalizeDetails(details) { + // Chromium 63+ supports the `initiator` property, which contains + // the URL of the origin from which the network request was made + if ( details.initiator && details.initiator !== 'null' ) { + details.documentUrl = details.initiator; + } + const type = details.type; + if ( type === 'imageset' ) { + details.type = 'image'; + return; + } + if ( type !== 'other' ) { return; } + // Try to map known "extension" part of URL to request type + if ( details.responseHeaders === undefined ) { + parsedURL.href = details.url; + const path = parsedURL.pathname; + const pos = path.indexOf('.', path.length - 6); + if ( pos !== -1 ) { + details.type = extToTypeMap.get(path.slice(pos + 1)) || type; + } + return; + } + // Try to extract type from response headers + const ctype = this.headerValue(details.responseHeaders, 'content-type'); + if ( ctype.startsWith('font/') ) { + details.type = 'font'; + } else if ( ctype.startsWith('image/') ) { + details.type = 'image'; + } else if ( ctype.startsWith('audio/') || ctype.startsWith('video/') ) { + details.type = 'media'; + } + } + + // https://www.reddit.com/r/uBlockOrigin/comments/9vcrk3/ + // Some types can be mapped from 'other', thus include 'other' if and + // only if the caller is interested in at least one of those types + denormalizeTypes(types) { + if ( types.length === 0 ) { + return Array.from(this.validTypes); + } + const out = new Set(); + for ( const type of types ) { + if ( this.validTypes.has(type) ) { + out.add(type); + } + } + if ( out.has('other') === false ) { + for ( const type of extToTypeMap.values() ) { + if ( out.has(type) ) { + out.add('other'); + break; + } + } + } + return Array.from(out); + } + + // https://github.com/uBlockOrigin/uBlock-issues/issues/2063 + // Do not interfere with root document + suspendOneRequest(details) { + this.onBeforeSuspendableRequest(details); + if ( details.type === 'main_frame' ) { return; } + return { cancel: true }; + } + + unsuspendAllRequests(discard = false) { + if ( discard === true ) { return; } + const toReload = []; + for ( const tabId of this.unprocessedTabs.keys() ) { + toReload.push(tabId); + } + this.removeUnprocessedRequest(); + for ( const tabId of toReload ) { + vAPI.tabs.reload(tabId); + } + } + }; +} + +/******************************************************************************/ + +// https://github.com/uBlockOrigin/uBlock-issues/issues/548 +// Use `X-DNS-Prefetch-Control` to workaround Chromium's disregard of the +// setting "Predict network actions to improve page load performance". + +vAPI.prefetching = (( ) => { + let listening = false; + + const onHeadersReceived = function(details) { + details.responseHeaders.push({ + name: 'X-DNS-Prefetch-Control', + value: 'off' + }); + return { responseHeaders: details.responseHeaders }; + }; + + return state => { + const wr = chrome.webRequest; + if ( state && listening ) { + wr.onHeadersReceived.removeListener(onHeadersReceived); + listening = false; + } else if ( !state && !listening ) { + wr.onHeadersReceived.addListener( + onHeadersReceived, + { + urls: [ 'http://*/*', 'https://*/*' ], + types: [ 'main_frame', 'sub_frame' ] + }, + [ 'blocking', 'responseHeaders' ] + ); + listening = true; + } + }; +})(); + +/******************************************************************************/ + +vAPI.scriptletsInjector = (( ) => { + const parts = [ + '(', + function(details) { + if ( self.uBO_scriptletsInjected !== undefined ) { return; } + const doc = document; + const { location } = doc; + if ( location === null ) { return; } + const { hostname } = location; + if ( hostname !== '' && details.hostname !== hostname ) { return; } + let script; + try { + script = doc.createElement('script'); + script.appendChild(doc.createTextNode(details.scriptlets)); + (doc.head || doc.documentElement).appendChild(script); + self.uBO_scriptletsInjected = details.filters; + } catch { + } + if ( script ) { + script.remove(); + script.textContent = ''; + } + return 0; + }.toString(), + ')(', + 'json-slot', + ');', + ]; + const jsonSlot = parts.indexOf('json-slot'); + return (hostname, details) => { + parts[jsonSlot] = JSON.stringify({ + hostname, + scriptlets: details.mainWorld, + filters: details.filters, + }); + return parts.join(''); + }; +})(); + +/******************************************************************************/ diff --git a/platform/chromium/vapi-background.js b/platform/chromium/vapi-background.js deleted file mode 100644 index 5e95622d6cb74..0000000000000 --- a/platform/chromium/vapi-background.js +++ /dev/null @@ -1,1424 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2014-2016 The uBlock Origin authors - - 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 -*/ - -// For background page - -/******************************************************************************/ - -(function() { - -'use strict'; - -/******************************************************************************/ - -var vAPI = self.vAPI = self.vAPI || {}; - -var chrome = self.chrome; -var manifest = chrome.runtime.getManifest(); - -vAPI.chrome = true; -vAPI.cantWebsocket = true; - -var noopFunc = function(){}; - -/******************************************************************************/ - -vAPI.app = { - name: manifest.name, - version: manifest.version -}; - -/******************************************************************************/ - -vAPI.app.restart = function() { - chrome.runtime.reload(); -}; - -/******************************************************************************/ -/******************************************************************************/ - -// chrome.storage.local.get(null, function(bin){ console.debug('%o', bin); }); - -vAPI.storage = chrome.storage.local; - -/******************************************************************************/ -/******************************************************************************/ - -// https://github.com/gorhill/uMatrix/issues/234 -// https://developer.chrome.com/extensions/privacy#property-network - -// 2015-08-12: Wrapped Chrome API in try-catch statements. I had a fluke -// event in which it appeared Chrome 46 decided to restart uBlock (for -// unknown reasons) and again for unknown reasons the browser acted as if -// uBlock did not declare the `privacy` permission in its manifest, putting -// uBlock in a bad, non-functional state -- because call to `chrome.privacy` -// API threw an exception. - -// https://github.com/gorhill/uBlock/issues/2048 -// Do not mess up with existing settings if not assigning them stricter -// values. - -vAPI.browserSettings = { - webRTCSupported: undefined, - - // https://github.com/gorhill/uBlock/issues/875 - // Must not leave `lastError` unchecked. - noopCallback: function() { - void chrome.runtime.lastError; - }, - - // Calling with `true` means IP address leak is not prevented. - // https://github.com/gorhill/uBlock/issues/533 - // We must first check wether this Chromium-based browser was compiled - // with WebRTC support. To do this, we use an iframe, this way the - // empty RTCPeerConnection object we create to test for support will - // be properly garbage collected. This prevents issues such as - // a computer unable to enter into sleep mode, as reported in the - // Chrome store: - // https://github.com/gorhill/uBlock/issues/533#issuecomment-167931681 - setWebrtcIPAddress: function(setting) { - // We don't know yet whether this browser supports WebRTC: find out. - if ( this.webRTCSupported === undefined ) { - this.webRTCSupported = { setting: setting }; - var iframe = document.createElement('iframe'); - var me = this; - var messageHandler = function(ev) { - if ( ev.origin !== self.location.origin ) { - return; - } - window.removeEventListener('message', messageHandler); - var setting = me.webRTCSupported.setting; - me.webRTCSupported = ev.data === 'webRTCSupported'; - me.setWebrtcIPAddress(setting); - iframe.parentNode.removeChild(iframe); - iframe = null; - }; - window.addEventListener('message', messageHandler); - iframe.src = 'is-webrtc-supported.html'; - document.body.appendChild(iframe); - return; - } - - // We are waiting for a response from our iframe. This makes the code - // safe to re-entrancy. - if ( typeof this.webRTCSupported === 'object' ) { - this.webRTCSupported.setting = setting; - return; - } - - // https://github.com/gorhill/uBlock/issues/533 - // WebRTC not supported: `webRTCMultipleRoutesEnabled` can NOT be - // safely accessed. Accessing the property will cause full browser - // crash. - if ( this.webRTCSupported !== true ) { - return; - } - - var cp = chrome.privacy, - cpn = cp.network; - - // Older version of Chromium do not support this setting, and is - // marked as "deprecated" since Chromium 48. - if ( typeof cpn.webRTCMultipleRoutesEnabled === 'object' ) { - try { - if ( setting ) { - cpn.webRTCMultipleRoutesEnabled.clear({ - scope: 'regular' - }, this.noopCallback); - } else { - cpn.webRTCMultipleRoutesEnabled.set({ - value: false, - scope: 'regular' - }, this.noopCallback); - } - } catch(ex) { - console.error(ex); - } - } - - // This setting became available in Chromium 48. - if ( typeof cpn.webRTCIPHandlingPolicy === 'object' ) { - try { - if ( setting ) { - cpn.webRTCIPHandlingPolicy.clear({ - scope: 'regular' - }, this.noopCallback); - } else { - // Respect current stricter setting if any. - cpn.webRTCIPHandlingPolicy.get({}, function(details) { - var value = details.value === 'disable_non_proxied_udp' ? - 'disable_non_proxied_udp' : - 'default_public_interface_only'; - cpn.webRTCIPHandlingPolicy.set({ - value: value, - scope: 'regular' - }, this.noopCallback); - }.bind(this)); - } - } catch(ex) { - console.error(ex); - } - } - }, - - set: function(details) { - for ( var setting in details ) { - if ( details.hasOwnProperty(setting) === false ) { - continue; - } - switch ( setting ) { - case 'prefetching': - try { - if ( !!details[setting] ) { - chrome.privacy.network.networkPredictionEnabled.clear({ - scope: 'regular' - }, this.noopCallback); - } else { - chrome.privacy.network.networkPredictionEnabled.set({ - value: false, - scope: 'regular' - }, this.noopCallback); - } - } catch(ex) { - console.error(ex); - } - break; - - case 'hyperlinkAuditing': - try { - if ( !!details[setting] ) { - chrome.privacy.websites.hyperlinkAuditingEnabled.clear({ - scope: 'regular' - }, this.noopCallback); - } else { - chrome.privacy.websites.hyperlinkAuditingEnabled.set({ - value: false, - scope: 'regular' - }, this.noopCallback); - } - } catch(ex) { - console.error(ex); - } - break; - - case 'webrtcIPAddress': - this.setWebrtcIPAddress(!!details[setting]); - break; - - default: - break; - } - } - } -}; - -/******************************************************************************/ -/******************************************************************************/ - -vAPI.tabs = {}; - -/******************************************************************************/ - -vAPI.isBehindTheSceneTabId = function(tabId) { - return tabId.toString() === '-1'; -}; - -vAPI.noTabId = '-1'; - -/******************************************************************************/ - -var toChromiumTabId = function(tabId) { - if ( typeof tabId === 'string' ) { - tabId = parseInt(tabId, 10); - } - if ( typeof tabId !== 'number' || isNaN(tabId) || tabId === -1 ) { - return 0; - } - return tabId; -}; - -/******************************************************************************/ - -vAPI.tabs.registerListeners = function() { - var onNavigationClient = this.onNavigation || noopFunc; - var onUpdatedClient = this.onUpdated || noopFunc; - - // https://developer.chrome.com/extensions/webNavigation - // [onCreatedNavigationTarget ->] - // onBeforeNavigate -> - // onCommitted -> - // onDOMContentLoaded -> - // onCompleted - - // The chrome.webRequest.onBeforeRequest() won't be called for everything - // else than `http`/`https`. Thus, in such case, we will bind the tab as - // early as possible in order to increase the likelihood of a context - // properly setup if network requests are fired from within the tab. - // Example: Chromium + case #6 at - // http://raymondhill.net/ublock/popup.html - var reGoodForWebRequestAPI = /^https?:\/\//; - - // https://forums.lanik.us/viewtopic.php?f=62&t=32826 - // Chromium-based browsers: sanitize target URL. I've seen data: URI with - // newline characters in standard fields, possibly as a way of evading - // filters. As per spec, there should be no whitespaces in a data: URI's - // standard fields. - var sanitizeURL = function(url) { - if ( url.startsWith('data:') === false ) { return url; } - var pos = url.indexOf(','); - if ( pos === -1 ) { return url; } - var s = url.slice(0, pos); - if ( s.search(/\s/) === -1 ) { return url; } - return s.replace(/\s+/, '') + url.slice(pos); - }; - - var onCreatedNavigationTarget = function(details) { - //console.debug('onCreatedNavigationTarget: popup candidate tab id %d = "%s"', details.tabId, details.url); - if ( reGoodForWebRequestAPI.test(details.url) === false ) { - details.frameId = 0; - details.url = sanitizeURL(details.url); - onNavigationClient(details); - } - if ( typeof vAPI.tabs.onPopupCreated === 'function' ) { - vAPI.tabs.onPopupCreated(details.tabId.toString(), details.sourceTabId.toString()); - } - }; - - var onBeforeNavigate = function(details) { - if ( details.frameId !== 0 ) { - return; - } - }; - - var onCommitted = function(details) { - if ( details.frameId !== 0 ) { - return; - } - details.url = sanitizeURL(details.url); - onNavigationClient(details); - }; - - var onActivated = function(details) { - vAPI.contextMenu.onMustUpdate(details.tabId); - }; - - var onUpdated = function(tabId, changeInfo, tab) { - if ( changeInfo.url ) { - changeInfo.url = sanitizeURL(changeInfo.url); - } - onUpdatedClient(tabId, changeInfo, tab); - }; - - chrome.webNavigation.onBeforeNavigate.addListener(onBeforeNavigate); - chrome.webNavigation.onCommitted.addListener(onCommitted); - chrome.webNavigation.onCreatedNavigationTarget.addListener(onCreatedNavigationTarget); - chrome.tabs.onActivated.addListener(onActivated); - chrome.tabs.onUpdated.addListener(onUpdated); - - if ( typeof this.onClosed === 'function' ) { - chrome.tabs.onRemoved.addListener(this.onClosed); - } - -}; - -/******************************************************************************/ - -vAPI.tabs.get = function(tabId, callback) { - var onTabReady = function(tab) { - // https://code.google.com/p/chromium/issues/detail?id=410868#c8 - if ( chrome.runtime.lastError ) { - /* noop */ - } - // Caller must be prepared to deal with nil tab value - callback(tab); - }; - - if ( tabId !== null ) { - tabId = toChromiumTabId(tabId); - if ( tabId === 0 ) { - onTabReady(null); - } else { - chrome.tabs.get(tabId, onTabReady); - } - return; - } - - var onTabReceived = function(tabs) { - // https://code.google.com/p/chromium/issues/detail?id=410868#c8 - void chrome.runtime.lastError; - callback(tabs[0]); - }; - chrome.tabs.query({ active: true, currentWindow: true }, onTabReceived); -}; - -/******************************************************************************/ - -// properties of the details object: -// url: 'URL', // the address that will be opened -// tabId: 1, // the tab is used if set, instead of creating a new one -// index: -1, // undefined: end of the list, -1: following tab, or after index -// active: false, // opens the tab in background - true and undefined: foreground -// select: true, // if a tab is already opened with that url, then select it instead of opening a new one -// popup: true // open in a new window - -vAPI.tabs.open = function(details) { - var targetURL = details.url; - if ( typeof targetURL !== 'string' || targetURL === '' ) { - return null; - } - - // extension pages - if ( /^[\w-]{2,}:/.test(targetURL) !== true ) { - targetURL = vAPI.getURL(targetURL); - } - - // dealing with Chrome's asynchronous API - var wrapper = function() { - if ( details.active === undefined ) { - details.active = true; - } - - var subWrapper = function() { - var _details = { - url: targetURL, - active: !!details.active - }; - - // Opening a tab from incognito window won't focus the window - // in which the tab was opened - var focusWindow = function(tab) { - if ( tab.active ) { - chrome.windows.update(tab.windowId, { focused: true }); - } - }; - - if ( !details.tabId ) { - if ( details.index !== undefined ) { - _details.index = details.index; - } - - chrome.tabs.create(_details, focusWindow); - return; - } - - // update doesn't accept index, must use move - chrome.tabs.update(toChromiumTabId(details.tabId), _details, function(tab) { - // if the tab doesn't exist - if ( vAPI.lastError() ) { - chrome.tabs.create(_details, focusWindow); - } else if ( details.index !== undefined ) { - chrome.tabs.move(tab.id, {index: details.index}); - } - }); - }; - - // Open in a standalone window - if ( details.popup === true ) { - chrome.windows.create({ - url: details.url, - focused: details.active, - type: 'popup' - }); - return; - } - - if ( details.index !== -1 ) { - subWrapper(); - return; - } - - vAPI.tabs.get(null, function(tab) { - if ( tab ) { - details.index = tab.index + 1; - } else { - delete details.index; - } - - subWrapper(); - }); - }; - - if ( !details.select ) { - wrapper(); - return; - } - - // https://developer.chrome.com/extensions/tabs#method-query - // "Note that fragment identifiers are not matched." - // It's a lie, fragment identifiers ARE matched. So we need to remove the - // fragment. - var pos = targetURL.indexOf('#'); - var targetURLWithoutHash = pos === -1 ? targetURL : targetURL.slice(0, pos); - - chrome.tabs.query({ url: targetURLWithoutHash }, function(tabs) { - var tab = tabs[0]; - if ( !tab ) { - wrapper(); - return; - } - - var _details = { - active: true, - url: undefined - }; - if ( targetURL !== tab.url ) { - _details.url = targetURL; - } - chrome.tabs.update(tab.id, _details, function(tab) { - chrome.windows.update(tab.windowId, { focused: true }); - }); - }); -}; - -/******************************************************************************/ - -// Replace the URL of a tab. Noop if the tab does not exist. - -vAPI.tabs.replace = function(tabId, url) { - tabId = toChromiumTabId(tabId); - if ( tabId === 0 ) { - return; - } - - var targetURL = url; - - // extension pages - if ( /^[\w-]{2,}:/.test(targetURL) !== true ) { - targetURL = vAPI.getURL(targetURL); - } - - chrome.tabs.update(tabId, { url: targetURL }, function() { - // https://code.google.com/p/chromium/issues/detail?id=410868#c8 - if ( chrome.runtime.lastError ) { - /* noop */ - } - }); -}; - -/******************************************************************************/ - -vAPI.tabs.remove = function(tabId) { - tabId = toChromiumTabId(tabId); - if ( tabId === 0 ) { - return; - } - - var onTabRemoved = function() { - // https://code.google.com/p/chromium/issues/detail?id=410868#c8 - if ( chrome.runtime.lastError ) { - /* noop */ - } - }; - - chrome.tabs.remove(tabId, onTabRemoved); -}; - -/******************************************************************************/ - -vAPI.tabs.reload = function(tabId /*, flags*/) { - tabId = toChromiumTabId(tabId); - if ( tabId === 0 ) { - return; - } - - var onReloaded = function() { - // https://code.google.com/p/chromium/issues/detail?id=410868#c8 - if ( chrome.runtime.lastError ) { - /* noop */ - } - }; - - chrome.tabs.reload(tabId, onReloaded); -}; - -/******************************************************************************/ - -// Select a specific tab. - -vAPI.tabs.select = function(tabId) { - tabId = toChromiumTabId(tabId); - if ( tabId === 0 ) { - return; - } - - chrome.tabs.update(tabId, { active: true }, function(tab) { - if ( chrome.runtime.lastError ) { - /* noop */ - } - if ( !tab ) { - return; - } - chrome.windows.update(tab.windowId, { focused: true }); - }); -}; - -/******************************************************************************/ - -vAPI.tabs.injectScript = function(tabId, details, callback) { - var onScriptExecuted = function() { - // https://code.google.com/p/chromium/issues/detail?id=410868#c8 - if ( chrome.runtime.lastError ) { - /* noop */ - } - if ( typeof callback === 'function' ) { - callback(); - } - }; - if ( tabId ) { - chrome.tabs.executeScript(toChromiumTabId(tabId), details, onScriptExecuted); - } else { - chrome.tabs.executeScript(details, onScriptExecuted); - } -}; - -/******************************************************************************/ -/******************************************************************************/ - -// Must read: https://code.google.com/p/chromium/issues/detail?id=410868#c8 - -// https://github.com/chrisaljoudi/uBlock/issues/19 -// https://github.com/chrisaljoudi/uBlock/issues/207 -// Since we may be called asynchronously, the tab id may not exist -// anymore, so this ensures it does still exist. - -vAPI.setIcon = function(tabId, iconStatus, badge) { - tabId = toChromiumTabId(tabId); - if ( tabId === 0 ) { - return; - } - - var onIconReady = function() { - if ( vAPI.lastError() ) { - return; - } - chrome.browserAction.setBadgeText({ tabId: tabId, text: badge }); - if ( badge !== '' ) { - chrome.browserAction.setBadgeBackgroundColor({ - tabId: tabId, - color: '#666' - }); - } - }; - - var iconPaths = iconStatus === 'on' ? - { '19': 'img/browsericons/icon19.png', '38': 'img/browsericons/icon38.png' } : - { '19': 'img/browsericons/icon19-off.png', '38': 'img/browsericons/icon38-off.png' }; - - chrome.browserAction.setIcon({ tabId: tabId, path: iconPaths }, onIconReady); - vAPI.contextMenu.onMustUpdate(tabId); -}; - -/******************************************************************************/ -/******************************************************************************/ - -vAPI.messaging = { - ports: {}, - listeners: {}, - defaultHandler: null, - NOOPFUNC: noopFunc, - UNHANDLED: 'vAPI.messaging.notHandled' -}; - -/******************************************************************************/ - -vAPI.messaging.listen = function(listenerName, callback) { - this.listeners[listenerName] = callback; -}; - -/******************************************************************************/ - -vAPI.messaging.onPortMessage = (function() { - var messaging = vAPI.messaging; - var toAuxPending = {}; - - // Use a wrapper to avoid closure and to allow reuse. - var CallbackWrapper = function(port, request, timeout) { - this.callback = this.proxy.bind(this); // bind once - this.init(port, request, timeout); - }; - - CallbackWrapper.prototype.init = function(port, request, timeout) { - this.port = port; - this.request = request; - this.timerId = timeout !== undefined ? - vAPI.setTimeout(this.callback, timeout) : - null; - return this; - }; - - CallbackWrapper.prototype.proxy = function(response) { - if ( this.timerId !== null ) { - clearTimeout(this.timerId); - delete toAuxPending[this.timerId]; - this.timerId = null; - } - // https://github.com/chrisaljoudi/uBlock/issues/383 - if ( messaging.ports.hasOwnProperty(this.port.name) ) { - this.port.postMessage({ - auxProcessId: this.request.auxProcessId, - channelName: this.request.channelName, - msg: response !== undefined ? response : null - }); - } - // Mark for reuse - this.port = this.request = null; - callbackWrapperJunkyard.push(this); - }; - - var callbackWrapperJunkyard = []; - - var callbackWrapperFactory = function(port, request, timeout) { - var wrapper = callbackWrapperJunkyard.pop(); - if ( wrapper ) { - return wrapper.init(port, request, timeout); - } - return new CallbackWrapper(port, request, timeout); - }; - - var toAux = function(details, portFrom) { - var port, portTo; - var chromiumTabId = toChromiumTabId(details.toTabId); - - // TODO: This could be an issue with a lot of tabs: easy to address - // with a port name to tab id map. - for ( var portName in messaging.ports ) { - if ( messaging.ports.hasOwnProperty(portName) === false ) { - continue; - } - // When sending to an auxiliary process, the target is always the - // port associated with the root frame. - port = messaging.ports[portName]; - if ( port.sender.frameId === 0 && port.sender.tab.id === chromiumTabId ) { - portTo = port; - break; - } - } - - var wrapper; - if ( details.auxProcessId !== undefined ) { - wrapper = callbackWrapperFactory(portFrom, details, 1023); - } - - // Destination not found: - if ( portTo === undefined ) { - if ( wrapper !== undefined ) { - wrapper.callback(); - } - return; - } - - // As per HTML5, timer id is always an integer, thus suitable to be - // used as a key, and which value is safe to use across process - // boundaries. - if ( wrapper !== undefined ) { - toAuxPending[wrapper.timerId] = wrapper; - } - - portTo.postMessage({ - mainProcessId: wrapper && wrapper.timerId, - channelName: details.toChannel, - msg: details.msg - }); - }; - - var toAuxResponse = function(details) { - var mainProcessId = details.mainProcessId; - if ( mainProcessId === undefined ) { - return; - } - if ( toAuxPending.hasOwnProperty(mainProcessId) === false ) { - return; - } - var wrapper = toAuxPending[mainProcessId]; - delete toAuxPending[mainProcessId]; - wrapper.callback(details.msg); - }; - - return function(request, port) { - // Auxiliary process to auxiliary process - if ( request.toTabId !== undefined ) { - toAux(request, port); - return; - } - - // Auxiliary process to auxiliary process: response - if ( request.mainProcessId !== undefined ) { - toAuxResponse(request); - return; - } - - // Auxiliary process to main process: prepare response - var callback = messaging.NOOPFUNC; - if ( request.auxProcessId !== undefined ) { - callback = callbackWrapperFactory(port, request).callback; - } - - // Auxiliary process to main process: specific handler - var r = messaging.UNHANDLED; - var listener = messaging.listeners[request.channelName]; - if ( typeof listener === 'function' ) { - r = listener(request.msg, port.sender, callback); - } - if ( r !== messaging.UNHANDLED ) { - return; - } - - // Auxiliary process to main process: default handler - r = messaging.defaultHandler(request.msg, port.sender, callback); - if ( r !== messaging.UNHANDLED ) { - return; - } - - // Auxiliary process to main process: no handler - console.error('uBlock> messaging > unknown request: %o', request); - - // Need to callback anyways in case caller expected an answer, or - // else there is a memory leak on caller's side - callback(); - }; -})(); - -/******************************************************************************/ - -vAPI.messaging.onPortDisconnect = function(port) { - port.onDisconnect.removeListener(vAPI.messaging.onPortDisconnect); - port.onMessage.removeListener(vAPI.messaging.onPortMessage); - delete vAPI.messaging.ports[port.name]; -}; - -/******************************************************************************/ - -vAPI.messaging.onPortConnect = function(port) { - port.onDisconnect.addListener(vAPI.messaging.onPortDisconnect); - port.onMessage.addListener(vAPI.messaging.onPortMessage); - vAPI.messaging.ports[port.name] = port; -}; - -/******************************************************************************/ - -vAPI.messaging.setup = function(defaultHandler) { - // Already setup? - if ( this.defaultHandler !== null ) { - return; - } - - if ( typeof defaultHandler !== 'function' ) { - defaultHandler = function(){ return vAPI.messaging.UNHANDLED; }; - } - this.defaultHandler = defaultHandler; - - chrome.runtime.onConnect.addListener(this.onPortConnect); -}; - -/******************************************************************************/ - -vAPI.messaging.broadcast = function(message) { - var messageWrapper = { - broadcast: true, - msg: message - }; - - for ( var portName in this.ports ) { - if ( this.ports.hasOwnProperty(portName) === false ) { - continue; - } - this.ports[portName].postMessage(messageWrapper); - } -}; - -/******************************************************************************/ -/******************************************************************************/ - -vAPI.net = {}; - -/******************************************************************************/ - -vAPI.net.registerListeners = function() { - var µb = µBlock; - var µburi = µb.URI; - - // https://bugs.chromium.org/p/chromium/issues/detail?id=410382 - // Between Chromium 38-48, plug-ins' network requests were reported as - // type "other" instead of "object". - var is_v38_48 = /\bChrom[a-z]+\/(?:3[89]|4[0-8])\.[\d.]+\b/.test(navigator.userAgent), - is_v49_55 = /\bChrom[a-z]+\/(?:49|5[012345])\b/.test(navigator.userAgent); - - // Chromium-based browsers understand only these network request types. - var validTypes = { - 'main_frame': true, - 'sub_frame': true, - 'stylesheet': true, - 'script': true, - 'image': true, - 'object': true, - 'xmlhttprequest': true, - 'other': true - }; - - var denormalizeTypes = function(aa) { - if ( aa.length === 0 ) { - return Object.keys(validTypes); - } - var out = []; - var i = aa.length, - type, - needOther = true; - while ( i-- ) { - type = aa[i]; - if ( validTypes.hasOwnProperty(type) ) { - out.push(type); - } - if ( type === 'other' ) { - needOther = false; - } - } - if ( needOther ) { - out.push('other'); - } - return out; - }; - - var headerValue = function(headers, name) { - var i = headers.length; - while ( i-- ) { - if ( headers[i].name.toLowerCase() === name ) { - return headers[i].value.trim(); - } - } - return ''; - }; - - var normalizeRequestDetails = function(details) { - details.tabId = details.tabId.toString(); - - // https://github.com/gorhill/uBlock/issues/1493 - // Chromium 49+ support a new request type: `ping`, which is fired as - // a result of using `navigator.sendBeacon`. - if ( details.type === 'ping' ) { - details.type = 'beacon'; - return; - } - - // The rest of the function code is to normalize type - if ( details.type !== 'other' ) { - return; - } - - var path = µburi.pathFromURI(details.url); - var pos = path.indexOf('.', path.length - 6); - - // https://github.com/chrisaljoudi/uBlock/issues/862 - // If no transposition possible, transpose to `object` as per - // Chromium bug 410382 (see below) - if ( pos !== -1 ) { - var needle = path.slice(pos) + '.'; - if ( '.eot.ttf.otf.svg.woff.woff2.'.indexOf(needle) !== -1 ) { - details.type = 'font'; - return; - } - - if ( '.mp3.mp4.webm.'.indexOf(needle) !== -1 ) { - details.type = 'media'; - return; - } - - // Still need this because often behind-the-scene requests are wrongly - // categorized as 'other' - if ( '.ico.png.gif.jpg.jpeg.webp.'.indexOf(needle) !== -1 ) { - details.type = 'image'; - return; - } - } - - // Try to extract type from response headers if present. - if ( details.responseHeaders ) { - var contentType = headerValue(details.responseHeaders, 'content-type'); - if ( contentType.startsWith('font/') ) { - details.type = 'font'; - return; - } - if ( contentType.startsWith('image/') ) { - details.type = 'image'; - return; - } - if ( contentType.startsWith('audio/') || contentType.startsWith('video/') ) { - details.type = 'media'; - return; - } - } - - // https://code.google.com/p/chromium/issues/detail?id=410382 - if ( is_v38_48 ) { - details.type = 'object'; - } - }; - - // https://bugs.chromium.org/p/chromium/issues/detail?id=129353 - // https://github.com/gorhill/uBlock/issues/1497 - // Expose websocket-based network requests to uBO's filtering engine, - // logger, etc. - // Counterpart of following block of code is found in "vapi-client.js" -- - // search for "https://github.com/gorhill/uBlock/issues/1497". - var onBeforeWebsocketRequest = function(details) { - details.type = 'websocket'; - var matches = /url=([^&]+)/.exec(details.url); - details.url = decodeURIComponent(matches[1]); - var r = onBeforeRequestClient(details); - // Blocked? - if ( r && r.cancel ) { - return r; - } - // Returning a 1x1 transparent pixel means "not blocked". - return { redirectUrl: 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==' }; - }; - - var onBeforeRequestClient = this.onBeforeRequest.callback; - var onBeforeRequest = function(details) { - // https://github.com/gorhill/uBlock/issues/1497 - if ( - details.type === 'image' && - details.url.endsWith('ubofix=f41665f3028c7fd10eecf573336216d3') - ) { - return onBeforeWebsocketRequest(details); - } - - normalizeRequestDetails(details); - return onBeforeRequestClient(details); - }; - - // This is needed for Chromium 49-55. - var onBeforeSendHeaders = function(details) { - if ( details.type !== 'ping' || details.method !== 'POST' ) { return; } - var type = headerValue(details.requestHeaders, 'content-type'); - if ( type === '' ) { return; } - if ( type.endsWith('/csp-report') ) { - details.type = 'csp_report'; - return onBeforeRequestClient(details); - } - }; - - var onHeadersReceivedClient = this.onHeadersReceived.callback, - onHeadersReceivedClientTypes = this.onHeadersReceived.types.slice(0), - onHeadersReceivedTypes = denormalizeTypes(onHeadersReceivedClientTypes); - var onHeadersReceived = function(details) { - normalizeRequestDetails(details); - // Hack to work around Chromium API limitations, where requests of - // type `font` are returned as `other`. For example, our normalization - // fail at transposing `other` into `font` for URLs which are outside - // what is expected. At least when headers are received we can check - // for content type `font/*`. Blocking at onHeadersReceived time is - // less worse than not blocking at all. Also, due to Chromium bug, - // `other` always becomes `object` when it can't be normalized into - // something else. Test case for "unfriendly" font URLs: - // https://www.google.com/fonts - if ( details.type === 'font' ) { - var r = onBeforeRequestClient(details); - if ( typeof r === 'object' && r.cancel === true ) { - return { cancel: true }; - } - } - if ( - onHeadersReceivedClientTypes.length !== 0 && - onHeadersReceivedClientTypes.indexOf(details.type) === -1 - ) { - return; - } - return onHeadersReceivedClient(details); - }; - - var installListeners = (function() { - var crapi = chrome.webRequest; - - //listener = function(details) { - // quickProfiler.start('onBeforeRequest'); - // var r = onBeforeRequest(details); - // quickProfiler.stop(); - // return r; - //}; - if ( crapi.onBeforeRequest.hasListener(onBeforeRequest) === false ) { - crapi.onBeforeRequest.addListener( - onBeforeRequest, - { - 'urls': this.onBeforeRequest.urls || [''], - 'types': this.onBeforeRequest.types || undefined - }, - this.onBeforeRequest.extra - ); - } - - // Chromium 48 and lower does not support `ping` type. - // Chromium 56 and higher does support `csp_report` stype. - if ( is_v49_55 && crapi.onBeforeSendHeaders.hasListener(onBeforeSendHeaders) === false ) { - crapi.onBeforeSendHeaders.addListener( - onBeforeSendHeaders, - { - 'urls': [ '' ], - 'types': [ 'ping' ] - }, - [ 'blocking', 'requestHeaders' ] - ); - } - - if ( crapi.onHeadersReceived.hasListener(onHeadersReceived) === false ) { - crapi.onHeadersReceived.addListener( - onHeadersReceived, - { - 'urls': this.onHeadersReceived.urls || [''], - 'types': onHeadersReceivedTypes - }, - this.onHeadersReceived.extra - ); - } - - // https://github.com/gorhill/uBlock/issues/675 - // Experimental: keep polling to be sure our listeners are still installed. - //setTimeout(installListeners, 20000); - }).bind(this); - - installListeners(); -}; - -/******************************************************************************/ -/******************************************************************************/ - -vAPI.contextMenu = { - _callback: null, - _entries: [], - _createEntry: function(entry) { - chrome.contextMenus.create(JSON.parse(JSON.stringify(entry)), function() { - void chrome.runtime.lastError; - }); - }, - onMustUpdate: function() {}, - setEntries: function(entries, callback) { - entries = entries || []; - var n = Math.max(this._entries.length, entries.length), - oldEntryId, newEntry; - for ( var i = 0; i < n; i++ ) { - oldEntryId = this._entries[i]; - newEntry = entries[i]; - if ( oldEntryId && newEntry ) { - if ( newEntry.id !== oldEntryId ) { - chrome.contextMenus.remove(oldEntryId); - this._createEntry(newEntry); - this._entries[i] = newEntry.id; - } - } else if ( oldEntryId && !newEntry ) { - chrome.contextMenus.remove(oldEntryId); - } else if ( !oldEntryId && newEntry ) { - this._createEntry(newEntry); - this._entries[i] = newEntry.id; - } - } - n = this._entries.length = entries.length; - callback = callback || null; - if ( callback === this._callback ) { - return; - } - if ( n !== 0 && callback !== null ) { - chrome.contextMenus.onClicked.addListener(callback); - this._callback = callback; - } else if ( n === 0 && this._callback !== null ) { - chrome.contextMenus.onClicked.removeListener(this._callback); - this._callback = null; - } - } -}; - -/******************************************************************************/ -/******************************************************************************/ - -vAPI.lastError = function() { - return chrome.runtime.lastError; -}; - -/******************************************************************************/ -/******************************************************************************/ - -// This is called only once, when everything has been loaded in memory after -// the extension was launched. It can be used to inject content scripts -// in already opened web pages, to remove whatever nuisance could make it to -// the web pages before uBlock was ready. - -vAPI.onLoadAllCompleted = function() { - // http://code.google.com/p/chromium/issues/detail?id=410868#c11 - // Need to be sure to access `vAPI.lastError()` to prevent - // spurious warnings in the console. - var scriptDone = function() { - vAPI.lastError(); - }; - var scriptStart = function(tabId) { - vAPI.tabs.injectScript(tabId, { - file: 'js/vapi-client.js', - allFrames: true, - runAt: 'document_idle' - }, function(){ }); - vAPI.tabs.injectScript(tabId, { - file: 'js/contentscript.js', - allFrames: true, - runAt: 'document_idle' - }, scriptDone); - }; - var bindToTabs = function(tabs) { - var µb = µBlock; - var i = tabs.length, tab; - while ( i-- ) { - tab = tabs[i]; - µb.tabContextManager.commit(tab.id, tab.url); - µb.bindTabToPageStats(tab.id); - // https://github.com/chrisaljoudi/uBlock/issues/129 - scriptStart(tab.id); - } - }; - - chrome.tabs.query({ url: '' }, bindToTabs); -}; - -/******************************************************************************/ -/******************************************************************************/ - -vAPI.punycodeHostname = function(hostname) { - return hostname; -}; - -vAPI.punycodeURL = function(url) { - return url; -}; - -/******************************************************************************/ -/******************************************************************************/ - -// https://github.com/gorhill/uBlock/issues/531 -// Storage area dedicated to admin settings. Read-only. - -// https://github.com/gorhill/uBlock/commit/43a5ed735b95a575a9339b6e71a1fcb27a99663b#commitcomment-13965030 -// Not all Chromium-based browsers support managed storage. Merely testing or -// exception handling in this case does NOT work: I don't know why. The -// extension on Opera ends up in a non-sensical state, whereas vAPI become -// undefined out of nowhere. So only solution left is to test explicitly for -// Opera. -// https://github.com/gorhill/uBlock/issues/900 -// Also, UC Browser: http://www.upsieutoc.com/image/WXuH - -vAPI.adminStorage = { - getItem: function(key, callback) { - var onRead = function(store) { - var data; - if ( - !chrome.runtime.lastError && - typeof store === 'object' && - store !== null - ) { - data = store[key]; - } - callback(data); - }; - try { - chrome.storage.managed.get(key, onRead); - } catch (ex) { - callback(); - } - } -}; - -/******************************************************************************/ -/******************************************************************************/ - -vAPI.cloud = (function() { - var chunkCountPerFetch = 16; // Must be a power of 2 - - // Mind chrome.storage.sync.MAX_ITEMS (512 at time of writing) - var maxChunkCountPerItem = Math.floor(512 * 0.75) & ~(chunkCountPerFetch - 1); - - // Mind chrome.storage.sync.QUOTA_BYTES_PER_ITEM (8192 at time of writing) - var maxChunkSize = Math.floor(chrome.storage.sync.QUOTA_BYTES_PER_ITEM * 0.75); - - // Mind chrome.storage.sync.QUOTA_BYTES (128 kB at time of writing) - var maxStorageSize = chrome.storage.sync.QUOTA_BYTES; - - var options = { - defaultDeviceName: window.navigator.platform, - deviceName: window.localStorage.getItem('deviceName') || '' - }; - - // This is used to find out a rough count of how many chunks exists: - // We "poll" at specific index in order to get a rough idea of how - // large is the stored string. - // This allows reading a single item with only 2 sync operations -- a - // good thing given chrome.storage.sync.MAX_WRITE_OPERATIONS_PER_MINUTE - // and chrome.storage.sync.MAX_WRITE_OPERATIONS_PER_HOUR. - - var getCoarseChunkCount = function(dataKey, callback) { - var bin = {}; - for ( var i = 0; i < maxChunkCountPerItem; i += 16 ) { - bin[dataKey + i.toString()] = ''; - } - - chrome.storage.sync.get(bin, function(bin) { - if ( chrome.runtime.lastError ) { - callback(0, chrome.runtime.lastError.message); - return; - } - - var chunkCount = 0; - for ( var i = 0; i < maxChunkCountPerItem; i += 16 ) { - if ( bin[dataKey + i.toString()] === '' ) { - break; - } - chunkCount = i + 16; - } - - callback(chunkCount); - }); - }; - - var deleteChunks = function(dataKey, start) { - var keys = []; - - // No point in deleting more than: - // - The max number of chunks per item - // - The max number of chunks per storage limit - var n = Math.min( - maxChunkCountPerItem, - Math.ceil(maxStorageSize / maxChunkSize) - ); - for ( var i = start; i < n; i++ ) { - keys.push(dataKey + i.toString()); - } - chrome.storage.sync.remove(keys); - }; - - var start = function(/* dataKeys */) { - }; - - var push = function(dataKey, data, callback) { - var bin = { - 'source': options.deviceName || options.defaultDeviceName, - 'tstamp': Date.now(), - 'data': data, - 'size': 0 - }; - bin.size = JSON.stringify(bin).length; - var item = JSON.stringify(bin); - - // Chunkify taking into account QUOTA_BYTES_PER_ITEM: - // https://developer.chrome.com/extensions/storage#property-sync - // "The maximum size (in bytes) of each individual item in sync - // "storage, as measured by the JSON stringification of its value - // "plus its key length." - bin = {}; - var chunkCount = Math.ceil(item.length / maxChunkSize); - for ( var i = 0; i < chunkCount; i++ ) { - bin[dataKey + i.toString()] = item.substr(i * maxChunkSize, maxChunkSize); - } - bin[dataKey + i.toString()] = ''; // Sentinel - - chrome.storage.sync.set(bin, function() { - var errorStr; - if ( chrome.runtime.lastError ) { - errorStr = chrome.runtime.lastError.message; - } - callback(errorStr); - - // Remove potentially unused trailing chunks - deleteChunks(dataKey, chunkCount); - }); - }; - - var pull = function(dataKey, callback) { - var assembleChunks = function(bin) { - if ( chrome.runtime.lastError ) { - callback(null, chrome.runtime.lastError.message); - return; - } - - // Assemble chunks into a single string. - var json = [], jsonSlice; - var i = 0; - for (;;) { - jsonSlice = bin[dataKey + i.toString()]; - if ( jsonSlice === '' ) { - break; - } - json.push(jsonSlice); - i += 1; - } - - var entry = null; - try { - entry = JSON.parse(json.join('')); - } catch(ex) { - } - callback(entry); - }; - - var fetchChunks = function(coarseCount, errorStr) { - if ( coarseCount === 0 || typeof errorStr === 'string' ) { - callback(null, errorStr); - return; - } - - var bin = {}; - for ( var i = 0; i < coarseCount; i++ ) { - bin[dataKey + i.toString()] = ''; - } - - chrome.storage.sync.get(bin, assembleChunks); - }; - - getCoarseChunkCount(dataKey, fetchChunks); - }; - - var getOptions = function(callback) { - if ( typeof callback !== 'function' ) { - return; - } - callback(options); - }; - - var setOptions = function(details, callback) { - if ( typeof details !== 'object' || details === null ) { - return; - } - - if ( typeof details.deviceName === 'string' ) { - window.localStorage.setItem('deviceName', details.deviceName); - options.deviceName = details.deviceName; - } - - getOptions(callback); - }; - - return { - start: start, - push: push, - pull: pull, - getOptions: getOptions, - setOptions: setOptions - }; -})(); - -/******************************************************************************/ -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff --git a/platform/chromium/vapi-client.js b/platform/chromium/vapi-client.js deleted file mode 100644 index 0dd976fff3639..0000000000000 --- a/platform/chromium/vapi-client.js +++ /dev/null @@ -1,525 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2014-2016 The uBlock Origin authors - - 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 -*/ - -/* global HTMLDocument, XMLDocument */ - -'use strict'; - -// For non background pages - -/******************************************************************************/ - -(function(self) { - -/******************************************************************************/ -/******************************************************************************/ - -// https://github.com/chrisaljoudi/uBlock/issues/464 -if ( document instanceof HTMLDocument === false ) { - // https://github.com/chrisaljoudi/uBlock/issues/1528 - // A XMLDocument can be a valid HTML document. - if ( - document instanceof XMLDocument === false || - document.createElement('div') instanceof HTMLDivElement === false - ) { - return; - } -} - -// https://github.com/gorhill/uBlock/issues/1124 -// Looks like `contentType` is on track to be standardized: -// https://dom.spec.whatwg.org/#concept-document-content-type -// https://forums.lanik.us/viewtopic.php?f=64&t=31522 -// Skip text/plain documents. -var contentType = document.contentType || ''; -if ( /^image\/|^text\/plain/.test(contentType) ) { - return; -} - -/******************************************************************************/ - -var vAPI = self.vAPI = self.vAPI || {}; -var chrome = self.chrome; - -// https://github.com/chrisaljoudi/uBlock/issues/456 -// Already injected? -if ( vAPI.sessionId ) { - return; -} - -/******************************************************************************/ - -// Support minimally working Set() for legacy Chromium. - -if ( self.Set instanceof Function ) { - self.createSet = function() { - return new Set(); - }; -} else { - self.createSet = (function() { - //console.log('Polyfilling for ES6-like Set().'); - var PrimitiveSet = function() { - this.clear(); - }; - PrimitiveSet.prototype = { - add: function(k) { - if ( this._set[k] === undefined ) { - this._set[k] = true; - this.size += 1; - } - return this; - }, - clear: function() { - this._set = Object.create(null); - this.size = 0; - this._values = undefined; - this._i = undefined; - this.value = undefined; - this.done = true; - }, - delete: function(k) { - if ( this._set[k] === undefined ) { return false; } - delete this._set[k]; - this.size -= 1; - return true; - }, - has: function(k) { - return this._set[k] !== undefined; - }, - next: function() { - if ( this._i < this.size ) { - this.value = this._values[this._i++]; - } else { - this._values = undefined; - this.value = undefined; - this.done = true; - } - return this; - }, - polyfill: true, - values: function() { - this._values = Object.keys(this._set); - this._i = 0; - this.value = undefined; - this.done = false; - return this; - } - }; - var ReferenceSet = function() { - this.clear(); - }; - ReferenceSet.prototype = { - add: function(k) { - if ( this._set.indexOf(k) === -1 ) { - this._set.push(k); - } - }, - clear: function() { - this._set = []; - this._i = 0; - this.value = undefined; - this.done = true; - }, - delete: function(k) { - var pos = this._set.indexOf(k); - if ( pos === -1 ) { return false; } - this._set.splice(pos, 1); - return true; - }, - has: function(k) { - return this._set.indexOf(k) !== -1; - }, - next: function() { - if ( this._i === this._set.length ) { - this.value = undefined; - this.done = true; - } else { - this.value = this._set[this._i]; - this._i += 1; - } - return this; - }, - polyfill: true, - values: function() { - this._i = 0; - this.done = false; - return this; - } - }; - Object.defineProperty(ReferenceSet.prototype, 'size', { - get: function() { return this._set.length; } - }); - return function(type) { - return type === 'object' ? new ReferenceSet() : new PrimitiveSet(); - }; - })(); -} - -/******************************************************************************/ - -var referenceCounter = 0; - -vAPI.lock = function() { - referenceCounter += 1; -}; - -vAPI.unlock = function() { - referenceCounter -= 1; - if ( referenceCounter === 0 ) { - // Eventually there will be code here to flush the javascript code - // from this file out of memory when it ends up unused. - - } -}; - -/******************************************************************************/ - -vAPI.executionCost = { - start: function(){}, - stop: function(){} -}; -/* -vAPI.executionCost = { - tcost: 0, - tstart: 0, - nstart: 0, - level: 1, - start: function() { - if ( this.nstart === 0 ) { - this.tstart = window.performance.now(); - } - this.nstart += 1; - }, - stop: function(mark) { - this.nstart -= 1; - if ( this.nstart !== 0 ) { - return; - } - var tcost = window.performance.now() - this.tstart; - this.tcost += tcost; - if ( mark === undefined ) { - return; - } - var top = window === window.top; - if ( !top && this.level < 2 ) { - return; - } - var context = window === window.top ? ' top' : 'frame'; - var percent = this.tcost / window.performance.now() * 100; - console.log( - 'uBO cost (%s): %sms/%s%% (%s: %sms)', - context, - this.tcost.toFixed(1), - percent.toFixed(1), - mark, - tcost.toFixed(2) - ); - } -}; -*/ -vAPI.executionCost.start(); - -/******************************************************************************/ - -vAPI.randomToken = function() { - return String.fromCharCode(Date.now() % 26 + 97) + - Math.floor(Math.random() * 982451653 + 982451653).toString(36); -}; - -vAPI.sessionId = vAPI.randomToken(); -vAPI.chrome = true; -vAPI.setTimeout = vAPI.setTimeout || self.setTimeout.bind(self); - -/******************************************************************************/ - -vAPI.shutdown = { - jobs: [], - add: function(job) { - this.jobs.push(job); - }, - exec: function() { - var job; - while ( (job = this.jobs.pop()) ) { - job(); - } - }, - remove: function(job) { - var pos; - while ( (pos = this.jobs.indexOf(job)) !== -1 ) { - this.jobs.splice(pos, 1); - } - } -}; - -/******************************************************************************/ -/******************************************************************************/ - -vAPI.messaging = { - port: null, - portTimer: null, - portTimerDelay: 10000, - channels: Object.create(null), - channelCount: 0, - pending: Object.create(null), - pendingCount: 0, - auxProcessId: 1, - shuttingDown: false, - - shutdown: function() { - this.shuttingDown = true; - this.destroyPort(); - }, - - disconnectListener: function() { - this.port = null; - vAPI.shutdown.exec(); - }, - disconnectListenerCallback: null, - - messageListener: function(details) { - if ( !details ) { - return; - } - - // Sent to all channels - if ( details.broadcast === true && !details.channelName ) { - for ( var channelName in this.channels ) { - this.sendToChannelListeners(channelName, details.msg); - } - return; - } - - // Response to specific message previously sent - if ( details.auxProcessId ) { - var listener = this.pending[details.auxProcessId]; - delete this.pending[details.auxProcessId]; - delete details.auxProcessId; // TODO: why? - if ( listener ) { - this.pendingCount -= 1; - listener(details.msg); - return; - } - } - - // Sent to a specific channel - var response = this.sendToChannelListeners(details.channelName, details.msg); - - // Respond back if required - if ( details.mainProcessId === undefined ) { - return; - } - var port = this.connect(); - if ( port !== null ) { - port.postMessage({ - mainProcessId: details.mainProcessId, - msg: response - }); - } - }, - messageListenerCallback: null, - - portPoller: function() { - this.portTimer = null; - if ( this.port !== null ) { - if ( this.channelCount !== 0 || this.pendingCount !== 0 ) { - this.portTimer = vAPI.setTimeout(this.portPollerCallback, this.portTimerDelay); - this.portTimerDelay = Math.min(this.portTimerDelay * 2, 60 * 60 * 1000); - return; - } - } - this.destroyPort(); - }, - portPollerCallback: null, - - destroyPort: function() { - if ( this.portTimer !== null ) { - clearTimeout(this.portTimer); - this.portTimer = null; - } - var port = this.port; - if ( port !== null ) { - port.disconnect(); - port.onMessage.removeListener(this.messageListenerCallback); - port.onDisconnect.removeListener(this.disconnectListenerCallback); - this.port = null; - } - if ( this.channelCount !== 0 ) { - this.channels = Object.create(null); - this.channelCount = 0; - } - // service pending callbacks - if ( this.pendingCount !== 0 ) { - var pending = this.pending, callback; - this.pending = Object.create(null); - this.pendingCount = 0; - for ( var auxId in pending ) { - callback = pending[auxId]; - if ( typeof callback === 'function' ) { - callback(null); - } - } - } - }, - - createPort: function() { - if ( this.shuttingDown ) { - return null; - } - if ( this.messageListenerCallback === null ) { - this.messageListenerCallback = this.messageListener.bind(this); - this.disconnectListenerCallback = this.disconnectListener.bind(this); - this.portPollerCallback = this.portPoller.bind(this); - } - try { - this.port = chrome.runtime.connect({name: vAPI.sessionId}) || null; - } catch (ex) { - this.port = null; - } - if ( this.port !== null ) { - this.port.onMessage.addListener(this.messageListenerCallback); - this.port.onDisconnect.addListener(this.disconnectListenerCallback); - } - this.portTimerDelay = 10000; - if ( this.portTimer === null ) { - this.portTimer = vAPI.setTimeout(this.portPollerCallback, this.portTimerDelay); - } - return this.port; - }, - - connect: function() { - return this.port !== null ? this.port : this.createPort(); - }, - - send: function(channelName, message, callback) { - this.sendTo(channelName, message, undefined, undefined, callback); - }, - - sendTo: function(channelName, message, toTabId, toChannel, callback) { - // Too large a gap between the last request and the last response means - // the main process is no longer reachable: memory leaks and bad - // performance become a risk -- especially for long-lived, dynamic - // pages. Guard against this. - if ( this.pendingCount > 25 ) { - vAPI.shutdown.exec(); - } - var port = this.connect(); - if ( port === null ) { - if ( typeof callback === 'function' ) { - callback(); - } - return; - } - var auxProcessId; - if ( callback ) { - auxProcessId = this.auxProcessId++; - this.pending[auxProcessId] = callback; - this.pendingCount += 1; - } - port.postMessage({ - channelName: channelName, - auxProcessId: auxProcessId, - toTabId: toTabId, - toChannel: toChannel, - msg: message - }); - }, - - addChannelListener: function(channelName, callback) { - if ( typeof callback !== 'function' ) { - return; - } - var listeners = this.channels[channelName]; - if ( listeners !== undefined && listeners.indexOf(callback) !== -1 ) { - console.error('Duplicate listener on channel "%s"', channelName); - return; - } - if ( listeners === undefined ) { - this.channels[channelName] = [callback]; - this.channelCount += 1; - } else { - listeners.push(callback); - } - this.connect(); - }, - - removeChannelListener: function(channelName, callback) { - if ( typeof callback !== 'function' ) { - return; - } - var listeners = this.channels[channelName]; - if ( listeners === undefined ) { - return; - } - var pos = this.listeners.indexOf(callback); - if ( pos === -1 ) { - console.error('Listener not found on channel "%s"', channelName); - return; - } - listeners.splice(pos, 1); - if ( listeners.length === 0 ) { - delete this.channels[channelName]; - this.channelCount -= 1; - } - }, - - removeAllChannelListeners: function(channelName) { - var listeners = this.channels[channelName]; - if ( listeners === undefined ) { - return; - } - delete this.channels[channelName]; - this.channelCount -= 1; - }, - - sendToChannelListeners: function(channelName, msg) { - var listeners = this.channels[channelName]; - if ( listeners === undefined ) { - return; - } - var response; - for ( var i = 0, n = listeners.length; i < n; i++ ) { - response = listeners[i](msg); - if ( response !== undefined ) { - break; - } - } - return response; - } -}; - -/******************************************************************************/ - -vAPI.shutdown.add(function() { - vAPI.messaging.shutdown(); - delete window.vAPI; -}); - -// https://www.youtube.com/watch?v=rT5zCHn0tsg -// https://www.youtube.com/watch?v=E-jS4e3zacI - -vAPI.executionCost.stop('vapi-client.js'); - -/******************************************************************************/ -/******************************************************************************/ - -})(this); - -/******************************************************************************/ diff --git a/platform/chromium/vapi-common.js b/platform/chromium/vapi-common.js deleted file mode 100644 index 6020d66652025..0000000000000 --- a/platform/chromium/vapi-common.js +++ /dev/null @@ -1,101 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2014-2016 The uBlock Origin authors - - 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 -*/ - -// For background page or non-background pages - -'use strict'; - -/******************************************************************************/ -/******************************************************************************/ - -(function() { - -var vAPI = self.vAPI = self.vAPI || {}; -var chrome = self.chrome; - -/******************************************************************************/ - -vAPI.setTimeout = vAPI.setTimeout || self.setTimeout.bind(self); - -/******************************************************************************/ - -// http://www.w3.org/International/questions/qa-scripts#directions - -var setScriptDirection = function(language) { - document.body.setAttribute( - 'dir', - ['ar', 'he', 'fa', 'ps', 'ur'].indexOf(language) !== -1 ? 'rtl' : 'ltr' - ); -}; - -/******************************************************************************/ - -vAPI.download = function(details) { - if ( !details.url ) { - return; - } - - var a = document.createElement('a'); - a.href = details.url; - a.setAttribute('download', details.filename || ''); - a.dispatchEvent(new MouseEvent('click')); -}; - -/******************************************************************************/ - -vAPI.insertHTML = function(node, html) { - node.innerHTML = html; -}; - -/******************************************************************************/ - -vAPI.getURL = chrome.runtime.getURL; - -/******************************************************************************/ - -vAPI.i18n = chrome.i18n.getMessage; - -setScriptDirection(vAPI.i18n('@@ui_locale')); - -/******************************************************************************/ - -vAPI.closePopup = function() { - window.open('','_self').close(); -}; - -/******************************************************************************/ - -// A localStorage-like object which should be accessible from the -// background page or auxiliary pages. -// This storage is optional, but it is nice to have, for a more polished user -// experience. - -// This can throw in some contexts (like in devtool). -try { - vAPI.localStorage = window.localStorage; -} catch (ex) { -} - -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff --git a/platform/chromium/webext.js b/platform/chromium/webext.js new file mode 100644 index 0000000000000..baf83b36c1903 --- /dev/null +++ b/platform/chromium/webext.js @@ -0,0 +1,180 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2019-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 +*/ + +// `webext` is a promisified api of `chrome`. Entries are added as +// the promisification of uBO progress. + +const promisifyNoFail = function(thisArg, fnName, outFn = r => r) { + const fn = thisArg[fnName]; + return function(...args) { + return new Promise(resolve => { + try { + fn.call(thisArg, ...args, function(...args) { + void chrome.runtime.lastError; + resolve(outFn(...args)); + }); + } catch(ex) { + console.error(ex); + resolve(outFn()); + } + }); + }; +}; + +const promisify = function(thisArg, fnName) { + const fn = thisArg[fnName]; + return function(...args) { + return new Promise((resolve, reject) => { + try { + fn.call(thisArg, ...args, function(...args) { + const lastError = chrome.runtime.lastError; + if ( lastError instanceof Object ) { + return reject(lastError.message); + } + resolve(...args); + }); + } catch(ex) { + console.error(ex); + resolve(); + } + }); + }; +}; + +const webext = { + // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/alarms + alarms: { + clear: promisifyNoFail(chrome.alarms, 'clear'), + clearAll: promisifyNoFail(chrome.alarms, 'clearAll'), + create: promisifyNoFail(chrome.alarms, 'create'), + get: promisifyNoFail(chrome.alarms, 'get'), + getAll: promisifyNoFail(chrome.alarms, 'getAll'), + onAlarm: chrome.alarms.onAlarm, + }, + // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserAction + browserAction: { + setBadgeBackgroundColor: promisifyNoFail(chrome.browserAction, 'setBadgeBackgroundColor'), + setBadgeText: promisifyNoFail(chrome.browserAction, 'setBadgeText'), + setIcon: promisifyNoFail(chrome.browserAction, 'setIcon'), + setTitle: promisifyNoFail(chrome.browserAction, 'setTitle'), + }, + // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/menus + menus: { + create: function() { + return chrome.contextMenus.create(...arguments, ( ) => { + void chrome.runtime.lastError; + }); + }, + onClicked: chrome.contextMenus.onClicked, + remove: promisifyNoFail(chrome.contextMenus, 'remove'), + removeAll: promisifyNoFail(chrome.contextMenus, 'removeAll'), + }, + // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/privacy + privacy: { + }, + // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage + storage: { + // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage/local + local: { + clear: promisify(chrome.storage.local, 'clear'), + get: promisify(chrome.storage.local, 'get'), + getBytesInUse: promisify(chrome.storage.local, 'getBytesInUse'), + remove: promisify(chrome.storage.local, 'remove'), + set: promisify(chrome.storage.local, 'set'), + }, + }, + // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs + tabs: { + get: promisifyNoFail(chrome.tabs, 'get', tab => tab instanceof Object ? tab : null), + executeScript: promisifyNoFail(chrome.tabs, 'executeScript'), + insertCSS: promisifyNoFail(chrome.tabs, 'insertCSS'), + removeCSS: promisifyNoFail(chrome.tabs, 'removeCSS'), + query: promisifyNoFail(chrome.tabs, 'query', tabs => Array.isArray(tabs) ? tabs : []), + reload: promisifyNoFail(chrome.tabs, 'reload'), + remove: promisifyNoFail(chrome.tabs, 'remove'), + sendMessage: promisifyNoFail(chrome.tabs, 'sendMessage'), + update: promisifyNoFail(chrome.tabs, 'update', tab => tab instanceof Object ? tab : null), + }, + // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webNavigation + webNavigation: { + getFrame: promisify(chrome.webNavigation, 'getFrame'), + getAllFrames: promisify(chrome.webNavigation, 'getAllFrames'), + }, + // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/windows + windows: { + get: promisifyNoFail(chrome.windows, 'get', win => win instanceof Object ? win : null), + create: promisifyNoFail(chrome.windows, 'create', win => win instanceof Object ? win : null), + update: promisifyNoFail(chrome.windows, 'update', win => win instanceof Object ? win : null), + }, +}; + +// browser.privacy entries +{ + const settings = [ + // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/privacy/network + [ 'network', 'networkPredictionEnabled' ], + [ 'network', 'webRTCIPHandlingPolicy' ], + // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/privacy/websites + [ 'websites', 'hyperlinkAuditingEnabled' ], + ]; + for ( const [ category, setting ] of settings ) { + let categoryEntry = webext.privacy[category]; + if ( categoryEntry instanceof Object === false ) { + categoryEntry = webext.privacy[category] = {}; + } + const settingEntry = categoryEntry[setting] = {}; + const thisArg = chrome.privacy[category][setting]; + settingEntry.clear = promisifyNoFail(thisArg, 'clear'); + settingEntry.get = promisifyNoFail(thisArg, 'get'); + settingEntry.set = promisifyNoFail(thisArg, 'set'); + } +} + +// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage/managed +if ( chrome.storage.managed instanceof Object ) { + webext.storage.managed = { + get: promisify(chrome.storage.managed, 'get'), + }; +} + +// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage/sync +if ( chrome.storage.sync instanceof Object ) { + webext.storage.sync = { + QUOTA_BYTES: chrome.storage.sync.QUOTA_BYTES, + QUOTA_BYTES_PER_ITEM: chrome.storage.sync.QUOTA_BYTES_PER_ITEM, + MAX_ITEMS: chrome.storage.sync.MAX_ITEMS, + MAX_WRITE_OPERATIONS_PER_HOUR: chrome.storage.sync.MAX_WRITE_OPERATIONS_PER_HOUR, + MAX_WRITE_OPERATIONS_PER_MINUTE: chrome.storage.sync.MAX_WRITE_OPERATIONS_PER_MINUTE, + + clear: promisify(chrome.storage.sync, 'clear'), + get: promisify(chrome.storage.sync, 'get'), + getBytesInUse: promisify(chrome.storage.sync, 'getBytesInUse'), + remove: promisify(chrome.storage.sync, 'remove'), + set: promisify(chrome.storage.sync, 'set'), + }; +} + +// https://bugs.chromium.org/p/chromium/issues/detail?id=608854 +if ( chrome.tabs.removeCSS instanceof Function ) { + webext.tabs.removeCSS = promisifyNoFail(chrome.tabs, 'removeCSS'); +} + +export default webext; diff --git a/platform/common/managed_storage.json b/platform/common/managed_storage.json new file mode 100644 index 0000000000000..25614dd056f3c --- /dev/null +++ b/platform/common/managed_storage.json @@ -0,0 +1,73 @@ +{ + "$schema": "http://json-schema.org/draft-03/schema#", + "type": "object", + "properties": { + "adminSettings": { + "title": "A valid JSON string compliant with uBO's backup format", + "description": "All entries present will overwrite local settings.", + "type": "string" + }, + "advancedSettings": { + "title": "A list of [name,value] pairs to populate advanced settings", + "type": "array", + "items": { + "title": "A [name,value] pair", + "type": "array", + "items": { "type": "string" } + } + }, + "userSettings": { + "title": "A list of [name,value] pairs to populate user settings", + "type": "array", + "items": { + "title": "A [name,value] pair", + "type": "array", + "items": { "type": "string" } + } + }, + "disableDashboard": { + "title": "Set to true to prevent access to configuration options", + "type": "boolean" + }, + "disabledPopupPanelParts": { + "title": "An array of strings used to remove parts of the popup panel", + "type": "array", + "items": { "type": "string" } + }, + "toAdd": { + "title": "Settings to add at launch time", + "type": "object", + "properties": { + "trustedSiteDirectives": { + "title": "A list of trusted-site directives", + "description": "Trusted-site directives to always add at launch time.", + "type": "array", + "items": { "type": "string" } + } + } + }, + "toOverwrite": { + "title": "Settings to overwrite at launch time", + "type": "object", + "properties": { + "filters": { + "title": "A collection of filters", + "description": "The set of user filters to use at launch time -- where each entry is a distinct line.", + "type": "array", + "items": { "type": "string" } + }, + "filterLists": { + "title": "A collection of list identifiers and/or list URLs", + "description": "The set of filter lists to use at launch time.", + "type": "array", + "items": { "type": "string" } + }, + "trustedSiteDirectives": { + "title": "A list of trusted-site directives", + "type": "array", + "items": { "type": "string" } + } + } + } + } +} diff --git a/platform/common/vapi-background.js b/platform/common/vapi-background.js new file mode 100644 index 0000000000000..ff6ffd1e1f501 --- /dev/null +++ b/platform/common/vapi-background.js @@ -0,0 +1,1811 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2014-2015 The uBlock Origin authors + Copyright (C) 2014-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 +*/ + +// For background page + +/******************************************************************************/ + +import { ubolog } from './console.js'; +import webext from './webext.js'; + +/******************************************************************************/ + +const manifest = browser.runtime.getManifest(); + +vAPI.cantWebsocket = + browser.webRequest.ResourceType instanceof Object === false || + browser.webRequest.ResourceType.WEBSOCKET !== 'websocket'; + +vAPI.canWASM = vAPI.webextFlavor.soup.has('chromium') === false; +if ( vAPI.canWASM === false ) { + const csp = manifest.content_security_policy; + vAPI.canWASM = csp !== undefined && csp.indexOf("'wasm-unsafe-eval'") !== -1; +} + +vAPI.supportsUserStylesheets = vAPI.webextFlavor.soup.has('user_stylesheet'); + +/******************************************************************************/ + +vAPI.app = { + name: manifest.name.replace(/ dev\w+ build/, ''), + 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); + version = match[1] + (v < 100 ? 'b' + v : 'rc' + (v - 100)); + } + return version; + })(), + + intFromVersion: function(s) { + const parts = s.match(/(?:^|\.|b|rc)\d+/g); + if ( parts === null ) { return 0; } + let vint = 0; + for ( let i = 0; i < 4; i++ ) { + const pstr = parts[i] || ''; + let pint; + if ( pstr === '' ) { + pint = 0; + } else if ( pstr.startsWith('.') || pstr.startsWith('b') ) { + pint = parseInt(pstr.slice(1), 10); + } else if ( pstr.startsWith('rc') ) { + pint = parseInt(pstr.slice(2), 10) + 100; + } else { + pint = parseInt(pstr, 10); + } + vint = vint * 1000 + pint; + } + return vint; + }, + + restart: function() { + browser.runtime.reload(); + }, +}; + +/******************************************************************************/ + +// Generate segments of random six alphanumeric characters, thus one segment +// is a value out of 36^6 = over 2x10^9 values. + +vAPI.generateSecret = (size = 1) => { + let secret = ''; + while ( size-- ) { + secret += (Math.floor(Math.random() * 2176782336) + 2176782336).toString(36).slice(1); + } + return secret; +}; + +/******************************************************************************* + * + * https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/storage/session + * + * Session (in-memory) storage is promise-based in all browsers, no need for + * a webext polyfill. However, not all browsers supports it in MV2. + * + * */ + +vAPI.sessionStorage = browser.storage.session || { + get() { + return Promise.resolve(); + }, + set() { + return Promise.resolve(); + }, + remove() { + return Promise.resolve(); + }, + clear() { + return Promise.resolve(); + }, + unavailable: true, +}; + +/******************************************************************************* + * + * Data written to and read from storage.local will be mirrored to in-memory + * storage.session. + * + * Data read from storage.local will be first fetched from storage.session, + * then if not available, read from storage.local. + * + * */ + +vAPI.storage = { + get(key, ...args) { + return webext.storage.local.get(key, ...args).catch(reason => { + console.log(reason); + }); + }, + set(...args) { + return webext.storage.local.set(...args).catch(reason => { + console.log(reason); + }); + }, + remove(...args) { + return webext.storage.local.remove(...args).catch(reason => { + console.log(reason); + }); + }, + clear(...args) { + return webext.storage.local.clear(...args).catch(reason => { + console.log(reason); + }); + }, + QUOTA_BYTES: browser.storage.local.QUOTA_BYTES, +}; + +// Not all platforms support getBytesInUse +if ( webext.storage.local.getBytesInUse instanceof Function ) { + vAPI.storage.getBytesInUse = function(...args) { + return webext.storage.local.getBytesInUse(...args).catch(reason => { + console.log(reason); + }); + }; +} + +/******************************************************************************/ +/******************************************************************************/ + +// https://github.com/gorhill/uMatrix/issues/234 +// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/privacy/network + +// https://github.com/gorhill/uBlock/issues/2048 +// Do not mess up with existing settings if not assigning them stricter +// values. + +vAPI.browserSettings = (( ) => { + // Not all platforms support `browser.privacy`. + const bp = webext.privacy; + if ( bp instanceof Object === false ) { return; } + + return { + // https://github.com/uBlockOrigin/uBlock-issues/issues/1723#issuecomment-919913361 + canLeakLocalIPAddresses: + vAPI.webextFlavor.soup.has('firefox') && + vAPI.webextFlavor.soup.has('mobile'), + + set: function(details) { + for ( const setting in details ) { + if ( Object.hasOwn(details, setting) === false ) { continue; } + switch ( setting ) { + case 'prefetching': { + const enabled = !!details[setting]; + if ( enabled ) { + bp.network.networkPredictionEnabled.clear({ + scope: 'regular', + }); + } else { + bp.network.networkPredictionEnabled.set({ + value: false, + scope: 'regular', + }); + } + if ( vAPI.prefetching instanceof Function ) { + vAPI.prefetching(enabled); + } + break; + } + case 'hyperlinkAuditing': { + if ( details[setting] ) { + bp.websites.hyperlinkAuditingEnabled.clear({ + scope: 'regular', + }); + } else { + bp.websites.hyperlinkAuditingEnabled.set({ + value: false, + scope: 'regular', + }); + } + break; + } + case 'webrtcIPAddress': { + // https://github.com/uBlockOrigin/uBlock-issues/issues/1928 + // https://www.reddit.com/r/uBlockOrigin/comments/sl7p74/ + // Hypothetical: some browsers _think_ uBO is still using + // the setting possibly based on cached state from the + // past, and making an explicit API call that uBO is not + // using the setting appears to solve those unexpected + // reported occurrences of uBO interfering despite never + // using the API. + const mustEnable = !details[setting]; + if ( this.canLeakLocalIPAddresses === false ) { + if ( mustEnable && vAPI.webextFlavor.soup.has('chromium') ) { + bp.network.webRTCIPHandlingPolicy.clear({ + scope: 'regular', + }); + } + continue; + } + if ( mustEnable ) { + bp.network.webRTCIPHandlingPolicy.set({ + value: 'default_public_interface_only', + scope: 'regular' + }); + } else { + bp.network.webRTCIPHandlingPolicy.clear({ + scope: 'regular', + }); + } + break; + } + default: + break; + } + } + } + }; +})(); + +/******************************************************************************/ +/******************************************************************************/ + +vAPI.isBehindTheSceneTabId = function(tabId) { + return tabId < 0; +}; + +vAPI.unsetTabId = 0; +vAPI.noTabId = -1; // definitely not any existing tab + +// To ensure we always use a good tab id +const toTabId = function(tabId) { + return typeof tabId === 'number' && isNaN(tabId) === false + ? tabId + : 0; +}; + +// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webNavigation +// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs + +vAPI.Tabs = class { + constructor() { + browser.webNavigation.onCreatedNavigationTarget.addListener(details => { + this.onCreatedNavigationTargetHandler(details); + }); + browser.webNavigation.onCommitted.addListener(details => { + const { frameId, tabId } = details; + if ( frameId === 0 && tabId > 0 && details.transitionType === 'reload' ) { + if ( vAPI.net && vAPI.net.hasUnprocessedRequest(tabId) ) { + vAPI.net.removeUnprocessedRequest(tabId); + } + } + this.onCommittedHandler(details); + }); + browser.tabs.onUpdated.addListener((tabId, changeInfo, tab) => { + this.onUpdatedHandler(tabId, changeInfo, tab); + }); + browser.tabs.onActivated.addListener(details => { + this.onActivated(details); + }); + // https://github.com/uBlockOrigin/uBlock-issues/issues/151 + // https://github.com/uBlockOrigin/uBlock-issues/issues/680#issuecomment-515215220 + if ( browser.windows instanceof Object ) { + browser.windows.onFocusChanged.addListener(windowId => { + this.onFocusChangedHandler(windowId); + }); + } + browser.tabs.onRemoved.addListener((tabId, details) => { + if ( vAPI.net && vAPI.net.hasUnprocessedRequest(tabId) ) { + vAPI.net.removeUnprocessedRequest(tabId); + } + this.onRemovedHandler(tabId, details); + }); + } + + async executeScript(...args) { + let result; + try { + result = await webext.tabs.executeScript(...args); + } + catch { + } + return Array.isArray(result) ? result : []; + } + + async get(tabId) { + if ( tabId === null ) { + return this.getCurrent(); + } + if ( tabId <= 0 ) { return null; } + let tab; + try { + tab = await webext.tabs.get(tabId); + } + catch { + } + return tab instanceof Object ? tab : null; + } + + async getCurrent() { + const tabs = await this.query({ active: true, currentWindow: true }); + return tabs.length !== 0 ? tabs[0] : null; + } + + async insertCSS(tabId, details) { + if ( vAPI.supportsUserStylesheets ) { + details.cssOrigin = 'user'; + } + try { + await webext.tabs.insertCSS(...arguments); + } + catch { + } + } + + async query(queryInfo) { + let tabs; + try { + tabs = await webext.tabs.query(queryInfo); + } + catch { + } + return Array.isArray(tabs) ? tabs : []; + } + + async removeCSS(tabId, details) { + if ( vAPI.supportsUserStylesheets ) { + details.cssOrigin = 'user'; + } + try { + await webext.tabs.removeCSS(...arguments); + } + catch { + } + } + + // Properties of the details object: + // - url: 'URL', => the address that will be opened + // - index: -1, => undefined: end of the list, -1: following tab, + // or after index + // - active: false, => opens the tab... in background: true, + // foreground: undefined + // - popup: 'popup' => open in a new window + + async create(url, details) { + if ( details.active === undefined ) { + details.active = true; + } + + const subWrapper = async ( ) => { + const updateDetails = { + url: url, + active: !!details.active + }; + + // Opening a tab from incognito window won't focus the window + // in which the tab was opened + const focusWindow = tab => { + if ( tab.active && vAPI.windows instanceof Object ) { + vAPI.windows.update(tab.windowId, { focused: true }); + } + }; + + if ( !details.tabId ) { + if ( details.index !== undefined ) { + updateDetails.index = details.index; + } + browser.tabs.create(updateDetails, focusWindow); + return; + } + + // update doesn't accept index, must use move + const tab = await vAPI.tabs.update( + toTabId(details.tabId), + updateDetails + ); + // if the tab doesn't exist + if ( tab === null ) { + browser.tabs.create(updateDetails, focusWindow); + } else if ( details.index !== undefined ) { + browser.tabs.move(tab.id, { index: details.index }); + } + }; + + // Open in a standalone window + // + // https://github.com/uBlockOrigin/uBlock-issues/issues/168#issuecomment-413038191 + // Not all platforms support vAPI.windows. + // + // For some reasons, some platforms do not honor the left,top + // position when specified. I found that further calling + // windows.update again with the same position _may_ help. + // + // https://github.com/uBlockOrigin/uBlock-issues/issues/2249 + // Mind that the creation of the popup window might fail. + if ( details.popup !== undefined && vAPI.windows instanceof Object ) { + const basicDetails = { + url: details.url, + type: details.popup, + }; + const shouldRestorePosition = details.box instanceof Object; + const extraDetails = shouldRestorePosition + ? Object.assign({}, basicDetails, details.box) + : basicDetails; + const win = await vAPI.windows.create(extraDetails); + if ( win === null ) { + if ( shouldRestorePosition === false ) { return; } + return vAPI.windows.create(basicDetails); + } + if ( shouldRestorePosition === false ) { return; } + if ( win.left === details.box.left ) { + if ( win.top === details.box.top ) { return; } + } + vAPI.windows.update(win.id, { + left: details.box.left, + top: details.box.top + }); + return; + } + + if ( details.index !== -1 ) { + subWrapper(); + return; + } + + const tab = await vAPI.tabs.getCurrent(); + if ( tab !== null ) { + details.index = tab.index + 1; + } else { + details.index = undefined; + } + subWrapper(); + } + + // Properties of the details object: + // - url: 'URL', => the address that will be opened + // - tabId: 1, => the tab is used if set, instead of creating a new one + // - index: -1, => undefined: end of the list, -1: following tab, or + // after index + // - active: false, => opens the tab in background - true and undefined: + // foreground + // - select: true, => if a tab is already opened with that url, then select + // it instead of opening a new one + // - popup: true => open in a new window + + async open(details) { + let targetURL = details.url; + if ( typeof targetURL !== 'string' || targetURL === '' ) { + return null; + } + + // extension pages + if ( /^[\w-]{2,}:/.test(targetURL) !== true ) { + targetURL = vAPI.getURL(targetURL); + } + + if ( !details.select ) { + this.create(targetURL, details); + return; + } + + // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query#Parameters + // "Note that fragment identifiers are not matched." + // Fragment identifiers ARE matched -- we need to remove the fragment. + const pos = targetURL.indexOf('#'); + const targetURLWithoutHash = pos === -1 + ? targetURL + : targetURL.slice(0, pos); + + const tabs = await vAPI.tabs.query({ url: targetURLWithoutHash }); + if ( tabs.length === 0 ) { + this.create(targetURL, details); + return; + } + let tab = tabs[0]; + const updateDetails = { active: true }; + // https://github.com/uBlockOrigin/uBlock-issues/issues/592 + if ( tab.url.startsWith(targetURL) === false ) { + updateDetails.url = targetURL; + } + tab = await vAPI.tabs.update(tab.id, updateDetails); + if ( vAPI.windows instanceof Object === false ) { return; } + vAPI.windows.update(tab.windowId, { focused: true }); + } + + async update() { + let tab; + try { + tab = await webext.tabs.update(...arguments); + } + catch { + } + return tab instanceof Object ? tab : null; + } + + // Replace the URL of a tab. Noop if the tab does not exist. + replace(tabId, url) { + tabId = toTabId(tabId); + if ( tabId === 0 ) { return; } + + let targetURL = url; + + // extension pages + if ( /^[\w-]{2,}:/.test(targetURL) !== true ) { + targetURL = vAPI.getURL(targetURL); + } + + return vAPI.tabs.update(tabId, { url: targetURL }); + } + + async remove(tabId) { + tabId = toTabId(tabId); + if ( tabId === 0 ) { return; } + try { + await webext.tabs.remove(tabId); + } + catch { + } + } + + async reload(tabId, bypassCache = false) { + tabId = toTabId(tabId); + if ( tabId === 0 ) { return; } + try { + await webext.tabs.reload( + tabId, + { bypassCache: bypassCache === true } + ); + } + catch { + } + } + + async select(tabId) { + tabId = toTabId(tabId); + if ( tabId === 0 ) { return; } + const tab = await vAPI.tabs.update(tabId, { active: true }); + if ( tab === null ) { return; } + if ( vAPI.windows instanceof Object === false ) { return; } + vAPI.windows.update(tab.windowId, { focused: true }); + } + + // https://forums.lanik.us/viewtopic.php?f=62&t=32826 + // Chromium-based browsers: sanitize target URL. I've seen data: URI with + // newline characters in standard fields, possibly as a way of evading + // filters. As per spec, there should be no whitespaces in a data: URI's + // standard fields. + + sanitizeURL(url) { + if ( url.startsWith('data:') === false ) { return url; } + const pos = url.indexOf(','); + if ( pos === -1 ) { return url; } + const s = url.slice(0, pos); + if ( s.search(/\s/) === -1 ) { return url; } + return s.replace(/\s+/, '') + url.slice(pos); + } + + onCreatedNavigationTargetHandler(details) { + if ( typeof details.url !== 'string' ) { + details.url = ''; + } + if ( /^https?:\/\//.test(details.url) === false ) { + details.frameId = 0; + details.url = this.sanitizeURL(details.url); + this.onNavigation(details); + } + this.onCreated(details); + } + + onCommittedHandler(details) { + details.url = this.sanitizeURL(details.url); + this.onNavigation(details); + } + + onUpdatedHandler(tabId, changeInfo, tab) { + // Ignore uninteresting update events + const { status = '', title = '', url = '' } = changeInfo; + if ( status === '' && title === '' && url === '' ) { return; } + // https://github.com/gorhill/uBlock/issues/3073 + // Fall back to `tab.url` when `changeInfo.url` is not set. + if ( url === '' ) { + changeInfo.url = tab && tab.url; + } + if ( changeInfo.url ) { + changeInfo.url = this.sanitizeURL(changeInfo.url); + } + this.onUpdated(tabId, changeInfo, tab); + } + + onRemovedHandler(tabId, details) { + this.onClosed(tabId, details); + } + + onFocusChangedHandler(windowId) { + if ( windowId === browser.windows.WINDOW_ID_NONE ) { return; } + vAPI.tabs.query({ active: true, windowId }).then(tabs => { + if ( tabs.length === 0 ) { return; } + const tab = tabs[0]; + this.onActivated({ tabId: tab.id, windowId: tab.windowId }); + }); + } + + onActivated(/* details */) { + } + + onClosed(/* tabId, details */) { + } + + onCreated(/* details */) { + } + + onNavigation(/* details */) { + } + + onUpdated(/* tabId, changeInfo, tab */) { + } +}; + +/******************************************************************************/ +/******************************************************************************/ + +if ( webext.windows instanceof Object ) { + vAPI.windows = { + get: async function() { + let win; + try { + win = await webext.windows.get(...arguments); + } + catch { + } + return win instanceof Object ? win : null; + }, + create: async function() { + let win; + try { + win = await webext.windows.create(...arguments); + } + catch { + } + return win instanceof Object ? win : null; + }, + update: async function() { + let win; + try { + win = await webext.windows.update(...arguments); + } + catch { + } + return win instanceof Object ? win : null; + }, + }; +} + +/******************************************************************************/ +/******************************************************************************/ + +if ( webext.browserAction instanceof Object ) { + vAPI.browserAction = { + setTitle: async function() { + try { + await webext.browserAction.setTitle(...arguments); + } + catch { + } + }, + }; + // Not supported on Firefox for Android + if ( webext.browserAction.setIcon ) { + vAPI.browserAction.setBadgeTextColor = async function() { + try { + await webext.browserAction.setBadgeTextColor(...arguments); + } + catch { + } + }; + vAPI.browserAction.setBadgeBackgroundColor = async function() { + try { + await webext.browserAction.setBadgeBackgroundColor(...arguments); + } + catch { + } + }; + vAPI.browserAction.setBadgeText = async function() { + try { + await webext.browserAction.setBadgeText(...arguments); + } + catch { + } + }; + vAPI.browserAction.setIcon = async function() { + try { + await webext.browserAction.setIcon(...arguments); + } + catch { + } + }; + } +} + +/******************************************************************************/ +/******************************************************************************/ + +// Must read: https://code.google.com/p/chromium/issues/detail?id=410868#c8 + +// https://github.com/chrisaljoudi/uBlock/issues/19 +// https://github.com/chrisaljoudi/uBlock/issues/207 +// Since we may be called asynchronously, the tab id may not exist +// anymore, so this ensures it does still exist. + +// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/browserAction#Browser_compatibility +// Firefox for Android does no support browser.browserAction.setIcon(). +// Performance: use ImageData for platforms supporting it. + +// https://github.com/uBlockOrigin/uBlock-issues/issues/32 +// Ensure ImageData for toolbar icon is valid before use. + +{ + const browserAction = vAPI.browserAction; + const titleTemplate = `${browser.runtime.getManifest().browser_action.default_title} ({badge})`; + const icons = [ + { path: { + '16': 'img/icon_16-off.png', + '32': 'img/icon_32-off.png', + '64': 'img/icon_64-off.png', + } }, + { path: { + '16': 'img/icon_16.png', + '32': 'img/icon_32.png', + '64': 'img/icon_64.png', + } }, + ]; + + (( ) => { + if ( browserAction.setIcon === undefined ) { return; } + + // The global badge text and background color. + if ( browserAction.setBadgeBackgroundColor !== undefined ) { + browserAction.setBadgeBackgroundColor({ color: '#666666' }); + } + if ( browserAction.setBadgeTextColor !== undefined ) { + browserAction.setBadgeTextColor({ color: '#FFFFFF' }); + } + + // As of 2018-05, benchmarks show that only Chromium benefits for sure + // from using ImageData. + // + // Chromium creates a new ImageData instance every call to setIcon + // with paths: + // https://cs.chromium.org/chromium/src/extensions/renderer/resources/set_icon.js?l=56&rcl=99be185c25738437ecfa0dafba72a26114196631 + // + // Firefox uses an internal cache for each setIcon's paths: + // https://searchfox.org/mozilla-central/rev/5ff2d7683078c96e4b11b8a13674daded935aa44/browser/components/extensions/parent/ext-browserAction.js#631 + if ( vAPI.webextFlavor.soup.has('chromium') === false ) { return; } + + const imgs = []; + for ( let i = 0; i < icons.length; i++ ) { + for ( const key of Object.keys(icons[i].path) ) { + if ( parseInt(key, 10) >= 64 ) { continue; } + imgs.push({ i: i, p: key, cached: false }); + } + } + + // https://github.com/uBlockOrigin/uBlock-issues/issues/296 + const safeGetImageData = function(ctx, w, h) { + let data; + try { + data = ctx.getImageData(0, 0, w, h); + } catch { + } + return data; + }; + + const onLoaded = function() { + for ( const img of imgs ) { + if ( img.r.complete === false ) { return; } + } + const ctx = document.createElement('canvas') + .getContext('2d', { willReadFrequently: true }); + const iconData = [ null, null ]; + for ( const img of imgs ) { + if ( img.cached ) { continue; } + const w = img.r.naturalWidth, h = img.r.naturalHeight; + ctx.width = w; ctx.height = h; + ctx.clearRect(0, 0, w, h); + ctx.drawImage(img.r, 0, 0); + if ( iconData[img.i] === null ) { iconData[img.i] = {}; } + const imgData = safeGetImageData(ctx, w, h); + if ( + imgData instanceof Object === false || + imgData.data instanceof Uint8ClampedArray === false || + imgData.data[0] !== 0 || + imgData.data[1] !== 0 || + imgData.data[2] !== 0 || + imgData.data[3] !== 0 + ) { + return; + } + iconData[img.i][img.p] = imgData; + img.cached = true; + } + for ( let i = 0; i < iconData.length; i++ ) { + if ( iconData[i] ) { + icons[i] = { imageData: iconData[i] }; + } + } + }; + for ( const img of imgs ) { + img.r = new Image(); + img.r.addEventListener('load', onLoaded, { once: true }); + img.r.src = icons[img.i].path[img.p]; + } + })(); + + // parts: bit 0 = icon + // bit 1 = badge text + // bit 2 = badge color + // bit 3 = hide badge + + vAPI.setIcon = async function(tabId, details) { + tabId = toTabId(tabId); + if ( tabId === 0 ) { return; } + + const tab = await vAPI.tabs.get(tabId); + if ( tab === null ) { return; } + + const hasUnprocessedRequest = vAPI.net && vAPI.net.hasUnprocessedRequest(tabId); + const { parts, state } = details; + const { badge, color } = hasUnprocessedRequest + ? { badge: '!', color: '#FC0' } + : details; + + if ( browserAction.setIcon !== undefined ) { + if ( parts === undefined || (parts & 0b0001) !== 0 ) { + browserAction.setIcon( + Object.assign({ tabId: tab.id }, icons[state]) + ); + } + if ( (parts & 0b0010) !== 0 ) { + browserAction.setBadgeText({ + tabId: tab.id, + text: (parts & 0b1000) === 0 ? badge : '' + }); + } + if ( (parts & 0b0100) !== 0 ) { + browserAction.setBadgeBackgroundColor({ tabId: tab.id, color }); + } + } + + // Insert the badge text in the title if: + // - the platform does not support browserAction.setIcon(); OR + // - the rendering of the badge is disabled + if ( browserAction.setTitle !== undefined ) { + const title = titleTemplate.replace('{badge}', + state === 1 ? (badge !== '' ? badge : '0') : 'off' + ); + browserAction.setTitle({ tabId: tab.id, title }); + } + + if ( vAPI.contextMenu instanceof Object ) { + vAPI.contextMenu.onMustUpdate(tabId); + } + }; + + vAPI.setDefaultIcon = function(flavor, text) { + if ( browserAction.setIcon === undefined ) { return; } + browserAction.setIcon({ + path: { + '16': `img/icon_16${flavor}.png`, + '32': `img/icon_32${flavor}.png`, + '64': `img/icon_64${flavor}.png`, + } + }); + browserAction.setBadgeText({ text }); + browserAction.setBadgeBackgroundColor({ + color: text === '!' ? '#FC0' : '#666' + }); + }; +} + +browser.browserAction.onClicked.addListener(function(tab) { + vAPI.tabs.open({ + select: true, + url: `popup-fenix.html?tabId=${tab.id}&intab=1`, + }); +}); + +/******************************************************************************/ +/******************************************************************************/ + +// https://github.com/uBlockOrigin/uBlock-issues/issues/710 +// uBO uses only ports to communicate with its auxiliary pages and +// content scripts. Whether a message can trigger a privileged operation is +// decided based on whether the port from which a message is received is +// privileged, which is a status evaluated once, at port connection time. +// +// https://github.com/uBlockOrigin/uBlock-issues/issues/1992 +// If present, use MessageSender.origin to determine whether the port is +// from a privileged page, otherwise use MessageSender.url. +// MessageSender.origin is more reliable as it is not spoofable by a +// compromised renderer. + +vAPI.messaging = { + ports: new Map(), + listeners: new Map(), + defaultHandler: null, + PRIVILEGED_ORIGIN: vAPI.getURL('').slice(0, -1), + NOOPFUNC: function(){}, + UNHANDLED: 'vAPI.messaging.notHandled', + + listen: function(details) { + this.listeners.set(details.name, { + fn: details.listener, + privileged: details.privileged === true + }); + }, + + onPortDisconnect: function(port) { + this.ports.delete(port.name); + void browser.runtime.lastError; + }, + + // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/Port + // port.sender is always present for onConnect() listeners. + onPortConnect: function(port) { + port.onDisconnect.addListener(port => + this.onPortDisconnect(port) + ); + port.onMessage.addListener((request, port) => + this.onPortMessage(request, port) + ); + const portDetails = { port }; + const sender = port.sender; + const { origin, tab, url } = sender; + portDetails.frameId = sender.frameId; + portDetails.frameURL = url; + portDetails.privileged = origin !== undefined + ? origin === this.PRIVILEGED_ORIGIN + : url.startsWith(this.PRIVILEGED_ORIGIN); + if ( tab ) { + portDetails.tabId = tab.id; + portDetails.tabURL = tab.url; + } + this.ports.set(port.name, portDetails); + // https://bugzilla.mozilla.org/show_bug.cgi?id=1652925#c24 + port.sender = undefined; + }, + + setup: function(defaultHandler) { + if ( this.defaultHandler !== null ) { return; } + + if ( typeof defaultHandler !== 'function' ) { + defaultHandler = function() { + return this.UNHANDLED; + }; + } + this.defaultHandler = defaultHandler; + + browser.runtime.onConnect.addListener( + port => this.onPortConnect(port) + ); + + // https://bugzilla.mozilla.org/show_bug.cgi?id=1392067 + // Workaround: manually remove ports matching removed tab. + if ( + vAPI.webextFlavor.soup.has('firefox') && + vAPI.webextFlavor.major < 61 + ) { + browser.tabs.onRemoved.addListener(tabId => { + for ( const { port, tabId: portTabId } of this.ports.values() ) { + if ( portTabId !== tabId ) { continue; } + this.onPortDisconnect(port); + } + }); + } + }, + + onFrameworkMessage: function(request, port, callback) { + const portDetails = this.ports.get(port.name) || {}; + const tabId = portDetails.tabId; + const msg = request.msg; + switch ( msg.what ) { + case 'localStorage': { + if ( portDetails.privileged !== true ) { break; } + const args = msg.args || []; + vAPI.localStorage[msg.fn](...args).then(result => { + callback(result); + }); + break; + } + case 'userCSS': { + if ( tabId === undefined ) { break; } + const promises = []; + if ( msg.add ) { + const details = { + code: undefined, + frameId: portDetails.frameId, + matchAboutBlank: true, + runAt: 'document_start', + }; + for ( const cssText of msg.add ) { + details.code = cssText; + promises.push(vAPI.tabs.insertCSS(tabId, details)); + } + } + if ( msg.remove ) { + const details = { + code: undefined, + frameId: portDetails.frameId, + matchAboutBlank: true, + }; + for ( const cssText of msg.remove ) { + details.code = cssText; + promises.push(vAPI.tabs.removeCSS(tabId, details)); + } + } + Promise.all(promises).then(( ) => { + callback(); + }); + break; + } + default: + break; + } + }, + + // Use a wrapper to avoid closure and to allow reuse. + CallbackWrapper: class { + constructor(messaging, port, msgId) { + this.messaging = messaging; + this.callback = this.proxy.bind(this); // bind once + this.init(port, msgId); + } + init(port, msgId) { + this.port = port; + this.msgId = msgId; + return this; + } + proxy(response) { + // https://github.com/chrisaljoudi/uBlock/issues/383 + try { + this.port.postMessage({ + msgId: this.msgId, + msg: response !== undefined ? response : null, + }); + } catch { + this.messaging.onPortDisconnect(this.port); + } + // Store for reuse + this.port = null; + this.messaging.callbackWrapperJunkyard.push(this); + } + }, + + callbackWrapperJunkyard: [], + + callbackWrapperFactory: function(port, msgId) { + return this.callbackWrapperJunkyard.length !== 0 + ? this.callbackWrapperJunkyard.pop().init(port, msgId) + : new this.CallbackWrapper(this, port, msgId); + }, + + onPortMessage: function(request, port) { + // prepare response + let callback = this.NOOPFUNC; + if ( request.msgId !== undefined ) { + callback = this.callbackWrapperFactory(port, request.msgId).callback; + } + + // Content process to main process: framework handler. + if ( request.channel === 'vapi' ) { + this.onFrameworkMessage(request, port, callback); + return; + } + + // Auxiliary process to main process: specific handler + const portDetails = this.ports.get(port.name); + if ( portDetails === undefined ) { return; } + + const listenerDetails = this.listeners.get(request.channel); + let r = this.UNHANDLED; + if ( + (listenerDetails !== undefined) && + (listenerDetails.privileged === false || portDetails.privileged) + + ) { + r = listenerDetails.fn(request.msg, portDetails, callback); + } + if ( r !== this.UNHANDLED ) { return; } + + // Auxiliary process to main process: default handler + if ( portDetails.privileged ) { + r = this.defaultHandler(request.msg, portDetails, callback); + if ( r !== this.UNHANDLED ) { return; } + } + + // Auxiliary process to main process: no handler + ubolog( + `vAPI.messaging.onPortMessage > unhandled request: ${JSON.stringify(request.msg)}`, + request + ); + + // Need to callback anyways in case caller expected an answer, or + // else there is a memory leak on caller's side + callback(); + }, +}; + +/******************************************************************************/ +/******************************************************************************/ + +// https://github.com/gorhill/uBlock/issues/3474 +// https://github.com/gorhill/uBlock/issues/2823 +// Foil ability of web pages to identify uBO through +// its web accessible resources. +// https://github.com/gorhill/uBlock/issues/3497 +// Prevent web pages from interfering with uBO's element picker +// https://github.com/uBlockOrigin/uBlock-issues/issues/550 +// Support using a new secret for every network request. + +{ + const root = vAPI.getURL('/'); + const reSecret = /\?secret=(\w+)/; + const shortSecrets = []; + let lastShortSecretTime = 0; + + // Long secrets are valid until revoked or uBO restarts. The realm is one + // value out of 36^18 = over 10^28 values. + const longSecrets = new Set(); + + const guard = details => { + const match = reSecret.exec(details.url); + if ( match === null ) { return { cancel: true }; } + const secret = match[1]; + if ( longSecrets.has(secret) ) { return; } + const pos = shortSecrets.indexOf(secret); + if ( pos === -1 ) { return { cancel: true }; } + shortSecrets.splice(pos, 1); + }; + + browser.webRequest.onBeforeRequest.addListener( + guard, + { + urls: [ root + 'web_accessible_resources/*' ] + }, + [ 'blocking' ] + ); + + vAPI.warSecret = { + short: ( ) => { + if ( shortSecrets.length !== 0 ) { + if ( (Date.now() - lastShortSecretTime) > 5000 ) { + shortSecrets.splice(0); + } else if ( shortSecrets.length > 256 ) { + shortSecrets.splice(0, shortSecrets.length - 192); + } + } + lastShortSecretTime = Date.now(); + const secret = vAPI.generateSecret(); + shortSecrets.push(secret); + return secret; + }, + long: previous => { + if ( previous !== undefined ) { + longSecrets.delete(previous); + } + const secret = vAPI.generateSecret(3); + longSecrets.add(secret); + return secret; + }, + }; +} + +/******************************************************************************/ + +vAPI.Net = class { + constructor() { + this.validTypes = new Set(); + { + const wrrt = browser.webRequest.ResourceType; + for ( const typeKey in wrrt ) { + if ( Object.hasOwn(wrrt, typeKey) ) { + this.validTypes.add(wrrt[typeKey]); + } + } + } + this.suspendableListener = undefined; + this.deferredSuspendableListener = undefined; + this.listenerMap = new WeakMap(); + this.suspendDepth = 0; + this.unprocessedTabs = new Map(); + + browser.webRequest.onBeforeRequest.addListener( + details => { + this.normalizeDetails(details); + if ( this.suspendDepth !== 0 && details.tabId >= 0 ) { + return this.suspendOneRequest(details); + } + return this.onBeforeSuspendableRequest(details); + }, + this.denormalizeFilters({ urls: [ 'http://*/*', 'https://*/*' ] }), + [ 'blocking' ] + ); + + vAPI.setDefaultIcon('-loading', ''); + } + setOptions(/* options */) { + } + normalizeDetails(/* details */) { + } + denormalizeFilters(filters) { + const urls = filters.urls || [ '' ]; + let types = filters.types; + if ( Array.isArray(types) ) { + types = this.denormalizeTypes(types); + } + if ( + (this.validTypes.has('websocket')) && + (types === undefined || types.indexOf('websocket') !== -1) && + (urls.indexOf('') === -1) + ) { + if ( urls.indexOf('ws://*/*') === -1 ) { + urls.push('ws://*/*'); + } + if ( urls.indexOf('wss://*/*') === -1 ) { + urls.push('wss://*/*'); + } + } + return { types, urls }; + } + denormalizeTypes(types) { + return types; + } + canonicalNameFromHostname(/* hn */) { + } + addListener(which, clientListener, filters, options) { + const actualFilters = this.denormalizeFilters(filters); + const actualListener = this.makeNewListenerProxy(clientListener); + browser.webRequest[which].addListener( + actualListener, + actualFilters, + options + ); + } + onBeforeSuspendableRequest(details) { + if ( this.suspendableListener !== undefined ) { + return this.suspendableListener(details); + } + this.onUnprocessedRequest(details); + } + setSuspendableListener(listener) { + for ( const [ tabId, requests ] of this.unprocessedTabs ) { + let i = requests.length; + while ( i-- ) { + const r = listener(requests[i]); + if ( r === undefined || r.cancel !== true ) { + requests.splice(i, 1); + } + } + if ( requests.length !== 0 ) { continue; } + this.unprocessedTabs.delete(tabId); + } + if ( this.unprocessedTabs.size !== 0 ) { + this.deferredSuspendableListener = listener; + listener = details => { + const { tabId, type } = details; + if ( type === 'main_frame' && this.unprocessedTabs.has(tabId) ) { + if ( this.removeUnprocessedRequest(tabId) ) { + return this.suspendableListener(details); + } + } + return this.deferredSuspendableListener(details); + }; + } + this.suspendableListener = listener; + vAPI.setDefaultIcon('', ''); + } + removeListener(which, clientListener) { + const actualListener = this.listenerMap.get(clientListener); + if ( actualListener === undefined ) { return; } + this.listenerMap.delete(clientListener); + browser.webRequest[which].removeListener(actualListener); + } + makeNewListenerProxy(clientListener) { + const actualListener = details => { + this.normalizeDetails(details); + return clientListener(details); + }; + this.listenerMap.set(clientListener, actualListener); + return actualListener; + } + handlerBehaviorChanged() { + browser.webRequest.handlerBehaviorChanged(); + } + onUnprocessedRequest(details) { + const { tabId } = details; + if ( tabId === -1 ) { return; } + if ( this.unprocessedTabs.size === 0 ) { + vAPI.setDefaultIcon('-loading', '!'); + } + let requests = this.unprocessedTabs.get(tabId); + if ( requests === undefined ) { + this.unprocessedTabs.set(tabId, (requests = [])); + } + requests.push(Object.assign({}, details)); + } + hasUnprocessedRequest(tabId) { + if ( this.unprocessedTabs.size === 0 ) { return false; } + if ( tabId === undefined ) { return true; } + return this.unprocessedTabs.has(tabId); + } + removeUnprocessedRequest(tabId) { + if ( this.deferredSuspendableListener === undefined ) { + this.unprocessedTabs.clear(); + return true; + } + if ( tabId !== undefined ) { + this.unprocessedTabs.delete(tabId); + } else { + this.unprocessedTabs.clear(); + } + if ( this.unprocessedTabs.size !== 0 ) { return false; } + this.suspendableListener = this.deferredSuspendableListener; + this.deferredSuspendableListener = undefined; + return true; + } + suspendOneRequest() { + } + unsuspendAllRequests() { + } + suspend() { + this.suspendDepth += 1; + } + unsuspend({ all = false, discard = false } = {}) { + if ( this.suspendDepth === 0 ) { return; } + if ( all ) { + this.suspendDepth = 0; + } else { + this.suspendDepth -= 1; + } + if ( this.suspendDepth !== 0 ) { return; } + this.unsuspendAllRequests(discard); + } + headerValue(headers, name) { + for ( const header of headers ) { + if ( header.name.toLowerCase() === name ) { + return header.value.trim(); + } + } + return ''; + } + static canSuspend() { + return false; + } +}; + +/******************************************************************************/ +/******************************************************************************/ + +// To be defined by platform-specific code. + +vAPI.scriptletsInjector = (( ) => { + self.uBO_scriptletsInjected = ''; +}).toString(); + +/******************************************************************************/ +/******************************************************************************/ + +// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/contextMenus#Browser_compatibility +// Firefox for Android does no support browser.contextMenus. + +vAPI.contextMenu = webext.menus && { + _callback: null, + _hash: '', + onMustUpdate: function() {}, + setEntries: function(entries, callback) { + entries = entries || []; + const hash = entries.map(v => v.id).join(); + if ( hash === this._hash ) { return; } + this._hash = hash; + webext.menus.removeAll(); + for ( const entry of entries ) { + webext.menus.create(JSON.parse(JSON.stringify(entry))); + } + const n = entries.length; + callback = callback || null; + if ( callback === this._callback ) { return; } + if ( n !== 0 && callback !== null ) { + webext.menus.onClicked.addListener(callback); + this._callback = callback; + } else if ( n === 0 && this._callback !== null ) { + webext.menus.onClicked.removeListener(this._callback); + this._callback = null; + } + } +}; + +/******************************************************************************/ +/******************************************************************************/ + +vAPI.commands = browser.commands; + +/******************************************************************************/ +/******************************************************************************/ + +// https://github.com/gorhill/uBlock/issues/531 +// Storage area dedicated to admin settings. Read-only. + +// https://github.com/gorhill/uBlock/commit/43a5ed735b95a575a9339b6e71a1fcb27a99663b#commitcomment-13965030 +// Not all Chromium-based browsers support managed storage. Merely testing or +// exception handling in this case does NOT work: I don't know why. The +// extension on Opera ends up in a non-sensical state, whereas vAPI become +// undefined out of nowhere. So only solution left is to test explicitly for +// Opera. +// https://github.com/gorhill/uBlock/issues/900 +// Also, UC Browser: http://www.upsieutoc.com/image/WXuH + +// https://github.com/uBlockOrigin/uAssets/discussions/16939 +// Use a cached version of admin settings, such that there is no blocking +// call on `storage.managed`. The side effect is that any changes to admin +// settings will require an extra extension restart to take effect. + +vAPI.adminStorage = (( ) => { + if ( webext.storage.managed instanceof Object === false ) { + return { + get: function() { + return Promise.resolve(); + }, + }; + } + const cacheManagedStorage = async ( ) => { + let store; + try { + store = await webext.storage.managed.get(); + } catch { + } + vAPI.storage.set({ cachedManagedStorage: store || {} }); + }; + + return { + get: async function(key) { + let bin; + try { + bin = await vAPI.storage.get('cachedManagedStorage') || {}; + if ( Object.keys(bin).length === 0 ) { + bin = await webext.storage.managed.get() || {}; + } else { + bin = bin.cachedManagedStorage; + } + } catch { + bin = {}; + } + cacheManagedStorage(); + if ( key === undefined || key === null ) { + return bin; + } + if ( typeof key === 'string' && bin instanceof Object ) { + return bin[key]; + } + const out = {}; + if ( Array.isArray(key) ) { + for ( const k of key ) { + if ( bin[k] === undefined ) { continue; } + out[k] = bin[k]; + } + return out; + } + for ( const [ k, v ] of Object.entries(key) ) { + out[k] = bin[k] !== undefined ? bin[k] : v; + } + return out; + } + }; +})(); + +/******************************************************************************/ +/******************************************************************************/ + +// A localStorage-like object which should be accessible from the +// background page or auxiliary pages. +// +// https://github.com/uBlockOrigin/uBlock-issues/issues/899 +// Convert into asynchronous access API. +// +// Note: vAPI.localStorage should already be defined with the client-side +// implementation at this point, but we override with the +// background-side implementation. +vAPI.localStorage = { + start: async function() { + if ( this.cache instanceof Promise ) { return this.cache; } + if ( this.cache instanceof Object ) { return this.cache; } + this.cache = vAPI.storage.get('localStorage').then(bin => { + this.cache = bin && bin.localStorage || {}; + }); + return this.cache; + }, + clear: function() { + this.cache = {}; + return vAPI.storage.set({ localStorage: this.cache }); + }, + getItem: function(key) { + if ( this.cache instanceof Object === false ) { + console.info(`localStorage.getItem('${key}') not ready`); + return null; + } + const value = this.cache[key]; + return value !== undefined ? value : null; + }, + getItemAsync: async function(key) { + await this.start(); + const value = this.cache[key]; + return value !== undefined ? value : null; + }, + removeItem: async function(key) { + this.setItem(key); + }, + setItem: async function(key, value = undefined) { + await this.start(); + if ( value === this.cache[key] ) { return; } + this.cache[key] = value; + return vAPI.storage.set({ localStorage: this.cache }); + }, + cache: undefined, +}; + +vAPI.localStorage.start(); + +/******************************************************************************/ +/******************************************************************************/ + +// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage/sync + +vAPI.cloud = (( ) => { + // Not all platforms support `webext.storage.sync`. + if ( webext.storage.sync instanceof Object === false ) { return; } + + // Currently, only Chromium supports the following constants -- these + // values will be assumed for platforms which do not define them. + // https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/storage/sync + // > You can store up to 100KB of data using this API + const MAX_ITEMS = + webext.storage.sync.MAX_ITEMS || 512; + const QUOTA_BYTES = + webext.storage.sync.QUOTA_BYTES || 102400; + const QUOTA_BYTES_PER_ITEM = + webext.storage.sync.QUOTA_BYTES_PER_ITEM || 8192; + + const chunkCountPerFetch = 16; // Must be a power of 2 + const maxChunkCountPerItem = Math.floor(MAX_ITEMS * 0.75) & ~(chunkCountPerFetch - 1); + + // https://github.com/gorhill/uBlock/issues/3006 + // For Firefox, we will use a lower ratio to allow for more overhead for + // the infrastructure. Unfortunately this leads to less usable space for + // actual data, but all of this is provided for free by browser vendors, + // so we need to accept and deal with these limitations. + const evalMaxChunkSize = function() { + return Math.floor( + QUOTA_BYTES_PER_ITEM * + (vAPI.webextFlavor.soup.has('firefox') ? 0.6 : 0.75) + ); + }; + + let maxChunkSize = evalMaxChunkSize(); + + // The real actual webextFlavor value may not be set in stone, so listen + // for possible future changes. + window.addEventListener('webextFlavor', function() { + maxChunkSize = evalMaxChunkSize(); + }, { once: true }); + + const options = { + defaultDeviceName: window.navigator.platform, + deviceName: undefined, + }; + + vAPI.localStorage.getItemAsync('deviceName').then(value => { + options.deviceName = value; + }); + + // This is used to find out a rough count of how many chunks exists: + // We "poll" at specific index in order to get a rough idea of how + // large is the stored string. + // This allows reading a single item with only 2 sync operations -- a + // good thing given chrome.storage.sync.MAX_WRITE_OPERATIONS_PER_MINUTE + // and chrome.storage.sync.MAX_WRITE_OPERATIONS_PER_HOUR. + + const getCoarseChunkCount = async function(datakey) { + const keys = {}; + for ( let i = 0; i < maxChunkCountPerItem; i += 16 ) { + keys[datakey + i.toString()] = ''; + } + let bin; + try { + bin = await webext.storage.sync.get(keys); + } catch (reason) { + return String(reason); + } + let chunkCount = 0; + for ( let i = 0; i < maxChunkCountPerItem; i += 16 ) { + if ( bin[datakey + i.toString()] === '' ) { break; } + chunkCount = i + 16; + } + return chunkCount; + }; + + const deleteChunks = async function(datakey, start) { + const keys = []; + + const n = await getCoarseChunkCount(datakey); + for ( let i = start; i < n; i++ ) { + keys.push(datakey + i.toString()); + } + if ( keys.length !== 0 ) { + webext.storage.sync.remove(keys); + } + }; + + const push = async function(details) { + const { datakey, data, encode } = details; + if ( data === undefined || typeof data === 'string' && data === '' ) { + return deleteChunks(datakey, 0); + } + const item = { + source: options.deviceName || options.defaultDeviceName, + tstamp: Date.now(), + data, + }; + const encoded = encode instanceof Function + ? await encode(item) + : JSON.stringify(item); + + // Chunkify taking into account QUOTA_BYTES_PER_ITEM: + // https://developer.chrome.com/extensions/storage#property-sync + // "The maximum size (in bytes) of each individual item in sync + // "storage, as measured by the JSON stringification of its value + // "plus its key length." + const bin = {}; + const chunkCount = Math.ceil(encoded.length / maxChunkSize); + for ( let i = 0; i < chunkCount; i++ ) { + bin[datakey + i.toString()] + = encoded.substr(i * maxChunkSize, maxChunkSize); + } + bin[datakey + chunkCount.toString()] = ''; // Sentinel + + // Remove potentially unused trailing chunks before storing the data, + // this will free storage space which could otherwise cause the push + // operation to fail. + try { + await deleteChunks(datakey, chunkCount + 1); + } catch { + } + + // Push the data to browser-provided cloud storage. + try { + await webext.storage.sync.set(bin); + } catch (reason) { + return String(reason); + } + }; + + const pull = async function(details) { + const { datakey, decode } = details; + + const result = await getCoarseChunkCount(datakey); + if ( typeof result !== 'number' ) { + return result; + } + const chunkKeys = {}; + for ( let i = 0; i < result; i++ ) { + chunkKeys[datakey + i.toString()] = ''; + } + + let bin; + try { + bin = await webext.storage.sync.get(chunkKeys); + } catch (reason) { + return String(reason); + } + + // Assemble chunks into a single string. + // https://www.reddit.com/r/uMatrix/comments/8lc9ia/my_rules_tab_hangs_with_cloud_storage_support/ + // Explicit sentinel is not necessarily present: this can + // happen when the number of chunks is a multiple of + // chunkCountPerFetch. Hence why we must also test against + // undefined. + let encoded = []; + let i = 0; + for (;;) { + const slice = bin[datakey + i.toString()]; + if ( slice === '' || slice === undefined ) { break; } + encoded.push(slice); + i += 1; + } + encoded = encoded.join(''); + + let entry = null; + try { + if ( decode instanceof Function ) { + entry = await decode(encoded) || null; + } + if ( typeof entry === 'string' ) { + entry = JSON.parse(entry); + } + } catch { + } + return entry; + }; + + const used = async function(datakey) { + if ( webext.storage.sync.getBytesInUse instanceof Function === false ) { + return; + } + const coarseCount = await getCoarseChunkCount(datakey); + if ( typeof coarseCount !== 'number' ) { return; } + const keys = []; + for ( let i = 0; i < coarseCount; i++ ) { + keys.push(`${datakey}${i}`); + } + let results; + try { + results = await Promise.all([ + webext.storage.sync.getBytesInUse(keys), + webext.storage.sync.getBytesInUse(null), + ]); + } catch { + } + if ( Array.isArray(results) === false ) { return; } + return { used: results[0], total: results[1], max: QUOTA_BYTES }; + }; + + const getOptions = function(callback) { + if ( typeof callback !== 'function' ) { return; } + callback(options); + }; + + const setOptions = function(details, callback) { + if ( typeof details !== 'object' || details === null ) { return; } + + if ( typeof details.deviceName === 'string' ) { + vAPI.localStorage.setItem('deviceName', details.deviceName); + options.deviceName = details.deviceName; + } + + getOptions(callback); + }; + + return { push, pull, used, getOptions, setOptions }; +})(); + +/******************************************************************************/ +/******************************************************************************/ + +vAPI.alarms = { + create(...args) { + webext.alarms.create(...args); + }, + createIfNotPresent(name, ...args) { + webext.alarms.get(name).then(details => { + if ( details !== undefined ) { return; } + webext.alarms.create(name, ...args); + }); + }, + async clear(...args) { + return webext.alarms.clear(...args); + }, + onAlarm: { + addListener(...args) { + webext.alarms.onAlarm.addListener(...args); + }, + }, +}; + +/******************************************************************************/ diff --git a/platform/common/vapi-client.js b/platform/common/vapi-client.js new file mode 100644 index 0000000000000..afa939d1a73bd --- /dev/null +++ b/platform/common/vapi-client.js @@ -0,0 +1,248 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2014-2015 The uBlock Origin authors + Copyright (C) 2014-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 +*/ + +// For non-background page + +/******************************************************************************/ + +// https://github.com/chrisaljoudi/uBlock/issues/456 +// Skip if already injected. + +// >>>>>>>> start of HUGE-IF-BLOCK +if ( + typeof vAPI === 'object' && + vAPI.randomToken instanceof Function === false +) { + +/******************************************************************************/ +/******************************************************************************/ + +vAPI.randomToken = function() { + const n = Math.random(); + return String.fromCharCode(n * 25 + 97) + + Math.floor( + (0.25 + n * 0.75) * Number.MAX_SAFE_INTEGER + ).toString(36).slice(-8); +}; + +vAPI.sessionId = vAPI.randomToken(); +vAPI.setTimeout = vAPI.setTimeout || self.setTimeout.bind(self); + +/******************************************************************************/ + +vAPI.shutdown = { + jobs: [], + add: function(job) { + this.jobs.push(job); + }, + exec: function() { + // Shutdown asynchronously, to ensure shutdown jobs are called from + // the top context. + self.requestIdleCallback(( ) => { + const jobs = this.jobs.slice(); + this.jobs.length = 0; + while ( jobs.length !== 0 ) { + (jobs.pop())(); + } + }); + }, + remove: function(job) { + let pos; + while ( (pos = this.jobs.indexOf(job)) !== -1 ) { + this.jobs.splice(pos, 1); + } + } +}; + +/******************************************************************************/ + +vAPI.messaging = { + port: null, + portTimer: null, + portTimerDelay: 10000, + msgIdGenerator: 1, + pending: new Map(), + waitStartTime: 0, + shuttingDown: false, + + shutdown: function() { + this.shuttingDown = true; + this.destroyPort(); + }, + + // https://github.com/uBlockOrigin/uBlock-issues/issues/403 + // Spurious disconnection can happen, so do not consider such events + // as world-ending, i.e. stay around. Except for embedded frames. + + disconnectListener: function() { + void browser.runtime.lastError; + this.port = null; + if ( window !== window.top ) { + vAPI.shutdown.exec(); + } else { + this.destroyPort(); + } + }, + disconnectListenerBound: null, + + // 2020-09-01: + // In Firefox, `details instanceof Object` resolves to `false` despite + // `details` being a valid object. Consequently, falling back to use + // `typeof details`. + // This is an issue which surfaced when the element picker code was + // revisited to isolate the picker dialog DOM from the page DOM. + messageListener: function(details) { + if ( typeof details !== 'object' || details === null ) { return; } + if ( details.msgId === undefined ) { return; } + const resolver = this.pending.get(details.msgId); + if ( resolver === undefined ) { return; } + this.pending.delete(details.msgId); + resolver(details.msg); + }, + messageListenerBound: null, + + canDestroyPort: function() { + return this.pending.size === 0; + }, + + portPoller: function() { + this.portTimer = null; + if ( this.port !== null && this.canDestroyPort() ) { + return this.destroyPort(); + } + this.portTimer = vAPI.setTimeout(this.portPollerBound, this.portTimerDelay); + this.portTimerDelay = Math.min(this.portTimerDelay * 2, 60 * 60 * 1000); + }, + portPollerBound: null, + + destroyPort: function() { + if ( this.portTimer !== null ) { + clearTimeout(this.portTimer); + this.portTimer = null; + } + const port = this.port; + if ( port !== null ) { + port.disconnect(); + port.onMessage.removeListener(this.messageListenerBound); + port.onDisconnect.removeListener(this.disconnectListenerBound); + this.port = null; + } + // service pending callbacks + if ( this.pending.size !== 0 ) { + const pending = this.pending; + this.pending = new Map(); + for ( const resolver of pending.values() ) { + resolver(); + } + } + }, + + createPort: function() { + if ( this.shuttingDown ) { return null; } + if ( this.messageListenerBound === null ) { + this.messageListenerBound = this.messageListener.bind(this); + this.disconnectListenerBound = this.disconnectListener.bind(this); + this.portPollerBound = this.portPoller.bind(this); + } + try { + this.port = browser.runtime.connect({name: vAPI.sessionId}) || null; + } catch { + this.port = null; + } + // Not having a valid port at this point means the main process is + // not available: no point keeping the content scripts alive. + if ( this.port === null ) { + vAPI.shutdown.exec(); + return null; + } + this.port.onMessage.addListener(this.messageListenerBound); + this.port.onDisconnect.addListener(this.disconnectListenerBound); + this.portTimerDelay = 10000; + if ( this.portTimer === null ) { + this.portTimer = vAPI.setTimeout( + this.portPollerBound, + this.portTimerDelay + ); + } + return this.port; + }, + + getPort: function() { + return this.port !== null ? this.port : this.createPort(); + }, + + send: function(channel, msg) { + // Too large a gap between the last request and the last response means + // the main process is no longer reachable: memory leaks and bad + // performance become a risk -- especially for long-lived, dynamic + // pages. Guard against this. + if ( this.pending.size > 64 ) { + if ( (Date.now() - this.waitStartTime) > 60000 ) { + vAPI.shutdown.exec(); + } + } + const port = this.getPort(); + if ( port === null ) { + return Promise.resolve(); + } + if ( this.pending.size === 0 ) { + this.waitStartTime = Date.now(); + } + const msgId = this.msgIdGenerator++; + const promise = new Promise(resolve => { + this.pending.set(msgId, resolve); + }); + port.postMessage({ channel, msgId, msg }); + return promise; + }, +}; + +vAPI.shutdown.add(( ) => { + vAPI.messaging.shutdown(); + window.vAPI = undefined; +}); + +/******************************************************************************/ +/******************************************************************************/ + +} +// <<<<<<<< end of HUGE-IF-BLOCK + + + + + + + + +/******************************************************************************* + + DO NOT: + - Remove the following code + - Add code beyond the following code + Reason: + - https://github.com/gorhill/uBlock/pull/3721 + - uBO never uses the return value from injected content scripts + +**/ + +void 0; diff --git a/platform/common/vapi-common.js b/platform/common/vapi-common.js new file mode 100644 index 0000000000000..65e0c93c5c048 --- /dev/null +++ b/platform/common/vapi-common.js @@ -0,0 +1,295 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2014-2015 The uBlock Origin authors + Copyright (C) 2014-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 +*/ + +// For background page or non-background pages + +/******************************************************************************/ + +vAPI.T0 = Date.now(); + +vAPI.setTimeout = vAPI.setTimeout || self.setTimeout.bind(self); + +/******************************************************************************/ + +vAPI.defer = { + create(callback) { + return new this.Client(callback); + }, + once(delay, ...args) { + const delayInMs = vAPI.defer.normalizeDelay(delay); + return new Promise(resolve => { + vAPI.setTimeout( + (...args) => { resolve(...args); }, + delayInMs, + ...args + ); + }); + }, + Client: class { + constructor(callback) { + this.timer = null; + this.type = 0; + this.callback = callback; + } + on(delay, ...args) { + if ( this.timer !== null ) { return; } + const delayInMs = vAPI.defer.normalizeDelay(delay); + this.type = 0; + this.timer = vAPI.setTimeout(( ) => { + this.timer = null; + this.callback(...args); + }, delayInMs || 1); + } + offon(delay, ...args) { + this.off(); + this.on(delay, ...args); + } + onvsync(delay, ...args) { + if ( this.timer !== null ) { return; } + const delayInMs = vAPI.defer.normalizeDelay(delay); + if ( delayInMs !== 0 ) { + this.type = 0; + this.timer = vAPI.setTimeout(( ) => { + this.timer = null; + this.onraf(...args); + }, delayInMs); + } else { + this.onraf(...args); + } + } + onidle(delay, options, ...args) { + if ( this.timer !== null ) { return; } + const delayInMs = vAPI.defer.normalizeDelay(delay); + if ( delayInMs !== 0 ) { + this.type = 0; + this.timer = vAPI.setTimeout(( ) => { + this.timer = null; + this.onric(options, ...args); + }, delayInMs); + } else { + this.onric(options, ...args); + } + } + off() { + if ( this.timer === null ) { return; } + switch ( this.type ) { + case 0: + self.clearTimeout(this.timer); + break; + case 1: + self.cancelAnimationFrame(this.timer); + break; + case 2: + self.cancelIdleCallback(this.timer); + break; + default: + break; + } + this.timer = null; + } + onraf(...args) { + if ( this.timer !== null ) { return; } + this.type = 1; + this.timer = requestAnimationFrame(( ) => { + this.timer = null; + this.callback(...args); + }); + } + onric(options, ...args) { + if ( this.timer !== null ) { return; } + this.type = 2; + this.timer = self.requestIdleCallback(deadline => { + this.timer = null; + this.callback(deadline, ...args); + }, options); + } + ongoing() { + return this.timer !== null; + } + }, + normalizeDelay(delay = 0) { + if ( typeof delay === 'object' ) { + if ( delay.sec !== undefined ) { + return delay.sec * 1000; + } else if ( delay.min !== undefined ) { + return delay.min * 60000; + } else if ( delay.hr !== undefined ) { + return delay.hr * 3600000; + } + } + return delay; + } +}; + +/******************************************************************************/ + +vAPI.webextFlavor = { + major: 0, + soup: new Set(), + get env() { + return Array.from(this.soup); + } +}; + +// https://bugzilla.mozilla.org/show_bug.cgi?id=1858743 +// Add support for native `:has()` for Firefox 121+ + +(( ) => { + const ua = navigator.userAgent; + const flavor = vAPI.webextFlavor; + const soup = flavor.soup; + const dispatch = function() { + window.dispatchEvent(new CustomEvent('webextFlavor')); + }; + + // This is always true. + soup.add('ublock').add('webext'); + soup.add('ipaddress'); + + // Whether this is a dev build. + const manifest = browser.runtime.getManifest(); + const version = manifest.version_name || manifest.version; + if ( /^\d+\.\d+\.\d+\D/.test(version) ) { + soup.add('devbuild'); + } + + if ( /\bMobile\b/.test(ua) ) { + soup.add('mobile'); + } + + if ( CSS.supports('selector(a:has(b))') ) { + soup.add('native_css_has'); + } + + const extensionOrigin = browser.runtime.getURL(''); + + // Order of tests is important + flavor.isGecko = extensionOrigin.startsWith('moz-extension://'); + if ( flavor.isGecko ) { + soup.add('firefox') + .add('user_stylesheet') + .add('html_filtering'); + const match = /Firefox\/(\d+)/.exec(ua); + flavor.major = match && parseInt(match[1], 10) || 115; + } else { + const match = /\bChrom(?:e|ium)\/(\d+)/.exec(ua); + if ( match !== null ) { + soup.add('chromium') + .add('user_stylesheet'); + } + flavor.major = match && parseInt(match[1], 10) || 120; + } + + // Don't starve potential listeners + vAPI.setTimeout(dispatch, 97); +})(); + +/******************************************************************************/ + +vAPI.download = function(details) { + if ( !details.url ) { return; } + const a = document.createElement('a'); + a.href = details.url; + a.setAttribute('download', details.filename || ''); + a.setAttribute('type', 'text/plain'); + a.dispatchEvent(new MouseEvent('click')); +}; + +/******************************************************************************/ + +vAPI.getURL = browser.runtime.getURL; + +/******************************************************************************/ + +// https://github.com/gorhill/uBlock/issues/3057 +// - webNavigation.onCreatedNavigationTarget become broken on Firefox when we +// try to make the popup panel close itself using the original +// `window.open('', '_self').close()`. + +vAPI.closePopup = function() { + if ( vAPI.webextFlavor.soup.has('firefox') ) { + window.close(); + return; + } + + // TODO: try to figure why this was used instead of a plain window.close(). + // https://github.com/gorhill/uBlock/commit/b301ac031e0c2e9a99cb6f8953319d44e22f33d2#diff-bc664f26b9c453e0d43a9379e8135c6a + window.open('', '_self').close(); +}; + +/******************************************************************************/ + +// A localStorage-like object which should be accessible from the +// background page or auxiliary pages. +// +// https://github.com/uBlockOrigin/uBlock-issues/issues/899 +// Convert into asynchronous access API. + +vAPI.localStorage = { + clear: function() { + vAPI.messaging.send('vapi', { + what: 'localStorage', + fn: 'clear', + }); + }, + getItemAsync: function(key) { + return vAPI.messaging.send('vapi', { + what: 'localStorage', + fn: 'getItemAsync', + args: [ key ], + }); + }, + removeItem: function(key) { + return vAPI.messaging.send('vapi', { + what: 'localStorage', + fn: 'removeItem', + args: [ key ], + }); + }, + setItem: function(key, value = undefined) { + return vAPI.messaging.send('vapi', { + what: 'localStorage', + fn: 'setItem', + args: [ key, value ] + }); + }, +}; + + + + + + + + +/******************************************************************************* + + DO NOT: + - Remove the following code + - Add code beyond the following code + Reason: + - https://github.com/gorhill/uBlock/pull/3721 + - uBO never uses the return value from injected content scripts + +**/ + +void 0; diff --git a/platform/common/vapi.js b/platform/common/vapi.js new file mode 100644 index 0000000000000..69eb539c61a1e --- /dev/null +++ b/platform/common/vapi.js @@ -0,0 +1,85 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2017-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 +*/ + +// For background page, auxiliary pages, and content scripts. + +/******************************************************************************/ + +if ( + self.browser instanceof Object && + self.browser instanceof Element === false +) { + self.chrome = self.browser; +} else { + self.browser = self.chrome; +} + +/******************************************************************************/ + +// https://bugzilla.mozilla.org/show_bug.cgi?id=1408996#c9 +var vAPI = self.vAPI; // jshint ignore:line + +// https://github.com/chrisaljoudi/uBlock/issues/464 +// https://github.com/chrisaljoudi/uBlock/issues/1528 +// A XMLDocument can be a valid HTML document. + +// https://github.com/gorhill/uBlock/issues/1124 +// Looks like `contentType` is on track to be standardized: +// https://dom.spec.whatwg.org/#concept-document-content-type + +// https://forums.lanik.us/viewtopic.php?f=64&t=31522 +// Skip text/plain documents. + +if ( + ( + document instanceof HTMLDocument || + document instanceof XMLDocument && + document.createElement('div') instanceof HTMLDivElement + ) && + ( + /^image\/|^text\/plain/.test(document.contentType || '') === false + ) && + ( + self.vAPI instanceof Object === false || vAPI.uBO !== true + ) +) { + vAPI = self.vAPI = { uBO: true }; +} + + + + + + + + +/******************************************************************************* + + DO NOT: + - Remove the following code + - Add code beyond the following code + Reason: + - https://github.com/gorhill/uBlock/pull/3721 + - uBO never uses the return value from injected content scripts + +**/ + +void 0; diff --git a/platform/dig/package.json b/platform/dig/package.json new file mode 100644 index 0000000000000..d15b78c817733 --- /dev/null +++ b/platform/dig/package.json @@ -0,0 +1,28 @@ +{ + "name": "@gorhill/ubo-dig", + "version": "0.1.0", + "description": "To investigate code changes (not for publication)", + "type": "module", + "main": "index.js", + "scripts": { + "build": "node build.js", + "snfe": "node snfe.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/gorhill/uBlock.git" + }, + "author": "Raymond Hill", + "license": "GPL-3.0-or-later", + "bugs": { + "url": "https://github.com/gorhill/uBlock/issues" + }, + "homepage": "https://github.com/gorhill/uBlock#readme", + "engines": { + "node": ">=14.0.0", + "npm": ">=6.14.4" + }, + "devDependencies": { + "scaling-palm-tree": "github:mjethani/scaling-palm-tree#15cf1ab" + } +} diff --git a/platform/dig/snfe.js b/platform/dig/snfe.js new file mode 100644 index 0000000000000..f0b4e55ab2277 --- /dev/null +++ b/platform/dig/snfe.js @@ -0,0 +1,379 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2014-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 +*/ + +/* globals process */ + +import { StaticNetFilteringEngine, enableWASM } from './index.js'; +import { mkdir, readFile, writeFile } from 'fs/promises'; +import { createRequire } from 'module'; +import { dirname } from 'path'; + +/******************************************************************************/ + +const FLAGS = process.argv.slice(2); +const COMPARE = FLAGS.includes('compare'); +const MAXCOST = FLAGS.includes('maxcost'); +const MEDCOST = FLAGS.includes('medcost'); +const MINCOST = FLAGS.includes('mincost'); +const MODIFIERS = FLAGS.includes('modifiers'); +const RECORD = FLAGS.includes('record'); +const WASM = FLAGS.includes('wasm'); +const NEED_RESULTS = COMPARE || MAXCOST || MEDCOST || MINCOST || RECORD; + +// This maps puppeteer types to WebRequest types +const WEBREQUEST_OPTIONS = { + // Consider document requests as sub_document. This is because the request + // dataset does not contain sub_frame or main_frame but only 'document' and + // different blockers have different behaviours. + document: 'sub_frame', + stylesheet: 'stylesheet', + image: 'image', + media: 'media', + font: 'font', + script: 'script', + xhr: 'xmlhttprequest', + fetch: 'xmlhttprequest', + websocket: 'websocket', + ping: 'ping', + // other + other: 'other', + eventsource: 'other', + manifest: 'other', + texttrack: 'other', +}; + +/******************************************************************************/ + +function nanoToMilli(bigint) { + return (Number(bigint) / 1000000).toFixed(2) + ' ms'; +} + +function nanoToMicro(bigint) { + return (Number(bigint) / 1000).toFixed(2) + ' µs'; +} + +async function read(path) { + return readFile(path, 'utf8'); +} + +async function write(path, data) { + await mkdir(dirname(path), { recursive: true }); + return writeFile(path, data, 'utf8'); +} + +/******************************************************************************/ + +async function matchRequests(engine, requests) { + const results = []; + const details = { + r: 0, + f: undefined, + type: '', + url: '', + originURL: '', + t: 0, + }; + + let notBlockedCount = 0; + let blockedCount = 0; + let unblockedCount = 0; + + const start = process.hrtime.bigint(); + + for ( let i = 0; i < requests.length; i++ ) { + const request = requests[i]; + const reqstart = process.hrtime.bigint(); + details.type = WEBREQUEST_OPTIONS[request.cpt]; + details.url = request.url; + details.originURL = request.frameUrl; + const r = engine.matchRequest(details); + if ( r === 0 ) { + notBlockedCount += 1; + } else if ( r === 1 ) { + blockedCount += 1; + } else { + unblockedCount += 1; + } + if ( NEED_RESULTS !== true ) { continue; } + const reqstop = process.hrtime.bigint(); + details.r = r; + details.f = r !== 0 ? engine.toLogData().raw : undefined; + details.t = Math.round(Number(reqstop - reqstart) / 10) / 100; + results.push([ i, Object.assign({}, details) ]); + } + + const stop = process.hrtime.bigint(); + + console.log(`Matched ${requests.length} requests in ${nanoToMilli(stop - start)}`); + console.log(`\tNot blocked: ${notBlockedCount} requests`); + console.log(`\tBlocked: ${blockedCount} requests`); + console.log(`\tUnblocked: ${unblockedCount} requests`); + console.log(`\tAverage: ${nanoToMicro((stop - start) / BigInt(requests.length))} per request`); + + if ( RECORD ) { + write('data/snfe.json', JSON.stringify(results, null, 2)); + } + + if ( COMPARE ) { + const diffs = await compare(results); + if ( Array.isArray(diffs) ) { + write('data/snfe.diffs.json', JSON.stringify(diffs, null, 2)); + } + console.log(`Compare: ${diffs.length} requests differ`); + } + + if ( MAXCOST ) { + const costly = results.slice().sort((a,b) => b[1].t - a[1].t).slice(0, 1000); + write('data/snfe.maxcost.json', JSON.stringify(costly, null, 2)); + } + + if ( MEDCOST ) { + const median = results.length >>> 1; + const costly = results.slice().sort((a,b) => b[1].t - a[1].t).slice(median - 500, median + 500); + write('data/snfe.medcost.json', JSON.stringify(costly, null, 2)); + } + + if ( MINCOST ) { + const costly = results.slice().sort((a,b) => b[1].t - a[1].t).slice(-1000); + write('data/snfe.mincost.json', JSON.stringify(costly, null, 2)); + } +} + +async function compare(results) { + let before; + try { + const raw = await read('data/snfe.json'); + before = new Map(JSON.parse(raw)); + } catch(ex) { + console.log(ex); + console.log('Nothing to compare'); + return; + } + const after = new Map(results); + const diffs = []; + for ( let i = 0; i < results.length; i++ ) { + const a = before.get(i); + const b = after.get(i); + if ( a.r === b.r ) { continue; } + diffs.push([ i, { + type: a.type, + url: a.url, + originURL: a.originURL, + before: { r: a.r, f: a.f, t: a.t }, + after: { r: b.r, f: b.f, t: b.t }, + }]); + } + return diffs; +} + +/******************************************************************************/ + +async function matchRequestModifiers(engine, requests) { + const results = { + 'csp': [], + 'redirect-rule': [], + 'removeparam': [], + }; + + const details = { + f: undefined, + type: '', + url: '', + originURL: '', + t: 0, + }; + + let modifiedCount = 0; + + const start = process.hrtime.bigint(); + for ( let i = 0; i < requests.length; i++ ) { + const request = requests[i]; + details.type = WEBREQUEST_OPTIONS[request.cpt]; + details.url = request.url; + details.originURL = request.frameUrl; + const r = engine.matchRequest(details); + let modified = false; + if ( r !== 1 && details.type === 'sub_frame' ) { + const reqstart = process.hrtime.bigint(); + const directives = engine.matchAndFetchModifiers(details, 'csp'); + if ( directives !== undefined ) { + modified = true; + if ( NEED_RESULTS ) { + const reqstop = process.hrtime.bigint(); + details.f = directives.map(a => `${a.result}:${a.logData().raw}`).sort(); + details.t = Math.round(Number(reqstop - reqstart) / 10) / 100; + results['csp'].push([ i, Object.assign({}, details) ]); + } + } + } + if ( r === 1 ) { + const reqstart = process.hrtime.bigint(); + const directives = engine.matchAndFetchModifiers(details, 'redirect-rule'); + if ( directives !== undefined ) { + modified = true; + if ( NEED_RESULTS ) { + const reqstop = process.hrtime.bigint(); + details.f = directives.map(a => `${a.result}:${a.logData().raw}`).sort(); + details.t = Math.round(Number(reqstop - reqstart) / 10) / 100; + results['redirect-rule'].push([ i, Object.assign({}, details) ]); + } + } + } + if ( r !== 1 && engine.hasQuery(details) ) { + const reqstart = process.hrtime.bigint(); + const directives = engine.matchAndFetchModifiers(details, 'removeparam'); + if ( directives !== undefined ) { + modified = true; + if ( NEED_RESULTS ) { + const reqstop = process.hrtime.bigint(); + details.f = directives.map(a => `${a.result}:${a.logData().raw}`).sort(); + details.t = Math.round(Number(reqstop - reqstart) / 10) / 100; + results['removeparam'].push([ i, Object.assign({}, details) ]); + } + } + } + if ( modified ) { + modifiedCount += 1; + } + } + const stop = process.hrtime.bigint(); + + console.log(`Matched-modified ${requests.length} requests in ${nanoToMilli(stop - start)}`); + console.log(`\t${modifiedCount} modifiers found`); + console.log(`\tAverage: ${nanoToMicro((stop - start) / BigInt(requests.length))} per request`); + + if ( RECORD ) { + write('data/snfe.modifiers.json', JSON.stringify(results, null, 2)); + } + + if ( COMPARE ) { + const diffs = await compareModifiers(results); + if ( Array.isArray(diffs) ) { + write('data/snfe.modifiers.diffs.json', JSON.stringify(diffs, null, 2)); + } + console.log(`Compare: ${diffs.length} modified requests differ`); + } +} + +async function compareModifiers(afterResults) { + let beforeResults; + try { + const raw = await read('data/snfe.modifiers.json'); + beforeResults = JSON.parse(raw); + } catch(ex) { + console.log(ex); + console.log('Nothing to compare'); + return; + } + const diffs = []; + for ( const modifier of [ 'csp', 'redirect-rule', 'removeparam' ] ) { + const before = new Map(beforeResults[modifier]); + const after = new Map(afterResults[modifier]); + for ( const [ i, b ] of before ) { + const a = after.get(i); + if ( a !== undefined && JSON.stringify(a.f) === JSON.stringify(b.f) ) { continue; } + diffs.push([ i, { + type: b.type, + url: b.url, + originURL: b.originURL, + before: { f: b.f, t: b.t }, + after: a !== undefined ? { f: a.f, t: a.t } : null, + }]); + } + for ( const [ i, a ] of after ) { + const b = before.get(i); + if ( b !== undefined ) { continue; } + diffs.push([ i, { + type: a.type, + url: a.url, + originURL: a.originURL, + before: null, + after: { f: a.f, t: a.t }, + }]); + } + } + return diffs; +} + +/******************************************************************************/ + +async function bench() { + if ( WASM ) { + try { + const result = await enableWASM(); + if ( result === true ) { + console.log('WASM code paths enabled'); + } + } catch(ex) { + console.log(ex); + } + } + + const require = createRequire(import.meta.url); // jshint ignore:line + const requests = await require('./node_modules/scaling-palm-tree/requests.json'); + const engine = await StaticNetFilteringEngine.create(); + + let start = process.hrtime.bigint(); + await engine.useLists([ + read('assets/ublock/filters.min.txt') + .then(raw => ({ name: 'filters', raw })), + read('assets/ublock/badware.txt') + .then(raw => ({ name: 'badware', raw })), + read('assets/ublock/privacy.min.txt') + .then(raw => ({ name: 'privacy', raw })), + read('assets/ublock/quick-fixes.txt') + .then(raw => ({ name: 'quick-fixes.txt', raw })), + read('assets/ublock/unbreak.txt') + .then(raw => ({ name: 'unbreak.txt', raw })), + read('assets/thirdparties/easylist/easylist.txt') + .then(raw => ({ name: 'easylist', raw })), + read('assets/thirdparties/easylist/easyprivacy.txt') + .then(raw => ({ name: 'easyprivacy', raw })), + read('assets/thirdparties/pgl.yoyo.org/as/serverlist') + .then(raw => ({ name: 'PGL', raw })), + read('assets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt') + .then(raw => ({ name: 'urlhaus', raw })), + ]); + let stop = process.hrtime.bigint(); + console.log(`Filter lists parsed-compiled-loaded in ${nanoToMilli(stop - start)}`); + + // Dry run to let JS engine optimize hot JS code paths + for ( let i = 0; i < requests.length; i += 8 ) { + const request = requests[i]; + void engine.matchRequest({ + type: WEBREQUEST_OPTIONS[request.cpt], + url: request.url, + originURL: request.frameUrl, + }); + } + + if ( MODIFIERS === false ) { + matchRequests(engine, requests); + } else { + matchRequestModifiers(engine, requests); + } + + StaticNetFilteringEngine.release(); +} + +bench(); + +/******************************************************************************/ diff --git a/platform/firefox/bootstrap.js b/platform/firefox/bootstrap.js deleted file mode 100644 index 04e43ebfc3aad..0000000000000 --- a/platform/firefox/bootstrap.js +++ /dev/null @@ -1,194 +0,0 @@ -/******************************************************************************* - - µBlock - a browser extension to block requests. - Copyright (C) 2014 The µBlock authors - - 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 -*/ - -/* global ADDON_UNINSTALL, APP_SHUTDOWN */ -/* exported startup, shutdown, install, uninstall */ - -'use strict'; - -/******************************************************************************/ - -const {classes: Cc, interfaces: Ci} = Components; - -// Accessing the context of the background page: -// var win = Services.appShell.hiddenDOMWindow.document.querySelector('iframe[src*=ublock0]').contentWindow; - -let bgProcess = null; -let version; -const hostName = 'ublock0'; -const restartListener = { - get messageManager() { - return Cc['@mozilla.org/parentprocessmessagemanager;1'] - .getService(Ci.nsIMessageListenerManager); - }, - - receiveMessage: function() { - shutdown(); - startup(); - } -}; - -/******************************************************************************/ - -function startup(data/*, reason*/) { - if ( data !== undefined ) { - version = data.version; - } - - // Already started? - if ( bgProcess !== null ) { - return; - } - - let appShell = Cc['@mozilla.org/appshell/appShellService;1'] - .getService(Ci.nsIAppShellService); - - let isReady = function() { - var hiddenDoc; - - try { - hiddenDoc = appShell.hiddenDOMWindow && - appShell.hiddenDOMWindow.document; - } catch (ex) { - } - - // Do not test against `loading`: it does appear `readyState` could be - // undefined if looked up too early. - if ( !hiddenDoc || hiddenDoc.readyState !== 'complete' ) { - return false; - } - - bgProcess = hiddenDoc.documentElement.appendChild( - hiddenDoc.createElementNS('http://www.w3.org/1999/xhtml', 'iframe') - ); - bgProcess.setAttribute( - 'src', - 'chrome://' + hostName + '/content/background.html#' + version - ); - - // https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIMessageListenerManager#addMessageListener%28%29 - // "If the same listener registers twice for the same message, the - // "second registration is ignored." - restartListener.messageManager.addMessageListener( - hostName + '-restart', - restartListener - ); - - return true; - }; - - if ( isReady() ) { - return; - } - - // https://github.com/gorhill/uBlock/issues/749 - // Poll until the proper environment is set up -- or give up eventually. - // We poll frequently early on but relax poll delay as time pass. - - let tryDelay = 5; - let trySum = 0; - // https://trac.torproject.org/projects/tor/ticket/19438 - // Try for a longer period. - let tryMax = 600011; - let timer = Cc['@mozilla.org/timer;1'] - .createInstance(Ci.nsITimer); - - let checkLater = function() { - trySum += tryDelay; - if ( trySum >= tryMax ) { - timer = null; - return; - } - timer.init(timerObserver, tryDelay, timer.TYPE_ONE_SHOT); - tryDelay *= 2; - if ( tryDelay > 503 ) { - tryDelay = 503; - } - }; - - var timerObserver = { - observe: function() { - timer.cancel(); - if ( isReady() ) { - timer = null; - } else { - checkLater(); - } - } - }; - - checkLater(); -} - -/******************************************************************************/ - -function shutdown(data, reason) { - if ( reason === APP_SHUTDOWN ) { - return; - } - - if ( bgProcess !== null ) { - bgProcess.parentNode.removeChild(bgProcess); - bgProcess = null; - } - - if ( data === undefined ) { - return; - } - - // Remove the restartObserver only when the extension is being disabled - restartListener.messageManager.removeMessageListener( - hostName + '-restart', - restartListener - ); -} - -/******************************************************************************/ - -function install(/*aData, aReason*/) { - // https://bugzil.la/719376 - Cc['@mozilla.org/intl/stringbundle;1'] - .getService(Ci.nsIStringBundleService) - .flushBundles(); -} - -/******************************************************************************/ - -// https://developer.mozilla.org/en-US/Add-ons/Bootstrapped_extensions#uninstall -// "if you have code in uninstall it will not run, you MUST run some code -// "in the install function, at the least you must set arguments on the -// "install function so like: function install(aData, aReason) {} then -// "uninstall WILL WORK." - -function uninstall(aData, aReason) { - if ( aReason !== ADDON_UNINSTALL ) { - return; - } - // https://github.com/gorhill/uBlock/issues/84 - // "Add cleanup task to remove local storage settings when uninstalling" - // To cleanup vAPI.localStorage in vapi-common.js - // As I get more familiar with FF API, will find out whetehr there was - // a better way to do this. - Components.utils.import('resource://gre/modules/Services.jsm', null) - .Services.prefs.getBranch('extensions.' + hostName + '.').deleteBranch(''); -} - -/******************************************************************************/ diff --git a/platform/firefox/chrome.manifest b/platform/firefox/chrome.manifest deleted file mode 100644 index 75781cd6f3b2f..0000000000000 --- a/platform/firefox/chrome.manifest +++ /dev/null @@ -1 +0,0 @@ -content ublock0 ./ diff --git a/platform/firefox/css/legacy-toolbar-button.css b/platform/firefox/css/legacy-toolbar-button.css deleted file mode 100644 index c4e22522db74a..0000000000000 --- a/platform/firefox/css/legacy-toolbar-button.css +++ /dev/null @@ -1,46 +0,0 @@ -#uBlock0-legacy-button { - list-style-image: url('../img/browsericons/icon24.svg'); -} -#uBlock0-legacy-button.off { - list-style-image: url('../img/browsericons/icon24-off.svg'); -} - -toolbar[iconsize="small"] #uBlock0-legacy-button { - list-style-image: url('../img/browsericons/icon16.svg'); -} -toolbar[iconsize="small"] #uBlock0-legacy-button.off { - list-style-image: url('../img/browsericons/icon16-off.svg'); -} -#uBlock0-legacy-button[badge]::before { - background: #555; - color: #fff; - content: attr(badge); - font: bold 10px sans-serif; - margin-top: -2px; - padding: 0 2px; - position: fixed; -} -/* This hack required because if the before content changes it de-pops the - popup (without firing any events). So just hide it instead. Note, can't - actually *hide* it, or the same thing happens. -**/ -#uBlock0-legacy-button[badge=""]::before { - padding: 0; -} - -/* Override off state when in palette */ -toolbarpaletteitem #uBlock0-legacy-button.off { - list-style-image: url('../img/browsericons/icon24.svg'); -} - -/* Override badge when in palette */ -toolbarpaletteitem #uBlock0-legacy-button[badge]::before { - content: none; -} - -/* Prevent pale moon from showing the arrow underneath the button */ -/* https://github.com/chrisaljoudi/uBlock/issues/1449#issuecomment-112112761 */ -#uBlock0-legacy-button .toolbarbutton-menu-dropmarker { - display: none; - -moz-box-orient: horizontal; -} diff --git a/platform/firefox/frameModule.js b/platform/firefox/frameModule.js deleted file mode 100644 index 77f99a5615738..0000000000000 --- a/platform/firefox/frameModule.js +++ /dev/null @@ -1,619 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2014-2016 The uBlock Origin authors - - 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 -*/ - -/* exported processObserver */ - -'use strict'; - -/******************************************************************************/ - -// https://github.com/gorhill/uBlock/issues/800 -this.EXPORTED_SYMBOLS = [ - 'contentObserver', - 'processObserver', - 'LocationChangeListener' -]; - -const {interfaces: Ci, utils: Cu} = Components; -const {Services} = Cu.import('resource://gre/modules/Services.jsm', null); -const {XPCOMUtils} = Cu.import('resource://gre/modules/XPCOMUtils.jsm', null); - -const hostName = Services.io.newURI(Components.stack.filename, null, null).host; -const rpcEmitterName = hostName + ':child-process-message'; - -//Cu.import('resource://gre/modules/Console.jsm'); // Firefox >= 44 -//Cu.import('resource://gre/modules/devtools/Console.jsm'); // Firefox < 44 - -/******************************************************************************/ - -const getMessageManager = function(win) { - let iface = win - .QueryInterface(Ci.nsIInterfaceRequestor) - .getInterface(Ci.nsIDocShell) - .sameTypeRootTreeItem - .QueryInterface(Ci.nsIDocShell) - .QueryInterface(Ci.nsIInterfaceRequestor); - - try { - return iface.getInterface(Ci.nsIContentFrameMessageManager); - } catch (ex) { - // This can throw. It appears `shouldLoad` can be called *after* a - // tab has been closed. For example, a case where this happens all - // the time (FF38): - // - Open twitter.com (assuming you have an account and are logged in) - // - Close twitter.com - // There will be an exception raised when `shouldLoad` is called - // to process a XMLHttpRequest with URL `https://twitter.com/i/jot` - // fired from `https://twitter.com/`, *after* the tab is closed. - // In such case, `win` is `about:blank`. - } - return null; -}; - -/******************************************************************************/ - -// https://github.com/gorhill/uBlock/issues/2014 -// Have a dictionary of hostnames for which there are script tag filters. This -// allow for coarse-testing before firing a synchronous message to the -// parent process. Script tag filters are not very common, so this allows -// to skip the blocking of the child process most of the time. - -var scriptTagFilterer = (function() { - var scriptTagHostnames; - - var getCpmm = function() { - var svc = Services; - if ( !svc ) { return; } - var cpmm = svc.cpmm; - if ( cpmm ) { return cpmm; } - cpmm = Components.classes['@mozilla.org/childprocessmessagemanager;1']; - if ( cpmm ) { return cpmm.getService(Ci.nsISyncMessageSender); } - }; - - var getScriptTagHostnames = function() { - if ( scriptTagHostnames ) { - return scriptTagHostnames; - } - var cpmm = getCpmm(); - if ( !cpmm ) { return; } - var r = cpmm.sendSyncMessage(rpcEmitterName, { fnName: 'getScriptTagHostnames' }); - if ( Array.isArray(r) && Array.isArray(r[0]) ) { - scriptTagHostnames = new Set(r[0]); - } - return scriptTagHostnames; - }; - - var getScriptTagFilters = function(details) { - let cpmm = getCpmm(); - if ( !cpmm ) { return; } - let r = cpmm.sendSyncMessage(rpcEmitterName, { - fnName: 'getScriptTagFilters', - rootURL: details.rootURL, - frameURL: details.frameURL, - frameHostname: details.frameHostname - }); - if ( Array.isArray(r) ) { - return r[0]; - } - }; - - var regexFromHostname = function(details) { - // If target hostname has no script tag filter, no point querying - // chrome process. - var hostnames = getScriptTagHostnames(); - if ( !hostnames ) { return; } - var hn = details.frameHostname, pos, entity; - for (;;) { - if ( hostnames.has(hn) ) { - return getScriptTagFilters(details); - } - pos = hn.indexOf('.'); - if ( pos === -1 ) { break; } - entity = hn.slice(0, pos) + '.*'; - if ( hostnames.has(entity) ) { - return getScriptTagFilters(details); - } - hn = hn.slice(pos + 1); - if ( hn === '' ) { break; } - } - }; - - var reset = function() { - scriptTagHostnames = undefined; - }; - - return { - get: regexFromHostname, - reset: reset - }; -})(); - -/******************************************************************************/ - -var contentObserver = { - classDescription: 'content-policy for ' + hostName, - classID: Components.ID('{7afbd130-cbaf-46c2-b944-f5d24305f484}'), - contractID: '@' + hostName + '/content-policy;1', - ACCEPT: Ci.nsIContentPolicy.ACCEPT, - REJECT: Ci.nsIContentPolicy.REJECT_REQUEST, - MAIN_FRAME: Ci.nsIContentPolicy.TYPE_DOCUMENT, - SUB_FRAME: Ci.nsIContentPolicy.TYPE_SUBDOCUMENT, - contentBaseURI: 'chrome://' + hostName + '/content/js/', - cpMessageName: hostName + ':shouldLoad', - popupMessageName: hostName + ':shouldLoadPopup', - ignoredPopups: new WeakMap(), - uniqueSandboxId: 1, - canE10S: Services.vc.compare(Services.appinfo.platformVersion, '44') > 0, - - get componentRegistrar() { - return Components.manager.QueryInterface(Ci.nsIComponentRegistrar); - }, - - get categoryManager() { - return Components.classes['@mozilla.org/categorymanager;1'] - .getService(Ci.nsICategoryManager); - }, - - QueryInterface: XPCOMUtils.generateQI([ - Ci.nsIFactory, - Ci.nsIObserver, - Ci.nsIContentPolicy, - Ci.nsISupportsWeakReference - ]), - - createInstance: function(outer, iid) { - if ( outer ) { - throw Components.results.NS_ERROR_NO_AGGREGATION; - } - - return this.QueryInterface(iid); - }, - - register: function() { - Services.obs.addObserver(this, 'document-element-inserted', true); - - this.componentRegistrar.registerFactory( - this.classID, - this.classDescription, - this.contractID, - this - ); - this.categoryManager.addCategoryEntry( - 'content-policy', - this.contractID, - this.contractID, - false, - true - ); - }, - - unregister: function() { - Services.obs.removeObserver(this, 'document-element-inserted'); - - this.componentRegistrar.unregisterFactory(this.classID, this); - this.categoryManager.deleteCategoryEntry( - 'content-policy', - this.contractID, - false - ); - }, - - getFrameId: function(win) { - return win - .QueryInterface(Ci.nsIInterfaceRequestor) - .getInterface(Ci.nsIDOMWindowUtils) - .outerWindowID; - }, - - handlePopup: function(location, origin, context) { - let openeeContext = context.contentWindow || context; - if ( - typeof openeeContext.opener !== 'object' || - openeeContext.opener === null || - openeeContext.opener === context || - this.ignoredPopups.has(openeeContext) - ) { - return; - } - // https://github.com/gorhill/uBlock/issues/452 - // Use location of top window, not that of a frame, as this - // would cause tab id lookup (necessary for popup blocking) to - // always fail. - // https://github.com/gorhill/uBlock/issues/1305 - // Opener could be a dead object, using it would cause a throw. - // Repro case: - // - Open http://delishows.to/show/chicago-med/season/1/episode/6 - // - Click anywhere in the background - let openerURL = null; - try { - let opener = openeeContext.opener.top || openeeContext.opener; - openerURL = opener.location && opener.location.href; - } catch(ex) { - } - // If no valid opener URL found, use the origin URL. - if ( openerURL === null ) { - openerURL = origin.asciiSpec; - } - let messageManager = getMessageManager(openeeContext); - if ( messageManager === null ) { - return; - } - if ( typeof messageManager.sendRpcMessage === 'function' ) { - // https://bugzil.la/1092216 - messageManager.sendRpcMessage(this.popupMessageName, openerURL); - } else { - // Compatibility for older versions - messageManager.sendSyncMessage(this.popupMessageName, openerURL); - } - }, - - // https://bugzil.la/612921 - shouldLoad: function(type, location, origin, context) { - // For whatever reason, sometimes the global scope is completely - // uninitialized at this point. Repro steps: - // - Launch FF with uBlock enabled - // - Disable uBlock - // - Enable uBlock - // - Services and all other global variables are undefined - // Hopefully will eventually understand why this happens. - if ( Services === undefined || !context ) { - return this.ACCEPT; - } - - if ( type === this.MAIN_FRAME ) { - this.handlePopup(location, origin, context); - } - - // https://bugzilla.mozilla.org/show_bug.cgi?id=1232354 - // For modern versions of Firefox, the frameId/parentFrameId - // information can be found in channel.loadInfo of the HTTP observer. - if ( this.canE10S ) { - return this.ACCEPT; - } - - if ( !location.schemeIs('http') && !location.schemeIs('https') ) { - return this.ACCEPT; - } - - if ( type === this.MAIN_FRAME ) { - context = context.contentWindow || context; - } else if ( type === this.SUB_FRAME ) { - context = context.contentWindow; - } else { - context = (context.ownerDocument || context).defaultView; - } - - // https://github.com/gorhill/uBlock/issues/1893 - // I don't know why this happens. I observed that when it occurred, the - // resource was not seen by the HTTP observer, as if it was a spurious - // call to shouldLoad(). - if ( !context ) { - return this.ACCEPT; - } - - // The context for the toolbar popup is an iframe element here, - // so check context.top instead of context - if ( !context.top || !context.location ) { - return this.ACCEPT; - } - - let messageManager = getMessageManager(context); - if ( messageManager === null ) { - return this.ACCEPT; - } - - let isTopContext = context === context.top; - var parentFrameId; - if ( isTopContext ) { - parentFrameId = -1; - } else if ( context.parent === context.top ) { - parentFrameId = 0; - } else { - parentFrameId = this.getFrameId(context.parent); - } - - let rpcData = this.rpcData; - rpcData.frameId = isTopContext ? 0 : this.getFrameId(context); - rpcData.pFrameId = parentFrameId; - rpcData.type = type; - rpcData.url = location.spec; - - //console.log('shouldLoad: type=' + type + ' url=' + location.spec); - if ( typeof messageManager.sendRpcMessage === 'function' ) { - // https://bugzil.la/1092216 - messageManager.sendRpcMessage(this.cpMessageName, rpcData); - } else { - // Compatibility for older versions - messageManager.sendSyncMessage(this.cpMessageName, rpcData); - } - - return this.ACCEPT; - }, - - // Reuse object to avoid repeated memory allocation. - rpcData: { frameId: 0, pFrameId: -1, type: 0, url: '' }, - - initContentScripts: function(win, create) { - let messager = getMessageManager(win); - let sandboxId = hostName + ':sb:' + this.uniqueSandboxId++; - let sandbox; - - if ( create ) { - let sandboxName = [ - win.location.href.slice(0, 100), - win.document.title.slice(0, 100) - ].join(' | '); - - // https://github.com/gorhill/uMatrix/issues/325 - // "Pass sameZoneAs to sandbox constructor to make GCs cheaper" - sandbox = Cu.Sandbox([win], { - sameZoneAs: win.top, - sandboxName: sandboxId + '[' + sandboxName + ']', - sandboxPrototype: win, - wantComponents: false, - wantXHRConstructor: false - }); - - sandbox.getScriptTagFilters = function(details) { - return scriptTagFilterer.get(details); - }; - - sandbox.injectScript = function(script) { - let svc = Services; - // Sandbox appears void. - // I've seen this happens, need to investigate why. - if ( svc === undefined ) { return; } - svc.scriptloader.loadSubScript(script, sandbox); - }; - - sandbox.injectCSS = function(sheetURI) { - try { - let wu = win.QueryInterface(Ci.nsIInterfaceRequestor) - .getInterface(Ci.nsIDOMWindowUtils); - wu.loadSheetUsingURIString(sheetURI, wu.USER_SHEET); - } catch(ex) { - } - }; - - sandbox.removeCSS = function(sheetURI) { - try { - let wu = win.QueryInterface(Ci.nsIInterfaceRequestor) - .getInterface(Ci.nsIDOMWindowUtils); - wu.removeSheetUsingURIString(sheetURI, wu.USER_SHEET); - } catch (ex) { - } - }; - - sandbox.topContentScript = win === win.top; - - // https://developer.mozilla.org/en-US/Firefox/Multiprocess_Firefox/Message_Manager/Frame_script_loading_and_lifetime#Unloading_frame_scripts - // The goal is to have content scripts removed from web pages. This - // helps remove traces of uBlock from memory when disabling/removing - // the addon. - // For example, this takes care of: - // https://github.com/gorhill/uBlock/commit/ea4faff383789053f423498c1f1165c403fde7c7#commitcomment-11964137 - // > "gets the whole selected tab flashing" - sandbox.outerShutdown = function() { - sandbox.removeMessageListener(); - sandbox.addMessageListener = - sandbox.getScriptTagFilters = - sandbox.injectCSS = - sandbox.injectScript = - sandbox.outerShutdown = - sandbox.removeCSS = - sandbox.removeMessageListener = - sandbox.sendAsyncMessage = function(){}; - sandbox.vAPI = {}; - messager = null; - }; - } - else { - sandbox = win; - } - - sandbox._sandboxId_ = sandboxId; - sandbox.sendAsyncMessage = messager.sendAsyncMessage; - - sandbox.addMessageListener = function(callback) { - if ( sandbox._messageListener_ ) { - sandbox.removeMessageListener(); - } - - sandbox._messageListener_ = function(message) { - callback(message.data); - }; - - sandbox._broadcastListener_ = function(message) { - // https://github.com/gorhill/uBlock/issues/2014 - if ( sandbox.topContentScript ) { - let details; - try { details = JSON.parse(message.data); } catch (ex) {} - let msg = details && details.msg || {}; - if ( msg.what === 'staticFilteringDataChanged' ) { - if ( scriptTagFilterer ) { - scriptTagFilterer.reset(); - } - } - } - callback(message.data); - }; - - messager.addMessageListener( - sandbox._sandboxId_, - sandbox._messageListener_ - ); - messager.addMessageListener( - hostName + ':broadcast', - sandbox._broadcastListener_ - ); - }; - - sandbox.removeMessageListener = function() { - if ( !sandbox._messageListener_ ) { - return; - } - // It throws sometimes, mostly when the popup closes - try { - messager.removeMessageListener( - sandbox._sandboxId_, - sandbox._messageListener_ - ); - } catch (ex) { - } - try { - messager.removeMessageListener( - hostName + ':broadcast', - sandbox._broadcastListener_ - ); - } catch (ex) { - } - - sandbox._messageListener_ = sandbox._broadcastListener_ = null; - }; - - return sandbox; - }, - - ignorePopup: function(e) { - if ( e.isTrusted === false ) { - return; - } - - let contObs = contentObserver; - contObs.ignoredPopups.set(this, true); - this.removeEventListener('keydown', contObs.ignorePopup, true); - this.removeEventListener('mousedown', contObs.ignorePopup, true); - }, - - observe: function(doc) { - // For whatever reason, sometimes the global scope is completely - // uninitialized at this point. Repro steps: - // - Launch FF with uBlock enabled - // - Disable uBlock - // - Enable uBlock - // - Services and all other global variables are undefined - // Hopefully will eventually understand why this happens. - if ( Services === undefined ) { - return; - } - - let win = doc.defaultView || null; - if ( win === null ) { - return; - } - - if ( win.opener && this.ignoredPopups.has(win) === false ) { - win.addEventListener('keydown', this.ignorePopup, true); - win.addEventListener('mousedown', this.ignorePopup, true); - } - - // https://github.com/gorhill/uBlock/issues/260 - // https://developer.mozilla.org/en-US/docs/Web/API/Document/contentType - // "Non-standard, only supported by Gecko. To be used in - // "chrome code (i.e. Extensions and XUL applications)." - // TODO: We may have to exclude more types, for now let's be - // conservative and focus only on the one issue reported, i.e. let's - // not test against 'text/html'. - if ( doc.contentType.startsWith('image/') ) { - return; - } - - let loc = win.location; - - if ( loc.protocol !== 'http:' && loc.protocol !== 'https:' && loc.protocol !== 'file:' ) { - if ( loc.protocol === 'chrome:' && loc.host === hostName ) { - this.initContentScripts(win); - } - - // What about data: and about:blank? - return; - } - - let lss = Services.scriptloader.loadSubScript; - let sandbox = this.initContentScripts(win, true); - - try { - lss(this.contentBaseURI + 'vapi-client.js', sandbox); - lss(this.contentBaseURI + 'contentscript.js', sandbox); - } catch (ex) { - //console.exception(ex.msg, ex.stack); - return; - } - - let docReady = (e) => { - let doc = e.target; - doc.removeEventListener(e.type, docReady, true); - - if ( doc.querySelector('a[href^="abp:"],a[href^="https://subscribe.adblockplus.org/?"]') ) { - lss(this.contentBaseURI + 'scriptlets/subscriber.js', sandbox); - } - }; - - if ( doc.readyState === 'loading') { - doc.addEventListener('DOMContentLoaded', docReady, true); - } else { - docReady({ target: doc, type: 'DOMContentLoaded' }); - } - } -}; - -/******************************************************************************/ - -var processObserver = { - start: function() { - scriptTagFilterer.reset(); - } -}; - -/******************************************************************************/ - -var LocationChangeListener = function(docShell, webProgress) { - var mm = docShell.QueryInterface(Ci.nsIInterfaceRequestor) - .getInterface(Ci.nsIContentFrameMessageManager); - if ( !mm || typeof mm.sendAsyncMessage !== 'function' ) { - return; - } - this.messageManager = mm; - webProgress.addProgressListener(this, Ci.nsIWebProgress.NOTIFY_LOCATION); -}; - -LocationChangeListener.prototype.messageName = hostName + ':locationChanged'; - -LocationChangeListener.prototype.QueryInterface = XPCOMUtils.generateQI([ - 'nsIWebProgressListener', - 'nsISupportsWeakReference' -]); - -LocationChangeListener.prototype.onLocationChange = function(webProgress, request, location, flags) { - if ( !webProgress.isTopLevel ) { - return; - } - this.messageManager.sendAsyncMessage(this.messageName, { - url: location.asciiSpec, - flags: flags - }); -}; - -/******************************************************************************/ - -contentObserver.register(); - -/******************************************************************************/ diff --git a/platform/firefox/frameScript.js b/platform/firefox/frameScript.js deleted file mode 100644 index 260f05557e589..0000000000000 --- a/platform/firefox/frameScript.js +++ /dev/null @@ -1,62 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2014-2016 The uBlock Origin authors - - 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 -*/ - -/******************************************************************************/ - -// https://developer.mozilla.org/en-US/Firefox/Multiprocess_Firefox/Frame_script_environment - -(function(context) { - 'use strict'; - - if ( !context.docShell ) { - return; - } - - let webProgress = context.docShell - .QueryInterface(Components.interfaces.nsIInterfaceRequestor) - .getInterface(Components.interfaces.nsIWebProgress); - if ( !webProgress ) { - return; - } - - // https://github.com/gorhill/uBlock/issues/1514 - // Fix? - let domWindow = webProgress.DOMWindow; - if ( domWindow !== domWindow.top ) { - return; - } - - let {LocationChangeListener} = Components.utils.import( - Components.stack.filename.replace('Script', 'Module'), - null - ); - - // https://github.com/gorhill/uBlock/issues/1444 - // Apparently, on older versions of Firefox (31 and less), the same context - // is used for all frame scripts, hence we must use a unique variable name - // to ensure no collision. - context.ublock0LocationChangeListener = new LocationChangeListener( - context.docShell, - webProgress - ); -})(this); - -/******************************************************************************/ diff --git a/platform/firefox/frameScript0.js b/platform/firefox/frameScript0.js deleted file mode 100644 index 38acce2ec7593..0000000000000 --- a/platform/firefox/frameScript0.js +++ /dev/null @@ -1,58 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2014-2016 The uBlock Origin authors - - 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 -*/ - -/******************************************************************************/ - -// https://developer.mozilla.org/en-US/Firefox/Multiprocess_Firefox/Frame_script_environment - -(function(context) { - - 'use strict'; - - if ( !context.content ) { - return; - } - - let {contentObserver} = Components.utils.import( - Components.stack.filename.replace('Script0', 'Module'), - null - ); - - let injectContentScripts = function(win) { - if ( !win || !win.document ) { - return; - } - - contentObserver.observe(win.document); - - if ( win.frames && win.frames.length ) { - let i = win.frames.length; - while ( i-- ) { - injectContentScripts(win.frames[i]); - } - } - }; - - injectContentScripts(context.content); - -})(this); - -/******************************************************************************/ diff --git a/platform/firefox/img/browsericons/icon16-off.svg b/platform/firefox/img/browsericons/icon16-off.svg deleted file mode 100644 index f0f68be231a4e..0000000000000 --- a/platform/firefox/img/browsericons/icon16-off.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/platform/firefox/img/browsericons/icon16.svg b/platform/firefox/img/browsericons/icon16.svg deleted file mode 100644 index d36d9d2320bb7..0000000000000 --- a/platform/firefox/img/browsericons/icon16.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/platform/firefox/img/browsericons/icon24-off.svg b/platform/firefox/img/browsericons/icon24-off.svg deleted file mode 100644 index 0856eef34a8e5..0000000000000 --- a/platform/firefox/img/browsericons/icon24-off.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/platform/firefox/img/browsericons/icon24.svg b/platform/firefox/img/browsericons/icon24.svg deleted file mode 100644 index 28f75a726b751..0000000000000 --- a/platform/firefox/img/browsericons/icon24.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/platform/firefox/install.rdf b/platform/firefox/install.rdf deleted file mode 100644 index c072d1083b1ad..0000000000000 --- a/platform/firefox/install.rdf +++ /dev/null @@ -1,73 +0,0 @@ - - - - uBlock0@raymondhill.net - {version} - {name} - {description} - {homepage} - {author} - Deathamns - Alex Vallat - Manuel Reimer - 2 - true - true - 2 -{localized} - - - - - {{ec8030f7-c20a-464f-9b0e-13a3a9e97384}} - 24.0 - * - - - - - - - {{aa3c5121-dab2-40e2-81ca-7ea25febc110}} - 24.0 - * - - - - - - - {{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}} - 2.21 - 2.40.* - - - - - - - {{8de7fcbb-c55c-4fbe-bfc5-fc555c87dbc4}} - 25.0 - 26.* - - - - - - - {{a79fe89b-6662-4ff4-8e88-09950ad4dfde}} - 0.1 - 9.9 - - - - - - - {{3550f703-e582-4d05-9a08-453d09bdfdc6}} - 31.0 - 45.* - - - - diff --git a/platform/firefox/manifest.json b/platform/firefox/manifest.json new file mode 100644 index 0000000000000..84f38e21b1144 --- /dev/null +++ b/platform/firefox/manifest.json @@ -0,0 +1,138 @@ +{ + "author": "Raymond Hill & contributors", + "background": { + "page": "background.html" + }, + "browser_action": { + "browser_style": false, + "default_area": "navbar", + "default_icon": { + "16": "img/icon_16.png", + "32": "img/icon_32.png", + "64": "img/icon_64.png" + }, + "default_title": "uBlock Origin", + "default_popup": "popup-fenix.html" + }, + "browser_specific_settings": { + "gecko": { + "id": "uBlock0@raymondhill.net", + "strict_min_version": "115.0", + "data_collection_permissions": { + "required": [ "none" ] + } + }, + "gecko_android": { + "strict_min_version": "115.0" + } + }, + "commands": { + "_execute_browser_action": { + }, + "launch-element-zapper": { + "description": "__MSG_popupTipZapper__" + }, + "launch-element-picker": { + "description": "__MSG_popupTipPicker__" + }, + "launch-logger": { + "description": "__MSG_popupTipLog__" + }, + "open-dashboard": { + "description": "__MSG_popupTipDashboard__" + }, + "relax-blocking-mode": { + "description": "__MSG_relaxBlockingMode__" + }, + "toggle-cosmetic-filtering": { + "description": "__MSG_toggleCosmeticFiltering__" + }, + "toggle-javascript": { + "description": "__MSG_toggleJavascript__" + } + }, + "content_scripts": [ + { + "matches": [ + "http://*/*", + "https://*/*", + "file://*/*" + ], + "js": [ + "/js/vapi.js", + "/js/vapi-client.js", + "/js/contentscript.js" + ], + "all_frames": true, + "match_about_blank": true, + "run_at": "document_start" + }, + { + "matches": [ + "https://easylist.to/*", + "https://*.fanboy.co.nz/*", + "https://filterlists.com/*", + "https://forums.lanik.us/*", + "https://github.com/*", + "https://*.github.io/*" + ], + "js": [ + "/js/scriptlets/subscriber.js" + ], + "run_at": "document_idle", + "all_frames": false + }, + { + "matches": [ + "https://github.com/uBlockOrigin/*", + "https://ublockorigin.github.io/*", + "https://*.reddit.com/r/uBlockOrigin/*" + ], + "js": [ + "/js/scriptlets/updater.js" + ], + "run_at": "document_idle", + "all_frames": false + } + ], + "default_locale": "en", + "description": "__MSG_extShortDesc__", + "icons": { + "16": "img/ublock.svg", + "32": "img/ublock.svg", + "48": "img/ublock.svg", + "64": "img/ublock.svg", + "96": "img/ublock.svg", + "128": "img/ublock.svg" + }, + "manifest_version": 2, + "name": "uBlock Origin", + "options_ui": { + "page": "dashboard.html", + "open_in_tab": true + }, + "permissions": [ + "alarms", + "dns", + "menus", + "privacy", + "storage", + "tabs", + "unlimitedStorage", + "webNavigation", + "webRequest", + "webRequestBlocking", + "" + ], + "short_name": "uBlock₀", + "sidebar_action": { + "default_title": "__MSG_statsPageName__", + "default_panel": "logger-ui.html", + "default_icon": "img/ublock.svg", + "open_at_install": false + }, + "version": "1.9.15.101", + "web_accessible_resources": [ + "/web_accessible_resources/*" + ] +} diff --git a/platform/firefox/options.xul b/platform/firefox/options.xul deleted file mode 100644 index aee6f7c007cdd..0000000000000 --- a/platform/firefox/options.xul +++ /dev/null @@ -1,9 +0,0 @@ - - - - - + + +
+

spinner

+

+

+
+ + +
+
+

+

+
+ + + +
+
+
+

+

+

+

+

+

+

+
+

_

+

_

+

+ + + +

+
+
+ +
+
+
+ +
+
    + +
    + +
    +
    +

    +   +

    +
    +
    +
    + +
    +
    +
    +
    +
    Copyright (c) Raymond Hill 2014-present
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    
    +            
    +
    +
    + +
    +
    + spinner +
    +
    + + + + + + + + + + + + + + + + + + + + + + + diff --git a/platform/mv3/extension/img/icon_128.png b/platform/mv3/extension/img/icon_128.png new file mode 100644 index 0000000000000..9824fa8d98f31 Binary files /dev/null and b/platform/mv3/extension/img/icon_128.png differ diff --git a/platform/mv3/extension/img/icon_128_off.png b/platform/mv3/extension/img/icon_128_off.png new file mode 100644 index 0000000000000..f878785974fcf Binary files /dev/null and b/platform/mv3/extension/img/icon_128_off.png differ diff --git a/platform/mv3/extension/img/icon_16.png b/platform/mv3/extension/img/icon_16.png new file mode 100644 index 0000000000000..2bf29efd0bf36 Binary files /dev/null and b/platform/mv3/extension/img/icon_16.png differ diff --git a/platform/mv3/extension/img/icon_16_off.png b/platform/mv3/extension/img/icon_16_off.png new file mode 100644 index 0000000000000..5373e8229dfb9 Binary files /dev/null and b/platform/mv3/extension/img/icon_16_off.png differ diff --git a/platform/mv3/extension/img/icon_32.png b/platform/mv3/extension/img/icon_32.png new file mode 100644 index 0000000000000..7c8a455453b92 Binary files /dev/null and b/platform/mv3/extension/img/icon_32.png differ diff --git a/platform/mv3/extension/img/icon_32_off.png b/platform/mv3/extension/img/icon_32_off.png new file mode 100644 index 0000000000000..04f1a67a775d4 Binary files /dev/null and b/platform/mv3/extension/img/icon_32_off.png differ diff --git a/platform/mv3/extension/img/icon_512.png b/platform/mv3/extension/img/icon_512.png new file mode 100644 index 0000000000000..b5f29734802ee Binary files /dev/null and b/platform/mv3/extension/img/icon_512.png differ diff --git a/platform/mv3/extension/img/icon_64.png b/platform/mv3/extension/img/icon_64.png new file mode 100644 index 0000000000000..2cf0a62d7f311 Binary files /dev/null and b/platform/mv3/extension/img/icon_64.png differ diff --git a/platform/mv3/extension/img/icon_64_off.png b/platform/mv3/extension/img/icon_64_off.png new file mode 100644 index 0000000000000..d9a22955a509c Binary files /dev/null and b/platform/mv3/extension/img/icon_64_off.png differ diff --git a/platform/mv3/extension/img/ublock.svg b/platform/mv3/extension/img/ublock.svg new file mode 100644 index 0000000000000..28e8f06ab66b9 --- /dev/null +++ b/platform/mv3/extension/img/ublock.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + diff --git a/platform/mv3/extension/js/action.js b/platform/mv3/extension/js/action.js new file mode 100644 index 0000000000000..7e194dd084df1 --- /dev/null +++ b/platform/mv3/extension/js/action.js @@ -0,0 +1,102 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2022-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 { browser } from './ext.js'; +import { matchesFromHostnames } from './utils.js'; + +/******************************************************************************/ + +let reverseMode = false; + +/******************************************************************************/ + +function disableToolbarIcon(tabId) { + const details = { + path: { + '16': '/img/icon_16_off.png', + '32': '/img/icon_32_off.png', + '64': '/img/icon_64_off.png', + '128': '/img/icon_128_off.png', + } + }; + if ( tabId !== undefined ) { + details.tabId = tabId; + } + browser.action.setIcon(details); +} + +function enableToolbarIcon(tabId) { + const details = { + path: { + '16': '/img/icon_16.png', + '32': '/img/icon_32.png', + '64': '/img/icon_64.png', + '128': '/img/icon_128.png', + } + }; + if ( tabId !== undefined ) { + details.tabId = tabId; + } + browser.action.setIcon(details); +} + +/******************************************************************************/ + +export function toggleToolbarIcon(tabId) { + if ( reverseMode ) { + enableToolbarIcon(tabId); + } else { + disableToolbarIcon(tabId); + } +} + +/******************************************************************************/ + +// https://github.com/uBlockOrigin/uBOL-home/issues/198 +// Ensure the toolbar icon reflects the no-filtering mode of "trusted sites" + +export async function registerToolbarIconToggler(context) { + const { none, basic, optimal, complete } = context.filteringModeDetails; + const reverseModeAfter = none.delete('all-urls'); + const toToggle = reverseModeAfter ? + new Set([ ...basic, ...optimal, ...complete ]) + : none; + + if ( reverseModeAfter !== reverseMode ) { + if ( reverseModeAfter ) { + disableToolbarIcon(); + } else { + enableToolbarIcon(); + } + reverseMode = reverseModeAfter; + } + + if ( toToggle.size === 0 ) { return; } + + const directive = { + id: 'toolbar-icon', + js: [ '/js/scripting/toolbar-icon.js' ], + matches: matchesFromHostnames(toToggle), + runAt: 'document_start', + }; + + context.toAdd.push(directive); +} diff --git a/platform/mv3/extension/js/admin.js b/platform/mv3/extension/js/admin.js new file mode 100644 index 0000000000000..1df2c5079e89c --- /dev/null +++ b/platform/mv3/extension/js/admin.js @@ -0,0 +1,215 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2022-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 { + adminRead, + localRead, localRemove, localWrite, + sessionRead, sessionWrite, +} from './ext.js'; + +import { + enableRulesets, + getRulesetDetails, + setStrictBlockMode, +} from './ruleset-manager.js'; + +import { + getDefaultFilteringMode, + readFilteringModeDetails, +} from './mode-manager.js'; + +import { + rulesetConfig, + saveRulesetConfig, +} from './config.js'; + +import { broadcastMessage } from './utils.js'; +import { dnr } from './ext-compat.js'; +import { registerInjectables } from './scripting-manager.js'; +import { ubolLog } from './debug.js'; + +/******************************************************************************/ + +export async function loadAdminConfig() { + const [ + showBlockedCount, + strictBlockMode, + ] = await Promise.all([ + adminReadEx('showBlockedCount'), + adminReadEx('strictBlockMode'), + ]); + applyAdminConfig({ showBlockedCount, strictBlockMode }); +} + +/******************************************************************************/ + +function applyAdminConfig(config, apply = false) { + const toApply = []; + for ( const [ key, val ] of Object.entries(config) ) { + if ( typeof val !== typeof rulesetConfig[key] ) { continue; } + if ( val === rulesetConfig[key] ) { continue; } + rulesetConfig[key] = val; + toApply.push(key); + } + if ( toApply.length === 0 ) { return; } + saveRulesetConfig(); + if ( apply !== true ) { return; } + while ( toApply.length !== 0 ) { + const key = toApply.pop(); + switch ( key ) { + case 'showBlockedCount': { + if ( typeof dnr.setExtensionActionOptions !== 'function' ) { break; } + const { showBlockedCount } = config; + dnr.setExtensionActionOptions({ + displayActionCountAsBadgeText: showBlockedCount, + }); + broadcastMessage({ showBlockedCount }); + break; + } + case 'strictBlockMode': { + const { strictBlockMode } = config; + setStrictBlockMode(strictBlockMode, true).then(( ) => { + broadcastMessage({ strictBlockMode }); + }); + break; + } + default: + break; + } + } +} + +/******************************************************************************/ + +const adminSettings = { + keys: new Map(), + timer: undefined, + change(key, value) { + this.keys.set(key, value); + if ( this.timer !== undefined ) { return; } + this.timer = self.setTimeout(( ) => { + this.timer = undefined; + this.process(); + }, 127); + }, + async process() { + if ( this.keys.has('rulesets') ) { + ubolLog('admin setting "rulesets" changed'); + await enableRulesets(rulesetConfig.enabledRulesets); + await registerInjectables(); + const results = await Promise.all([ + getAdminRulesets(), + dnr.getEnabledRulesets(), + ]); + const [ adminRulesets, enabledRulesets ] = results; + broadcastMessage({ adminRulesets, enabledRulesets }); + } + if ( this.keys.has('defaultFiltering') ) { + ubolLog('admin setting "defaultFiltering" changed'); + await readFilteringModeDetails(true); + await registerInjectables(); + const defaultFilteringMode = await getDefaultFilteringMode(); + broadcastMessage({ defaultFilteringMode }); + } + if ( this.keys.has('noFiltering') ) { + ubolLog('admin setting "noFiltering" changed'); + const filteringModeDetails = await readFilteringModeDetails(true); + broadcastMessage({ filteringModeDetails }); + } + if ( this.keys.has('showBlockedCount') ) { + ubolLog('admin setting "showBlockedCount" changed'); + const showBlockedCount = this.keys.get('showBlockedCount'); + applyAdminConfig({ showBlockedCount }, true); + } + if ( this.keys.has('strictBlockMode') ) { + ubolLog('admin setting "strictBlockMode" changed'); + const strictBlockMode = this.keys.get('strictBlockMode'); + applyAdminConfig({ strictBlockMode }, true); + } + this.keys.clear(); + } +}; + +/******************************************************************************/ + +export async function getAdminRulesets() { + const [ + adminList, + rulesetDetails, + ] = await Promise.all([ + adminReadEx('rulesets'), + getRulesetDetails(), + ]); + const adminRulesets = new Set(Array.isArray(adminList) && adminList || []); + if ( adminRulesets.has('-default') ) { + adminRulesets.delete('-default'); + for ( const ruleset of rulesetDetails.values() ) { + if ( ruleset.enabled !== true ) { continue; } + if ( adminRulesets.has(`+${ruleset.id}`) ) { continue; } + adminRulesets.add(`-${ruleset.id}`); + } + } + if ( adminRulesets.has('+default') ) { + adminRulesets.delete('+default'); + for ( const ruleset of rulesetDetails.values() ) { + if ( ruleset.enabled !== true ) { continue; } + if ( adminRulesets.has(`-${ruleset.id}`) ) { continue; } + adminRulesets.add(`+${ruleset.id}`); + } + } + if ( adminRulesets.has('-*') ) { + adminRulesets.delete('-*'); + for ( const ruleset of rulesetDetails.values() ) { + if ( ruleset.enabled ) { continue; } + if ( adminRulesets.has(`+${ruleset.id}`) ) { continue; } + adminRulesets.add(`-${ruleset.id}`); + } + } + return Array.from(adminRulesets); +} + +/******************************************************************************/ + +export async function adminReadEx(key) { + let cacheValue; + const session = await sessionRead(`admin.${key}`); + if ( session ) { + cacheValue = session.data; + } else { + const local = await localRead(`admin.${key}`); + if ( local ) { + cacheValue = local.data; + } + localRemove(`admin_${key}`); // TODO: remove eventually + } + adminRead(key).then(async value => { + const adminKey = `admin.${key}`; + await Promise.all([ + sessionWrite(adminKey, { data: value }), + localWrite(adminKey, { data: value }), + ]); + if ( JSON.stringify(value) === JSON.stringify(cacheValue) ) { return; } + adminSettings.change(key, value); + }); + return cacheValue; +} + +/******************************************************************************/ diff --git a/platform/mv3/extension/js/background.js b/platform/mv3/extension/js/background.js new file mode 100644 index 0000000000000..e025d1317c574 --- /dev/null +++ b/platform/mv3/extension/js/background.js @@ -0,0 +1,788 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2022-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 scrmgr from './scripting-manager.js'; + +import { + MODE_BASIC, + MODE_OPTIMAL, + defaultFilteringModes, + getDefaultFilteringMode, + getFilteringMode, + getFilteringModeDetails, + persistHostPermissions, + setDefaultFilteringMode, + setFilteringMode, + setFilteringModeDetails, + syncWithBrowserPermissions, +} from './mode-manager.js'; + +import { + addCustomFilters, + customFiltersFromHostname, + getAllCustomFilters, + hasCustomFilters, + injectCustomFilters, + removeAllCustomFilters, + removeCustomFilters, + startCustomFilters, + terminateCustomFilters, +} from './filter-manager.js'; + +import { + adminReadEx, + getAdminRulesets, + loadAdminConfig, +} from './admin.js'; + +import { + broadcastMessage, + hostnameFromMatch, + hostnamesFromMatches, +} from './utils.js'; + +import { + browser, + localRead, localRemove, localWrite, + runtime, + sessionAccessLevel, + webextFlavor, +} from './ext.js'; + +import { + defaultConfig, + loadRulesetConfig, + process, + rulesetConfig, + saveRulesetConfig, +} from './config.js'; + +import { + enableRulesets, + excludeFromStrictBlock, + getDefaultRulesetsFromEnv, + getEffectiveDynamicRules, + getEffectiveSessionRules, + getEffectiveUserRules, + getRulesetDetails, + patchDefaultRulesets, + setStrictBlockMode, + updateDynamicRules, + updateSessionRules, + updateUserRules, +} from './ruleset-manager.js'; + +import { + getConsoleOutput, + getMatchedRules, + isSideloaded, + toggleDeveloperMode, + ubolErr, + ubolLog, +} from './debug.js'; + +import { + gotoURL, + hasBroadHostPermissions, +} from './ext-utils.js'; + +import { dnr } from './ext-compat.js'; +import { toggleToolbarIcon } from './action.js'; + +/******************************************************************************/ + +const UBOL_ORIGIN = runtime.getURL('').replace(/\/$/, '').toLowerCase(); +const canShowBlockedCount = typeof dnr.setExtensionActionOptions === 'function'; +const { registerInjectables } = scrmgr; + +let pendingPermissionRequest; + +/******************************************************************************/ + +function getCurrentVersion() { + return runtime.getManifest().version; +} + +/******************************************************************************/ + +async function reloadTab(tabId, url = '') { + return new Promise(resolve => { + self.setTimeout(( ) => { + if ( url !== '' ) { + browser.tabs.update(tabId, { url }); + } else { + browser.tabs.reload(tabId); + } + resolve(); + }, 437); + }); +} + +// When a new host permission is granted through the popup panel +async function onPermissionGrantedThruExtension(details, origins) { + await persistHostPermissions(); + const defaultMode = await getDefaultFilteringMode(); + if ( defaultMode >= MODE_OPTIMAL ) { return; } + if ( Array.isArray(origins) === false ) { return; } + const hostnames = hostnamesFromMatches(origins); + if ( hostnames.includes(details.hostname) === false ) { return; } + const beforeLevel = await getFilteringMode(details.hostname); + if ( beforeLevel === details.afterLevel ) { return; } + const afterLevel = await setFilteringMode(details.hostname, details.afterLevel); + if ( afterLevel !== details.afterLevel ) { return; } + await registerInjectables(); + if ( rulesetConfig.autoReload !== true ) { return; } + await reloadTab(details.tabId, details.url); +} + +// When a new host permission is granted through the browser +async function onPermissionGrantedThruBrowser(origins) { + const modified = await syncWithBrowserPermissions(); + if ( modified === false ) { return; } + await registerInjectables(); + if ( rulesetConfig.autoReload !== true ) { return; } + if ( origins.length !== 1 ) { return; } + const tabs = await browser.tabs.query({ active: true, currentWindow: true }); + const tabId = tabs?.[0]?.id; + if ( typeof tabId !== 'number' || tabId === -1 ) { return; } + const results = await browser.scripting.executeScript({ + target: { tabId, frameIds: [ 0 ] }, + func: ( ) => document.location.hostname, + }).catch(( ) => { + }); + const tabHostname = results?.[0]?.result; + if ( typeof tabHostname !== 'string' ) { return; } + const hostname = hostnameFromMatch(origins[0]); + if ( tabHostname.endsWith(hostname) === false ) { return; } + const pos = tabHostname.length - hostname.length; + if ( pos !== 0 && tabHostname.charAt(pos-1) !== '.' ) { return; } + await reloadTab(tabId); +} + +// https://github.com/uBlockOrigin/uBOL-home/issues/280 +async function onPermissionsAdded(permissions) { + const details = pendingPermissionRequest; + pendingPermissionRequest = undefined; + const { origins = [] } = permissions; + return details !== undefined + ? onPermissionGrantedThruExtension(details, origins) + : onPermissionGrantedThruBrowser(origins); +} + +async function onPermissionsRemoved() { + const modified = await syncWithBrowserPermissions(); + if ( modified === false ) { return false; } + registerInjectables(); + return true; +} + +async function onPermissionsChanged(op, permissions) { + await isFullyInitialized; + const { pending } = onPermissionsChanged; + await Promise.all(pending); + const promise = op === 'removed' + ? onPermissionsRemoved() + : onPermissionsAdded(permissions); + pending.push(promise); +} +onPermissionsChanged.pending = []; + +/******************************************************************************/ + +function setDeveloperMode(state) { + rulesetConfig.developerMode = state === true; + toggleDeveloperMode(rulesetConfig.developerMode); + broadcastMessage({ developerMode: rulesetConfig.developerMode }); + return Promise.all([ + updateUserRules(), + saveRulesetConfig(), + ]); +} + +/******************************************************************************/ + +function onMessage(request, sender, callback) { + + const tabId = sender?.tab?.id ?? false; + const frameId = tabId && (sender?.frameId ?? false); + + // Does not require trusted origin. + + switch ( request.what ) { + + case 'insertCSS': + if ( frameId === false ) { return false; } + // https://bugs.webkit.org/show_bug.cgi?id=262491 + if ( frameId !== 0 && webextFlavor === 'safari' ) { return false; } + browser.scripting.insertCSS({ + css: request.css, + origin: 'USER', + target: { tabId, frameIds: [ frameId ] }, + }).catch(reason => { + ubolErr(`insertCSS/${reason}`); + }); + return false; + + case 'removeCSS': + if ( frameId === false ) { return false; } + // https://bugs.webkit.org/show_bug.cgi?id=262491 + if ( frameId !== 0 && webextFlavor === 'safari' ) { return false; } + browser.scripting.removeCSS({ + css: request.css, + origin: 'USER', + target: { tabId, frameIds: [ frameId ] }, + }).catch(reason => { + ubolErr(`removeCSS/${reason}`); + }); + return false; + + case 'toggleToolbarIcon': { + if ( tabId ) { + toggleToolbarIcon(tabId); + } + return false; + } + + case 'startCustomFilters': + if ( frameId === false ) { return false; } + startCustomFilters(tabId, frameId).then(( ) => { + callback(); + }); + return true; + + case 'terminateCustomFilters': + if ( frameId === false ) { return false; } + terminateCustomFilters(tabId, frameId).then(( ) => { + callback(); + }); + return true; + + case 'injectCustomFilters': + if ( frameId === false ) { return false; } + injectCustomFilters(tabId, frameId, request.hostname).then(selectors => { + callback(selectors); + }); + return true; + + case 'injectCSSProceduralAPI': + browser.scripting.executeScript({ + files: [ '/js/scripting/css-procedural-api.js' ], + target: { tabId, frameIds: [ frameId ] }, + injectImmediately: true, + }).catch(reason => { + ubolErr(`executeScript/${reason}`); + }).then(( ) => { + callback(); + }); + return true; + + default: + break; + } + + // Does require trusted origin. + + // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/MessageSender + // Firefox API does not set `sender.origin` + if ( sender.origin !== undefined ) { + if ( sender.origin.toLowerCase() !== UBOL_ORIGIN ) { return; } + } + + switch ( request.what ) { + + case 'applyRulesets': { + enableRulesets(request.enabledRulesets).then(result => { + if ( result === undefined || result.error ) { + callback(result); + return; + } + rulesetConfig.enabledRulesets = result.enabledRulesets; + return saveRulesetConfig().then(( ) => { + return registerInjectables(); + }).then(( ) => { + callback(result); + }); + }).finally(( ) => { + broadcastMessage({ enabledRulesets: rulesetConfig.enabledRulesets }); + }); + return true; + } + + case 'getDefaultConfig': + getDefaultRulesetsFromEnv().then(rulesets => { + callback({ + autoReload: defaultConfig.autoReload, + developerMode: defaultConfig.developerMode, + showBlockedCount: defaultConfig.showBlockedCount, + strictBlockMode: defaultConfig.strictBlockMode, + rulesets, + filteringModes: Object.assign(defaultFilteringModes), + }); + }); + return true; + + case 'getOptionsPageData': + Promise.all([ + hasBroadHostPermissions(), + getDefaultFilteringMode(), + getRulesetDetails(), + dnr.getEnabledRulesets(), + getAdminRulesets(), + adminReadEx('disabledFeatures'), + ]).then(results => { + const [ + hasOmnipotence, + defaultFilteringMode, + rulesetDetails, + enabledRulesets, + adminRulesets, + disabledFeatures, + ] = results; + callback({ + hasOmnipotence, + defaultFilteringMode, + enabledRulesets, + adminRulesets, + maxNumberOfEnabledRulesets: dnr.MAX_NUMBER_OF_ENABLED_STATIC_RULESETS, + rulesetDetails: Array.from(rulesetDetails.values()), + autoReload: rulesetConfig.autoReload, + showBlockedCount: rulesetConfig.showBlockedCount, + canShowBlockedCount, + strictBlockMode: rulesetConfig.strictBlockMode, + firstRun: process.firstRun, + isSideloaded, + developerMode: rulesetConfig.developerMode, + disabledFeatures, + }); + process.firstRun = false; + }); + return true; + + case 'getEnabledRulesets': + dnr.getEnabledRulesets().then(rulesets => { + callback(rulesets); + }); + return true; + + case 'getRulesetDetails': + getRulesetDetails().then(rulesetDetails => { + callback(Array.from(rulesetDetails.values())); + }); + return true; + + case 'hasBroadHostPermissions': + hasBroadHostPermissions().then(result => { + callback(result); + }); + return true; + + case 'setAutoReload': + rulesetConfig.autoReload = request.state && true || false; + saveRulesetConfig().then(( ) => { + callback(); + broadcastMessage({ autoReload: rulesetConfig.autoReload }); + }); + return true; + + case 'getShowBlockedCount': + callback(rulesetConfig.showBlockedCount); + break; + + case 'setShowBlockedCount': + rulesetConfig.showBlockedCount = request.state && true || false; + if ( canShowBlockedCount ) { + dnr.setExtensionActionOptions({ + displayActionCountAsBadgeText: rulesetConfig.showBlockedCount, + }); + } + saveRulesetConfig().then(( ) => { + callback(); + broadcastMessage({ showBlockedCount: rulesetConfig.showBlockedCount }); + }); + return true; + + case 'setStrictBlockMode': + setStrictBlockMode(request.state).then(( ) => { + callback(); + broadcastMessage({ strictBlockMode: rulesetConfig.strictBlockMode }); + }); + return true; + + case 'setDeveloperMode': + setDeveloperMode(request.state).then(( ) => { + callback(); + }); + return true; + + case 'popupPanelData': { + Promise.all([ + hasBroadHostPermissions(), + getFilteringMode(request.hostname), + adminReadEx('disabledFeatures'), + hasCustomFilters(request.hostname), + ]).then(results => { + callback({ + hasOmnipotence: results[0], + level: results[1], + autoReload: rulesetConfig.autoReload, + isSideloaded, + developerMode: rulesetConfig.developerMode, + disabledFeatures: results[2], + hasCustomFilters: results[3], + }); + }); + return true; + } + + case 'getFilteringMode': { + getFilteringMode(request.hostname).then(actualLevel => { + callback(actualLevel); + }); + return true; + } + + case 'gotoURL': + gotoURL(request.url, request.type); + break; + + case 'setFilteringMode': { + getFilteringMode(request.hostname).then(beforeLevel => { + if ( request.level === beforeLevel ) { return beforeLevel; } + return setFilteringMode(request.hostname, request.level); + }).then(afterLevel => { + registerInjectables(); + callback(afterLevel); + }); + return true; + } + + case 'setPendingFilteringMode': + pendingPermissionRequest = request; + break; + + case 'getDefaultFilteringMode': { + getDefaultFilteringMode().then(level => { + callback(level); + }); + return true; + } + + case 'setDefaultFilteringMode': + getDefaultFilteringMode().then(beforeLevel => + setDefaultFilteringMode(request.level).then(afterLevel => + ({ beforeLevel, afterLevel }) + ) + ).then(({ beforeLevel, afterLevel }) => { + if ( afterLevel !== beforeLevel ) { + registerInjectables(); + } + callback(afterLevel); + }); + return true; + + case 'getFilteringModeDetails': + getFilteringModeDetails(true).then(details => { + callback(details); + }); + return true; + + case 'setFilteringModeDetails': + setFilteringModeDetails(request.modes).then(( ) => { + registerInjectables(); + getDefaultFilteringMode().then(defaultFilteringMode => { + broadcastMessage({ defaultFilteringMode }); + }); + getFilteringModeDetails(true).then(details => { + callback(details); + }); + }); + return true; + + case 'excludeFromStrictBlock': { + excludeFromStrictBlock(request.hostname, request.permanent).then(( ) => { + callback(); + }); + return true; + } + + case 'getMatchedRules': + getMatchedRules(request.tabId).then(entries => { + callback(entries); + }); + return true; + + case 'showMatchedRules': + browser.windows.create({ + type: 'popup', + url: `/matched-rules.html?tab=${request.tabId}`, + }); + break; + + case 'getEffectiveDynamicRules': + getEffectiveDynamicRules().then(result => { + callback(result); + }); + return true; + + case 'getEffectiveSessionRules': + getEffectiveSessionRules().then(result => { + callback(result); + }); + return true; + + case 'getEffectiveUserRules': + getEffectiveUserRules().then(result => { + callback(result); + }); + return true; + + case 'updateUserDnrRules': + updateUserRules().then(result => { + callback(result); + }); + return true; + + case 'addCustomFilters': + addCustomFilters(request.hostname, request.selectors).then(modified => { + if ( modified !== true ) { return; } + return registerInjectables(); + }).then(( ) => { + callback(); + }) + return true; + + case 'removeCustomFilters': + removeCustomFilters(request.hostname, request.selectors).then(modified => { + if ( modified !== true ) { return; } + return registerInjectables(); + }).then(( ) => { + callback(); + }); + return true; + + case 'removeAllCustomFilters': + removeAllCustomFilters(request.hostname).then(modified => { + if ( modified !== true ) { return; } + return registerInjectables(); + }).then(( ) => { + callback(); + }); + return true; + + case 'customFiltersFromHostname': + customFiltersFromHostname(request.hostname).then(selectors => { + callback(selectors); + }); + return true; + + case 'getAllCustomFilters': + getAllCustomFilters().then(data => { + callback(data); + }); + return true; + + case 'getRegisteredContentScripts': + scrmgr.getRegisteredContentScripts().then(ids => { + callback(ids); + }); + return true; + + case 'getConsoleOutput': + callback(getConsoleOutput()); + break; + + default: + break; + } + + return false; +} + +/******************************************************************************/ + +function onCommand(command, tab) { + switch ( command ) { + case 'enter-zapper-mode': { + if ( browser.scripting === undefined ) { return; } + browser.scripting.executeScript({ + files: [ '/js/scripting/tool-overlay.js', '/js/scripting/zapper.js' ], + target: { tabId: tab.id }, + }); + break; + } + case 'enter-picker-mode': { + if ( browser.scripting === undefined ) { return; } + browser.scripting.executeScript({ + files: [ + '/js/scripting/css-procedural-api.js', + '/js/scripting/tool-overlay.js', + '/js/scripting/picker.js', + ], + target: { tabId: tab.id }, + }); + break; + } + default: + break; + } +} + +/******************************************************************************/ + +async function startSession() { + const currentVersion = getCurrentVersion(); + const isNewVersion = currentVersion !== rulesetConfig.version; + + // Admin settings override user settings + await loadAdminConfig(); + + // The default rulesets may have changed, find out new ruleset to enable, + // obsolete ruleset to remove. + if ( isNewVersion ) { + ubolLog(`Version change: ${rulesetConfig.version} => ${currentVersion}`); + rulesetConfig.version = currentVersion; + await patchDefaultRulesets(); + saveRulesetConfig(); + } + + const rulesetsUpdated = await enableRulesets(rulesetConfig.enabledRulesets); + + // We need to update the regex rules only when ruleset version changes. + if ( rulesetsUpdated === undefined ) { + if ( isNewVersion ) { + updateDynamicRules(); + } else { + updateSessionRules(); + } + } + + // Permissions may have been removed while the extension was disabled + const permissionsUpdated = await syncWithBrowserPermissions(); + + const shouldInject = isNewVersion || permissionsUpdated || + isSideloaded && rulesetConfig.developerMode; + if ( shouldInject ) { + await registerInjectables(); + } + + // Cosmetic filtering-related content scripts cache fitlering data in + // session storage. + sessionAccessLevel({ accessLevel: 'TRUSTED_AND_UNTRUSTED_CONTEXTS' }); + + // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/declarativeNetRequest + // Firefox API does not support `dnr.setExtensionActionOptions` + if ( canShowBlockedCount ) { + dnr.setExtensionActionOptions({ + displayActionCountAsBadgeText: rulesetConfig.showBlockedCount, + }); + } + + // Switch to basic filtering if uBOL doesn't have broad permissions at + // install time. + if ( process.firstRun ) { + const enableOptimal = await hasBroadHostPermissions(); + if ( enableOptimal === false ) { + const afterLevel = await setDefaultFilteringMode(MODE_BASIC); + if ( afterLevel === MODE_BASIC ) { + registerInjectables(); + process.firstRun = false; + } + } + } + + // Required to ensure up to date properties are available when needed + adminReadEx('disabledFeatures').then(items => { + if ( Array.isArray(items) === false ) { return; } + if ( items.includes('develop') ) { + if ( rulesetConfig.developerMode ) { + setDeveloperMode(false); + } + } + }); +} + +/******************************************************************************/ + +async function start() { + await loadRulesetConfig(); + + if ( process.wakeupRun === false ) { + await startSession(); + } else { + scrmgr.onWakeupRun(); + } + + const scripts = await scrmgr.getRegisteredContentScripts(); + if ( scripts.length === 0 ) { + registerInjectables(); + } + + toggleDeveloperMode(rulesetConfig.developerMode); +} + +/******************************************************************************/ + +// https://github.com/uBlockOrigin/uBOL-home/issues/199 +// Force a restart of the extension once when an "internal error" occurs + +const isFullyInitialized = start().then(( ) => { + localRemove('goodStart'); + return false; +}).catch(reason => { + ubolErr(reason); + if ( process.wakeupRun ) { return; } + return localRead('goodStart').then(goodStart => { + if ( goodStart === false ) { + localRemove('goodStart'); + return false; + } + return localWrite('goodStart', false).then(( ) => true); + }); +}).then(restart => { + if ( restart !== true ) { return; } + runtime.reload(); +}); + +runtime.onMessage.addListener((request, sender, callback) => { + isFullyInitialized.then(( ) => { + const r = onMessage(request, sender, callback); + if ( r !== true ) { callback(); } + }); + return true; +}); + +browser.permissions.onRemoved.addListener((...args) => { + isFullyInitialized.then(( ) => { + onPermissionsChanged('removed', ...args); + }); +}); + +browser.permissions.onAdded.addListener((...args) => { + isFullyInitialized.then(( ) => { + onPermissionsChanged('added', ...args); + }); +}); + +browser.commands.onCommand.addListener((...args) => { + isFullyInitialized.then(( ) => { + onCommand(...args); + }); +}); diff --git a/platform/mv3/extension/js/backup-restore.js b/platform/mv3/extension/js/backup-restore.js new file mode 100644 index 0000000000000..b8559b1cf5c97 --- /dev/null +++ b/platform/mv3/extension/js/backup-restore.js @@ -0,0 +1,153 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2022-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 { + localRead, localRemove, localWrite, + runtime, + sendMessage, +} from './ext.js'; + +/******************************************************************************/ + +export async function backupToObject(currentConfig) { + const out = {}; + const manifest = runtime.getManifest(); + out.version = manifest.versionName ?? manifest.version; + const defaultConfig = await sendMessage({ what: 'getDefaultConfig' }); + if ( currentConfig.autoReload !== defaultConfig.autoReload ) { + out.autoReload = currentConfig.autoReload; + } + if ( currentConfig.developerMode !== defaultConfig.developerMode ) { + out.developerMode = currentConfig.developerMode; + } + if ( currentConfig.showBlockedCount !== defaultConfig.showBlockedCount ) { + out.showBlockedCount = currentConfig.showBlockedCount; + } + if ( currentConfig.strictBlockMode !== defaultConfig.strictBlockMode ) { + out.strictBlockMode = currentConfig.strictBlockMode; + } + const { enabledRulesets } = currentConfig; + const customRulesets = []; + for ( const id of enabledRulesets ) { + if ( defaultConfig.rulesets.includes(id) ) { continue; } + customRulesets.push(`+${id}`); + } + for ( const id of defaultConfig.rulesets ) { + if ( enabledRulesets.includes(id) ) { continue; } + customRulesets.push(`-${id}`); + } + if ( customRulesets.length !== 0 ) { + out.rulesets = customRulesets; + } + out.filteringModes = await sendMessage({ what: 'getFilteringModeDetails' }); + const customFilters = await sendMessage({ what: 'getAllCustomFilters' }); + const filters = []; + for ( const [ hostname, selectors ] of customFilters ) { + for ( const selector of selectors ) { + filters.push(`${hostname}##${selector}`); + } + } + if ( filters.length !== 0 ) { + out.cosmeticFilters = filters; + } + const dnrRules = await localRead('userDnrRules'); + if ( typeof dnrRules === 'string' && dnrRules.length !== 0 ) { + out.dnrRules = dnrRules.split(/\n+/); + } + return out; +} + +/******************************************************************************/ + +export async function restoreFromObject(targetConfig) { + const defaultConfig = await sendMessage({ what: 'getDefaultConfig' }); + + await sendMessage({ + what: 'setAutoReload', + state: targetConfig.autoReload ?? defaultConfig.autoReload + }); + + await sendMessage({ + what: 'setShowBlockedCount', + state: targetConfig.showBlockedCount ?? defaultConfig.showBlockedCount + }); + + await sendMessage({ + what: 'setDeveloperMode', + state: targetConfig.developerMode ?? defaultConfig.developerMode + }); + + await sendMessage({ + what: 'setStrictBlockMode', + state: targetConfig.strictBlockMode ?? defaultConfig.strictBlockMode + }); + + const enabledRulesets = new Set(defaultConfig.rulesets); + for ( const entry of targetConfig.rulesets || [] ) { + const id = entry.slice(1); + if ( entry.startsWith('+') ) { + enabledRulesets.add(id); + } else if ( entry.startsWith('-') ) { + enabledRulesets.delete(id); + } + } + await sendMessage({ + what: 'applyRulesets', + enabledRulesets: Array.from(enabledRulesets), + }); + + await sendMessage({ + what: 'setFilteringModeDetails', + modes: targetConfig.filteringModes ?? defaultConfig.filteringModes, + }); + + await sendMessage({ what: 'removeAllCustomFilters', hostname: '*' }); + const hostnameMap = new Map(); + for ( const line of targetConfig.cosmeticFilters ?? [] ) { + const i = line.indexOf('##'); + if ( i === -1 ) { continue; } + const hostname = line.slice(0, i); + if ( hostname === '' ) { continue; } + const selector = line.slice(i+2); + if ( selector === '' ) { continue; } + const selectors = hostnameMap.get(hostname) || []; + if ( selectors.length === 0 ) { + hostnameMap.set(hostname, selectors) + } + selectors.push(selector); + } + const promises = []; + for ( const [ hostname, selectors ] of hostnameMap ) { + promises.push( + sendMessage({ what: 'addCustomFilters', hostname, selectors }) + ); + } + await Promise.all(promises); + + const dnrRules = targetConfig.dnrRules ?? []; + if ( dnrRules.length !== 0 ) { + await localWrite('userDnrRules', dnrRules.join('\n')); + } else { + await localRemove('userDnrRules'); + } + await sendMessage({ what: 'updateUserDnrRules' }); + +} diff --git a/platform/mv3/extension/js/config.js b/platform/mv3/extension/js/config.js new file mode 100644 index 0000000000000..988223a758fb9 --- /dev/null +++ b/platform/mv3/extension/js/config.js @@ -0,0 +1,70 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2022-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 { + localRead, localWrite, + sessionRead, sessionWrite, + webextFlavor, +} from './ext.js'; + +/******************************************************************************/ + +export const rulesetConfig = { + version: '', + enabledRulesets: [], + autoReload: true, + showBlockedCount: true, + strictBlockMode: webextFlavor !== 'safari', + developerMode: false, + hasBroadHostPermissions: true, +}; + +export const defaultConfig = Object.assign({}, rulesetConfig); + +export const process = { + firstRun: false, + wakeupRun: false, +}; + +/******************************************************************************/ + +export async function loadRulesetConfig() { + const sessionData = await sessionRead('rulesetConfig'); + if ( sessionData ) { + Object.assign(rulesetConfig, sessionData); + process.wakeupRun = true; + return; + } + const localData = await localRead('rulesetConfig'); + if ( localData ) { + Object.assign(rulesetConfig, localData) + sessionWrite('rulesetConfig', rulesetConfig); + return; + } + sessionWrite('rulesetConfig', rulesetConfig); + localWrite('rulesetConfig', rulesetConfig); + process.firstRun = true; +} + +export async function saveRulesetConfig() { + sessionWrite('rulesetConfig', rulesetConfig); + return localWrite('rulesetConfig', rulesetConfig); +} diff --git a/platform/mv3/extension/js/dashboard.js b/platform/mv3/extension/js/dashboard.js new file mode 100644 index 0000000000000..bd3560f6fde02 --- /dev/null +++ b/platform/mv3/extension/js/dashboard.js @@ -0,0 +1,88 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-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 { dom, qs$ } from './dom.js'; +import { + localRead, localRemove, localWrite, + runtime, + webextFlavor, +} from './ext.js'; +import { faIconsInit } from './fa-icons.js'; +import { i18n } from './i18n.js'; + +/******************************************************************************/ + +dom.body.dataset.platform = webextFlavor; + +{ + const manifest = runtime.getManifest(); + dom.text('#aboutNameVer', `${manifest.name} ${manifest.version}`); +} + +dom.attr('a', 'target', '_blank'); + +dom.on('#dashboard-nav', 'click', '.tabButton', ev => { + const { pane } = ev.target.dataset; + dom.body.dataset.pane = pane; + if ( pane === 'settings' ) { + localRemove('dashboard.activePane'); + } else { + localWrite('dashboard.activePane', pane); + } +}); + +localRead('dashboard.activePane').then(pane => { + if ( typeof pane !== 'string' ) { return; } + dom.body.dataset.pane = pane; +}); + +// Update troubleshooting on-demand +const tsinfoObserver = new IntersectionObserver(entries => { + if ( entries.every(a => a.isIntersecting === false) ) { return; } + import('./troubleshooting.js').then(module => { + return module.getTroubleshootingInfo(); + }).then(config => { + qs$('[data-i18n="supportS5H"] + pre').textContent = config; + }); +}); +tsinfoObserver.observe(qs$('[data-i18n="supportS5H"] + pre')); + +/******************************************************************************/ + +export function nodeFromTemplate(templateId, nodeSelector) { + const template = qs$(`template#${templateId}`); + const fragment = template.content.cloneNode(true); + const node = nodeSelector !== undefined + ? qs$(fragment, nodeSelector) + : fragment.firstElementChild; + faIconsInit(node); + i18n.render(node); + return node; +} + +/******************************************************************************/ + +export function hashFromIterable(iter) { + if ( Boolean(iter) === false ) { return ''; } + return Array.from(iter).sort().join('\n'); +} + +/******************************************************************************/ diff --git a/platform/mv3/extension/js/debug.js b/platform/mv3/extension/js/debug.js new file mode 100644 index 0000000000000..2fe8e6e396336 --- /dev/null +++ b/platform/mv3/extension/js/debug.js @@ -0,0 +1,211 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2024-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 { + dnr, + normalizeDNRRules, + webext, +} from './ext-compat.js'; + +import { + sessionRead, + sessionWrite, +} from './ext.js'; + +/******************************************************************************/ + +const isModern = dnr.onRuleMatchedDebug instanceof Object; + +export const isSideloaded = (( ) => { + const { permissions } = webext.runtime.getManifest(); + return permissions?.includes('declarativeNetRequestFeedback') ?? false; +})(); + +/******************************************************************************/ + +const CONSOLE_MAX_LINES = 32; +const consoleOutput = []; + +sessionRead('console').then(before => { + if ( Array.isArray(before) === false ) { return; } + for ( const s of before.reverse() ) { + consoleOutput.unshift(s); + } + consoleTruncate(); +}); + +const consoleTruncate = ( ) => { + if ( consoleOutput.length <= CONSOLE_MAX_LINES ) { return; } + consoleOutput.copyWithin(0, -CONSOLE_MAX_LINES); + consoleOutput.length = CONSOLE_MAX_LINES; +}; + +const consoleAdd = (...args) => { + if ( args.length === 0 ) { return; } + const now = new Date(); + const time = [ + `${now.getUTCMonth()+1}`.padStart(2, '0'), + `${now.getUTCDate()}`.padStart(2, '0'), + '.', + `${now.getUTCHours()}`.padStart(2, '0'), + `${now.getUTCMinutes()}`.padStart(2, '0'), + ].join(''); + for ( let i = 0; i < args.length; i++ ) { + const s = `[${time}]${args[i]}`; + if ( Boolean(s) === false ) { continue; } + if ( s === consoleOutput.at(-1) ) { continue; } + consoleOutput.push(s); + } + consoleTruncate(); + sessionWrite('console', getConsoleOutput()); +} + +export const ubolLog = (...args) => { + // Do not pollute dev console in stable releases. + if ( isSideloaded !== true ) { return; } + console.info('[uBOL]', ...args); +}; + +export const ubolErr = (...args) => { + if ( Array.isArray(args) === false ) { return; } + if ( globalThis.ServiceWorkerGlobalScope ) { + consoleAdd(...args); + } + // Do not pollute dev console in stable releases. + if ( isSideloaded !== true ) { return; } + console.error('[uBOL]', ...args); +}; + +export const getConsoleOutput = ( ) => { + return consoleOutput.slice(); +}; + +/******************************************************************************/ + +const rulesets = new Map(); +const bufferSize = isSideloaded ? 256 : 1; +const matchedRules = new Array(bufferSize); +matchedRules.fill(null); +let writePtr = 0; + +const pruneLongLists = list => { + if ( list.length <= 11 ) { return list; } + return [ ...list.slice(0, 5), '...', ...list.slice(-5) ]; +}; + +const getRuleset = async rulesetId => { + if ( rulesets.has(rulesetId) ) { + return rulesets.get(rulesetId); + } + let rules; + if ( rulesetId === dnr.DYNAMIC_RULESET_ID ) { + rules = await dnr.getDynamicRules().catch(( ) => undefined); + } else { + const response = await fetch(`/rulesets/main/${rulesetId}.json`).catch(( ) => undefined); + if ( response === undefined ) { return; } + rules = await response.json().catch(( ) => + undefined + ).then(rules => + normalizeDNRRules(rules) + ); + } + if ( Array.isArray(rules) === false ) { return; } + const ruleset = new Map(); + for ( const rule of rules ) { + const condition = rule.condition; + if ( condition ) { + if ( condition.requestDomains ) { + condition.requestDomains = pruneLongLists(condition.requestDomains); + } + if ( condition.initiatorDomains ) { + condition.initiatorDomains = pruneLongLists(condition.initiatorDomains); + } + } + const ruleId = rule.id; + rule.id = `${rulesetId}/${ruleId}`; + ruleset.set(ruleId, rule); + } + rulesets.set(rulesetId, ruleset); + return ruleset; +}; + +const getRuleDetails = async ruleInfo => { + const { rulesetId, ruleId } = ruleInfo.rule; + const ruleset = await getRuleset(rulesetId); + if ( ruleset === undefined ) { return; } + return { request: ruleInfo.request, rule: ruleset.get(ruleId) }; +}; + +/******************************************************************************/ + +export const getMatchedRules = (( ) => { + if ( isSideloaded !== true ) { + return ( ) => Promise.resolve([]); + } + + if ( isModern ) { + return async tabId => { + const promises = []; + for ( let i = 0; i < bufferSize; i++ ) { + const j = (writePtr + i) % bufferSize; + const ruleInfo = matchedRules[j]; + if ( ruleInfo === null ) { continue; } + if ( ruleInfo.request.tabId !== -1 ) { + if ( ruleInfo.request.tabId !== tabId ) { continue; } + } + const promise = getRuleDetails(ruleInfo); + if ( promise === undefined ) { continue; } + promises.unshift(promise); + } + return Promise.all(promises); + }; + } + + return async tabId => { + if ( typeof dnr.getMatchedRules !== 'function' ) { return []; } + const matchedRules = await dnr.getMatchedRules({ tabId }); + if ( matchedRules instanceof Object === false ) { return []; } + const promises = []; + for ( const { tabId, rule } of matchedRules.rulesMatchedInfo ) { + promises.push(getRuleDetails({ request: { tabId }, rule })); + } + return Promise.all(promises); + }; +})(); + +/******************************************************************************/ + +const matchedRuleListener = ruleInfo => { + matchedRules[writePtr] = ruleInfo; + writePtr = (writePtr + 1) % bufferSize; +}; + +export const toggleDeveloperMode = state => { + if ( isSideloaded !== true ) { return; } + if ( isModern === false ) { return; } + if ( state ) { + dnr.onRuleMatchedDebug.addListener(matchedRuleListener); + } else { + dnr.onRuleMatchedDebug.removeListener(matchedRuleListener); + } +}; + +/******************************************************************************/ diff --git a/platform/mv3/extension/js/develop.js b/platform/mv3/extension/js/develop.js new file mode 100644 index 0000000000000..ab32e10688dc0 --- /dev/null +++ b/platform/mv3/extension/js/develop.js @@ -0,0 +1,624 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-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 { dom, qs$, qsa$ } from './dom.js'; +import { localRead, localWrite, sendMessage } from './ext.js'; +import { faIconsInit } from './fa-icons.js'; +import { i18n } from './i18n.js'; + +/******************************************************************************/ + +class Editor { + constructor() { + this.lastSavedText = ''; + this.view = null; + this.reYamlDocSeparator = /^(?:---|...)\s*$/; + this.modifiedRange = { start: 0, end: 0 }; + this.updateTimer = undefined; + this.ioPanel = self.cm6.createViewPanel(); + this.summaryPanel = self.cm6.createViewPanel(); + this.panels = []; + this.editors = {}; + } + + async init() { + await Promise.all([ + import('./mode-editor.js').then(module => { + this.editors['modes'] = new module.ModeEditor(this); + }), + import('./ro-dnr-editor.js').then(module => { + this.editors['dnr.ro'] = new module.ReadOnlyDNREditor(this); + }), + import('./rw-dnr-editor.js').then(module => { + this.editors['dnr.rw'] = new module.ReadWriteDNREditor(this); + }), + ]); + const rulesetDetails = await sendMessage({ what: 'getRulesetDetails' }); + const parent = qs$('#editors optgroup'); + for ( const details of rulesetDetails ) { + const option = document.createElement('option'); + option.value = `dnr.ro.${details.id}`; + option.textContent = details.name; + parent.append(option); + } + this.validModes = Array.from(qsa$('#editors option')).map(a => a.value); + const mode = await localRead('dashboard.develop.editor'); + this.editorFromMode(mode); + const text = this.normalizeEditorText(await this.editor.getText(this.mode)); + const viewConfig = { + text, + yamlLike: true, + oneDark: dom.cl.has(':root', 'dark'), + updateListener: info => { this.viewUpdateListener(info); }, + saveListener: ( ) => { this.saveEditorText(); }, + lineError: true, + spanError: true, + // https://codemirror.net/examples/autocompletion/ + autocompletion: { + override: [ + context => { + return this.autoComplete(context); + }, + ], + activateOnCompletion: ( ) => true, + }, + gutterClick: (view, info) => { + return this.gutterClick(view, info); + }, + hoverTooltip: (view, pos, side) => { + return this.hoverTooltip(view, pos, side); + }, + streamParser: this.streamParser, + foldService: (state, from) => { + return this.foldService(state, from); + }, + readOnly: this.isReadOnly(), + }; + viewConfig.panels = [ this.ioPanel, this.summaryPanel, ...this.panels ]; + this.view = self.cm6.createEditorView(viewConfig, qs$('#cm-container')); + this.lastSavedText = text; + self.cm6.foldAll(this.view); + self.cm6.resetUndoRedo(this.view); + this.updateIOPanel(); + this.editor.on?.(this); + this.modifiedRange.start = 1; + this.modifiedRange.end = this.view.state.doc.lines; + this.updateViewAsync(); + } + + normalizeEditorText(text) { + text ||= ''; + text = text.trim(); + if ( text !== '' ) { text += '\n'; } + return text; + } + + setEditorText(text, saved = false) { + text = this.normalizeEditorText(text); + if ( saved ) { + this.lastSavedText = text; + } + this.view.dispatch({ + changes: { + from: 0, to: this.view.state.doc.length, + insert: text, + }, + }); + this.view.focus(); + } + + getEditorText() { + return this.view.state.doc.toString(); + } + + editorTextChanged() { + const text = this.normalizeEditorText(this.getEditorText()); + return text !== this.lastSavedText; + } + + async selectEditor(mode) { + if ( mode === this.mode ) { return; } + this.editorFromMode(mode); + const text = await this.editor.getText(this.mode); + this.setEditorText(text); + this.lastSavedText = this.getEditorText(); + self.cm6.foldAll(this.view) + self.cm6.resetUndoRedo(this.view); + self.cm6.toggleReadOnly(this.view, this.isReadOnly()); + this.updateIOPanel(); + this.editor.on?.(this); + this.modifiedRange.start = 1; + this.modifiedRange.end = this.view.state.doc.lines; + this.updateViewAsync(); + } + + editorFromMode(mode) { + if ( this.validModes.includes(mode) === false ) { + mode = 'modes'; + } + if ( mode === this.mode ) { return mode; } + let editor; + if ( mode === 'modes' ) { + editor = this.editors['modes']; + } else if ( mode.startsWith('dnr.rw.') ) { + editor = this.editors['dnr.rw']; + } else if ( mode.startsWith('dnr.ro.') ) { + editor = this.editors['dnr.ro']; + } else { + return; + } + this.editor?.off?.(this); + this.editor = editor; + this.mode = mode; + const select = qs$('#editors'); + select.value = mode; + } + + isReadOnly() { + return typeof this.editor.saveEditorText !== 'function'; + } + + viewUpdateListener(info) { + if ( info.docChanged === false ) { return; } + for ( const transaction of info.transactions ) { + if ( transaction.docChanged === false ) { continue; } + this.addToModifiedRange(transaction); + if ( transaction.isUserEvent('delete.backward') ) { + this.smartBackspace(transaction); + } else if ( transaction.isUserEvent('input.paste') ) { + if ( this.editor.importFromPaste ) { + this.editor.importFromPaste(this, transaction); + } + } else if ( transaction.isUserEvent('input') ) { + if ( this.smartReturn(transaction) ) { continue; } + this.smartSpacebar(transaction); + } + } + this.updateViewAsync(); + } + + updateViewAsync() { + if ( this.updateTimer !== undefined ) { return; } + this.updateTimer = self.setTimeout(( ) => { + this.updateTimer = undefined; + this.updateView(); + }, 71); + } + + updateView() { + const { doc } = this.view.state; + const changed = this.editorTextChanged(); + dom.attr('#apply', 'disabled', changed ? null : ''); + dom.attr('#revert', 'disabled', changed ? null : ''); + if ( typeof this.editor.updateView !== 'function' ) { return; } + let { start, end } = this.modifiedRange; + if ( start === 0 || end === 0 ) { return; } + this.modifiedRange.start = this.modifiedRange.end = 0; + if ( start > doc.lines ) { start = doc.lines; } + if ( end > doc.lines ) { end = doc.lines; } + self.cm6.lineErrorClear(this.view, start, end); + self.cm6.spanErrorClear(this.view, start, end); + const firstLine = doc.line(start); + const lastLine = doc.line(end); + this.editor.updateView(this, firstLine, lastLine); + } + + updateIOPanel() { + const ioButtons = []; + if ( this.editor.saveEditorText ) { + ioButtons.push('apply', 'revert'); + } + if ( this.editor.importFromFile ) { + ioButtons.push('import'); + } + if ( this.editor.exportToFile ) { + ioButtons.push('export'); + } + if ( ioButtons.length === 0 ) { + return this.ioPanel.render(this.view, null); + } + const template = document.querySelector('template.io-panel'); + const fragment = template.content.cloneNode(true); + const root = fragment.querySelector('.io-panel'); + i18n.render(root); + faIconsInit(root); + root.dataset.io = ioButtons.join(' '); + const config = { + dom: root, + mount: ( ) => { + dom.on('#apply', 'click', ( ) => { + this.saveEditorText(); + }); + dom.on('#revert', 'click', ( ) => { + this.revertEditorText(); + }); + dom.on('#import', 'click', ( ) => { + this.importFromFile() + }); + dom.on('#export', 'click', ( ) => { + this.exportToFile(); + }); + } + }; + this.ioPanel.render(this.view, config); + } + + updateSummaryPanel(dom) { + if ( dom instanceof Object ) { + if ( this.updateSummaryPanel.timer !== undefined ) { + self.clearTimeout(this.updateSummaryPanel.timer); + this.updateSummaryPanel.timer = undefined; + } + return this.summaryPanel.render(this.view, { dom }); + } + if ( this.updateSummaryPanel.timer !== undefined ) { return; } + this.updateSummaryPanel.timer = self.setTimeout(( ) => { + this.updateSummaryPanel.timer = undefined; + this.summaryPanel.render(this.view, null); + }, 157); + } + + autoComplete(context) { + if ( typeof this.editor.autoComplete !== 'function' ) { return null; } + return this.editor.autoComplete(this, context); + } + + hoverTooltip(view, pos, side) { + if ( typeof this.editor.createTooltipWidget !== 'function' ) { return null; } + const details = view.domAtPos(pos); + const textNode = details.node; + if ( textNode.nodeType !== 3 ) { return null; } + const { parentElement } = textNode; + const targetElement = parentElement.closest('[data-tooltip]'); + if ( targetElement === null ) { return null; } + const tooltipText = targetElement.getAttribute('data-tooltip'); + if ( Boolean(tooltipText) === false ) { return null; } + const start = pos - details.offset; + const end = start + textNode.nodeValue.length; + if ( start === pos && side < 0 || end === pos && side > 0 ) { return null; } + return { + above: true, + pos: start, + end, + create: ( ) => { + return { dom: this.editor.createTooltipWidget(tooltipText) }; + }, + }; + } + + foldService(state, from) { + if ( typeof this.editor.foldService !== 'function' ) { return null; } + return this.editor.foldService(state, from); + } + + // Details of YAML document(s) intersecting with a text span. If the text span + // starts on a YAML document divider, the previous YAML document will be + // included. If the text span ends on a YAML document divider, the next YAML + // document will be included. + + snapToYamlDocument(doc, start, end) { + let yamlDocStart = doc.lineAt(start).number; + if ( this.reYamlDocSeparator.test(doc.line(yamlDocStart).text) ) { + if ( yamlDocStart > 1 ) { + yamlDocStart -= 1; + } + } + while ( yamlDocStart > 1 ) { + const line = doc.line(yamlDocStart); + if ( this.reYamlDocSeparator.test(line.text) ) { break; } + yamlDocStart -= 1; + } + const lastLine = doc.lines; + let yamlDocEnd = doc.lineAt(end).number; + if ( this.reYamlDocSeparator.test(doc.line(yamlDocEnd).text) ) { + if ( yamlDocEnd < lastLine ) { + yamlDocEnd += 1; + } + } + while ( yamlDocEnd < lastLine ) { + const line = doc.line(yamlDocEnd); + if ( this.reYamlDocSeparator.test(line.text) ) { break; } + yamlDocEnd += 1; + } + return { yamlDocStart, yamlDocEnd }; + } + + rangeFromTransaction(transaction) { + let from, to; + transaction.changes.iterChangedRanges((fromA, toA, fromB, toB) => { + if ( from === undefined || fromB < from ) { from = fromB; } + if ( to === undefined || toB > to ) { to = toB; } + }); + return { from, to }; + } + + addToModifiedRange(transaction) { + const { from, to } = this.rangeFromTransaction(transaction); + if ( from === undefined || to === undefined ) { return; } + const { newDoc } = transaction; + const { yamlDocStart, yamlDocEnd } = this.snapToYamlDocument(newDoc, from, to); + if ( this.modifiedRange.start === 0 || yamlDocStart < this.modifiedRange.start ) { + this.modifiedRange.start = yamlDocStart; + } + if ( this.modifiedRange.end === 0 || yamlDocEnd > this.modifiedRange.end ) { + this.modifiedRange.end = yamlDocEnd; + } + } + + lineIndentAt(line) { + const match = /^(?: {2})*/.exec(line.text); + const indent = match !== null ? match[0].length : -1; + if ( indent === -1 || (indent & 1) !== 0 ) { return -1; } + return indent / 2; + } + + getScopeAt(from, doc) { + doc ||= this.view.state.doc; + const lineFrom = doc.lineAt(from); + const out = {}; + let depth = this.lineIndentAt(lineFrom); + if ( depth === -1 ) { return out; } + const text = lineFrom.text.trim(); + if ( text.startsWith('#') ) { return out; } + const path = []; + const end = text.indexOf(':'); + if ( end !== -1 ) { + const beg = text.startsWith('- ') ? 2 : 0; + path.push(text.slice(beg, end+1)); + } + let lineNo = lineFrom.number; + while ( depth > 0 && lineNo > 1 ) { + lineNo -= 1; + const lineBefore = doc.line(lineNo); + const text = lineBefore.text.trim(); + if ( text.startsWith('#') ) { continue; } + if ( this.lineIndentAt(lineBefore) > (depth-1) ) { continue; } + const match = /^- ([^:]+:)/.exec(text); + if ( match !== null ) { + path.unshift(match[1]); + } else { + path.unshift(text); + } + depth -= 1; + } + out.scope = path.join(''); + out.depth = path.length; + return out; + } + + async saveEditorText() { + if ( typeof this.editor.saveEditorText !== 'function' ) { return; } + if ( this.editorTextChanged() === false ) { return; } + const saved = await this.editor.saveEditorText(this); + if ( saved !== true ) { return; } + this.lastSavedText = this.normalizeEditorText(this.getEditorText()); + this.updateView(); + } + + revertEditorText() { + if ( this.editorTextChanged() === false ) { return; } + this.setEditorText(this.lastSavedText); + } + + smartBackspace(transaction) { + const { from, to } = this.rangeFromTransaction(transaction); + if ( from === undefined || to === undefined ) { return; } + if ( to !== from ) { return; } + const { newDoc } = transaction; + const line = newDoc.lineAt(from); + if ( /^(?: {2})+-$/.test(line.text) === false ) { return; } + this.view.dispatch({ changes: { from: from-3, to: from, insert: '' } }); + return true; + } + + lineIsArrayItem(doc, lineNo) { + if ( lineNo < 1 || lineNo > doc.lines ) { return false; } + const line = doc.line(lineNo); + return /^(?: {2})+- /.test(line.text); + } + + smartArrayItem(doc, from) { + const line = doc.lineAt(from); + if ( line.from === 0 ) { return; } + const blanks = /^ *$/.exec(line.text); + if ( blanks === null ) { return; } + if ( this.editor.newlineAssistant ) { + const { scope } = this.getScopeAt(line.from-1, doc); + const insert = this.editor.newlineAssistant[scope]; + if ( insert ) { + this.view.dispatch({ + changes: { from: line.from, to: line.to, insert }, + selection: { anchor: line.from + insert.length }, + }); + return true; + } + } + let targetIndent; + if ( this.lineIsArrayItem(doc, line.number-1) ) { + targetIndent = doc.line(line.number-1).text.indexOf('- '); + } else if ( this.lineIsArrayItem(doc, line.number+1) ) { + targetIndent = doc.line(line.number+1).text.indexOf('- '); + } + if ( targetIndent === undefined ) { return; } + const indent = targetIndent - blanks[0].length; + if ( indent < 0 || indent > 2 ) { return; } + const insert = `${' '.repeat(indent)}- `; + this.view.dispatch({ + changes: { from, insert }, + selection: { anchor: from + insert.length }, + }); + return true; + } + + smartReturn(transaction) { + const { from, to } = this.rangeFromTransaction(transaction); + if ( from === undefined || to === undefined ) { return; } + const { newDoc } = transaction; + return this.smartArrayItem(newDoc, to); + } + + smartSpacebar(transaction) { + const { from, to } = this.rangeFromTransaction(transaction); + if ( from === undefined || to === undefined ) { return; } + if ( (to - from) !== 1 ) { return; } + const { newDoc } = transaction; + const line = newDoc.lineAt(to); + const localTo = to - line.from; + const before = line.text.slice(0, localTo); + if ( /^(?: {1}| {3})$/.test(before) === false ) { return; } + if ( this.smartArrayItem(newDoc, to) ) { return true; } + this.view.dispatch({ + changes: { from: to, insert: ' ' }, + selection: { anchor: to + 1 }, + }); + return true; + } + + gutterClick(view, info) { + const reSeparator = /^(?:---|# ---)\s*/; + const { doc } = view.state; + const lineFirst = doc.lineAt(info.from); + if ( lineFirst.text === '' ) { return false; } + let { from, to } = lineFirst; + if ( reSeparator.test(lineFirst.text) ) { + let lineNo = lineFirst.number + 1; + while ( lineNo < doc.lines ) { + const line = doc.line(lineNo); + if ( reSeparator.test(line.text) ) { break; } + to = line.to; + lineNo += 1; + } + } + view.dispatch({ + selection: { anchor: from, head: Math.min(to+1, doc.length) } + }); + view.focus(); + return true; + } + + importFromFile() { + const editor = this.editor; + if ( typeof editor.importFromFile !== 'function' ) { return; } + const input = qs$('section[data-pane="develop"] input[type="file"]'); + input.accept = editor.ioAccept || ''; + input.onchange = ev => { + input.onchange = null; + const file = ev.target.files[0]; + if ( file === undefined || file.name === '' ) { return; } + const fr = new FileReader(); + fr.onload = ( ) => { + if ( typeof fr.result !== 'string' ) { return; } + editor.importFromFile(this, fr.result); + }; + fr.readAsText(file); + }; + // Reset to empty string, this will ensure a change event is properly + // triggered if the user pick a file, even if it's the same as the last + // one picked. + input.value = ''; + input.click(); + } + + exportToFile() { + const editor = this.editor; + if ( typeof editor.exportToFile !== 'function' ) { return; } + const text = this.getEditorText(); + const result = editor.exportToFile(text); + if ( result === undefined ) { return; } + const { fname, data, mime } = result; + const a = document.createElement('a'); + a.href = `data:${mime};charset=utf-8,${encodeURIComponent(data)}`; + dom.attr(a, 'download', fname || ''); + dom.attr(a, 'type', mime); + a.click(); + } + + streamParser = { + startState: ( ) => { + return { scope: 0 }; + }, + token: (stream, state) => { + if ( stream.sol() ) { + if ( stream.match(/^---\s*$/) ) { return 'ubol-boundary'; } + if ( stream.match(/^# ---\s*$/) ) { return 'ubol-boundary ubol-comment'; } + if ( stream.match(/\.\.\.\s*$/) ) { return 'ubol-boundary'; } + } + const c = stream.peek(); + if ( c === '#' ) { + if ( (stream.pos === 0 || /\s/.test(stream.string.charAt(stream.pos - 1))) ) { + stream.skipToEnd(); + return 'ubol-comment'; + } + } + if ( stream.eatSpace() ) { return null; } + const { scope } = state; + state.scope = 0; + if ( scope === 0 && stream.match(/^[^:]+(?=:)/) ) { + state.scope = 1; + return 'ubol-keyword'; + } + if ( scope === 1 && stream.match(/^:(?: |$)/) ) { + return 'ubol-punctuation'; + } + if ( stream.match(/^- /) ) { + return 'ubol-punctuation'; + } + if ( this.editor.streamParserKeywords ) { + if ( stream.match(this.editor.streamParserKeywords) ) { + return 'ubol-literal'; + } + } + if ( stream.match(/^\S+/) ) { + return null; + } + stream.next(); + return null; + }, + languageData: { + commentTokens: { line: '#' }, + }, + tokenTable: [ + 'ubol-boundary', + 'ubol-keyword', + 'ubol-comment', + 'ubol-punctuation', + 'ubol-literal', + ], + }; +} + +/******************************************************************************/ + +async function start() { + const editor = new Editor(); + await editor.init(); + dom.on('#editors', 'change', ( ) => { + const select = qs$('#editors'); + const mode = select.value; + if ( mode === editor.mode ) { return; } + editor.selectEditor(mode); + localWrite('dashboard.develop.editor', editor.mode); + }); +} + +dom.onFirstShown(start, qs$('section[data-pane="develop"]')); + +/******************************************************************************/ diff --git a/platform/mv3/extension/js/dnr-editor.js b/platform/mv3/extension/js/dnr-editor.js new file mode 100644 index 0000000000000..4600d552e80c3 --- /dev/null +++ b/platform/mv3/extension/js/dnr-editor.js @@ -0,0 +1,180 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-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 { dnr } from './ext-compat.js'; +import { rulesFromText } from './dnr-parser.js'; + +/******************************************************************************/ + +export class DNREditor { + constructor() { + this.validatedRegexes = []; + this.validatedRegexResults = []; + } + + updateView(editor, firstLine, lastLine) { + const { doc } = editor.view.state; + const text = doc.sliceString(firstLine.from, lastLine.to); + const { bad } = rulesFromText(text); + if ( Array.isArray(bad) && bad.length !== 0 ) { + self.cm6.lineErrorAdd(editor.view, bad.map(i => i + firstLine.number)); + } + const entries = self.cm6.findAll( + editor.view, + '\\bregexFilter: (\\S+)', + firstLine.from, + lastLine.to + ); + const regexes = []; + for ( const entry of entries ) { + const regex = entry.match[1]; + const i = this.validatedRegexes.indexOf(regex); + if ( i !== -1 ) { + const reason = this.validatedRegexResults[i]; + if ( reason === true ) { continue; } + self.cm6.spanErrorAdd(editor.view, entry.from+13, entry.to, reason); + } else { + regexes.push(regex); + } + } + this.validateRegexes(editor, regexes); + } + + exportToFile(text, fname) { + const { rules } = rulesFromText(text); + if ( Array.isArray(rules) === false ) { return; } + let ruleId = 1; + for ( const rule of rules ) { + rule.id = ruleId++; + } + return { + fname, + data: JSON.stringify(rules, null, 2), + mime: 'application/json', + }; + } + + async validateRegexes(editor, regexes) { + if ( regexes.length === 0 ) { return; } + const promises = regexes.map(regex => this.validateRegex(regex)); + await Promise.all(promises); + for ( const regex of regexes ) { + const i = this.validatedRegexes.indexOf(regex); + if ( i === -1 ) { continue; } + const reason = this.validatedRegexResults[i]; + if ( reason === true ) { continue; } + const entries = self.cm6.findAll(editor.view, + `(?<=\\bregexFilter: )${RegExp.escape(regex)}` + ); + for ( const entry of entries ) { + self.cm6.spanErrorAdd(editor.view, entry.from, entry.to, reason); + } + } + } + + async validateRegex(regex) { + const details = await dnr.isRegexSupported({ regex }); + const result = details.isSupported || details.reason; + if ( this.validatedRegexes.length > 32 ) { + this.validatedRegexes.pop(); + this.validatedRegexResults.pop(); + } + this.validatedRegexes.unshift(regex); + this.validatedRegexResults.unshift(result); + } + + createTooltipWidget(text) { + const template = document.querySelector('.badmark-tooltip'); + const fragment = template.content.cloneNode(true); + const dom = fragment.querySelector('.badmark-tooltip'); + dom.textContent = text; + return dom; + } + + foldService(state, from) { + const { doc } = state; + const lineFrom = doc.lineAt(from); + if ( this.reFoldable.test(lineFrom.text) === false ) { return null; } + if ( lineFrom.number <= 5 ) { return null ; } + const lineBlockStart = doc.line(lineFrom.number - 5); + if ( this.reFoldCandidates.test(lineBlockStart.text) === false ) { return null; } + for ( let i = lineFrom.number-4; i < lineFrom.number; i++ ) { + const line = doc.line(i); + if ( this.reFoldable.test(line.text) === false ) { return null; } + } + let i = lineFrom.number + 1; + for ( ; i <= doc.lines; i++ ) { + const lineNext = doc.line(i); + if ( this.reFoldable.test(lineNext.text) === false ) { break; } + } + i -= 1; + if ( i === lineFrom.number ) { return null; } + const lineFoldEnd = doc.line(i); + return { from: lineFrom.from+6, to: lineFoldEnd.to }; + } + reFoldable = /^ {4}- \S/; + reFoldCandidates = new RegExp(`^(?: {2})+${[ + 'initiatorDomains', + 'excludedInitiatorDomains', + 'requestDomains', + 'excludedRequestDomains', + ].join('|')}:$`); + + streamParserKeywords = new RegExp(`\\b(${[ + 'block', + 'redirect', + 'allow', + 'modifyHeaders', + 'upgradeScheme', + 'allowAllRequest', + 'append', + 'set', + 'remove', + 'firstParty', + 'thirdParty', + 'true', + 'false', + 'connect', + 'delete', + 'get', + 'head', + 'options', + 'patch', + 'post', + 'put', + 'other', + 'main_frame', + 'sub_frame', + 'stylesheet', + 'script', + 'image', + 'font', + 'object', + 'xmlhttprequest', + 'ping', + 'csp_report', + 'media', + 'websocket', + 'webtransport', + 'webbundle', + 'other', + ].join('|')})\\b`); +}; diff --git a/platform/mv3/extension/js/dnr-parser.js b/platform/mv3/extension/js/dnr-parser.js new file mode 100644 index 0000000000000..14d45bf4959df --- /dev/null +++ b/platform/mv3/extension/js/dnr-parser.js @@ -0,0 +1,581 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-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 +*/ + +/******************************************************************************/ + +const validActionValues = [ + 'block', + 'redirect', + 'allow', + 'upgradeScheme', + 'modifyHeaders', + 'allowAllRequests', +]; + +const validBoolValues = [ + 'false', + 'true', +]; + +const validHeaderOpValues = [ + 'append', + 'remove', + 'set', +]; + +const validDomainTypeValues = [ + 'firstParty', + 'thirdParty', +]; + +const validRequestMethodValues = [ + 'connect', + 'delete', + 'get', + 'head', + 'options', + 'patch', + 'post', + 'put', + 'other', +]; + +const validResourceTypeValues = [ + 'main_frame', + 'sub_frame', + 'stylesheet', + 'script', + 'image', + 'font', + 'object', + 'xmlhttprequest', + 'ping', + 'csp_report', + 'media', + 'websocket', + 'webtransport', + 'webbundle', + 'other', +]; + +/******************************************************************************/ + +function selectParser(scope, rule, node) { + const parser = perScopeParsers[scope.join('.')]; + if ( parser === undefined ) { return false; } + return parser(scope, rule, node); +} + +const perScopeParsers = { + '': function(scope, rule, node) { + const { key, val } = node; + switch ( key ) { + case 'action': + case 'condition': + if ( val !== undefined ) { return false; } + rule[key] = {}; + scope.push(key); + break; + case 'id': { + const n = parseInt(val, 10); + if ( isNaN(n) || n < 1) { return false; } + rule.id = n; + break; + } + case 'priority': { + const n = parseInt(val, 10); + if ( isNaN(n) || n < 1 ) { return false; } + rule.priority = n; + break; + } + default: + return false; + } + return true; + }, + 'action': function(scope, rule, node) { + const { key, val } = node; + switch ( key ) { + case 'type': + if ( validActionValues.includes(val) === false ) { return false; } + rule.action.type = val; + break; + case 'redirect': + rule.action.redirect = {}; + scope.push('redirect'); + break; + case 'requestHeaders': + case 'responseHeaders': + rule.action[key] = []; + scope.push(key); + break; + default: + return false; + } + return true; + }, + 'action.redirect': function(scope, rule, node) { + const { key, val } = node; + switch ( key ) { + case 'extensionPath': + case 'regexSubstitution': + case 'url': + rule.action.redirect[key] = val; + break; + case 'transform': + rule.action.redirect.transform = {}; + scope.push('transform'); + break; + default: + return false; + } + return true; + }, + 'action.redirect.transform': function(scope, rule, node) { + const { key, val } = node; + switch ( key ) { + case 'fragment': + case 'host': + case 'path': + case 'port': + case 'query': + case 'scheme': { + if ( val === undefined ) { return false; } + rule.action.redirect.transform[key] = val; + break; + } + case 'queryTransform': + rule.action.redirect.transform.queryTransform = {}; + scope.push('queryTransform'); + break; + default: + return false; + } + return true; + }, + 'action.redirect.transform.queryTransform': function(scope, rule, node) { + const { key, val } = node; + if ( val !== undefined ) { return false; } + switch ( key ) { + case 'addOrReplaceParams': + case 'removeParams': + rule.action.redirect.transform.queryTransform[key] = []; + scope.push(key); + break; + default: + return false; + } + return true; + }, + 'action.redirect.transform.queryTransform.addOrReplaceParams': function(scope, rule, node) { + if ( node.list !== true ) { return false; } + rule.action.redirect.transform.queryTransform.addOrReplaceParams.push({}); + scope.push('@'); + return selectParser(scope, rule, node); + }, + 'action.redirect.transform.queryTransform.addOrReplaceParams.@': function(scope, rule, node) { + const { key, val } = node; + if ( val === undefined ) { return false; } + const item = rule.action.redirect.transform.queryTransform.addOrReplaceParams.at(-1); + switch ( key ) { + case 'key': + case 'value': + item[key] = val; + break; + case 'replaceOnly': + if ( validBoolValues.includes(val) === false ) { return false; } + item.replaceOnly = val === 'true'; + break; + default: + return false; + } + return true; + }, + 'action.redirect.transform.queryTransform.removeParams': function(scope, rule, node) { + if ( node.list !== true ) { return false; } + rule.action.redirect.transform.queryTransform.removeParams.push(node.val); + return true; + }, + 'action.requestHeaders': function(scope, rule, node) { + if ( node.list !== true ) { return false; } + rule.action.requestHeaders.push({}); + scope.push('@'); + return selectParser(scope, rule, node); + }, + 'action.requestHeaders.@': function(scope, rule, node) { + const { key, val } = node; + const item = rule.action.requestHeaders.at(-1); + switch ( key ) { + case 'header': + case 'value': + item[key] = val; + break; + case 'operation': + if ( validHeaderOpValues.includes(val) === false ) { return false; } + item.operation = val; + break; + default: + return false; + } + return true; + }, + 'action.responseHeaders': function(scope, rule, node) { + if ( node.list !== true ) { return false; } + rule.action.responseHeaders.push({}); + scope.push('@'); + return selectParser(scope, rule, node); + }, + 'action.responseHeaders.@': function(scope, rule, node) { + const { key, val } = node; + const item = rule.action.responseHeaders.at(-1); + switch ( key ) { + case 'header': + case 'value': + item[key] = val; + break; + case 'operation': + if ( validHeaderOpValues.includes(val) === false ) { return false; } + item.operation = val; + break; + default: + return false; + } + return true; + }, + 'condition': function(scope, rule, node) { + const { key, val } = node; + switch ( key ) { + case 'domainType': + if ( validDomainTypeValues.includes(val) === false ) { return false; } + rule.condition.domainType = val; + break; + case 'isUrlFilterCaseSensitive': + if ( validBoolValues.includes(val) === false ) { return false; } + rule.condition.isUrlFilterCaseSensitive = val === 'true'; + break; + case 'regexFilter': + case 'urlFilter': + if ( val === undefined ) { return false; } + rule.condition[key] = val; + break; + case 'initiatorDomains': + case 'excludedInitiatorDomains': + case 'requestDomains': + case 'excludedRequestDomains': + case 'resourceTypes': + case 'excludedResourceTypes': + case 'requestMethods': + case 'excludedRequestMethods': + case 'responseHeaders': + case 'excludedResponseHeaders': + rule.condition[key] = []; + scope.push(key); + break; + case 'tabIds': + rule.condition.tabIds = []; + scope.push('tabIds'); + break; + default: + return false; + } + return true; + }, + 'condition.initiatorDomains': function(scope, rule, node) { + if ( node.list !== true ) { return false; } + rule.condition.initiatorDomains.push(node.val); + return true; + }, + 'condition.excludedInitiatorDomains': function(scope, rule, node) { + if ( node.list !== true ) { return false; } + rule.condition.excludedInitiatorDomains.push(node.val); + return true; + }, + 'condition.domains': function(scope, rule, node) { + if ( node.list !== true ) { return false; } + rule.condition.domains.push(node.val); + return true; + }, + 'condition.excludedDomains': function(scope, rule, node) { + if ( node.list !== true ) { return false; } + rule.condition.excludedDomains.push(node.val); + return true; + }, + 'condition.requestDomains': function(scope, rule, node) { + if ( node.list !== true ) { return false; } + rule.condition.requestDomains.push(node.val); + return true; + }, + 'condition.excludedRequestDomains': function(scope, rule, node) { + if ( node.list !== true ) { return false; } + rule.condition.excludedRequestDomains.push(node.val); + return true; + }, + 'condition.resourceTypes': function(scope, rule, node) { + if ( node.list !== true ) { return false; } + if ( validResourceTypeValues.includes(node.val) === false ) { return false; } + rule.condition.resourceTypes.push(node.val); + return true; + }, + 'condition.excludedResourceTypes': function(scope, rule, node) { + if ( node.list !== true ) { return false; } + if ( validResourceTypeValues.includes(node.val) === false ) { return false; } + rule.condition.excludedResourceTypes.push(node.val); + return true; + }, + 'condition.requestMethods': function(scope, rule, node) { + if ( node.list !== true ) { return false; } + if ( validRequestMethodValues.includes(node.val) === false ) { return false; } + rule.condition.requestMethods.push(node.val); + return true; + }, + 'condition.excludedRequestMethods': function(scope, rule, node) { + if ( node.list !== true ) { return false; } + if ( validRequestMethodValues.includes(node.val) === false ) { return false; } + rule.condition.excludedRequestMethods.push(node.val); + return true; + }, + 'condition.responseHeaders': function(scope, rule, node) { + if ( node.list !== true ) { return false; } + rule.condition.responseHeaders.push({}); + scope.push('@'); + return selectParser(scope, rule, node); + }, + 'condition.responseHeaders.@': function(scope, rule, node) { + const item = rule.condition.responseHeaders.at(-1); + switch ( node.key ) { + case 'header': + if ( node.val === undefined ) { return false; } + item.header = node.val; + break; + case 'values': + case 'excludedValues': + item[node.key] = []; + scope.push(node.key); + break; + default: + return false; + } + return true; + }, + 'condition.responseHeaders.@.values': function(scope, rule, node) { + if ( node.list !== true ) { return false; } + const item = rule.condition.responseHeaders.at(-1); + item.values.push(node.val); + return true; + }, + 'condition.responseHeaders.@.excludedValues': function(scope, rule, node) { + if ( node.list !== true ) { return false; } + const item = rule.condition.responseHeaders.at(-1); + item.excludedValues.push(node.val); + return true; + }, + 'condition.excludedResponseHeaders': function(scope, rule, node) { + if ( node.list !== true ) { return false; } + rule.condition.excludedResponseHeaders.push({}); + scope.push('@'); + return selectParser(scope, rule, node); + }, + 'condition.excludedResponseHeaders.@': function(scope, rule, node) { + const item = rule.condition.excludedResponseHeaders.at(-1); + switch ( node.key ) { + case 'header': + if ( node.val === undefined ) { return false; } + item.header = node.val; + break; + case 'values': + case 'excludedValues': + item[node.key] = []; + scope.push(node.key); + break; + default: + return false; + } + return true; + }, + 'condition.excludedResponseHeaders.@.values': function(scope, rule, node) { + if ( node.list !== true ) { return false; } + const item = rule.condition.excludedResponseHeaders.at(-1); + item.values.push(node.val); + return true; + }, + 'condition.excludedResponseHeaders.@.excludedValues': function(scope, rule, node) { + if ( node.list !== true ) { return false; } + const item = rule.condition.excludedResponseHeaders.at(-1); + item.excludedValues.push(node.val); + return true; + }, + 'condition.tabIds': function(scope, rule, node) { + if ( node.list !== true ) { return false; } + const n = parseInt(node.val, 10); + if ( isNaN(n) || n === 0 ) { return false; } + rule.condition.tabIds.push(n); + }, +}; + +/******************************************************************************/ + +function depthFromIndent(line) { + const match = /^\s*/.exec(line); + const count = match[0].length; + if ( (count & 1) !== 0 ) { return -1; } + return count / 2; +} + +/******************************************************************************/ + +function nodeFromLine(line) { + const match = reNodeParser.exec(line); + const out = {}; + if ( match === null ) { return out; } + if ( match[1] ) { + out.list = true; + } + if ( match[4] ) { + out.val = match[4].trim(); + } else if ( match[3] ) { + out.key = match[2]; + out.val = match[3].trim(); + if ( out.val === "''" ) { out.val = '' }; + } else { + out.key = match[2]; + } + return out; +} + +const reNodeParser = /^\s*(- )?(?:(\S+):( \S.*)?|(\S.*))$/; + +/******************************************************************************/ + +function ruleFromLines(lines, indices) { + const rule = {}; + const bad = []; + const scope = []; + for ( const i of indices ) { + const line = lines[i]; + const depth = depthFromIndent(line); + if ( depth < 0 ) { + bad.push(i); + continue; + } + scope.length = depth; + const node = nodeFromLine(line); + const result = selectParser(scope, rule, node); + if ( result === false ) { + bad.push(i); + } + } + if ( bad.length !== 0 ) { return { bad }; } + return { rule }; +} + +/******************************************************************************/ + +export function rulesFromText(text) { + const rules = []; + const bad = []; + const lines = [ ...text.split(/\n\r|\r\n|\n|\r/), '---' ]; + const indices = []; + for ( let i = 0; i < lines.length; i++ ) { + const line = lines[i].trimEnd(); + if ( line.trim().startsWith('#') ) { continue; } + if ( line !== '---' && line !== '...' ) { + indices.push(i); + continue; + } + // Discard leading empty lines + while ( indices.length !== 0 ) { + const s = lines[indices[0]].trim(); + if ( s.length !== 0 ) { break; } + indices.shift(); + } + // Discard trailing empty lines + while ( indices.length !== 0 ) { + const s = lines[indices.at(-1)].trim(); + if ( s.length !== 0 ) { break; } + indices.pop(); + } + if ( indices.length === 0 ) { continue; } + const result = ruleFromLines(lines, indices); + if ( result.bad ) { + bad.push(...result.bad.slice(0, 4)); + } else if ( result.rule ) { + rules.push(result.rule); + } + indices.length = 0; + } + return { rules, bad }; +} + +/******************************************************************************/ + +function textFromValue(val, depth) { + const indent = ' '.repeat(depth); + switch ( typeof val ) { + case 'boolean': + case 'number': + return `${val}`; + case 'string': + if ( val === '' ) { return "''"; } + return val; + } + const out = []; + if ( Array.isArray(val) ) { + for ( const a of val ) { + const s = textFromValue(a, depth+1); + if ( s === undefined ) { continue; } + out.push(`${indent}- ${s.trimStart()}`); + } + return out.join('\n'); + } + if ( val instanceof Object ) { + for ( const [ a, b ] of Object.entries(val) ) { + const s = textFromValue(b, depth+1); + if ( s === undefined ) { continue; } + if ( b instanceof Object ) { + out.push(`${indent}${a}:\n${s}`); + } else { + out.push(`${indent}${a}: ${s}`); + } + } + return out.join('\n'); + } +} + +/******************************************************************************/ + +export function textFromRules(rules, option = {}) { + if ( Array.isArray(rules) === false ) { + if ( rules instanceof Object === false ) { return; } + rules = [ rules ]; + } + const out = []; + for ( const rule of rules ) { + if ( option.keepId !== true && rule.id ) { rule.id = undefined }; + const text = textFromValue(rule, 0); + if ( text === undefined ) { continue; } + out.push(text, '---' ); + } + if ( out.length !== 0 ) { + out.unshift('---'); + out.push(''); + } + return out.join('\n'); +} diff --git a/platform/mv3/extension/js/ext-compat.js b/platform/mv3/extension/js/ext-compat.js new file mode 100644 index 0000000000000..5391c8962366b --- /dev/null +++ b/platform/mv3/extension/js/ext-compat.js @@ -0,0 +1,99 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2022-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 { deepEquals } from './utils.js'; + +export const webext = self.browser || self.chrome; +export const dnr = webext.declarativeNetRequest || {}; + +/******************************************************************************/ + +export function normalizeDNRRules(rules, ruleIds) { + if ( Array.isArray(rules) === false ) { return rules; } + return Array.isArray(ruleIds) + ? rules.filter(rule => ruleIds.includes(rule.id)) + : rules; +} + +/******************************************************************************/ + +dnr.setAllowAllRules = async function(id, allowed, notAllowed, reverse, priority) { + const [ + beforeDynamicRules, + beforeSessionRules, + ] = await Promise.all([ + dnr.getDynamicRules({ ruleIds: [ id+0 ] }), + dnr.getSessionRules({ ruleIds: [ id+1 ] }), + ]); + const addDynamicRules = []; + const addSessionRules = []; + if ( reverse || allowed.length || notAllowed.length ) { + const rule0 = { + id: id+0, + action: { type: 'allowAllRequests' }, + condition: { + resourceTypes: [ 'main_frame' ], + }, + priority, + }; + if ( allowed.length ) { + rule0.condition.requestDomains = allowed.slice(); + } else if ( notAllowed.length ) { + rule0.condition.excludedRequestDomains = notAllowed.slice(); + } + addDynamicRules.push(rule0); + // https://github.com/uBlockOrigin/uBOL-home/issues/114 + // https://github.com/uBlockOrigin/uBOL-home/issues/247 + const rule1 = { + id: id+1, + action: { type: 'allow' }, + condition: { + tabIds: [ webext.tabs.TAB_ID_NONE ], + }, + priority, + }; + if ( allowed.length ) { + rule1.condition.initiatorDomains = allowed.slice(); + } else if ( notAllowed.length ) { + rule1.condition.excludedInitiatorDomains = notAllowed.slice(); + } + addSessionRules.push(rule1); + } + const promises = []; + const modified = deepEquals(addDynamicRules, beforeDynamicRules) === false; + if ( modified ) { + promises.push( + dnr.updateDynamicRules({ + addRules: addDynamicRules, + removeRuleIds: beforeDynamicRules.map(r => r.id), + }) + ); + } + if ( deepEquals(addSessionRules, beforeSessionRules) === false ) { + promises.push( + dnr.updateSessionRules({ + addRules: addSessionRules, + removeRuleIds: beforeSessionRules.map(r => r.id), + }) + ); + } + return Promise.all(promises).then(( ) => modified).catch(( ) => false); +}; diff --git a/platform/mv3/extension/js/ext-utils.js b/platform/mv3/extension/js/ext-utils.js new file mode 100644 index 0000000000000..4ac7142e44eee --- /dev/null +++ b/platform/mv3/extension/js/ext-utils.js @@ -0,0 +1,68 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2022-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 { + browser, + runtime, +} from './ext.js'; + +/******************************************************************************/ + +// https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/host_permissions#requested_permissions_and_user_prompts +// "Users can grant or revoke host permissions on an ad hoc basis. Therefore, +// most browsers treat host_permissions as optional." + +export async function hasBroadHostPermissions() { + return browser.permissions.getAll().then(permissions => + permissions.origins.includes('') || + permissions.origins.includes('*://*/*') + ).catch(( ) => false); +} + +/******************************************************************************/ + +export async function gotoURL(url, type) { + const pageURL = new URL(url, runtime.getURL('/')); + const tabs = await browser.tabs.query({ + url: pageURL.href, + windowType: type !== 'popup' ? 'normal' : 'popup' + }); + + if ( Array.isArray(tabs) && tabs.length !== 0 ) { + const { windowId, id } = tabs[0]; + return Promise.all([ + browser.windows.update(windowId, { focused: true }), + browser.tabs.update(id, { active: true }), + ]); + } + + if ( type === 'popup' ) { + return browser.windows.create({ + type: 'popup', + url: pageURL.href, + }); + } + + return browser.tabs.create({ + active: true, + url: pageURL.href, + }); +} diff --git a/platform/mv3/extension/js/ext.js b/platform/mv3/extension/js/ext.js new file mode 100644 index 0000000000000..2c3f871e53e15 --- /dev/null +++ b/platform/mv3/extension/js/ext.js @@ -0,0 +1,133 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2022-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 { webext } from './ext-compat.js'; + +/******************************************************************************/ + +export const browser = webext; +export const i18n = browser.i18n; +export const runtime = browser.runtime; + +export const webextFlavor = (( ) => { + const extURL = runtime.getURL(''); + if ( extURL.startsWith('safari-web-extension:') ) { return 'safari'; } + return extURL.startsWith('moz-extension:') ? 'firefox' : 'chromium'; +})(); + +const notAnObject = a => typeof a !== 'object' || a === null; + +/******************************************************************************/ + +// The extension's service worker can be evicted at any time, so when we +// send a message, we try a few more times when the message fails to be sent. + +export function sendMessage(msg) { + return runtime.sendMessage(msg).catch(reason => { + console.log(reason); + }); +} + +/******************************************************************************/ + +export async function localRead(key) { + if ( notAnObject(browser?.storage?.local) ) { return; } + try { + const bin = await browser.storage.local.get(key); + if ( notAnObject(bin) ) { return; } + return bin[key] ?? undefined; + } catch { + } +} + +export async function localWrite(key, value) { + if ( notAnObject(browser?.storage?.local) ) { return; } + return browser.storage.local.set({ [key]: value }); +} + +export async function localRemove(keys) { + if ( notAnObject(browser?.storage?.local) ) { return; } + return browser.storage.local.remove(keys); +} + +export async function localKeys() { + if ( notAnObject(browser?.storage?.local) ) { return; } + if ( browser.storage.local.getKeys ) { + return browser.storage.local.getKeys(); + } + const bin = await browser.storage.local.get(null); + if ( notAnObject(bin) ) { return; } + return Object.keys(bin); +} + +/******************************************************************************/ + +export async function sessionRead(key) { + if ( notAnObject(browser?.storage?.session) ) { return; } + try { + const bin = await browser.storage.session.get(key); + if ( notAnObject(bin) ) { return; } + return bin[key] ?? undefined; + } catch { + } +} + +export async function sessionWrite(key, value) { + if ( notAnObject(browser?.storage?.session) ) { return; } + return browser.storage.session.set({ [key]: value }); +} + +export async function sessionRemove(keys) { + if ( notAnObject(browser?.storage?.session) ) { return; } + return browser.storage.session.remove(keys); +} + +export async function sessionKeys() { + if ( notAnObject(browser?.storage?.session) ) { return; } + if ( browser.storage.session.getKeys ) { + return browser.storage.session.getKeys(); + } + const bin = await browser.storage.session.get(null); + if ( notAnObject(bin) ) { return; } + return Object.keys(bin); +} + +export async function sessionAccessLevel(level) { + try { + browser.storage.session.setAccessLevel(level); + } catch { + } + +} + +/******************************************************************************/ + +export async function adminRead(key) { + if ( browser?.storage?.managed instanceof Object === false ) { return; } + try { + const bin = await browser.storage.managed.get(key); + if ( notAnObject(bin) ) { return; } + return bin[key] ?? undefined; + } catch { + } +} + +/******************************************************************************/ diff --git a/platform/mv3/extension/js/fetch.js b/platform/mv3/extension/js/fetch.js new file mode 100644 index 0000000000000..d93f7e1759d40 --- /dev/null +++ b/platform/mv3/extension/js/fetch.js @@ -0,0 +1,36 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2022-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 { ubolErr } from './debug.js'; + +/******************************************************************************/ + +function fetchJSON(path) { + return fetch(`${path}.json`).then(response => + response.json() + ).catch(reason => { + ubolErr(`fetchJSON/${reason}`); + }); +} + +/******************************************************************************/ + +export { fetchJSON }; diff --git a/platform/mv3/extension/js/filter-lists.js b/platform/mv3/extension/js/filter-lists.js new file mode 100644 index 0000000000000..17cc5318a6e2a --- /dev/null +++ b/platform/mv3/extension/js/filter-lists.js @@ -0,0 +1,464 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-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 { dom, qs$, qsa$ } from './dom.js'; +import { hashFromIterable, nodeFromTemplate } from './dashboard.js'; +import { i18n, i18n$ } from './i18n.js'; +import { localRead, localWrite, sendMessage } from './ext.js'; + +/******************************************************************************/ + +export const rulesetMap = new Map(); + +let cachedRulesetData = {}; +let hideUnusedSet = new Set([ 'ads', 'regions' ]); + +/******************************************************************************/ + +function renderNumber(value) { + return value.toLocaleString(); +} + +/******************************************************************************/ + +function renderTotalRuleCounts() { + let rulesetCount = 0; + let filterCount = 0; + let ruleCount = 0; + for ( const liEntry of qsa$('#lists .listEntry[data-role="leaf"][data-rulesetid]') ) { + if ( qs$(liEntry, 'input[type="checkbox"]:checked') === null ) { continue; } + rulesetCount += 1; + const stats = rulesetStats(liEntry.dataset.rulesetid); + if ( stats === undefined ) { continue; } + ruleCount += stats.ruleCount; + filterCount += stats.filterCount; + } + dom.text('#listsOfBlockedHostsPrompt', i18n$('perRulesetStats') + .replace('{{ruleCount}}', renderNumber(ruleCount)) + .replace('{{filterCount}}', renderNumber(filterCount)) + ); + + dom.cl.toggle(dom.body, 'noMoreRuleset', + rulesetCount === cachedRulesetData.maxNumberOfEnabledRulesets + ); +} + +/******************************************************************************/ + +function updateNodes(listEntries) { + listEntries = listEntries || qs$('#lists'); + const sublistSelector = '.listEntry[data-rulesetid] > .detailbar input'; + const checkedSublistSelector = `${sublistSelector}:checked`; + const adminSublistSelector = '.listEntry.fromAdmin[data-rulesetid] > .detailbar input'; + for ( const listEntry of qsa$(listEntries, '.listEntry[data-nodeid]') ) { + const countElem = qs$(listEntry, ':scope > .detailbar .count'); + if ( countElem === null ) { continue; } + const totalCount = qsa$(listEntry, sublistSelector).length; + const checkedCount = qsa$(listEntry, checkedSublistSelector).length; + dom.text(countElem, `${checkedCount}/${totalCount}`); + const checkboxElem = qs$(listEntry, ':scope > .detailbar .checkbox'); + if ( checkboxElem === null ) { continue; } + const checkboxInput = qs$(checkboxElem, 'input'); + dom.prop(checkboxInput, 'checked', checkedCount !== 0); + dom.cl.toggle(checkboxElem, 'partial', + checkedCount !== 0 && checkedCount !== totalCount + ); + const adminCount = qsa$(listEntry, adminSublistSelector).length; + const fromAdmin = adminCount === totalCount; + dom.cl.toggle(listEntry, 'fromAdmin', fromAdmin); + dom.attr(checkboxInput, 'disabled', fromAdmin ? '' : null); + } +} + +/******************************************************************************/ + +function rulesetStats(rulesetId) { + const rulesetDetails = rulesetMap.get(rulesetId); + if ( rulesetDetails === undefined ) { return; } + const { rules, filters } = rulesetDetails; + const ruleCount = rules.plain + rules.regex; + const filterCount = filters.accepted; + return { ruleCount, filterCount }; +} + +/******************************************************************************/ + +function isAdminRuleset(listkey) { + const { adminRulesets = [] } = cachedRulesetData; + for ( const id of adminRulesets ) { + const pos = id.indexOf(listkey); + if ( pos === 0 ) { return true; } + if ( pos !== 1 ) { continue; } + const c = id.charAt(0); + if ( c === '+' || c === '-' ) { return true; } + } + return false; +} + +/******************************************************************************/ + +export function renderFilterLists(rulesetData) { + cachedRulesetData = rulesetData; + const { enabledRulesets, rulesetDetails } = cachedRulesetData; + + const shouldUpdate = rulesetMap.size !== 0; + + rulesetDetails.forEach(rule => rulesetMap.set(rule.id, rule)); + + const listStatsTemplate = i18n$('perRulesetStats'); + + const initializeListEntry = (ruleset, listEntry) => { + const on = enabledRulesets.includes(ruleset.id); + if ( dom.cl.has(listEntry, 'toggled') === false ) { + dom.prop(qs$(listEntry, ':scope > .detailbar input'), 'checked', on); + } + if ( ruleset.homeURL ) { + dom.attr(qs$(listEntry, 'a.support'), 'href', ruleset.homeURL); + } + dom.cl.toggle(listEntry, 'isDefault', ruleset.enabled === true); + const stats = rulesetStats(ruleset.id); + if ( stats === undefined ) { return; } + listEntry.title = listStatsTemplate + .replace('{{ruleCount}}', renderNumber(stats.ruleCount)) + .replace('{{filterCount}}', renderNumber(stats.filterCount)); + const fromAdmin = isAdminRuleset(ruleset.id); + dom.cl.toggle(listEntry, 'fromAdmin', fromAdmin); + dom.attr( + qs$(listEntry, '.input.checkbox input'), + 'disabled', + fromAdmin ? '' : null + ); + }; + + // Update already rendered DOM lists + if ( shouldUpdate ) { + for ( const listEntry of qsa$('#lists .listEntry[data-rulesetid]') ) { + const rulesetid = listEntry.dataset.rulesetid; + const ruleset = rulesetMap.get(rulesetid); + initializeListEntry(ruleset, listEntry); + } + updateNodes(); + renderTotalRuleCounts(); + return; + } + + const createListEntry = (listDetails, depth) => { + if ( listDetails.lists === undefined ) { + return nodeFromTemplate('listEntryLeaf', '.listEntry'); + } + if ( depth !== 0 ) { + return nodeFromTemplate('listEntryNode', '.listEntry'); + } + return nodeFromTemplate('listEntryRoot', '.listEntry'); + }; + + const createListEntries = (parentkey, listTree, depth = 0) => { + const listEntries = nodeFromTemplate('listEntries', '.listEntries'); + const treeEntries = Object.entries(listTree); + if ( depth !== 0 ) { + const reEmojis = /\p{Emoji}+/gu; + treeEntries.sort((a ,b) => { + const ap = a[1].preferred === true; + const bp = b[1].preferred === true; + if ( ap !== bp ) { return ap ? -1 : 1; } + const as = (a[1].title || a[0]).replace(reEmojis, ''); + const bs = (b[1].title || b[0]).replace(reEmojis, ''); + return as.localeCompare(bs); + }); + } + for ( const [ listkey, listDetails ] of treeEntries ) { + const listEntry = createListEntry(listDetails, depth); + if ( listDetails.lists === undefined ) { + listEntry.dataset.rulesetid = listkey; + } else { + listEntry.dataset.nodeid = listkey; + dom.cl.toggle(listEntry, 'hideUnused', hideUnusedSet.has(listkey)); + } + qs$(listEntry, ':scope > .detailbar .listname').append( + i18n.patchUnicodeFlags(listDetails.name) + ); + if ( listDetails.lists !== undefined ) { + listEntry.append(createListEntries(listkey, listDetails.lists, depth+1)); + dom.cl.toggle(listEntry, 'expanded', true/*listIsExpanded(listkey)*/); + //updateListNode(listEntry); + } else { + initializeListEntry(listDetails, listEntry); + } + listEntries.append(listEntry); + } + return listEntries; + }; + + // Visually split the filter lists in groups + const groups = new Map([ + [ + 'default', + rulesetDetails.filter(ruleset => + ruleset.group === 'default' + ), + ], [ + 'ads', + rulesetDetails.filter(ruleset => + ruleset.group === 'ads' + ), + ], [ + 'privacy', + rulesetDetails.filter(ruleset => + ruleset.group === 'privacy' + ), + ], [ + 'malware', + rulesetDetails.filter(ruleset => + ruleset.group === 'malware' + ), + ], [ + 'annoyances', + rulesetDetails.filter(ruleset => + ruleset.group === 'annoyances' + ), + ], [ + 'misc', + rulesetDetails.filter(ruleset => + ruleset.group === undefined && + typeof ruleset.lang !== 'string' + ), + ], [ + 'regions', + rulesetDetails.filter(ruleset => + ruleset.group === 'regions' + ), + ], + ]); + + dom.cl.toggle(dom.body, 'hideUnused', mustHideUnusedLists('*')); + + // Build list tree + const listTree = {}; + const groupNames = new Map(); + for ( const [ nodeid, rulesets ] of groups ) { + let name = groupNames.get(nodeid); + if ( name === undefined ) { + name = i18n$(`3pGroup${nodeid.charAt(0).toUpperCase()}${nodeid.slice(1)}`); + groupNames.set(nodeid, name); + } + const details = { name, lists: {} }; + listTree[nodeid] = details; + for ( const ruleset of rulesets ) { + if ( ruleset.parent !== undefined ) { + let lists = details.lists; + for ( const parent of ruleset.parent.split('|') ) { + if ( lists[parent] === undefined ) { + lists[parent] = { name: parent, lists: {} }; + } + lists = lists[parent].lists; + } + lists[ruleset.id] = ruleset; + } else { + details.lists[ruleset.id] = ruleset; + } + } + } + // Replace composite list with only one sublist with sublist itself + const promoteLonelySublist = (parent, depth = 0) => { + if ( Boolean(parent.lists) === false ) { return parent; } + const childKeys = Object.keys(parent.lists); + for ( const childKey of childKeys ) { + const child = promoteLonelySublist(parent.lists[childKey], depth + 1); + if ( child === parent.lists[childKey] ) { continue; } + parent.lists[child.id] = child; + delete parent.lists[childKey]; + } + if ( depth === 0 ) { return parent; } + if ( childKeys.length > 1 ) { return parent; } + return parent.lists[childKeys[0]] + }; + for ( const key of Object.keys(listTree) ) { + promoteLonelySublist(listTree[key]); + } + const listEntries = createListEntries('root', listTree); + + updateNodes(listEntries); + + dom.clear('#lists'); + qs$('#lists').append(listEntries); + + renderTotalRuleCounts(); +} + +/******************************************************************************/ + +// Collapsing of unused lists. + +function mustHideUnusedLists(which) { + const hideAll = hideUnusedSet.has('*'); + if ( which === '*' ) { return hideAll; } + return hideUnusedSet.has(which) !== hideAll; +} + +function toggleHideUnusedLists(which) { + const doesHideAll = hideUnusedSet.has('*'); + if ( which === '*' ) { + const mustHide = doesHideAll === false; + hideUnusedSet.clear(); + if ( mustHide ) { + hideUnusedSet.add(which); + } + dom.cl.toggle('#lists', 'hideUnused', mustHide); + dom.cl.toggle('.listEntry[data-nodeid]', 'hideUnused', mustHide); + } else { + const doesHide = hideUnusedSet.has(which); + if ( doesHide ) { + hideUnusedSet.delete(which); + } else { + hideUnusedSet.add(which); + } + const mustHide = doesHide === doesHideAll; + const groupSelector = `.listEntry[data-nodeid="${which}"]`; + dom.cl.toggle(groupSelector, 'hideUnused', mustHide); + } + + localWrite('hideUnusedFilterLists', Array.from(hideUnusedSet)); +} + +dom.on('#lists', 'click', '.listEntry[data-nodeid] > .detailbar, .listExpander', ev => { + toggleHideUnusedLists( + dom.attr(ev.target.closest('[data-nodeid]'), 'data-nodeid') + ); +}); + +// Initialize from saved state. +localRead('hideUnusedFilterLists').then(value => { + if ( Array.isArray(value) === false ) { return; } + hideUnusedSet = new Set(value); + for ( const listEntry of qsa$('[data-nodeid]') ) { + dom.cl.toggle(listEntry, 'hideUnused', + hideUnusedSet.has(listEntry.dataset.nodeid) + ); + } +}); + +/******************************************************************************/ + +const searchFilterLists = ( ) => { + const pattern = dom.prop('#findInLists', 'value') || ''; + dom.cl.toggle('#lists', 'searchMode', pattern !== ''); + if ( pattern === '' ) { return; } + const re = new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'i'); + for ( const listEntry of qsa$('#lists [data-role="leaf"]') ) { + if ( dom.cl.has(listEntry, 'fromAdmin') ) { continue; } + const rulesetid = listEntry.dataset.rulesetid; + const rulesetDetails = rulesetMap.get(rulesetid); + if ( rulesetDetails === undefined ) { continue; } + let haystack = perListHaystack.get(rulesetDetails); + if ( haystack === undefined ) { + haystack = [ + rulesetDetails.name, + listEntry.dataset.nodeid, + rulesetDetails.group || '', + rulesetDetails.tags || '', + ].join(' ').trim(); + perListHaystack.set(rulesetDetails, haystack); + } + dom.cl.toggle(listEntry, 'searchMatch', re.test(haystack)); + } + for ( const listEntry of qsa$('#lists .listEntry:not([data-role="leaf"])') ) { + dom.cl.toggle(listEntry, 'searchMatch', + qs$(listEntry, '.listEntries .listEntry.searchMatch') !== null + ); + } +}; + +const perListHaystack = new WeakMap(); + +dom.on('#findInLists', 'input', searchFilterLists); + +/******************************************************************************/ + +const applyEnabledRulesets = (( ) => { + const apply = async ( ) => { + dom.cl.add(dom.body, 'committing'); + + const enabledRulesets = []; + for ( const liEntry of qsa$('#lists .listEntry[data-role="leaf"][data-rulesetid]') ) { + const checked = qs$(liEntry, 'input[type="checkbox"]:checked') !== null; + if ( checked === false ) { continue; } + const { rulesetid } = liEntry.dataset; + if ( dom.cl.has(liEntry, 'fromAdmin') ) { continue; } + enabledRulesets.push(rulesetid); + } + + dom.cl.remove('#lists .listEntry.toggled', 'toggled'); + + const modified = hashFromIterable(enabledRulesets) !== + hashFromIterable(cachedRulesetData.enabledRulesets); + if ( modified ) { + const result = await sendMessage({ + what: 'applyRulesets', + enabledRulesets, + }); + dom.text('#dnrError', result?.error || ''); + } + + dom.cl.remove(dom.body, 'committing'); + }; + + let timer; + + self.addEventListener('beforeunload', ( ) => { + if ( timer !== undefined ) { return; } + self.clearTimeout(timer); + timer = undefined; + apply(); + }); + + return function() { + if ( timer !== undefined ) { + self.clearTimeout(timer); + } + timer = self.setTimeout(( ) => { + timer = undefined; + if ( dom.cl.has(dom.body, 'committing') ) { + applyEnabledRulesets(); + } else { + apply(); + } + }, 997); + } +})(); + +dom.on('#lists', 'change', '.listEntry input[type="checkbox"]', ev => { + const input = ev.target; + const listEntry = input.closest('.listEntry'); + if ( listEntry === null ) { return; } + if ( listEntry.dataset.nodeid !== undefined ) { + const checkAll = input.checked || + dom.cl.has(qs$(listEntry, ':scope > .detailbar .checkbox'), 'partial'); + for ( const subListEntry of qsa$(listEntry, ':scope > .listEntries .listEntry[data-rulesetid]') ) { + dom.cl.add(subListEntry, 'toggled'); + dom.prop(qsa$(subListEntry, ':scope > .detailbar input'), 'checked', checkAll); + } + } else { + dom.cl.add(listEntry, 'toggled'); + } + updateNodes(); + renderTotalRuleCounts(); + applyEnabledRulesets(); +}); diff --git a/platform/mv3/extension/js/filter-manager-ui.js b/platform/mv3/extension/js/filter-manager-ui.js new file mode 100644 index 0000000000000..b8c7dacb9c5ec --- /dev/null +++ b/platform/mv3/extension/js/filter-manager-ui.js @@ -0,0 +1,486 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant 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 { browser, sendMessage } from './ext.js'; +import { dom, qs$, qsa$ } from './dom.js'; +import { nodeFromTemplate } from './dashboard.js'; +import punycode from './punycode.js'; + +/******************************************************************************/ + +const dataContainer = qs$('section[data-pane="filters"] .hostnames'); + +/******************************************************************************/ + +function isValidHostname(hostname) { + try { + const url = new URL(`https://${hostname}/`); + return url.hostname === hostname; + } catch { + } + return false; +} + +/******************************************************************************/ + +function toPrettySelector(selector) { + if ( selector.startsWith('{') === false ) { return selector; } + try { + return JSON.parse(selector).raw; + } catch { + } + return selector; +} + +/******************************************************************************/ + +function hostnameFromNode(node) { + const li = node.closest('li.hostname'); + if ( li === null ) { return; } + const span = qs$(li, '.hostname[data-pretty]'); + if ( span === null ) { return; } + return span.dataset.ugly || undefined; +} + +function selectorFromNode(node) { + const li = node.closest('li.selector'); + if ( li === null ) { return; } + const span = qs$(li, '.selector[data-pretty]'); + if ( span === null ) { return; } + return span.dataset.ugly || undefined; +} + +function selectorsFromNode(node, all = false) { + const li = node.closest('li.hostname'); + if ( li === null ) { return []; } + const qsel = all + ? 'li.selector [contenteditable]' + : 'li.selector:not(.removed) [contenteditable]'; + return Array.from(qsa$(li, qsel)).map(a => a.dataset.ugly); +} + +/******************************************************************************/ + +async function removeSelectorsFromHostname(node) { + const hostnameNode = node.closest('li.hostname'); + if ( hostnameNode === null ) { return; } + const hostname = hostnameFromNode(hostnameNode); + if ( hostname === undefined ) { return; } + const selectors = Array.from( + qsa$(hostnameNode, 'li.selector.removed [contenteditable]') + ).map(a => a.dataset.ugly); + if ( selectors.length === 0 ) { return; } + dom.cl.add(dom.body, 'readonly'); + updateContentEditability(); + await sendMessage({ what: 'removeCustomFilters', hostname, selectors }); + await debounceRenderCustomFilters(); + dom.cl.remove(dom.body, 'readonly'); + updateContentEditability(); +} + +async function unremoveSelectorsFromHostname(node) { + const hostnameNode = node.closest('li.hostname'); + if ( hostnameNode === null ) { return; } + const hostname = hostnameFromNode(hostnameNode); + if ( hostname === undefined ) { return; } + const selectors = Array.from( + qsa$(hostnameNode, 'li.selector:not(.removed) [contenteditable]') + ).map(a => a.dataset.ugly); + if ( selectors.length === 0 ) { return; } + dom.cl.add(dom.body, 'readonly'); + updateContentEditability(); + await sendMessage({ what: 'addCustomFilters', hostname, selectors }); + await debounceRenderCustomFilters(); + dom.cl.remove(dom.body, 'readonly'); + updateContentEditability(); +} + +/******************************************************************************/ + +function dataFromDOM() { + const data = new Map(); + for ( const hostnameNode of qsa$('li.hostname') ) { + const hostname = hostnameFromNode(hostnameNode); + const selectors = []; + for ( const selectorNode of qsa$(hostnameNode, 'li.selector') ) { + selectors.push(selectorFromNode(selectorNode)); + } + data.set(hostname, selectors); + } + return data; +} + +/******************************************************************************/ + +async function renderCustomFilters() { + const data = await sendMessage({ what: 'getAllCustomFilters' }); + if ( Boolean(data) === false ) { return; } + const storedData = new Map(data); + const domData = dataFromDOM(); + const hostnames = Array.from( + new Set([ + ...Array.from(storedData.keys()), + ...Array.from(domData.keys()), + ]) + ).sort(); + const fragment = document.createDocumentFragment(); + for ( const hostname of hostnames ) { + const hostnameNode = nodeFromTemplate('customFiltersHostname'); + const label = qs$(hostnameNode, 'span.hostname'); + label.dataset.ugly = hostname; + const pretty = punycode.toUnicode(hostname); + label.dataset.pretty = pretty; + dom.text(label, pretty); + const storedSelectors = new Set(storedData.get(hostname)); + const domSelectors = new Set(domData.get(hostname)); + const selectors = Array.from( + new Set([ + ...Array.from(storedSelectors), + ...Array.from(domSelectors), + ]) + ).sort(); + const ulSelectors = qs$(hostnameNode, '.selectors'); + for ( const selector of selectors ) { + const selectorNode = nodeFromTemplate('customFiltersSelector'); + const label = qs$(selectorNode, 'span.selector'); + label.dataset.ugly = selector; + const pretty = toPrettySelector(selector); + label.dataset.pretty = pretty; + dom.text(label, pretty); + if ( storedSelectors.has(selector) === false ) { + dom.cl.add(selectorNode, 'removed'); + } + ulSelectors.append(selectorNode); + } + fragment.append(hostnameNode); + } + dom.remove('section[data-pane="filters"] .hostnames > .hostname'); + dataContainer.prepend(fragment); +} + +async function debounceRenderCustomFilters() { + let { debouncer } = debounceRenderCustomFilters; + if ( debouncer === undefined ) { + debouncer = debounceRenderCustomFilters.debouncer = {}; + debouncer.promise = new Promise(resolve => { + debouncer.resolve = resolve; + }); + } + if ( debouncer.timer !== undefined ) { + self.clearTimeout(debouncer.timer); + } + debouncer.timer = self.setTimeout(( ) => { + const { resolve } = debounceRenderCustomFilters.debouncer; + debounceRenderCustomFilters.debouncer = undefined; + renderCustomFilters().then(resolve); + }, 151); + return debouncer.promise; +} +debounceRenderCustomFilters.debouncer = undefined; + +/******************************************************************************/ + +function updateContentEditability() { + if ( dom.cl.has(dom.body, 'readonly') ) { + dom.attr('[contenteditable]', 'contenteditable', 'false'); + return; + } + dom.attr('section[data-pane="filters"] li:not(.removed) [contenteditable]', + 'contenteditable', + 'plaintext-only' + ); + // No point editing a removed hostname + dom.attr('section[data-pane="filters"] li.hostname:not(:has(li.selector:not(.removed))) > div [contenteditable]', + 'contenteditable', + 'false' + ); + // No point editing a removed selector + dom.attr('section[data-pane="filters"] .selector.removed [contenteditable]', + 'contenteditable', + 'false' + ); +} + +/******************************************************************************/ + +async function onHostnameChanged(target, before, after) { + const uglyAfter = punycode.toASCII(after); + if ( isValidHostname(uglyAfter) === false ) { + target.textContent = before; + return; + } + + dom.cl.add(dom.body, 'readonly'); + updateContentEditability(); + + // Remove old hostname from storage + await sendMessage({ what: 'removeAllCustomFilters', + hostname: target.dataset.ugly, + }); + + // Add selectors under new hostname to storage + target.dataset.ugly = uglyAfter; + target.dataset.pretty = after; + await sendMessage({ what: 'addCustomFilters', + hostname: hostnameFromNode(target), + selectors: selectorsFromNode(target), + }); + + await debounceRenderCustomFilters(); + dom.cl.remove(dom.body, 'readonly'); + updateContentEditability(); +} + +async function onSelectorChanged(target, before, after) { + // Validate selector + const parserModule = await import('./static-filtering-parser.js'); + const compiler = new parserModule.ExtSelectorCompiler({ nativeCssHas: true }); + const result = {}; + if ( compiler.compile(after, result) === false ) { + target.textContent = before; + return; + } + + const hostname = hostnameFromNode(target); + + dom.cl.add(dom.body, 'readonly'); + updateContentEditability(); + + // Remove old selector from storage + await sendMessage({ what: 'removeCustomFilters', + hostname, + selectors: [ target.dataset.ugly ], + }); + + // Add new selector to storage + target.dataset.ugly = result.compiled; + target.dataset.pretty = result.raw; + await sendMessage({ what: 'addCustomFilters', + hostname, + selectors: [ result.compiled ], + }); + + await debounceRenderCustomFilters(); + dom.cl.remove(dom.body, 'readonly'); + updateContentEditability(); +} + +function onTextChanged(target) { + const before = target.dataset.pretty; + const after = target.textContent.trim(); + if ( after !== target.textContent ) { + target.textContent = after; + } + if ( after === before ) { return; } + if ( after === '' ) { + target.textContent = before; + return; + } + if ( target.matches('.hostname') ) { + onHostnameChanged(target, before, after); + } else if ( target.matches('.selector') ) { + onSelectorChanged(target, before, after); + } +} + +/******************************************************************************/ + +function startEdit(ev) { + focusedEditableContent = ev.target; +} + +function endEdit(ev) { + const { target } = ev; + if ( target.textContent !== target.dataset.pretty ) { + onTextChanged(target); + } + focusedEditableContent = null; +} + +function commitEdit(ev) { + const { target } = ev; + if ( target === focusedEditableContent ) { + if ( ev.inputType === 'insertLineBreak' ) { target.blur(); } + return; + } + onTextChanged(target); +} + +let focusedEditableContent = null; + +/******************************************************************************/ + +function onTrashClicked(ev) { + const { target } = ev; + const node = target.closest('li.selector'); + if ( node ) { + dom.cl.add(node, 'removed'); + } else { + dom.cl.add(qsa$(target.closest('li.hostname'), 'li.selector'), 'removed'); + } + removeSelectorsFromHostname(target); +} + +function onUndoClicked(ev) { + const { target } = ev; + const node = target.closest('li.selector'); + if ( node ) { + dom.cl.remove(node, 'removed'); + } else { + dom.cl.remove(qsa$(target.closest('li.hostname'), 'li.selector'), 'removed'); + } + unremoveSelectorsFromHostname(target); +} + +/******************************************************************************/ + +async function importFromText(text) { + const parserModule = await import('./static-filtering-parser.js'); + const parser = new parserModule.AstFilterParser({ nativeCssHas: true }); + const lines = text.split(/\n/); + const hostnameToSelectorsMap = new Map(); + + for ( const line of lines ) { + parser.parse(line); + if ( parser.hasError() ) { continue; } + if ( parser.isCosmeticFilter() === false ) { continue; } + if ( parser.hasOptions() === false ) { continue; } + const { compiled, exception } = parser.result; + if ( compiled === undefined ) { continue; } + if ( exception ) { continue; } + const hostnames = new Set(); + for ( const { hn, not, bad } of parser.getExtFilterDomainIterator() ) { + if ( bad ) { continue; } + if ( hn.includes('/') ) { continue; } + if ( hn.includes('*') ) { continue; } + if ( not ) { hostnames.length = 0; break; } + hostnames.add(hn); + } + for ( const hn of hostnames ) { + const selectors = hostnameToSelectorsMap.get(hn) || new Set(); + if ( selectors.size === 0 ) { + hostnameToSelectorsMap.set(hn, selectors) + } + selectors.add(compiled); + } + } + + if ( hostnameToSelectorsMap.size === 0 ) { return; } + + dom.cl.add(dom.body, 'readonly'); + updateContentEditability(); + + const promises = []; + for ( const [ hostname, selectors ] of hostnameToSelectorsMap ) { + promises.push( + sendMessage({ what: 'addCustomFilters', + hostname, + selectors: Array.from(selectors), + }) + ); + } + await Promise.all(promises); + + await debounceRenderCustomFilters(); + dom.cl.remove(dom.body, 'readonly'); + updateContentEditability(); +} + +/******************************************************************************/ + +function importFromTextarea() { + dom.prop('section[data-pane="filters"] details', 'open', false); + const textarea = qs$('section[data-pane="filters"] .importFromText textarea'); + importFromText(textarea.value); + textarea.value = ''; +} + +/******************************************************************************/ + +function importFromFile() { + const input = qs$('section[data-pane="filters"] input[type="file"]'); + input.onchange = ev => { + input.onchange = null; + const file = ev.target.files[0]; + if ( file === undefined || file.name === '' ) { return; } + const fr = new FileReader(); + fr.onload = ( ) => { + if ( typeof fr.result !== 'string' ) { return; } + importFromText(fr.result); + }; + fr.readAsText(file); + }; + // Reset to empty string, this will ensure a change event is properly + // triggered if the user pick a file, even if it's the same as the last + // one picked. + input.value = ''; + input.click(); + dom.prop('section[data-pane="filters"] details', 'open', false); +} + +/******************************************************************************/ + +function exportToFile() { + const lines = []; + for ( const hostnameNode of qsa$('.hostnames li.hostname') ) { + const hostname = punycode.toUnicode(hostnameFromNode(hostnameNode)); + const selectors = selectorsFromNode(hostnameNode); + for ( const selector of selectors ) { + lines.push(`${hostname}##${toPrettySelector(selector)}`); + } + lines.push(''); + } + const text = lines.join('\n').trim(); + if ( text.length === 0 ) { return; } + const a = document.createElement('a'); + a.href = `data:text/plain;charset=utf-8,${encodeURIComponent(text + '\n')}`; + dom.attr(a, 'download', 'my-ubol-filters.txt'); + dom.attr(a, 'type', 'text/plain'); + a.click(); + dom.prop('section[data-pane="filters"] details', 'open', false); +} + +/******************************************************************************/ + +async function start() { + renderCustomFilters(); + + dom.on(dataContainer, 'focusin', 'section[data-pane="filters"] [contenteditable]', startEdit); + dom.on(dataContainer, 'focusout', 'section[data-pane="filters"] [contenteditable]', endEdit); + dom.on(dataContainer, 'input', 'section[data-pane="filters"] [contenteditable]', commitEdit); + dom.on(dataContainer, 'click', 'section[data-pane="filters"] .remove', onTrashClicked); + dom.on(dataContainer, 'click', 'section[data-pane="filters"] .undo', onUndoClicked); + dom.on('section[data-pane="filters"] [data-i18n="addButton"]', 'click', importFromTextarea); + dom.on('section[data-pane="filters"] [data-i18n="importAndAppendButton"]', 'click', importFromFile); + dom.on('section[data-pane="filters"] [data-i18n="exportButton"]', 'click', exportToFile); + + browser.storage.local.onChanged.addListener((changes, area) => { + if ( area !== undefined && area !== 'local' ) { return; } + if ( Object.keys(changes).some(a => a.startsWith('site.')) ) { + debounceRenderCustomFilters(); + } + }); +} + +/******************************************************************************/ + +// Update pane on-demand +dom.onFirstShown(start, qs$('section[data-pane="filters"]')); diff --git a/platform/mv3/extension/js/filter-manager.js b/platform/mv3/extension/js/filter-manager.js new file mode 100644 index 0000000000000..b1ec9464d7e31 --- /dev/null +++ b/platform/mv3/extension/js/filter-manager.js @@ -0,0 +1,268 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2022-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 { + browser, + localKeys, + localRead, + localRemove, + localWrite, +} from './ext.js'; + +import { + intersectHostnameIters, + matchesFromHostnames, + subtractHostnameIters, +} from './utils.js'; + +import { ubolErr } from './debug.js'; + +/******************************************************************************/ + +async function flushWrites() { + while ( pendingWrites.length !== 0 ) { + const promises = pendingWrites; + pendingWrites.length = 0; + await Promise.all(promises); + } +} + +async function keysFromStorage() { + await flushWrites(); + return localKeys(); +} + +async function readFromStorage(key) { + await flushWrites(); + return localRead(key); +} + +async function writeToStorage(key, value) { + pendingWrites.push(localWrite(key, value)); +} + +async function removeFromStorage(key) { + pendingWrites.push(localRemove(key)); +} + +const pendingWrites = []; + +/******************************************************************************/ + +export async function customFiltersFromHostname(hostname) { + const promises = []; + let hn = hostname; + while ( hn !== '' ) { + promises.push(readFromStorage(`site.${hn}`)); + const pos = hn.indexOf('.'); + if ( pos === -1 ) { break; } + hn = hn.slice(pos + 1); + } + const results = await Promise.all(promises); + const out = []; + for ( let i = 0; i < promises.length; i++ ) { + const selectors = results[i]; + if ( selectors === undefined ) { continue; } + selectors.forEach(selector => { + out.push(selector.startsWith('0') ? selector.slice(1) : selector); + }); + } + return out.sort(); +} + +/******************************************************************************/ + +export async function hasCustomFilters(hostname) { + const selectors = await customFiltersFromHostname(hostname); + return selectors?.length ?? 0; +} + +/******************************************************************************/ + +async function getAllCustomFilterKeys() { + const storageKeys = await keysFromStorage() || []; + return storageKeys.filter(a => a.startsWith('site.')); +} + +/******************************************************************************/ + +export async function getAllCustomFilters() { + const collect = async key => { + const selectors = await readFromStorage(key); + return [ key.slice(5), selectors.map(a => a.startsWith('0') ? a.slice(1) : a) ]; + }; + const keys = await getAllCustomFilterKeys(); + const promises = keys.map(k => collect(k)); + return Promise.all(promises); +} + +/******************************************************************************/ + +export function startCustomFilters(tabId, frameId) { + return browser.scripting.executeScript({ + files: [ '/js/scripting/css-user.js' ], + target: { tabId, frameIds: [ frameId ] }, + injectImmediately: true, + }).catch(reason => { + ubolErr(`startCustomFilters/${reason}`); + }) +} + +export function terminateCustomFilters(tabId, frameId) { + return browser.scripting.executeScript({ + files: [ '/js/scripting/css-user-terminate.js' ], + target: { tabId, frameIds: [ frameId ] }, + injectImmediately: true, + }).catch(reason => { + ubolErr(`terminateCustomFilters/${reason}`); + }) +} + +/******************************************************************************/ + +export async function injectCustomFilters(tabId, frameId, hostname) { + const selectors = await customFiltersFromHostname(hostname); + if ( selectors.length === 0 ) { return; } + const promises = []; + const plainSelectors = selectors.filter(a => a.startsWith('{') === false); + if ( plainSelectors.length !== 0 ) { + promises.push( + browser.scripting.insertCSS({ + css: `${plainSelectors.join(',\n')}{display:none!important;}`, + origin: 'USER', + target: { tabId, frameIds: [ frameId ] }, + }).catch(reason => { + ubolErr(`injectCustomFilters/insertCSS/${reason}`); + }) + ); + } + const proceduralSelectors = selectors.filter(a => a.startsWith('{')); + if ( proceduralSelectors.length !== 0 ) { + promises.push( + browser.scripting.executeScript({ + files: [ '/js/scripting/css-procedural-api.js' ], + target: { tabId, frameIds: [ frameId ] }, + injectImmediately: true, + }).catch(reason => { + ubolErr(`injectCustomFilters/executeScript/${reason}`); + }) + ); + } + await Promise.all(promises); + return { plainSelectors, proceduralSelectors }; +} + +/******************************************************************************/ + +export async function registerCustomFilters(context) { + const siteKeys = await getAllCustomFilterKeys(); + if ( siteKeys.length === 0 ) { return; } + + const { none } = context.filteringModeDetails; + let hostnames = siteKeys.map(a => a.slice(5)); + if ( none.has('all-urls') ) { + const { basic, optimal, complete } = context.filteringModeDetails; + hostnames = intersectHostnameIters(hostnames, [ + ...basic, ...optimal, ...complete + ]); + } else if ( none.size !== 0 ) { + hostnames = [ ...subtractHostnameIters(hostnames, none) ]; + } + if ( hostnames.length === 0 ) { return; } + + const directive = { + id: 'css-user', + js: [ '/js/scripting/css-user.js' ], + matches: matchesFromHostnames(hostnames), + runAt: 'document_start', + }; + + context.toAdd.push(directive); +} + +/******************************************************************************/ + +export async function addCustomFilters(hostname, toAdd) { + if ( hostname === '' ) { return false; } + const key = `site.${hostname}`; + const selectors = await readFromStorage(key) || []; + const countBefore = selectors.length; + for ( const selector of toAdd ) { + if ( selectors.includes(selector) ) { continue; } + selectors.push(selector); + } + if ( selectors.length === countBefore ) { return false; } + selectors.sort(); + writeToStorage(key, selectors); + return true; +} + +/******************************************************************************/ + +export async function removeAllCustomFilters(hostname) { + if ( hostname === '*' ) { + const keys = await getAllCustomFilterKeys(); + if ( keys.length === 0 ) { return false; } + for ( const key of keys ) { + removeFromStorage(key); + } + return true; + } + const key = `site.${hostname}`; + const selectors = await readFromStorage(key) || []; + removeFromStorage(key); + return selectors.length !== 0; +} + +export async function removeCustomFilters(hostname, selectors) { + const promises = []; + let hn = hostname; + while ( hn !== '' ) { + promises.push(removeCustomFiltersByKey(`site.${hn}`, selectors)); + const pos = hn.indexOf('.'); + if ( pos === -1 ) { break; } + hn = hn.slice(pos + 1); + } + const results = await Promise.all(promises); + return results.some(a => a); +} + +async function removeCustomFiltersByKey(key, toRemove) { + const selectors = await readFromStorage(key); + if ( selectors === undefined ) { return false; } + const beforeCount = selectors.length; + for ( const selector of toRemove ) { + let i = selectors.indexOf(selector); + if ( i === -1 ) { + i = selectors.indexOf(`0${selector}`); + if ( i === -1 ) { continue; } + } + selectors.splice(i, 1); + } + const afterCount = selectors.length; + if ( afterCount === beforeCount ) { return false; } + if ( afterCount !== 0 ) { + writeToStorage(key, selectors); + } else { + removeFromStorage(key); + } + return true; +} diff --git a/platform/mv3/extension/js/matched-rules.js b/platform/mv3/extension/js/matched-rules.js new file mode 100644 index 0000000000000..75a17caf4f7c6 --- /dev/null +++ b/platform/mv3/extension/js/matched-rules.js @@ -0,0 +1,48 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-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 { dom, qs$ } from './dom.js'; +import { sendMessage } from './ext.js'; + +/******************************************************************************/ + +const url = new URL(document.location.href); +const tabId = parseInt(url.searchParams.get('tab'), 10) || 0; + +const entries = await sendMessage({ + what: 'getMatchedRules', + tabId, +}); + +const fragment = new DocumentFragment(); +const template = qs$('#matchInfo'); +for ( const entry of (entries || []) ) { + if ( entry instanceof Object === false ) { continue; } + const row = template.content.cloneNode(true); + qs$(row, '.requestInfo').textContent = JSON.stringify(entry.request, null, 2); + qs$(row, '.ruleInfo').textContent = JSON.stringify(entry.rule, null, 2); + fragment.append(row); +} + +dom.empty('#matchedEntries'); +qs$('#matchedEntries').append(fragment); + +/******************************************************************************/ diff --git a/platform/mv3/extension/js/mode-editor.js b/platform/mv3/extension/js/mode-editor.js new file mode 100644 index 0000000000000..9e86eade503a7 --- /dev/null +++ b/platform/mv3/extension/js/mode-editor.js @@ -0,0 +1,91 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-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 { + modesFromText, + textFromModes, +} from './mode-parser.js'; +import { i18n$ } from './i18n.js'; +import { sendMessage } from './ext.js'; + +/******************************************************************************/ + +export class ModeEditor { + constructor(editor) { + this.editor = editor; + this.bc = null; + } + + on() { + if ( this.bc !== null ) { return; } + this.bc = new self.BroadcastChannel('uBOL'); + this.bc.onmessage = ev => { + const message = ev.data; + if ( message instanceof Object === false ) { return; } + if ( message.filteringModeDetails === undefined ) { return; } + // TODO: merge with ongoing edits? + const text = textFromModes(message.filteringModeDetails); + this.editor.setEditorText(text, true); + }; + } + + off() { + if ( this.bc === null ) { return; } + this.bc.onmessage = null; + this.bc = null; + } + + async getText() { + const modes = await sendMessage({ what: 'getFilteringModeDetails' }); + return textFromModes(modes); + } + + async saveEditorText(editor) { + const { modes } = modesFromText(editor.getEditorText()); + if ( modes instanceof Object === false ) { return; } + const modesAfter = await sendMessage({ what: 'setFilteringModeDetails', modes }); + const text = textFromModes(modesAfter); + editor.setEditorText(text); + return true; + } + + updateView(editor, firstLine, lastLine) { + const { doc } = editor.view.state; + const text = doc.sliceString(firstLine.from, lastLine.to); + const { bad } = modesFromText(text, true); + if ( Array.isArray(bad) && bad.length !== 0 ) { + self.cm6.lineErrorAdd(editor.view, bad.map(i => i + firstLine.number)); + } + } + + newlineAssistant = { + 'no filtering:': ' - ', + 'basic:': ' - ', + 'optimal:': ' - ', + 'complete:': ' - ', + [`${i18n$('filteringMode0Name')}:`]: ' - ', + [`${i18n$('filteringMode1Name')}:`]: ' - ', + [`${i18n$('filteringMode2Name')}:`]: ' - ', + [`${i18n$('filteringMode3Name')}:`]: ' - ', + }; + + ioAccept = '.json,application/json'; +}; diff --git a/platform/mv3/extension/js/mode-manager.js b/platform/mv3/extension/js/mode-manager.js new file mode 100644 index 0000000000000..8a7831a0dba81 --- /dev/null +++ b/platform/mv3/extension/js/mode-manager.js @@ -0,0 +1,407 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2022-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 { + broadcastMessage, + hostnamesFromMatches, + isDescendantHostnameOfIter, + toBroaderHostname, +} from './utils.js'; + +import { + browser, + localRead, localRemove, localWrite, + sessionRead, sessionWrite, +} from './ext.js'; + +import { + rulesetConfig, + saveRulesetConfig, +} from './config.js'; + +import { adminReadEx } from './admin.js'; +import { filteringModesToDNR } from './ruleset-manager.js'; +import { hasBroadHostPermissions } from './ext-utils.js'; + + +/******************************************************************************/ + +// 0: no filtering +// 1: basic filtering +// 2: optimal filtering +// 3: complete filtering + +export const MODE_NONE = 0; +export const MODE_BASIC = 1; +export const MODE_OPTIMAL = 2; +export const MODE_COMPLETE = 3; + +export const defaultFilteringModes = { + none: [], + basic: [], + optimal: [ 'all-urls' ], + complete: [], +}; + +/******************************************************************************/ + +const pruneDescendantHostnamesFromSet = (hostname, hnSet) => { + for ( const hn of hnSet ) { + if ( hn.endsWith(hostname) === false ) { continue; } + if ( hn === hostname ) { continue; } + if ( hn.at(-hostname.length-1) !== '.' ) { continue; } + hnSet.delete(hn); + } +}; + +const pruneHostnameFromSet = (hostname, hnSet) => { + let hn = hostname; + for (;;) { + hnSet.delete(hn); + hn = toBroaderHostname(hn); + if ( hn === '*' ) { break; } + } +}; + +/******************************************************************************/ + +const serializeModeDetails = details => { + return { + none: Array.from(details.none), + basic: Array.from(details.basic), + optimal: Array.from(details.optimal), + complete: Array.from(details.complete), + }; +}; + +const unserializeModeDetails = details => { + return { + none: new Set(details.none), + basic: new Set(details.basic ?? details.network), + optimal: new Set(details.optimal ?? details.extendedSpecific), + complete: new Set(details.complete ?? details.extendedGeneric), + }; +}; + +/******************************************************************************/ + +function lookupFilteringMode(filteringModes, hostname) { + const { none, basic, optimal, complete } = filteringModes; + if ( hostname === 'all-urls' ) { + if ( filteringModes.none.has('all-urls') ) { return MODE_NONE; } + if ( filteringModes.basic.has('all-urls') ) { return MODE_BASIC; } + if ( filteringModes.optimal.has('all-urls') ) { return MODE_OPTIMAL; } + if ( filteringModes.complete.has('all-urls') ) { return MODE_COMPLETE; } + return MODE_BASIC; + } + if ( none.has(hostname) ) { return MODE_NONE; } + if ( none.has('all-urls') === false ) { + if ( isDescendantHostnameOfIter(hostname, none) ) { return MODE_NONE; } + } + if ( basic.has(hostname) ) { return MODE_BASIC; } + if ( basic.has('all-urls') === false ) { + if ( isDescendantHostnameOfIter(hostname, basic) ) { return MODE_BASIC; } + } + if ( optimal.has(hostname) ) { return MODE_OPTIMAL; } + if ( optimal.has('all-urls') === false ) { + if ( isDescendantHostnameOfIter(hostname, optimal) ) { return MODE_OPTIMAL; } + } + if ( complete.has(hostname) ) { return MODE_COMPLETE; } + if ( complete.has('all-urls') === false ) { + if ( isDescendantHostnameOfIter(hostname, complete) ) { return MODE_COMPLETE; } + } + return lookupFilteringMode(filteringModes, 'all-urls'); +} + +/******************************************************************************/ + +function applyFilteringMode(filteringModes, hostname, afterLevel) { + const defaultLevel = lookupFilteringMode(filteringModes, 'all-urls'); + if ( hostname === 'all-urls' ) { + if ( afterLevel === defaultLevel ) { return afterLevel; } + switch ( afterLevel ) { + case MODE_NONE: + filteringModes.none.clear(); + filteringModes.none.add('all-urls'); + break; + case MODE_BASIC: + filteringModes.basic.clear(); + filteringModes.basic.add('all-urls'); + break; + case MODE_OPTIMAL: + filteringModes.optimal.clear(); + filteringModes.optimal.add('all-urls'); + break; + case MODE_COMPLETE: + filteringModes.complete.clear(); + filteringModes.complete.add('all-urls'); + break; + } + switch ( defaultLevel ) { + case MODE_NONE: + filteringModes.none.delete('all-urls'); + break; + case MODE_BASIC: + filteringModes.basic.delete('all-urls'); + break; + case MODE_OPTIMAL: + filteringModes.optimal.delete('all-urls'); + break; + case MODE_COMPLETE: + filteringModes.complete.delete('all-urls'); + break; + } + return lookupFilteringMode(filteringModes, 'all-urls'); + } + const beforeLevel = lookupFilteringMode(filteringModes, hostname); + if ( afterLevel === beforeLevel ) { return afterLevel; } + const { none, basic, optimal, complete } = filteringModes; + switch ( beforeLevel ) { + case MODE_NONE: + pruneHostnameFromSet(hostname, none); + break; + case MODE_BASIC: + pruneHostnameFromSet(hostname, basic); + break; + case MODE_OPTIMAL: + pruneHostnameFromSet(hostname, optimal); + break; + case MODE_COMPLETE: + pruneHostnameFromSet(hostname, complete); + break; + } + if ( afterLevel !== defaultLevel ) { + switch ( afterLevel ) { + case MODE_NONE: + if ( isDescendantHostnameOfIter(hostname, none) === false ) { + filteringModes.none.add(hostname); + pruneDescendantHostnamesFromSet(hostname, none); + } + break; + case MODE_BASIC: + if ( isDescendantHostnameOfIter(hostname, basic) === false ) { + filteringModes.basic.add(hostname); + pruneDescendantHostnamesFromSet(hostname, basic); + } + break; + case MODE_OPTIMAL: + if ( isDescendantHostnameOfIter(hostname, optimal) === false ) { + filteringModes.optimal.add(hostname); + pruneDescendantHostnamesFromSet(hostname, optimal); + } + break; + case MODE_COMPLETE: + if ( isDescendantHostnameOfIter(hostname, complete) === false ) { + filteringModes.complete.add(hostname); + pruneDescendantHostnamesFromSet(hostname, complete); + } + break; + } + } + return lookupFilteringMode(filteringModes, hostname); +} + +/******************************************************************************/ + +export async function readFilteringModeDetails(bypassCache = false) { + if ( bypassCache === false ) { + if ( readFilteringModeDetails.cache ) { + return readFilteringModeDetails.cache; + } + const sessionModes = await sessionRead('filteringModeDetails'); + if ( sessionModes instanceof Object ) { + readFilteringModeDetails.cache = unserializeModeDetails(sessionModes); + return readFilteringModeDetails.cache; + } + } + let [ + userModes = structuredClone(defaultFilteringModes), + adminDefaultFiltering, + adminNoFiltering, + ] = await Promise.all([ + localRead('filteringModeDetails'), + adminReadEx('defaultFiltering'), + adminReadEx('noFiltering'), + ]); + userModes = unserializeModeDetails(userModes); + if ( adminDefaultFiltering !== undefined ) { + const modefromName = { + none: MODE_NONE, + basic: MODE_BASIC, + optimal: MODE_OPTIMAL, + complete: MODE_COMPLETE, + }; + const adminDefaultFilteringMode = modefromName[adminDefaultFiltering]; + if ( adminDefaultFilteringMode !== undefined ) { + applyFilteringMode(userModes, 'all-urls', adminDefaultFilteringMode); + } + } + if ( Array.isArray(adminNoFiltering) && adminNoFiltering.length !== 0 ) { + if ( adminNoFiltering.includes('-*') ) { + userModes.none.clear(); + } + for ( const hn of adminNoFiltering ) { + if ( hn.charAt(0) === '-' ) { + userModes.none.delete(hn.slice(1)); + } else { + applyFilteringMode(userModes, hn, 0); + } + } + } + filteringModesToDNR(userModes); + sessionWrite('filteringModeDetails', serializeModeDetails(userModes)); + readFilteringModeDetails.cache = userModes; + return userModes; +} + +/******************************************************************************/ + +async function writeFilteringModeDetails(afterDetails) { + await filteringModesToDNR(afterDetails); + const data = serializeModeDetails(afterDetails); + localWrite('filteringModeDetails', data); + sessionWrite('filteringModeDetails', data); + readFilteringModeDetails.cache = unserializeModeDetails(data); + return Promise.all([ + getDefaultFilteringMode(), + hasBroadHostPermissions(), + localWrite('filteringModeDetails', data), + sessionWrite('filteringModeDetails', data), + ]).then(results => { + broadcastMessage({ + defaultFilteringMode: results[0], + hasOmnipotence: results[1], + filteringModeDetails: readFilteringModeDetails.cache, + }); + }); +} + +/******************************************************************************/ + +export async function getFilteringModeDetails(serializable = false) { + const actualDetails = await readFilteringModeDetails(); + const out = { + none: new Set(actualDetails.none), + basic: new Set(actualDetails.basic), + optimal: new Set(actualDetails.optimal), + complete: new Set(actualDetails.complete), + }; + return serializable ? serializeModeDetails(out) : out; +} + +export async function setFilteringModeDetails(details) { + await localWrite('filteringModeDetails', serializeModeDetails(details)); + await readFilteringModeDetails(true); +} + +/******************************************************************************/ + +export async function getFilteringMode(hostname) { + const filteringModes = await getFilteringModeDetails(); + return lookupFilteringMode(filteringModes, hostname); +} + +export async function setFilteringMode(hostname, afterLevel) { + const filteringModes = await getFilteringModeDetails(); + const level = applyFilteringMode(filteringModes, hostname, afterLevel); + await writeFilteringModeDetails(filteringModes); + return level; +} + +/******************************************************************************/ + +export function getDefaultFilteringMode() { + return getFilteringMode('all-urls'); +} + +export function setDefaultFilteringMode(afterLevel) { + return setFilteringMode('all-urls', afterLevel); +} + +/******************************************************************************/ + +export async function persistHostPermissions(iter) { + if ( iter === undefined ) { + const permissions = await browser.permissions.getAll(); + iter = hostnamesFromMatches(permissions.origins) || []; + } + const hostnames = Array.from(iter); + return hostnames.length !== 0 + ? localWrite('permissions.hostnames', hostnames) + : localRemove('permissions.hostnames'); +} + +/******************************************************************************/ + +export async function syncWithBrowserPermissions() { + const [ + beforePermissions, + afterPermissions, + beforeMode, + ] = await Promise.all([ + localRead('permissions.hostnames'), + browser.permissions.getAll(), + getDefaultFilteringMode(), + ]); + const beforeAllowedHostnames = new Set(beforePermissions); + const afterAllowedHostnames = new Set(hostnamesFromMatches(afterPermissions.origins || [])); + await persistHostPermissions(afterAllowedHostnames); + const hasBroadHostPermissions = afterAllowedHostnames.has('all-urls'); + const broadHostPermissionsToggled = + hasBroadHostPermissions !== rulesetConfig.hasBroadHostPermissions; + let modified = false; + if ( beforeMode > MODE_BASIC && hasBroadHostPermissions === false ) { + await setDefaultFilteringMode(MODE_BASIC); + modified = true; + } else if ( beforeMode === MODE_BASIC && hasBroadHostPermissions && broadHostPermissionsToggled ) { + await setDefaultFilteringMode(MODE_OPTIMAL); + modified = true; + } + if ( broadHostPermissionsToggled ) { + rulesetConfig.hasBroadHostPermissions = hasBroadHostPermissions; + saveRulesetConfig(); + } + const afterMode = await getDefaultFilteringMode(); + if ( afterMode > MODE_BASIC ) { return afterMode !== beforeMode; } + const filteringModes = await getFilteringModeDetails(); + if ( afterAllowedHostnames.has('all-urls') === false ) { + const { none, basic, optimal, complete } = filteringModes; + for ( const hn of new Set([ ...optimal, ...complete ]) ) { + if ( afterAllowedHostnames.has(hn) ) { continue; } + if ( isDescendantHostnameOfIter(hn, afterAllowedHostnames) ) { continue; } + applyFilteringMode(filteringModes, hn, afterMode); + modified = true; + } + for ( const hn of afterAllowedHostnames ) { + if ( beforeAllowedHostnames.has(hn) ) { continue; } + if ( optimal.has(hn) || complete.has(hn) ) { continue; } + if ( basic.has(hn) || none.has(hn) ) { continue; } + applyFilteringMode(filteringModes, hn, MODE_OPTIMAL); + modified = true; + } + if ( modified ) { + await writeFilteringModeDetails(filteringModes); + } + } + return modified; +} + +/******************************************************************************/ diff --git a/platform/mv3/extension/js/mode-parser.js b/platform/mv3/extension/js/mode-parser.js new file mode 100644 index 0000000000000..5fb66318b1a73 --- /dev/null +++ b/platform/mv3/extension/js/mode-parser.js @@ -0,0 +1,223 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-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 { i18n$ } from './i18n.js'; +import punycode from './punycode.js'; + +/******************************************************************************/ + +function selectParser(scope, modes, node) { + const parser = perScopeParsers[scope.join('.')]; + if ( parser === undefined ) { return false; } + return parser(scope, modes, node); +} + +const validModes = [ + 'none', + 'basic', + 'optimal', + 'complete', +]; + +const uglyModeNames = { + [i18n$('filteringMode0Name')]: 'none', + [i18n$('filteringMode1Name')]: 'basic', + [i18n$('filteringMode2Name')]: 'optimal', + [i18n$('filteringMode3Name')]: 'complete', +}; + +const prettyModeNames = { + none: i18n$('filteringMode0Name'), + basic: i18n$('filteringMode1Name'), + optimal: i18n$('filteringMode2Name'), + complete: i18n$('filteringMode3Name'), +}; + +const perScopeParsers = { + '': function(scope, modes, node) { + const { key, val } = node; + switch ( key ) { + case 'none': + case 'basic': + case 'optimal': + case 'complete': + case prettyModeNames.none: + case prettyModeNames.basic: + case prettyModeNames.optimal: + case prettyModeNames.complete: { + const mode = uglyModeNames[key] || key; + if ( val !== undefined ) { return false; } + modes[mode] ||= []; + scope.push(mode); + break; + } + default: + return false; + } + return true; + }, + none: function(scope, modes, node) { + return addHostnameToMode(modes, 'none', node) + }, + basic: function(scope, modes, node) { + return addHostnameToMode(modes, 'basic', node) + }, + optimal: function(scope, modes, node) { + return addHostnameToMode(modes, 'optimal', node) + }, + complete: function(scope, modes, node) { + return addHostnameToMode(modes, 'complete', node) + }, +}; + +const addHostnameToMode = (modes, mode, node) => { + if ( node.list !== true ) { return node.val === '-'; } + if ( node.key !== undefined ) { return false; } + if ( node.val === undefined ) { return false; } + const hn = punycode.toASCII(node.val.toLowerCase()); + if ( hn.length > 253 ) { return false; } + if ( hn.split('.').some(isInvalidLabel) ) { return false; } + modes[mode].push(hn); +}; + +const isInvalidLabel = label => { + if ( label.length === 0 ) { return true; } + if ( label.length > 63 ) { return true; } + if ( /^[^\da-z]|[^\da-z]$|[^\da-z-]/.test(label) ) { return true; } + return false; +}; + +/******************************************************************************/ + +function depthFromIndent(line) { + const match = /^\s*/.exec(line); + const count = match[0].length; + if ( (count & 1) !== 0 ) { return -1; } + return count / 2; +} + +/******************************************************************************/ + +function nodeFromLine(line) { + const match = reNodeParser.exec(line); + const out = {}; + if ( match === null ) { return out; } + if ( match[1] ) { + out.list = true; + } + if ( match[4] ) { + out.val = match[4].trim(); + } else if ( match[3] ) { + out.key = match[2]; + out.val = match[3].trim(); + if ( out.val === "''" ) { out.val = '' }; + } else { + out.key = match[2]; + } + return out; +} + +const reNodeParser = /^\s*(- )?(?:([^:]+):( \S.*)?|(\S.*))$/; + +/******************************************************************************/ + +export function modesFromText(text, justbad = false) { + const lines = [ ...text.split(/\n\r|\r\n|\n|\r/) ]; + const indices = []; + for ( let i = 0; i < lines.length; i++ ) { + const line = lines[i].trimEnd(); + if ( line.trim().startsWith('#') ) { continue; } + indices.push(i); + } + // Discard leading empty lines + while ( indices.length !== 0 ) { + const s = lines[indices[0]].trim(); + if ( s.length !== 0 ) { break; } + indices.shift(); + } + // Discard trailing empty lines + while ( indices.length !== 0 ) { + const s = lines[indices.at(-1)].trim(); + if ( s.length !== 0 ) { break; } + indices.pop(); + } + // Parse + const modes = {}; + const bad = []; + const scope = []; + for ( const i of indices ) { + const line = lines[i]; + const depth = depthFromIndent(line); + if ( depth < 0 ) { + bad.push(i); + continue; + } + scope.length = depth; + const node = nodeFromLine(line); + const result = selectParser(scope, modes, node); + if ( result === false ) { + bad.push(i); + } + } + if ( justbad ) { + return bad.length !== 0 ? { bad } : { }; + } + // Ensure all modes are present, and that one mode is the default one + const seen = new Map(); + let defaultMode = ''; + for ( const mode of validModes ) { + modes[mode] = new Set(modes[mode]); + if ( modes[mode].has('all-urls') ) { + defaultMode = mode; + } + for ( const hn of modes[mode] ) { + if ( seen.has(hn) ) { + modes[seen.get(hn)].delete(hn); + } + seen.set(hn, mode); + } + } + if ( defaultMode === '' ) { + defaultMode = 'optimal'; + } + modes[defaultMode].clear(); + modes[defaultMode].add('all-urls'); + for ( const mode of validModes ) { + modes[mode] = Array.from(modes[mode]); + } + return { modes }; +} + +/******************************************************************************/ + +export function textFromModes(modes) { + const out = []; + for ( const mode of validModes ) { + const hostnames = modes[mode]; + if ( hostnames === undefined ) { continue; } + out.push(`${prettyModeNames[mode]}:`); + for ( const hn of hostnames ) { + out.push(` - ${punycode.toUnicode(hn)}`); + } + } + out.push(''); + return out.join('\n'); +} diff --git a/platform/mv3/extension/js/picker-ui.js b/platform/mv3/extension/js/picker-ui.js new file mode 100644 index 0000000000000..7efd5ae442489 --- /dev/null +++ b/platform/mv3/extension/js/picker-ui.js @@ -0,0 +1,422 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant 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 { dom, qs$, qsa$ } from './dom.js'; +import { localRead, localWrite } from './ext.js'; +import { ExtSelectorCompiler } from './static-filtering-parser.js'; +import { toolOverlay } from './tool-overlay-ui.js'; + +/******************************************************************************/ + +const selectorCompiler = new ExtSelectorCompiler({ nativeCssHas: true }); + +let selectorPartsDB = new Map(); +let sliderParts = []; +let sliderPartsPos = -1; + +/******************************************************************************/ + +function validateSelector(selector) { + validateSelector.error = undefined; + if ( selector === '' ) { return; } + const result = {}; + if ( selectorCompiler.compile(selector, result) ) { + return result.compiled; + } + validateSelector.error = 'Error'; +} + +/******************************************************************************/ + +function onSvgTouch(ev) { + if ( ev.type === 'touchstart' ) { + onSvgTouch.x0 = ev.touches[0].screenX; + onSvgTouch.y0 = ev.touches[0].screenY; + onSvgTouch.t0 = ev.timeStamp; + return; + } + if ( onSvgTouch.x0 === undefined ) { return; } + const stopX = ev.changedTouches[0].screenX; + const stopY = ev.changedTouches[0].screenY; + const distance = Math.sqrt( + Math.pow(stopX - onSvgTouch.x0, 2) + + Math.pow(stopY - onSvgTouch.y0, 2) + ); + // Interpret touch events as a tap if: + // - Swipe is not valid; and + // - The time between start and stop was less than 200ms. + const duration = ev.timeStamp - onSvgTouch.t0; + if ( distance >= 32 || duration >= 200 ) { return; } + onSvgClicked({ + type: 'touch', + target: ev.target, + clientX: ev.changedTouches[0].pageX, + clientY: ev.changedTouches[0].pageY, + }); + ev.preventDefault(); +} +onSvgTouch.x0 = onSvgTouch.y0 = 0; +onSvgTouch.t0 = 0; + +/******************************************************************************/ + +function onSvgClicked(ev) { + // Unpause picker if: + // - click outside dialog AND + // - not in preview mode + if ( dom.cl.has(dom.root, 'paused') ) { + if ( dom.cl.has(dom.root, 'preview') ) { + updatePreview(false); + } + unpausePicker(); + return; + } + // Force dialog to always be visible when using a touch-driven device. + if ( ev.type === 'touch' ) { + dom.cl.add(dom.root, 'show'); + } + toolOverlay.postMessage({ + what: 'candidatesAtPoint', + mx: ev.clientX, + my: ev.clientY, + broad: ev.ctrlKey, + }).then(details => { + showDialog(details); + }); +} + +/******************************************************************************/ + +function onKeyPressed(ev) { + if ( ev.key === 'Escape' || ev.which === 27 ) { + quitPicker(); + return; + } +} + +/******************************************************************************/ + +function onMinimizeClicked() { + if ( dom.cl.has(dom.root, 'paused') === false ) { + pausePicker(); + highlightCandidate(); + return; + } + dom.cl.toggle(dom.root, 'minimized'); +} + +/******************************************************************************/ + +function onFilterTextChanged() { + highlightCandidate(); +} + +/******************************************************************************/ + +function toggleView(view, persist = false) { + dom.root.dataset.view = `${view}`; + if ( persist !== true ) { return; } + localWrite('picker.view', dom.root.dataset.view); +} + +function onViewToggled(dir) { + let view = parseInt(dom.root.dataset.view, 10); + view += dir; + if ( view < 0 ) { view = 0; } + if ( view > 2 ) { view = 2; } + toggleView(view, true); +} + +/******************************************************************************/ + +function selectorFromCandidates() { + const selectorParts = []; + let liPrevious = null; + for ( const li of qsa$('#candidateFilters li') ) { + const selector = []; + for ( const span of qsa$(li, '.on[data-part]') ) { + selector.push(span.textContent); + } + if ( selector.length !== 0 ) { + if ( liPrevious !== null ) { + if ( li.previousElementSibling === liPrevious ) { + selectorParts.unshift(' > '); + } else if ( liPrevious !== li ) { + selectorParts.unshift(' '); + } + } + liPrevious = li; + selectorParts.unshift(selector.join('')); + } + } + return selectorParts.join(''); +} + +/******************************************************************************/ + +function onSliderChanged(ev) { + updateSlider(Math.round(ev.target.valueAsNumber)); +} + +function updateSlider(i) { + if ( i === sliderPartsPos ) { return; } + sliderPartsPos = i; + dom.cl.remove('#candidateFilters [data-part]', 'on'); + const parts = sliderParts[i]; + for ( const address of parts ) { + dom.cl.add(`#candidateFilters [data-part="${address}"]`, 'on'); + } + const selector = selectorFromCandidates(); + qs$('textarea').value = selector; + highlightCandidate(); +} + +/******************************************************************************/ + +function updateElementCount(details) { + const { count, error } = details; + const span = qs$('#resultsetCount'); + if ( error ) { + span.textContent = 'Error'; + span.setAttribute('title', error); + } else { + span.textContent = count; + span.removeAttribute('title'); + } + const disabled = Boolean(count) === false ? '' : null; + dom.attr('#create', 'disabled', disabled); + updatePreview(); +} + +/******************************************************************************/ + +function onPreviewClicked() { + dom.cl.toggle(dom.root, 'preview'); + updatePreview(); +} + +function updatePreview(state) { + if ( state === undefined ) { + state = dom.cl.has(dom.root, 'preview'); + } else { + dom.cl.toggle(dom.root, 'preview', state) + } + const selector = state && validateSelector(qs$('textarea').value) || ''; + return toolOverlay.postMessage({ what: 'previewSelector', selector }); +} + +/******************************************************************************/ + +async function onCreateClicked() { + const selector = validateSelector(qs$('textarea').value); + if ( selector === undefined ) { return; } + await toolOverlay.postMessage({ what: 'terminateCustomFilters' }); + await toolOverlay.sendMessage({ + what: 'addCustomFilters', + hostname: toolOverlay.url.hostname, + selectors: [ selector ], + }); + await toolOverlay.postMessage({ what: 'startCustomFilters' }); + qs$('textarea').value = ''; + dom.cl.remove(dom.root, 'preview'); + quitPicker(); +} + +/******************************************************************************/ + +function attributeNameFromSelector(part) { + const pos = part.search(/\^?=/); + return part.slice(1, pos); +} + +/******************************************************************************/ + +function onCandidateClicked(ev) { + const target = ev.target; + if ( target.matches('[data-part]') ) { + const address = target.dataset.part; + const part = selectorPartsDB.get(parseInt(address, 10)); + if ( part.startsWith('[') ) { + if ( target.textContent === part ) { + target.textContent = `[${attributeNameFromSelector(part)}]`; + dom.cl.remove(target, 'on'); + } else if ( dom.cl.has(target, 'on') ) { + target.textContent = part; + } else { + dom.cl.add(target, 'on'); + } + } else { + dom.cl.toggle(target, 'on'); + } + } else if ( target.matches('li') ) { + if ( qs$(target, ':scope > span:not(.on)') !== null ) { + dom.cl.add(qsa$(target, ':scope > [data-part]:not(.on)'), 'on'); + } else { + dom.cl.remove(qsa$(target, ':scope > [data-part]'), 'on'); + } + } + const selector = selectorFromCandidates(); + qs$('textarea').value = selector; + highlightCandidate(); +} + +/******************************************************************************/ + +function showDialog(msg) { + pausePicker(); + + /* global */selectorPartsDB = new Map(msg.partsDB); + const { listParts } = msg; + const root = qs$('#candidateFilters'); + const ul = qs$(root, 'ul'); + while ( ul.firstChild !== null ) { + ul.firstChild.remove(); + } + for ( const parts of listParts ) { + const li = document.createElement('li'); + for ( const address of parts ) { + const span = document.createElement('span'); + const part = selectorPartsDB.get(address); + span.dataset.part = address; + if ( part.startsWith('[') ) { + span.textContent = `[${attributeNameFromSelector(part)}]`; + } else { + span.textContent = part; + } + li.append(span); + } + ul.appendChild(li); + } + + /* global */sliderParts = msg.sliderParts; + /* global */sliderPartsPos = -1; + const slider = qs$('#slider'); + const last = sliderParts.length - 1; + dom.attr(slider, 'max', last); + dom.attr(slider, 'value', last); + dom.attr(slider, 'disabled', last !== 0 ? null : ''); + slider.value = last; + updateSlider(last); +} + +/******************************************************************************/ + +function highlightCandidate() { + const selector = validateSelector(qs$('textarea').value); + if ( selector === undefined ) { + toolOverlay.postMessage({ what: 'unhighlight' }); + updateElementCount({ count: 0, error: validateSelector.error }); + return; + } + toolOverlay.postMessage({ + what: 'highlightFromSelector', + selector, + }).then(result => { + updateElementCount(result); + }); +} + +/******************************************************************************* + * + * paused: + * - select element mode disabled + * - preview mode enabled or disabled + * - dialog unminimized + * + * unpaused: + * - select element mode enabled + * - preview mode disabled + * - dialog minimized + * + * */ + +function pausePicker() { + dom.cl.add(dom.root, 'paused'); + dom.cl.remove(dom.root, 'minimized'); + toolOverlay.highlightElementUnderMouse(false); +} + +function unpausePicker() { + dom.cl.remove(dom.root, 'paused', 'preview'); + dom.cl.add(dom.root, 'minimized'); + updatePreview(false); + toolOverlay.highlightElementUnderMouse(true); +} + +/******************************************************************************/ + +function startPicker() { + toolOverlay.postMessage({ what: 'startTool' }); + + localRead('picker.view').then(value => { + if ( Boolean(value) === false ) { return; } + toggleView(value); + }); + + self.addEventListener('keydown', onKeyPressed, true); + dom.on('svg#overlay', 'click', onSvgClicked); + dom.on('svg#overlay', 'touchstart', onSvgTouch, { passive: true }); + dom.on('svg#overlay', 'touchend', onSvgTouch); + dom.on('#minimize', 'click', onMinimizeClicked); + dom.on('textarea', 'input', onFilterTextChanged); + dom.on('#quit', 'click', quitPicker); + dom.on('#slider', 'input', onSliderChanged); + dom.on('#pick', 'click', resetPicker); + dom.on('#preview', 'click', onPreviewClicked); + dom.on('#moreOrLess > span:first-of-type', 'click', ( ) => { onViewToggled(1); }); + dom.on('#moreOrLess > span:last-of-type', 'click', ( ) => { onViewToggled(-1); }); + dom.on('#create', 'click', ( ) => { onCreateClicked(); }); + dom.on('#candidateFilters ul', 'click', onCandidateClicked); + toolOverlay.highlightElementUnderMouse(true); +} + +/******************************************************************************/ + +function quitPicker() { + updatePreview(false); + toolOverlay.stop(); +} + +/******************************************************************************/ + +function resetPicker() { + toolOverlay.postMessage({ what: 'unhighlight' }); + unpausePicker(); +} + +/******************************************************************************/ + +function onMessage(msg) { + switch ( msg.what ) { + case 'startTool': + startPicker(); + break; + default: + break; + } +} + +/******************************************************************************/ + +// Wait for the content script to establish communication +toolOverlay.start(onMessage); + +/******************************************************************************/ diff --git a/platform/mv3/extension/js/popup.js b/platform/mv3/extension/js/popup.js new file mode 100644 index 0000000000000..f7a68a0f02bd8 --- /dev/null +++ b/platform/mv3/extension/js/popup.js @@ -0,0 +1,362 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2022-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 { browser, runtime, sendMessage } from './ext.js'; +import { dom, qs$ } from './dom.js'; +import { i18n$ } from './i18n.js'; +import punycode from './punycode.js'; + +/******************************************************************************/ + +const popupPanelData = {}; +const currentTab = {}; +const tabURL = new URL(runtime.getURL('/')); + +/******************************************************************************/ + +function renderAdminRules() { + const { disabledFeatures: forbid = [] } = popupPanelData; + if ( forbid.length === 0 ) { return; } + dom.body.dataset.forbid = forbid.join(' '); +} + +/******************************************************************************/ + +const BLOCKING_MODE_MAX = 3; + +async function setFilteringMode(level, commit = false) { + const modeSlider = qs$('.filteringModeSlider'); + modeSlider.dataset.level = level; + if ( qs$('.filteringModeSlider.moving') === null ) { + dom.text( + '#filteringModeText > span:nth-of-type(1)', + i18n$(`filteringMode${level}Name`) + ); + } + if ( commit !== true ) { return; } + dom.cl.add(dom.body, 'busy'); + await commitFilteringMode(); + dom.cl.remove(dom.body, 'busy'); +} + +async function commitFilteringMode() { + if ( tabURL.hostname === '' ) { return; } + const targetHostname = tabURL.hostname; + const modeSlider = qs$('.filteringModeSlider'); + const afterLevel = parseInt(modeSlider.dataset.level, 10); + const beforeLevel = parseInt(modeSlider.dataset.levelBefore, 10); + if ( afterLevel > 1 ) { + if ( beforeLevel <= 1 ) { + sendMessage({ + what: 'setPendingFilteringMode', + tabId: currentTab.id, + url: tabURL.href, + hostname: targetHostname, + beforeLevel, + afterLevel, + }); + } + let granted = false; + try { + granted = await browser.permissions.request({ + origins: [ `*://*.${targetHostname}/*` ], + }); + } catch { + } + if ( granted !== true ) { + setFilteringMode(beforeLevel); + return; + } + } + dom.text( + '#filteringModeText > span:nth-of-type(1)', + i18n$(`filteringMode${afterLevel}Name`) + ); + const actualLevel = await sendMessage({ + what: 'setFilteringMode', + hostname: targetHostname, + level: afterLevel, + }); + if ( actualLevel !== afterLevel ) { + setFilteringMode(actualLevel); + } + if ( actualLevel !== beforeLevel && popupPanelData.autoReload ) { + const justReload = tabURL.href === currentTab.url; + self.setTimeout(( ) => { + if ( justReload ) { + browser.tabs.reload(currentTab.id); + } else { + browser.tabs.update(currentTab.id, { url: tabURL.href }); + } + }, 437); + } +} + +{ + let mx0 = 0; + let mx1 = 0; + let l0 = 0; + let lMax = 0; + let timer; + + const move = ( ) => { + timer = undefined; + const l1 = Math.min(Math.max(l0 + mx1 - mx0, 0), lMax); + let level = Math.floor(l1 * BLOCKING_MODE_MAX / lMax); + if ( qs$('body[dir="rtl"]') !== null ) { + level = 3 - level; + } + const modeSlider = qs$('.filteringModeSlider'); + if ( `${level}` === modeSlider.dataset.level ) { return; } + dom.text( + '#filteringModeText > span:nth-of-type(2)', + i18n$(`filteringMode${level}Name`) + ); + setFilteringMode(level); + }; + + const moveAsync = ev => { + if ( timer !== undefined ) { return; } + mx1 = ev.pageX; + timer = self.requestAnimationFrame(move); + }; + + const stop = ev => { + if ( ev.button !== 0 ) { return; } + const modeSlider = qs$('.filteringModeSlider'); + if ( dom.cl.has(modeSlider, 'moving') === false ) { return; } + dom.cl.remove(modeSlider, 'moving'); + self.removeEventListener('mousemove', moveAsync, { capture: true }); + self.removeEventListener('mouseup', stop, { capture: true }); + dom.text('#filteringModeText > span:nth-of-type(2)', ''); + commitFilteringMode(); + ev.stopPropagation(); + ev.preventDefault(); + if ( timer !== undefined ) { + self.cancelAnimationFrame(timer); + timer = undefined; + } + }; + + const startSliding = ev => { + if ( ev.button !== 0 ) { return; } + const modeButton = qs$('.filteringModeButton'); + if ( ev.currentTarget !== modeButton ) { return; } + const modeSlider = qs$('.filteringModeSlider'); + if ( dom.cl.has(modeSlider, 'moving') ) { return; } + modeSlider.dataset.levelBefore = modeSlider.dataset.level; + mx0 = ev.pageX; + const buttonRect = modeButton.getBoundingClientRect(); + l0 = buttonRect.left + buttonRect.width / 2; + const sliderRect = modeSlider.getBoundingClientRect(); + lMax = sliderRect.width - buttonRect.width ; + dom.cl.add(modeSlider, 'moving'); + self.addEventListener('mousemove', moveAsync, { capture: true }); + self.addEventListener('mouseup', stop, { capture: true }); + ev.stopPropagation(); + ev.preventDefault(); + }; + + dom.on('.filteringModeButton', 'mousedown', startSliding); +} + +dom.on( + '.filteringModeSlider', + 'click', + '.filteringModeSlider span[data-level]', + ev => { + const modeSlider = qs$('.filteringModeSlider'); + modeSlider.dataset.levelBefore = modeSlider.dataset.level; + const span = ev.target; + const level = parseInt(span.dataset.level, 10); + setFilteringMode(level, true); + } +); + +if ( dom.cl.has(dom.html, 'mobile') === false ) { + dom.on('.filteringModeSlider', + 'mouseenter', + '.filteringModeSlider span[data-level]', + ev => { + const span = ev.target; + const level = parseInt(span.dataset.level, 10); + dom.text('#filteringModeText > span:nth-of-type(2)', + i18n$(`filteringMode${level}Name`) + ); + } + ); + + dom.on('.filteringModeSlider', + 'mouseleave', + '.filteringModeSlider span[data-level]', + ( ) => { + dom.text('#filteringModeText > span:nth-of-type(2)', ''); + } + ); +} + +/******************************************************************************/ + +dom.on('#gotoMatchedRules', 'click', ev => { + if ( ev.isTrusted !== true ) { return; } + if ( ev.button !== 0 ) { return; } + sendMessage({ + what: 'showMatchedRules', + tabId: currentTab.id, + }); +}); + +/******************************************************************************/ + +dom.on('#gotoReport', 'click', ev => { + if ( ev.isTrusted !== true ) { return; } + let url; + try { + url = new URL(currentTab.url); + } catch { + } + if ( url === undefined ) { return; } + const reportURL = new URL(runtime.getURL('/report.html')); + reportURL.searchParams.set('tabid', currentTab.id); + reportURL.searchParams.set('url', tabURL.href); + reportURL.searchParams.set('mode', popupPanelData.level); + sendMessage({ + what: 'gotoURL', + url: `${reportURL.pathname}${reportURL.search}`, + }); +}); + +/******************************************************************************/ + +dom.on('#gotoDashboard', 'click', ev => { + if ( ev.isTrusted !== true ) { return; } + if ( ev.button !== 0 ) { return; } + runtime.openOptionsPage(); +}); + +/******************************************************************************/ + +dom.on('#gotoZapper', 'click', ( ) => { + if ( browser.scripting === undefined ) { return; } + browser.scripting.executeScript({ + files: [ '/js/scripting/tool-overlay.js', '/js/scripting/zapper.js' ], + target: { tabId: currentTab.id }, + }); + self.close(); +}); + +/******************************************************************************/ + +dom.on('#gotoPicker', 'click', ( ) => { + if ( browser.scripting === undefined ) { return; } + browser.scripting.executeScript({ + files: [ + '/js/scripting/css-procedural-api.js', + '/js/scripting/tool-overlay.js', + '/js/scripting/picker.js', + ], + target: { tabId: currentTab.id }, + }); + self.close(); +}); + +/******************************************************************************/ + +dom.on('#gotoUnpicker', 'click', ( ) => { + if ( browser.scripting === undefined ) { return; } + browser.scripting.executeScript({ + files: [ + '/js/scripting/tool-overlay.js', + '/js/scripting/unpicker.js', + ], + target: { tabId: currentTab.id }, + }); + self.close(); +}); + +/******************************************************************************/ + +async function init() { + const [ tab ] = await browser.tabs.query({ + active: true, + currentWindow: true, + }); + if ( tab instanceof Object === false ) { return true; } + Object.assign(currentTab, tab); + + let url; + try { + const strictBlockURL = runtime.getURL('/strictblock.'); + url = new URL(currentTab.url); + if ( url.href.startsWith(strictBlockURL) ) { + url = new URL(url.hash.slice(1)); + } + tabURL.href = url.href || ''; + } catch { + return false; + } + + if ( url !== undefined ) { + const response = await sendMessage({ + what: 'popupPanelData', + origin: url.origin, + hostname: tabURL.hostname, + }); + if ( response instanceof Object ) { + Object.assign(popupPanelData, response); + } + } + + renderAdminRules(); + + setFilteringMode(popupPanelData.level); + + dom.text('#hostname', punycode.toUnicode(tabURL.hostname)); + + dom.cl.toggle('#gotoMatchedRules', 'enabled', + popupPanelData.isSideloaded === true && + popupPanelData.developerMode && + typeof currentTab.id === 'number' && + isNaN(currentTab.id) === false + ); + + const isHTTP = url.protocol === 'http:' || url.protocol === 'https:'; + dom.cl.toggle(dom.root, 'isHTTP', isHTTP); + + dom.cl.toggle('#gotoUnpicker', 'enabled', popupPanelData.hasCustomFilters); + + return true; +} + +async function tryInit() { + try { + await init(); + } catch { + setTimeout(tryInit, 100); + } finally { + dom.cl.remove(dom.body, 'loading', 'busy'); + } +} + +tryInit(); + +/******************************************************************************/ + diff --git a/platform/mv3/extension/js/report.js b/platform/mv3/extension/js/report.js new file mode 100644 index 0000000000000..66fa73f32f3e4 --- /dev/null +++ b/platform/mv3/extension/js/report.js @@ -0,0 +1,121 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2024-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 { dom, qs$ } from './dom.js'; +import { getTroubleshootingInfo } from './troubleshooting.js'; +import { sendMessage } from './ext.js'; + +/******************************************************************************/ + +const reportedPage = (( ) => { + const url = new URL(window.location.href); + try { + const pageURL = url.searchParams.get('url'); + if ( pageURL === null ) { return null; } + const parsedURL = new URL(pageURL); + parsedURL.username = ''; + parsedURL.password = ''; + parsedURL.hash = ''; + const select = qs$('select[name="url"]'); + dom.text(select.options[0], parsedURL.href); + if ( parsedURL.search !== '' ) { + const option = dom.create('option'); + parsedURL.search = ''; + dom.text(option, parsedURL.href); + select.append(option); + } + if ( parsedURL.pathname !== '/' ) { + const option = dom.create('option'); + parsedURL.pathname = ''; + dom.text(option, parsedURL.href); + select.append(option); + } + return { + hostname: parsedURL.hostname.replace(/^(m|mobile|www)\./, ''), + siteMode: parseInt(url.searchParams.get('mode'), 10), + tabId: parseInt(url.searchParams.get('tabid'), 10) || 0, + }; + } catch { + } + return null; +})(); + +/******************************************************************************/ + +function reportSpecificFilterType() { + return qs$('select[name="type"]').value; +} + +/******************************************************************************/ + +async function reportSpecificFilterIssue() { + const githubURL = new URL( + 'https://github.com/uBlockOrigin/uAssets/issues/new?template=specific_report_from_ubol.yml' + ); + const issueType = reportSpecificFilterType(); + let title = `${reportedPage.hostname}: ${issueType}`; + if ( qs$('#isNSFW').checked ) { + title = `[nsfw] ${title}`; + } + githubURL.searchParams.set('title', title); + githubURL.searchParams.set( + 'url_address_of_the_web_page', + '`' + qs$('select[name="url"]').value + '`' + ); + githubURL.searchParams.set('category', issueType); + + const configBody = [ + '```yaml', + qs$('[data-i18n="supportS5H"] + pre').textContent, + '```', + '', + ].join('\n'); + githubURL.searchParams.set('configuration', configBody); + sendMessage({ what: 'gotoURL', url: githubURL.href }); +} + +/******************************************************************************/ + +getTroubleshootingInfo(reportedPage).then(config => { + qs$('[data-i18n="supportS5H"] + pre').textContent = config; + + dom.on('[data-url]', 'click', ev => { + const elem = ev.target.closest('[data-url]'); + const url = dom.attr(elem, 'data-url'); + if ( typeof url !== 'string' || url === '' ) { return; } + sendMessage({ what: 'gotoURL', url }); + ev.preventDefault(); + }); + + if ( reportedPage !== null ) { + dom.on('[data-i18n="supportReportSpecificButton"]', 'click', ev => { + reportSpecificFilterIssue(); + ev.preventDefault(); + }); + + dom.on('[data-i18n="supportFindSpecificButton"]', 'click', ev => { + const url = new URL('https://github.com/uBlockOrigin/uAssets/issues'); + url.searchParams.set('q', `is:issue sort:updated-desc "${reportedPage.hostname}" in:title`); + sendMessage({ what: 'gotoURL', url: url.href }); + ev.preventDefault(); + }); + } +}); diff --git a/platform/mv3/extension/js/ro-dnr-editor.js b/platform/mv3/extension/js/ro-dnr-editor.js new file mode 100644 index 0000000000000..609fd5a607a5a --- /dev/null +++ b/platform/mv3/extension/js/ro-dnr-editor.js @@ -0,0 +1,104 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-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 { runtime, sendMessage } from './ext.js'; +import { DNREditor } from './dnr-editor.js'; +import { i18n$ } from './i18n.js'; +import { normalizeDNRRules } from './ext-compat.js'; +import { textFromRules } from './dnr-parser.js'; + +/******************************************************************************/ + +export class ReadOnlyDNREditor extends DNREditor { + async getText(hint) { + if ( hint === 'dnr.ro.dynamic' ) { + const rules = await sendMessage({ what: 'getEffectiveDynamicRules' }); + if ( Array.isArray(rules) === false ) { return; } + this.id = 'dynamic'; + this.count = rules.length; + return textFromRules(rules, { keepId: true }); + } + if ( hint === 'dnr.ro.session' ) { + const rules = await sendMessage({ what: 'getEffectiveSessionRules' }); + if ( Array.isArray(rules) === false ) { return; } + this.id = 'session'; + this.count = rules.length; + return textFromRules(rules, { keepId: true }); + } + const match = /^dnr\.ro\.(.+)$/.exec(hint); + if ( match === null ) { return; } + this.id = match[1]; + const allRulesetDetails = await sendMessage({ what: 'getRulesetDetails' }); + const rulesetDetails = allRulesetDetails.find(a => a.id === this.id); + if ( rulesetDetails === undefined ) { return; } + const manifestRulesets = runtime.getManifest().declarative_net_request.rule_resources; + const mainPathMap = new Map( + manifestRulesets.map(({ id, path }) => [ id, path ]) + ); + const realms = { + plain: 'main', + regex: 'regex', + }; + const promises = []; + for ( const [ realm, dir ] of Object.entries(realms) ) { + if ( Boolean(rulesetDetails.rules?.[realm]) === false ) { continue; } + const url = dir === 'main' + ? mainPathMap.get(this.id) + : `./rulesets/${dir}/${this.id}.json`; + promises.push( + fetch(url).then(response => + response.json() + ).then(rules => + normalizeDNRRules(rules) + ) + ); + } + const parts = await Promise.all(promises); + const allRules = []; + for ( const rules of parts ) { + for ( const rule of rules ) { + allRules.push(rule); + } + } + this.count = allRules.length; + return textFromRules(allRules, { keepId: true }); + } + + on(editor) { + if ( typeof this.count !== 'number' ) { + return editor.updateSummaryPanel(null); + } + const template = document.querySelector('template.ro-summary-panel'); + const fragment = template.content.cloneNode(true); + const root = fragment.querySelector('.summary-panel'); + root.textContent = i18n$('dnrRulesCountInfo') + .replace('{count}', (this.count || 0).toLocaleString()) + editor.updateSummaryPanel(root); + } + + off(editor) { + editor.updateSummaryPanel(null); + } + + exportToFile(text) { + return super.exportToFile(text, `${this.id}-dnr-ruleset.json`); + } +}; diff --git a/platform/mv3/extension/js/ruleset-manager.js b/platform/mv3/extension/js/ruleset-manager.js new file mode 100644 index 0000000000000..89b71fd0894cd --- /dev/null +++ b/platform/mv3/extension/js/ruleset-manager.js @@ -0,0 +1,724 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2022-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 { + i18n, + localRead, localRemove, localWrite, + runtime, + sessionRead, sessionRemove, sessionWrite, + webextFlavor, +} from './ext.js'; + +import { + rulesetConfig, + saveRulesetConfig, +} from './config.js'; +import { ubolErr, ubolLog } from './debug.js'; + +import { dnr } from './ext-compat.js'; +import { fetchJSON } from './fetch.js'; +import { getAdminRulesets } from './admin.js'; +import { hasBroadHostPermissions } from './ext-utils.js'; +import { rulesFromText } from './dnr-parser.js'; + +/******************************************************************************/ + +const SPECIAL_RULES_REALM = 5000000; +const USER_RULES_BASE_RULE_ID = 9000000; +const USER_RULES_PRIORITY = 1000000; +const TRUSTED_DIRECTIVE_BASE_RULE_ID = 8000000; +const TRUSTED_DIRECTIVE_PRIORITY = USER_RULES_PRIORITY + 1000000; +const STRICTBLOCK_PRIORITY = 29; + +/******************************************************************************/ + +const isStrictBlockRule = rule => { + if ( rule.priority !== STRICTBLOCK_PRIORITY ) { return false; } + if ( rule.condition?.resourceTypes === undefined ) { return false; } + if ( rule.condition.resourceTypes.length !== 1 ) { return false; } + if ( rule.condition.resourceTypes[0] !== 'main_frame' ) { return false; } + if ( rule.action.type === 'redirect' ) { + const substitution = rule.action.redirect.regexSubstitution; + return substitution !== undefined && + substitution.includes('/strictblock.'); + } + if ( rule.action.type === 'allow' ) { + return Array.isArray(rule.condition?.requestDomains); + } + return false; +}; + +/******************************************************************************/ + +function getRulesetDetails() { + if ( getRulesetDetails.rulesetDetailsPromise !== undefined ) { + return getRulesetDetails.rulesetDetailsPromise; + } + getRulesetDetails.rulesetDetailsPromise = + fetchJSON('/rulesets/ruleset-details').then(entries => { + const rulesMap = new Map(entries.map(entry => [ entry.id, entry ])); + return rulesMap; + }); + return getRulesetDetails.rulesetDetailsPromise; +} + +/******************************************************************************/ + +async function pruneInvalidRegexRules(realm, rulesIn, rejected = []) { + const validateRegex = regex => { + return dnr.isRegexSupported({ regex, isCaseSensitive: false }).then(result => { + pruneInvalidRegexRules.validated.set(regex, result?.reason || true); + if ( result.isSupported ) { return true; } + rejected.push({ regex, reason: result?.reason }); + return false; + }); + }; + + // Validate regex-based rules + const toCheck = []; + for ( const rule of rulesIn ) { + if ( rule.condition?.regexFilter === undefined ) { + toCheck.push(true); + continue; + } + const { regexFilter } = rule.condition; + const reason = pruneInvalidRegexRules.validated.get(regexFilter); + if ( reason !== undefined ) { + toCheck.push(reason === true); + if ( reason === true ) { continue; } + rejected.push({ regex: regexFilter, reason }); + continue; + } + toCheck.push(validateRegex(regexFilter)); + } + + // Collate results + const isValid = await Promise.all(toCheck); + + if ( rejected.length !== 0 ) { + ubolLog(`${realm} realm: rejected regexes:\n`, + rejected.map(e => `${e.regex} → ${e.reason}`).join('\n') + ); + } + + return rulesIn.filter((v, i) => isValid[i]); +} +pruneInvalidRegexRules.validated = new Map(); + +/******************************************************************************/ + +async function getDynamicRegexRuleCount() { + const rules = await dnr.getDynamicRules(); + const regexRules = rules.filter(a => Boolean(a.condition?.regexFilter)); + return regexRules.length; +} + +/******************************************************************************/ + +async function updateRegexRules(currentRules, addRules, removeRuleIds) { + // Remove existing regex-related block rules + for ( const rule of currentRules ) { + if ( rule.id === 0 ) { continue; } + if ( rule.id >= SPECIAL_RULES_REALM ) { continue; } + if ( rule.condition.regexFilter === undefined ) { continue; } + removeRuleIds.push(rule.id); + } + + const rulesetDetails = await getEnabledRulesetsDetails(); + + // Fetch regexes for all enabled rulesets + const toFetch = []; + for ( const details of rulesetDetails ) { + if ( details.rules.regex === 0 ) { continue; } + toFetch.push(fetchJSON(`/rulesets/regex/${details.id}`)); + } + const regexRulesets = await Promise.all(toFetch); + + // Collate all regexes rules + const allRules = []; + for ( const rules of regexRulesets ) { + if ( Array.isArray(rules) === false ) { continue; } + for ( const rule of rules ) { + allRules.push(rule); + } + } + if ( allRules.length === 0 ) { return; } + + const validRules = await pruneInvalidRegexRules('regexes', allRules); + if ( validRules.length === 0 ) { return; } + + ubolLog(`Add ${validRules.length} DNR regex rules`); + addRules.push(...validRules); +} + +/******************************************************************************/ + +async function updateDynamicRules() { + const currentRules = await dnr.getDynamicRules(); + + // Remove potentially left-over rules from previous version + const removeRuleIds = []; + for ( const rule of currentRules ) { + if ( rule.id >= SPECIAL_RULES_REALM ) { continue; } + removeRuleIds.push(rule.id); + rule.id = 0; + } + + const addRules = []; + await updateRegexRules(currentRules, addRules, removeRuleIds); + if ( addRules.length === 0 && removeRuleIds.length === 0 ) { return; } + + const dynamicRegexCountBefore = await getDynamicRegexRuleCount(); + let dynamicRegexCountAfter = 0; + let ruleId = 1; + for ( const rule of addRules ) { + if ( rule?.condition.regexFilter ) { dynamicRegexCountAfter += 1; } + rule.id = ruleId++; + } + if ( dynamicRegexCountAfter !== 0 ) { + ubolLog(`Using ${dynamicRegexCountAfter}/${dnr.MAX_NUMBER_OF_REGEX_RULES} dynamic regex-based DNR rules`); + } + // If we increase the number of dynamic regex rules, reset session rules to + // reduce risk of hitting maximum regex count + if ( dynamicRegexCountAfter > dynamicRegexCountBefore ) { + await clearSessionRules(); + } + + const response = {}; + + try { + await dnr.updateDynamicRules({ addRules, removeRuleIds }); + if ( removeRuleIds.length !== 0 ) { + ubolLog(`Remove ${removeRuleIds.length} dynamic DNR rules`); + } + if ( addRules.length !== 0 ) { + ubolLog(`Add ${addRules.length} dynamic DNR rules`); + } + } catch(reason) { + ubolErr(`updateDynamicRules/${reason}`); + response.error = `${reason}`; + } + + const result = await updateSessionRules(); + if ( result?.error ) { + response.error ||= result.error; + } + + return response; +} + +/******************************************************************************/ + +async function getEffectiveDynamicRules() { + const allRules = await dnr.getDynamicRules(); + const dynamicRules = []; + for ( const rule of allRules ) { + if ( rule.id >= USER_RULES_BASE_RULE_ID ) { continue; } + dynamicRules.push(rule); + } + return dynamicRules; +} + +/******************************************************************************/ + +async function updateStrictBlockRules(currentRules, addRules, removeRuleIds) { + // Remove existing strictblock-related rules + for ( const rule of currentRules ) { + if ( isStrictBlockRule(rule) === false ) { continue; } + removeRuleIds.push(rule.id); + } + + if ( rulesetConfig.strictBlockMode === false ) { return; } + + // https://github.com/uBlockOrigin/uBOL-home/issues/428#issuecomment-3172663563 + // https://bugs.webkit.org/show_bug.cgi?id=298199 + // https://developer.apple.com/forums/thread/756214 + if ( webextFlavor === 'safari' ) { return; } + + const [ + hasOmnipotence, + rulesetDetails, + permanentlyExcluded = [], + temporarilyExcluded = [], + ] = await Promise.all([ + hasBroadHostPermissions(), + getEnabledRulesetsDetails(), + localRead('excludedStrictBlockHostnames'), + sessionRead('excludedStrictBlockHostnames'), + ]); + + // Strict-block rules can only be enforced with omnipotence + if ( hasOmnipotence === false ) { + localRemove('excludedStrictBlockHostnames'); + sessionRemove('excludedStrictBlockHostnames'); + return; + } + + // Fetch strick-block rules + const toFetch = []; + for ( const details of rulesetDetails ) { + if ( details.rules.strictblock === 0 ) { continue; } + toFetch.push(fetchJSON(`/rulesets/strictblock/${details.id}`)); + } + const rulesets = await Promise.all(toFetch); + + const substitution = `${runtime.getURL('/strictblock.html')}#\\0`; + const allRules = []; + for ( const rules of rulesets ) { + if ( Array.isArray(rules) === false ) { continue; } + for ( const rule of rules ) { + rule.action.redirect.regexSubstitution = substitution; + allRules.push(rule); + } + } + + const validRules = await pruneInvalidRegexRules('strictblock', allRules); + if ( validRules.length === 0 ) { return; } + ubolLog(`Add ${validRules.length} DNR strictblock rules`); + for ( const rule of validRules ) { + rule.priority = STRICTBLOCK_PRIORITY; + addRules.push(rule); + } + + const allExcluded = permanentlyExcluded.concat(temporarilyExcluded); + if ( allExcluded.length === 0 ) { return; } + addRules.unshift({ + action: { type: 'allow' }, + condition: { + requestDomains: allExcluded, + resourceTypes: [ 'main_frame' ], + }, + priority: STRICTBLOCK_PRIORITY, + }); + ubolLog(`Add 1 DNR session rule with ${allExcluded.length} for excluded strict-block domains`); +} + +async function excludeFromStrictBlock(hostname, permanent) { + if ( typeof hostname !== 'string' || hostname === '' ) { return; } + const readFn = permanent ? localRead : sessionRead; + const hostnames = new Set(await readFn('excludedStrictBlockHostnames')); + hostnames.add(hostname); + const writeFn = permanent ? localWrite : sessionWrite; + await writeFn('excludedStrictBlockHostnames', Array.from(hostnames)); + return updateSessionRules(); +} + +async function setStrictBlockMode(state, force = false) { + const newState = Boolean(state); + if ( force === false ) { + if ( newState === rulesetConfig.strictBlockMode ) { return; } + } + rulesetConfig.strictBlockMode = newState; + const promises = [ saveRulesetConfig() ]; + if ( newState === false ) { + promises.push( + localRemove('excludedStrictBlockHostnames'), + sessionRemove('excludedStrictBlockHostnames') + ); + } + await Promise.all(promises); + return updateSessionRules(); +} + +/******************************************************************************/ + +async function updateSessionRules() { + const addRulesUnfiltered = []; + const removeRuleIds = []; + const currentRules = await dnr.getSessionRules(); + await updateStrictBlockRules(currentRules, addRulesUnfiltered, removeRuleIds); + if ( addRulesUnfiltered.length === 0 && removeRuleIds.length === 0 ) { return; } + const maxRegexCount = dnr.MAX_NUMBER_OF_REGEX_RULES * 0.95; + const dynamicRegexCount = await getDynamicRegexRuleCount(); + let regexCount = dynamicRegexCount; + let ruleId = 1; + for ( const rule of addRulesUnfiltered ) { + rule.id = ruleId++; + if ( Boolean(rule.condition.regexFilter) === false ) { continue; } + regexCount += 1; + if ( regexCount < maxRegexCount ) { continue; } + rule.id = 0; + } + const sessionRegexCount = regexCount - dynamicRegexCount; + const addRules = addRulesUnfiltered.filter(a => a.id !== 0); + const rejectedRuleCount = addRulesUnfiltered.length - addRules.length; + if ( rejectedRuleCount !== 0 ) { + ubolLog(`Too many regex-based filters, ${rejectedRuleCount} session rules dropped`); + } + if ( sessionRegexCount !== 0 ) { + ubolLog(`Using ${sessionRegexCount}/${dnr.MAX_NUMBER_OF_REGEX_RULES} session regex-based DNR rules`); + } + const response = {}; + try { + await dnr.updateSessionRules({ addRules, removeRuleIds }); + if ( removeRuleIds.length !== 0 ) { + ubolLog(`Remove ${removeRuleIds.length} session DNR rules`); + } + if ( addRules.length !== 0 ) { + ubolLog(`Add ${addRules.length} session DNR rules`); + } + } catch(reason) { + ubolErr(`updateSessionRules/${reason}`); + response.error = `${reason}`; + } + return response; +} + +async function clearSessionRules() { + const currentRules = await dnr.getSessionRules(); + if ( currentRules.length === 0 ) { return; } + const removeRuleIds = currentRules.map(a => a.id); + return dnr.updateSessionRules({ removeRuleIds }); +} + +/******************************************************************************/ + +async function getEffectiveSessionRules() { + const allRules = await dnr.getSessionRules(); + const sessionRules = []; + for ( const rule of allRules ) { + if ( rule.id >= USER_RULES_BASE_RULE_ID ) { continue; } + sessionRules.push(rule); + } + return sessionRules; +} + +/******************************************************************************/ + +async function filteringModesToDNR(modes) { + const noneHostnames = new Set([ ...modes.none ]); + const notNoneHostnames = new Set([ ...modes.basic, ...modes.optimal, ...modes.complete ]); + const requestDomains = []; + const excludedRequestDomains = []; + const allowEverywhere = noneHostnames.has('all-urls'); + if ( allowEverywhere ) { + excludedRequestDomains.push(...notNoneHostnames); + } else { + requestDomains.push(...noneHostnames); + } + const noneCount = allowEverywhere + ? notNoneHostnames.size + : noneHostnames.size; + return dnr.setAllowAllRules( + TRUSTED_DIRECTIVE_BASE_RULE_ID, + requestDomains.sort(), + excludedRequestDomains.sort(), + allowEverywhere, + TRUSTED_DIRECTIVE_PRIORITY + ).then(modified => { + if ( modified === false ) { return; } + ubolLog(`${allowEverywhere ? 'Enabled' : 'Disabled'} DNR filtering for ${noneCount} sites`); + }); +} + +/******************************************************************************/ + +export async function getDefaultRulesetsFromEnv() { + const dropCountry = lang => { + const pos = lang.indexOf('-'); + if ( pos === -1 ) { return lang; } + return lang.slice(0, pos); + }; + + const langSet = new Set(); + + for ( const lang of navigator.languages.map(dropCountry) ) { + langSet.add(lang); + } + langSet.add(dropCountry(i18n.getUILanguage())); + + const reTargetLang = new RegExp( + `\\b(${Array.from(langSet).join('|')})\\b` + ); + + const reMobile = /\bMobile\b/.test(navigator.userAgent) + ? /\bmobile\b/ + : null + + const rulesetDetails = await getRulesetDetails(); + const out = []; + for ( const ruleset of rulesetDetails.values() ) { + const { id, enabled } = ruleset; + if ( enabled ) { + out.push(id); + continue; + } + if ( typeof ruleset.lang === 'string' ) { + if ( reTargetLang.test(ruleset.lang) ) { + out.push(id); + continue; + } + } + if ( typeof ruleset.tags === 'string' ) { + if ( reMobile?.test(ruleset.tags) ) { + out.push(id); + continue; + } + } + } + + return out; +} + +/******************************************************************************/ + +async function patchDefaultRulesets() { + const [ + oldDefaultIds = [], + newDefaultIds, + staticRulesetIds, + ] = await Promise.all([ + localRead('defaultRulesetIds'), + getDefaultRulesetsFromEnv(), + getStaticRulesets().then(r => r.map(a => a.id)), + ]); + const toAdd = []; + const toRemove = []; + for ( const id of newDefaultIds ) { + if ( oldDefaultIds.includes(id) ) { continue; } + toAdd.push(id); + } + for ( const id of oldDefaultIds ) { + if ( newDefaultIds.includes(id) ) { continue; } + toRemove.push(id); + } + for ( const id of rulesetConfig.enabledRulesets ) { + if ( staticRulesetIds.includes(id) ) { continue; } + toRemove.push(id); + } + localWrite('defaultRulesetIds', newDefaultIds); + if ( toAdd.length === 0 && toRemove.length === 0 ) { return; } + const enabledRulesets = new Set(rulesetConfig.enabledRulesets); + toAdd.forEach(id => enabledRulesets.add(id)); + toRemove.forEach(id => enabledRulesets.delete(id)); + const patchedRulesets = Array.from(enabledRulesets); + ubolLog(`Patched rulesets: ${rulesetConfig.enabledRulesets} => ${patchedRulesets}`); + rulesetConfig.enabledRulesets = patchedRulesets; +} + +/******************************************************************************/ + +async function enableRulesets(ids) { + const afterIds = new Set(ids); + const [ + beforeIds, + adminIds, + rulesetDetails, + ] = await Promise.all([ + dnr.getEnabledRulesets().then(ids => new Set(ids)), + getAdminRulesets(), + getRulesetDetails(), + ]); + + for ( const token of adminIds ) { + const c0 = token.charAt(0); + const id = token.slice(1); + if ( c0 === '+' ) { + afterIds.add(id); + } else if ( c0 === '-' ) { + afterIds.delete(id); + } + } + + const enableRulesetSet = new Set(); + const disableRulesetSet = new Set(); + for ( const id of afterIds ) { + if ( beforeIds.has(id) ) { continue; } + enableRulesetSet.add(id); + } + for ( const id of beforeIds ) { + if ( afterIds.has(id) ) { continue; } + disableRulesetSet.add(id); + } + + // Be sure the rulesets to enable/disable do exist in the current version, + // otherwise the API throws. + for ( const id of enableRulesetSet ) { + if ( rulesetDetails.has(id) ) { continue; } + enableRulesetSet.delete(id); + } + for ( const id of disableRulesetSet ) { + if ( rulesetDetails.has(id) ) { continue; } + disableRulesetSet.delete(id); + } + + if ( enableRulesetSet.size === 0 && disableRulesetSet.size === 0 ) { return; } + + const enableRulesetIds = Array.from(enableRulesetSet); + const disableRulesetIds = Array.from(disableRulesetSet); + + if ( enableRulesetIds.length !== 0 ) { + ubolLog(`Enable rulesets: ${enableRulesetIds}`); + } + if ( disableRulesetIds.length !== 0 ) { + ubolLog(`Disable ruleset: ${disableRulesetIds}`); + } + + const response = {}; + + await dnr.updateEnabledRulesets({ + enableRulesetIds, + disableRulesetIds, + }).catch(reason => { + ubolErr(`updateEnabledRulesets/${reason}`); + response.error = `${reason}`; + }); + + const result = await updateDynamicRules(); + if ( result?.error ) { + response.error ||= result.error; + } + + await dnr.getEnabledRulesets().then(enabledRulesets => { + ubolLog(`Enabled rulesets: ${enabledRulesets}`); + response.enabledRulesets = enabledRulesets; + return dnr.getAvailableStaticRuleCount(); + }).then(count => { + ubolLog(`Available static rule count: ${count}`); + response.staticRuleCount = count; + }).catch(reason => { + ubolErr(`getEnabledRulesets/${reason}`); + }); + + return response; +} + +/******************************************************************************/ + +async function getStaticRulesets() { + const manifest = runtime.getManifest(); + return manifest.declarative_net_request.rule_resources; +} + +/******************************************************************************/ + +async function getEnabledRulesetsDetails() { + const [ + ids, + rulesetDetails, + ] = await Promise.all([ + dnr.getEnabledRulesets(), + getRulesetDetails(), + ]); + const out = []; + for ( const id of ids ) { + const ruleset = rulesetDetails.get(id); + if ( ruleset === undefined ) { continue; } + out.push(ruleset); + } + return out; +} + +/******************************************************************************/ + +async function getEffectiveUserRules() { + const allRules = await dnr.getDynamicRules(); + const userRules = []; + for ( const rule of allRules ) { + if ( rule.id < USER_RULES_BASE_RULE_ID ) { continue; } + userRules.push(rule); + } + return userRules; +} + +async function updateUserRules() { + const [ + userRules, + userRulesText = '', + ] = await Promise.all([ + getEffectiveUserRules(), + localRead('userDnrRules'), + ]); + + const effectiveRulesText = rulesetConfig.developerMode + ? userRulesText + : ''; + + const parsed = rulesFromText(effectiveRulesText); + const { rules } = parsed; + const removeRuleIds = [ ...userRules.map(a => a.id) ]; + const rejectedRegexes = []; + const addRules = await pruneInvalidRegexRules('user', rules, rejectedRegexes); + const out = { added: 0, removed: 0, errors: [] }; + + if ( rejectedRegexes.length !== 0 ) { + rejectedRegexes.forEach(e => + out.errors.push(`regexFilter: ${e.regex} → ${e.reason}`) + ); + } + + if ( removeRuleIds.length === 0 && addRules.length === 0 ) { + await localRemove('userDnrRuleCount'); + return out; + } + + let ruleId = 0; + for ( const rule of addRules ) { + rule.id = USER_RULES_BASE_RULE_ID + ruleId++; + rule.priority = (rule.priority || 1) + USER_RULES_PRIORITY; + } + + // Rules are first removed separately to ensure registered rules match + // user rules text. A bad rule in user rules text would prevent the + // rules from being removed if the removal was done at the same time as + // adding rules. + try { + await dnr.updateDynamicRules({ removeRuleIds }); + await dnr.updateDynamicRules({ addRules }); + if ( removeRuleIds.length !== 0 ) { + ubolLog(`updateUserRules() / Removed ${removeRuleIds.length} dynamic DNR rules`); + } + if ( addRules.length !== 0 ) { + ubolLog(`updateUserRules() / Added ${addRules.length} DNR rules`); + } + out.added = addRules.length; + out.removed = removeRuleIds.length; + } catch(reason) { + ubolErr(`updateUserRules/${reason}`); + out.errors.push(`${reason}`); + } finally { + const userRules = await getEffectiveUserRules(); + if ( userRules.length === 0 ) { + await localRemove('userDnrRuleCount'); + } else { + await localWrite('userDnrRuleCount', addRules.length); + } + } + return out; +} + +/******************************************************************************/ + +export { + enableRulesets, + excludeFromStrictBlock, + filteringModesToDNR, + getEffectiveDynamicRules, + getEffectiveSessionRules, + getEffectiveUserRules, + getEnabledRulesetsDetails, + getRulesetDetails, + patchDefaultRulesets, + setStrictBlockMode, + updateDynamicRules, + updateSessionRules, + updateUserRules, +}; diff --git a/platform/mv3/extension/js/rw-dnr-editor.js b/platform/mv3/extension/js/rw-dnr-editor.js new file mode 100644 index 0000000000000..118879dcb2580 --- /dev/null +++ b/platform/mv3/extension/js/rw-dnr-editor.js @@ -0,0 +1,409 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-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 { + browser, + localRead, + localRemove, + localWrite, + sendMessage, +} from './ext.js'; +import { dom, qs$ } from './dom.js'; +import { i18n, i18n$ } from './i18n.js'; +import { DNREditor } from './dnr-editor.js'; +import { parseFilters } from './ubo-parser.js'; +import { textFromRules } from './dnr-parser.js'; + +/******************************************************************************/ + +export class ReadWriteDNREditor extends DNREditor { + constructor(editor) { + super(); + this.feedbackPanel = self.cm6.createViewPanel(); + editor.panels.push(this.feedbackPanel); + } + + async getText() { + return localRead('userDnrRules'); + } + + on(editor) { + localRead('userDnrRuleCount').then(userDnrRuleCount => { + this.updateSummaryPanel(editor, { userDnrRuleCount }) + }); + browser.storage.onChanged.addListener((changes, area) => { + if ( area !== 'local' ) { return; } + const { userDnrRuleCount } = changes; + if ( userDnrRuleCount instanceof Object === false ) { return; } + const { newValue } = changes.userDnrRuleCount; + this.updateSummaryPanel(editor, { userDnrRuleCount: newValue }); + }); + } + + off(editor) { + this.updateSummaryPanel(editor, null); + this.updateFeedbackPanel(editor, null); + } + + rulesFromJSON(json) { + let content = json.trim(); + if ( /^[[{]/.test(content) === false ) { + const match = /^[^[{]+/.exec(content); + if ( match === null ) { return; } + content = content.slice(match[0].length); + } + const firstChar = content.charAt(0); + const expectedLastChar = firstChar === '[' ? ']' : '}'; + if ( content.at(-1) !== expectedLastChar ) { + const re = new RegExp(`\\${expectedLastChar}[^\\${expectedLastChar}]+$`); + const match = re.exec(content); + if ( match === null ) { return; } + content = content.slice(0, match.index+1); + } + if ( content.startsWith('{') && content.endsWith('}') ) { + content = `[${content}]`; + } + try { + const rules = JSON.parse(content); + if ( Array.isArray(rules) ) { return rules; } + } + catch { + } + } + + getAutocompleteCandidates(editor, from) { + const { scope } = editor.getScopeAt(from); + switch ( scope ) { + case '': + return { + before: /^$/, + candidates: [ + { token: 'action:', after: '\n' }, + { token: 'condition:', after: '\n ' }, + { token: 'priority:', after: ' ' }, + { token: '---', after: '\n' }, + ] + }; + case 'action:': + return { + before: /^ {2}$/, + candidates: [ + { token: 'type:', after: ' ' }, + { token: 'redirect:', after: '\n ' }, + { token: 'requestHeaders:', after: '\n - header: ' }, + { token: 'responseHeaders:', after: '\n - header: ' }, + ], + }; + case 'action:type:': + return { + before: /: $/, + candidates: [ + { token: 'block', after: '\n ' }, + { token: 'redirect', after: '\n ' }, + { token: 'allow', after: '\n ' }, + { token: 'modifyHeaders', after: '\n ' }, + { token: 'upgradeScheme', after: '\n ' }, + { token: 'allowAllRequest', after: '\n ' }, + ], + }; + case 'action:redirect:': + return { + before: /^ {4}$/, + candidates: [ + { token: 'extensionPath:', after: ' ' }, + { token: 'regexSubstitution:', after: ' ' }, + { token: 'transform:', after: '\n ' }, + { token: 'url:', after: ' ' }, + ], + }; + case 'action:redirect:transform:': + return { + before: /^ {6}$/, + candidates: [ + { token: 'fragment:', after: ' ' }, + { token: 'host:', after: ' ' }, + { token: 'path:', after: ' ' }, + { token: 'port:', after: ' ' }, + { token: 'query:', after: ' ' }, + { token: 'scheme:', after: ' ' }, + { token: 'queryTransform:', after: '\n ' }, + ], + }; + case 'action:redirect:transform:queryTransform:': + return { + before: /^ {8}$/, + candidates: [ + { token: 'addOrReplaceParams:', after: '\n - ' }, + { token: 'removeParams:', after: '\n - ' }, + ], + }; + case 'action:responseHeaders:': + case 'action:requestHeaders:': + return { + before: /^ {4}- $/, + candidates: [ + { token: 'header:', after: ' ' }, + ], + }; + case 'action:responseHeaders:header:': + case 'action:requestHeaders:header:': + return { + before: /^ {6}$/, + candidates: [ + { token: 'operation:', after: ' ' }, + { token: 'value:', after: ' ' }, + ], + }; + case 'action:responseHeaders:header:operation:': + case 'action:requestHeaders:header:operation:': + return { + before: /: $/, + candidates: [ + { token: 'append', after: '\n value: ' }, + { token: 'set', after: '\n value: ' }, + { token: 'remove', after: '\n ' }, + ], + }; + case 'condition:': + return { + before: /^ {2}$/, + candidates: [ + { token: 'domainType:', after: ' ' }, + { token: 'isUrlFilterCaseSensitive:', after: ' ' }, + { token: 'regexFilter:', after: ' ' }, + { token: 'urlFilter:', after: ' ' }, + { token: 'initiatorDomains:', after: '\n - ' }, + { token: 'excludedInitiatorDomains:', after: '\n - ' }, + { token: 'requestDomains:', after: '\n - ' }, + { token: 'excludedRequestDomains:', after: '\n - ' }, + { token: 'resourceTypes:', after: '\n - ' }, + { token: 'excludedResourceTypes:', after: '\n - ' }, + { token: 'requestMethods:', after: '\n - ' }, + { token: 'excludedRequestMethods:', after: '\n - ' }, + { token: 'responseHeaders:', after: '\n - ' }, + { token: 'excludedResponseHeaders:', after: '\n - ' }, + ], + }; + case 'condition:domainType:': + return { + before: /: $/, + candidates: [ + { token: 'firstParty', after: '\n ' }, + { token: 'thirdParty', after: '\n ' }, + ], + }; + case 'condition:isUrlFilterCaseSensitive:': + return { + before: /: $/, + candidates: [ + { token: 'true', after: '\n ' }, + { token: 'false', after: '\n ' }, + ], + }; + case 'condition:requestMethods:': + case 'condition:excludedRequestMethods:': + return { + before: /^ {4}- $/, + candidates: [ + { token: 'connect', after: '\n - ' }, + { token: 'delete', after: '\n - ' }, + { token: 'get', after: '\n - ' }, + { token: 'head', after: '\n - ' }, + { token: 'options', after: '\n - ' }, + { token: 'patch', after: '\n - ' }, + { token: 'post', after: '\n - ' }, + { token: 'put', after: '\n - ' }, + { token: 'other', after: '\n ' }, + ], + }; + case 'condition:resourceTypes:': + case 'condition:excludedResourceTypes:': + return { + before: /^ {4}- $/, + candidates: [ + { token: 'main_frame', after: '\n - ' }, + { token: 'sub_frame', after: '\n - ' }, + { token: 'stylesheet', after: '\n - ' }, + { token: 'script', after: '\n - ' }, + { token: 'image', after: '\n - ' }, + { token: 'font', after: '\n - ' }, + { token: 'object', after: '\n - ' }, + { token: 'xmlhttprequest', after: '\n - ' }, + { token: 'ping', after: '\n - ' }, + { token: 'csp_report', after: '\n - ' }, + { token: 'media', after: '\n - ' }, + { token: 'websocket', after: '\n - ' }, + { token: 'webtransport', after: '\n - ' }, + { token: 'webbundle', after: '\n - ' }, + { token: 'other', after: '\n ' }, + ], + }; + } + } + + autoComplete(editor, context) { + const match = context.matchBefore(/[\w-]*/); + if ( match === undefined ) { return null; } + const result = this.getAutocompleteCandidates(editor, match.from); + if ( result === undefined ) { return null; } + if ( result.before !== undefined ) { + const { doc } = context.state; + const line = doc.lineAt(context.pos); + const before = doc.sliceString(line.from, match.from); + if ( result.before.test(before) === false ) { return null; } + } + const filtered = result.candidates.filter(e => + e.token !== match.text || e.after !== '\n' + ); + return { + from: match.from, + options: filtered.map(e => ({ label: e.token, apply: `${e.token}${e.after}` })), + validFor: /\w*/, + }; + } + + async saveEditorText(editor) { + const text = editor.getEditorText().trim(); + await (text.length !== 0 + ? localWrite('userDnrRules', text) + : localRemove('userDnrRules') + ); + const response = await sendMessage({ what: 'updateUserDnrRules' }) + if ( response instanceof Object ) { + this.updateFeedbackPanel(editor, response); + } + return true; + } + + updateSummaryPanel(editor, details) { + if ( details instanceof Object === false ) { + return editor.updateSummaryPanel(null); + } + const template = document.querySelector('template.summary-panel'); + const fragment = template.content.cloneNode(true); + const root = fragment.querySelector('.summary-panel'); + i18n.render(root); + const info = root.querySelector('.info'); + info.textContent = i18n$('dnrRulesCountInfo') + .replace('{count}', (details.userDnrRuleCount || 0).toLocaleString()) + editor.updateSummaryPanel(root); + } + + updateFeedbackPanel(editor, details) { + if ( details instanceof Object === false ) { + return this.feedbackPanel.render(editor.view, null); + } + const errors = []; + if ( Array.isArray(details.errors) ) { + details.errors.forEach(e => errors.push(e)); + } + const text = errors.join('\n'); + const config = (( ) => { + if ( text === '' ) { return null; } + const template = document.querySelector('template.feedback-panel'); + const fragment = template.content.cloneNode(true); + const root = fragment.querySelector('.feedback-panel'); + const info = root.querySelector('.info'); + info.textContent = text; + const closeFn = this.updateFeedbackPanel.bind(this, editor, null); + return { + dom: root, + mount() { + dom.on(qs$('.feedback-panel .close'), 'click', closeFn); + } + }; + })(); + this.feedbackPanel.render(editor.view, config); + } + + importFromFile(editor, json) { + const rules = this.rulesFromJSON(json); + if ( rules === undefined ) { return; } + const text = textFromRules(rules); + if ( text === undefined ) { return; } + const { doc } = editor.view.state; + const lastChars = doc.toString().trimEnd().slice(-4); + const lastLine = doc.line(doc.lines); + let from = lastLine.to; + let prepend = ''; + if ( lastLine.text !== '' ) { + prepend = '\n'; + } else { + from = lastLine.from; + } + if ( /(?:^|\n)---$/.test(lastChars) === false ) { + prepend = `${prepend}---\n`; + } + editor.view.dispatch({ changes: { from, insert: `${prepend}${text}` } }); + self.cm6.foldAll(editor.view); + editor.view.focus(); + } + + exportToFile(text) { + return super.exportToFile(text, 'my-ubol-dnr-rules.json'); + } + + importFromPaste(editor, transaction) { + const { from, to } = editor.rangeFromTransaction(transaction); + if ( from === undefined || to === undefined ) { return; } + // Paste position must match start of a line + const { newDoc } = transaction; + const lineFrom = newDoc.lineAt(from); + if ( lineFrom.from !== from ) { return; } + // Paste position must match a rule boundary + let separatorBefore = false; + if ( lineFrom.number !== 1 ) { + const lineBefore = newDoc.line(lineFrom.number-1); + if ( /^---\s*$/.test(lineBefore.text) === false ) { return; } + separatorBefore = true; + } + const pastedText = newDoc.sliceString(from, to); + let linesToPrepend; + let rules = this.rulesFromJSON(pastedText); + if ( Boolean(rules?.length) === false ) { + rules = parseFilters(pastedText); + if ( Boolean(rules?.length) === false ) { return; } + const lines = pastedText.trim().split(/\n/); + linesToPrepend = lines.slice(0, 10).map(a => `# ${a}`); + if ( lines.length > linesToPrepend.length ) { + linesToPrepend.push('# ...'); + } + } + let yamlText = textFromRules(rules); + if ( yamlText === undefined ) { return; } + if ( linesToPrepend ) { + yamlText = yamlText.replace('---\n', `---\n${linesToPrepend.join('\n')}\n`); + } + if ( separatorBefore && yamlText.startsWith('---\n') ) { + yamlText = yamlText.slice(4); + } + editor.view.dispatch({ changes: { from, to, insert: yamlText } }); + self.cm6.foldAll(editor.view); + return true; + } + + newlineAssistant = { + 'action:': ' type: ', + 'action:responseHeaders:header:': ' operation: ', + }; + + ioAccept = '.json,application/json'; +}; diff --git a/platform/mv3/extension/js/scripting-manager.js b/platform/mv3/extension/js/scripting-manager.js new file mode 100644 index 0000000000000..7439e16bdf74c --- /dev/null +++ b/platform/mv3/extension/js/scripting-manager.js @@ -0,0 +1,455 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2022-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 ut from './utils.js'; + +import { + browser, + localKeys, localRemove, localWrite, + sessionKeys, sessionRead, sessionRemove, sessionWrite, +} from './ext.js'; +import { ubolErr, ubolLog } from './debug.js'; + +import { fetchJSON } from './fetch.js'; +import { getEnabledRulesetsDetails } from './ruleset-manager.js'; +import { getFilteringModeDetails } from './mode-manager.js'; +import { registerCustomFilters } from './filter-manager.js'; +import { registerToolbarIconToggler } from './action.js'; + +/******************************************************************************/ + +const resourceDetailPromises = new Map(); + +function getScriptletDetails() { + let promise = resourceDetailPromises.get('scriptlet'); + if ( promise !== undefined ) { return promise; } + promise = fetchJSON('/rulesets/scriptlet-details').then( + entries => new Map(entries) + ); + resourceDetailPromises.set('scriptlet', promise); + return promise; +} + +function getGenericDetails() { + let promise = resourceDetailPromises.get('generic'); + if ( promise !== undefined ) { return promise; } + promise = fetchJSON('/rulesets/generic-details').then( + entries => new Map(entries) + ); + resourceDetailPromises.set('generic', promise); + return promise; +} + +/******************************************************************************/ + +const normalizeMatches = matches => { + if ( matches.length <= 1 ) { return; } + if ( matches.includes('') === false ) { + if ( matches.includes('*://*/*') === false ) { return; } + } + matches.length = 0; + matches.push(''); +}; + +/******************************************************************************/ + +async function resetCSSCache() { + const keys = await sessionKeys(); + return sessionRemove(keys.filter(a => a.startsWith('cache.css.'))); +} + +/******************************************************************************/ + +function registerHighGeneric(context, genericDetails) { + const { filteringModeDetails, rulesetsDetails } = context; + + const excludeHostnames = []; + const includeHostnames = []; + const css = []; + for ( const details of rulesetsDetails ) { + const hostnames = genericDetails.get(details.id); + if ( hostnames ) { + if ( hostnames.unhide ) { + excludeHostnames.push(...hostnames.unhide); + } + if ( hostnames.hide ) { + includeHostnames.push(...hostnames.hide); + } + } + const count = details.css?.generichigh || 0; + if ( count === 0 ) { continue; } + css.push(`/rulesets/scripting/generichigh/${details.id}.css`); + } + + if ( css.length === 0 ) { return; } + + const { none, basic, optimal, complete } = filteringModeDetails; + const matches = []; + const excludeMatches = []; + if ( complete.has('all-urls') ) { + excludeMatches.push(...ut.matchesFromHostnames(none)); + excludeMatches.push(...ut.matchesFromHostnames(basic)); + excludeMatches.push(...ut.matchesFromHostnames(optimal)); + excludeMatches.push(...ut.matchesFromHostnames(excludeHostnames)); + matches.push(''); + } else { + matches.push( + ...ut.matchesFromHostnames( + ut.subtractHostnameIters( + Array.from(complete), + excludeHostnames + ) + ) + ); + } + if ( matches.length === 0 ) { return; } + + // https://github.com/w3c/webextensions/issues/414#issuecomment-1623992885 + // Once supported, add: + // cssOrigin: 'USER', + const directive = { + id: 'css-generichigh', + css, + matches, + allFrames: true, + runAt: 'document_end', + }; + if ( excludeMatches.length !== 0 ) { + directive.excludeMatches = excludeMatches; + } + + // register + context.toAdd.push(directive); +} + +/******************************************************************************/ + +function registerGeneric(context, genericDetails) { + const { filteringModeDetails, rulesetsDetails } = context; + + const excludedByFilter = []; + const includedByFilter = []; + const js = []; + for ( const details of rulesetsDetails ) { + const hostnames = genericDetails.get(details.id); + if ( hostnames ) { + if ( hostnames.unhide ) { + excludedByFilter.push(...hostnames.unhide); + } + if ( hostnames.hide ) { + includedByFilter.push(...hostnames.hide); + } + } + const count = details.css?.generic || 0; + if ( count === 0 ) { continue; } + js.push(`/rulesets/scripting/generic/${details.id}.js`); + } + + if ( js.length === 0 ) { return; } + + js.unshift('/js/scripting/css-api.js', '/js/scripting/isolated-api.js'); + js.push('/js/scripting/css-generic.js'); + + const { none, basic, optimal, complete } = filteringModeDetails; + const includedByMode = [ ...complete ]; + const excludedByMode = [ ...none, ...basic, ...optimal ]; + + if ( complete.has('all-urls') === false ) { + const matches = [ + ...ut.matchesFromHostnames( + ut.subtractHostnameIters(includedByMode, excludedByFilter) + ), + ...ut.matchesFromHostnames( + ut.intersectHostnameIters(includedByMode, includedByFilter) + ), + ]; + if ( matches.length === 0 ) { return; } + const directive = { + id: 'css-generic-some', + js, + allFrames: true, + matches, + runAt: 'document_idle', + }; + context.toAdd.push(directive); + return; + } + + const excludeMatches = [ + ...ut.matchesFromHostnames(excludedByMode), + ...ut.matchesFromHostnames(excludedByFilter), + ]; + const directiveAll = { + id: 'css-generic-all', + js, + allFrames: true, + matches: [ '' ], + runAt: 'document_idle', + }; + if ( excludeMatches.length !== 0 ) { + directiveAll.excludeMatches = excludeMatches; + } + context.toAdd.push(directiveAll); + + const matches = [ + ...ut.matchesFromHostnames( + ut.subtractHostnameIters(includedByFilter, excludedByMode) + ), + ]; + if ( matches.length === 0 ) { return; } + const directiveSome = { + id: 'css-generic-some', + js, + allFrames: true, + matches, + runAt: 'document_idle', + }; + context.toAdd.push(directiveSome); +} + +/******************************************************************************/ + +async function registerCosmetic(realm, context) { + const { filteringModeDetails, rulesetsDetails } = context; + + { + const keys = await localKeys(); + localRemove(keys.filter(a => a.startsWith(`css.${realm}.`))); + } + + const rulesetIds = []; + for ( const rulesetDetails of rulesetsDetails ) { + const count = rulesetDetails.css?.[realm] || 0; + if ( count === 0 ) { continue; } + rulesetIds.push(rulesetDetails.id); + } + if ( rulesetIds.length === 0 ) { return; } + + const { none, basic, optimal, complete } = filteringModeDetails; + const matches = [ + ...ut.matchesFromHostnames(optimal), + ...ut.matchesFromHostnames(complete), + ]; + if ( matches.length === 0 ) { return; } + + { + const promises = []; + for ( const id of rulesetIds ) { + promises.push( + fetchJSON(`/rulesets/scripting/${realm}/${id}`).then(data => { + return localWrite(`css.${realm}.${id}`, data); + }) + ); + } + await Promise.all(promises); + } + + normalizeMatches(matches); + + const realmid = `css-${realm}`; + const js = rulesetIds.map(id => `/rulesets/scripting/${realm}/${id}.js`); + js.unshift('/js/scripting/css-api.js', '/js/scripting/isolated-api.js'); + js.push(`/js/scripting/${realmid}.js`); + + const excludeMatches = []; + if ( none.has('all-urls') === false && basic.has('all-urls') === false ) { + const toExclude = [ + ...ut.matchesFromHostnames(none), + ...ut.matchesFromHostnames(basic), + ]; + for ( const hn of toExclude ) { + excludeMatches.push(hn); + } + } + + const directive = { + id: realmid, + js, + matches, + allFrames: true, + runAt: 'document_start', + }; + if ( excludeMatches.length !== 0 ) { + directive.excludeMatches = excludeMatches; + } + + // register + context.toAdd.push(directive); +} + +/******************************************************************************/ + +function registerScriptlet(context, scriptletDetails) { + const { filteringModeDetails, rulesetsDetails } = context; + + const hasBroadHostPermission = + filteringModeDetails.optimal.has('all-urls') || + filteringModeDetails.complete.has('all-urls'); + + const permissionRevokedMatches = [ + ...ut.matchesFromHostnames(filteringModeDetails.none), + ...ut.matchesFromHostnames(filteringModeDetails.basic), + ]; + const permissionGrantedHostnames = [ + ...filteringModeDetails.optimal, + ...filteringModeDetails.complete, + ]; + + for ( const rulesetId of rulesetsDetails.map(v => v.id) ) { + const worlds = scriptletDetails.get(rulesetId); + if ( worlds === undefined ) { continue; } + for ( const world of Object.keys(worlds) ) { + const id = `${rulesetId}.${world.toLowerCase()}`; + + const matches = []; + const excludeMatches = []; + const hostnames = worlds[world]; + let targetHostnames = []; + if ( hasBroadHostPermission ) { + excludeMatches.push(...permissionRevokedMatches); + targetHostnames = hostnames; + } else if ( permissionGrantedHostnames.length !== 0 ) { + if ( hostnames.includes('*') ) { + targetHostnames = permissionGrantedHostnames; + } else { + targetHostnames = ut.intersectHostnameIters( + hostnames, + permissionGrantedHostnames + ); + } + } + if ( targetHostnames.length === 0 ) { continue; } + matches.push(...ut.matchesFromHostnames(targetHostnames)); + normalizeMatches(matches); + + const directive = { + id, + js: [ `/rulesets/scripting/scriptlet/${world.toLowerCase()}/${rulesetId}.js` ], + matches, + allFrames: true, + matchOriginAsFallback: true, + runAt: 'document_start', + world, + }; + if ( excludeMatches.length !== 0 ) { + directive.excludeMatches = excludeMatches; + } + + // register + context.toAdd.push(directive); + } + } +} + +/******************************************************************************/ + +// Issue: Safari appears to completely ignore excludeMatches +// https://github.com/radiolondra/ExcludeMatches-Test + +export async function registerInjectables() { + if ( browser.scripting === undefined ) { return false; } + + if ( registerInjectables.barrier ) { return true; } + registerInjectables.barrier = true; + + const [ + filteringModeDetails, + rulesetsDetails, + scriptletDetails, + genericDetails, + ] = await Promise.all([ + getFilteringModeDetails(), + getEnabledRulesetsDetails(), + getScriptletDetails(), + getGenericDetails(), + ]); + const toAdd = []; + const context = { + filteringModeDetails, + rulesetsDetails, + toAdd, + }; + + await Promise.all([ + registerScriptlet(context, scriptletDetails), + registerCosmetic('specific', context), + registerCosmetic('procedural', context), + registerGeneric(context, genericDetails), + registerHighGeneric(context, genericDetails), + registerCustomFilters(context), + registerToolbarIconToggler(context), + ]); + + ubolLog(`Unregistered all content (css/js)`); + try { + await browser.scripting.unregisterContentScripts(); + } catch(reason) { + ubolErr(`unregisterContentScripts/${reason}`); + } + + if ( toAdd.length !== 0 ) { + ubolLog(`Registered ${toAdd.map(v => v.id)} content (css/js)`); + try { + await browser.scripting.registerContentScripts(toAdd); + } catch(reason) { + ubolErr(`registerContentScripts/${reason}`); + } + } + + await resetCSSCache(); + + registerInjectables.barrier = false; + + return true; +} + +/******************************************************************************/ + +export async function getRegisteredContentScripts() { + const scripts = await browser.scripting.getRegisteredContentScripts() + .catch(( ) => []); + return scripts.map(a => a.id); +} + +/******************************************************************************/ + +export async function onWakeupRun() { + const cleanupTime = await sessionRead('scripting.manager.cleanup.time') || 0; + const now = Date.now(); + const since = now - cleanupTime; + if ( since < (15 * 60 * 1000) ) { return; } // 15 minutes + const MAX_CACHE_ENTRY_LOW = 256; + const MAX_CACHE_ENTRY_HIGH = MAX_CACHE_ENTRY_LOW + + Math.max(Math.round(MAX_CACHE_ENTRY_LOW / 8), 8); + const keys = await sessionKeys() || []; + const cacheKeys = keys.filter(a => a.startsWith('cache.css.')); + if ( cacheKeys.length < MAX_CACHE_ENTRY_HIGH ) { return; } + const entries = await Promise.all(cacheKeys.map(async a => { + const entry = await sessionRead(a) || {}; + entry.key = a; + return entry; + })); + entries.sort((a, b) => b.t - a.t); + sessionRemove(entries.slice(MAX_CACHE_ENTRY_LOW).map(a => a.key)); + sessionWrite('scripting.manager.cleanup.time', now) +} + +/******************************************************************************/ diff --git a/platform/mv3/extension/js/scripting/css-api.js b/platform/mv3/extension/js/scripting/css-api.js new file mode 100644 index 0000000000000..13f322d11b7e0 --- /dev/null +++ b/platform/mv3/extension/js/scripting/css-api.js @@ -0,0 +1,33 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant 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 +*/ + +(api => { + if ( typeof api === 'object' ) { return; } + self.cssAPI = { + insert(css) { + chrome.runtime.sendMessage({ + what: 'insertCSS', + css, + }).catch(( ) => { + }); + }, + }; +})(self.cssAPI); diff --git a/platform/mv3/extension/js/scripting/css-generic.js b/platform/mv3/extension/js/scripting/css-generic.js new file mode 100644 index 0000000000000..7a7ed0c5e34ff --- /dev/null +++ b/platform/mv3/extension/js/scripting/css-generic.js @@ -0,0 +1,263 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-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 +*/ + +/******************************************************************************/ + +// Important! +// Isolate from global scope +(function uBOL_cssGeneric() { + +const genericSelectorMap = self.genericSelectorMap || new Map(); +self.genericSelectorMap = undefined; +if ( genericSelectorMap.size === 0 ) { return; } + +const genericExceptionSieve = self.genericExceptionSieve || new Set(); +self.genericExceptionSieve = undefined; + +const genericExceptionMap = self.genericExceptionMap || new Map(); +self.genericExceptionMap = undefined; + +/******************************************************************************/ + +const maxSurveyTimeSlice = 4; +const maxSurveyNodeSlice = 64; +const styleSheetSelectors = []; +const stopAllRatio = 0.95; // To be investigated + +let surveyCount = 0; +let surveyMissCount = 0; +let styleSheetTimer; +let processTimer; +let domChangeTimer; +let lastDomChange = Date.now(); + +/******************************************************************************/ + +// http://www.cse.yorku.ca/~oz/hash.html#djb2 +// Must mirror dnrRulesetFromRawLists's version + +const hashFromStr = (type, s) => { + const len = s.length; + const step = len + 7 >>> 3; + let hash = (type << 5) + type ^ len; + for ( let i = 0; i < len; i += step ) { + hash = (hash << 5) + hash ^ s.charCodeAt(i); + } + return hash & 0xFFF; +}; + +/******************************************************************************/ + +// Extract all classes/ids: these will be passed to the cosmetic +// filtering engine, and in return we will obtain only the relevant +// CSS selectors. + +// https://github.com/gorhill/uBlock/issues/672 +// http://www.w3.org/TR/2014/REC-html5-20141028/infrastructure.html#space-separated-tokens +// http://jsperf.com/enumerate-classes/6 + +const uBOL_idFromNode = node => { + const raw = node.id; + if ( typeof raw !== 'string' || raw.length === 0 ) { return; } + const hash = hashFromStr(0x23 /* '#' */, raw.trim()); + const selectorList = genericSelectorMap.get(hash); + if ( selectorList === undefined ) { return; } + genericSelectorMap.delete(hash); + if ( genericExceptionSieve.has(hash) ) { + applyExceptions(selectorList); + } else { + styleSheetSelectors.push(selectorList); + } +}; + +// https://github.com/uBlockOrigin/uBlock-issues/discussions/2076 +// Performance: avoid using Element.classList +const uBOL_classesFromNode = node => { + const s = node.getAttribute('class'); + if ( typeof s !== 'string' ) { return; } + const len = s.length; + for ( let beg = 0, end = 0; beg < len; beg += 1 ) { + end = s.indexOf(' ', beg); + if ( end === beg ) { continue; } + if ( end === -1 ) { end = len; } + const token = s.slice(beg, end).trimEnd(); + beg = end; + if ( token.length === 0 ) { continue; } + const hash = hashFromStr(0x2E /* '.' */, token); + const selectorList = genericSelectorMap.get(hash); + if ( selectorList === undefined ) { continue; } + genericSelectorMap.delete(hash); + if ( genericExceptionSieve.has(hash) ) { + applyExceptions(selectorList); + } else { + styleSheetSelectors.push(selectorList); + } + } +}; + +const applyExceptions = selectorList => { + const selectors = new Set(selectorList.split(',\n')); + self.isolatedAPI.forEachHostname(hostname => { + const exceptions = genericExceptionMap.get(hostname); + if ( exceptions === undefined ) { return; } + for ( const exception of exceptions.split('\n') ) { + selectors.delete(exception); + } + if ( selectors.size === 0 ) { return true; } + }, { hasEntities: true }); + if ( selectors.size === 0 ) { return; } + styleSheetSelectors.push(Array.from(selectors).join(',\n')); +} + +/******************************************************************************/ + +const pendingNodes = { + addedNodes: [], + nodeSet: new Set(), + add(node) { + this.addedNodes.push(node); + }, + next(out) { + for ( const added of this.addedNodes ) { + if ( this.nodeSet.has(added) ) { continue; } + this.nodeSet.add(added); + if ( added.firstElementChild === null ) { continue; } + for ( const descendant of added.querySelectorAll('[id],[class]') ) { + this.nodeSet.add(descendant); + } + } + this.addedNodes.length = 0; + for ( const node of this.nodeSet ) { + this.nodeSet.delete(node); + out.push(node); + if ( out.length === maxSurveyNodeSlice ) { break; } + } + }, + hasNodes() { + return this.addedNodes.length !== 0 || this.nodeSet.size !== 0; + }, +}; + +/******************************************************************************/ + +const uBOL_processNodes = ( ) => { + const t0 = Date.now(); + const nodes = []; + const deadline = t0 + maxSurveyTimeSlice; + for (;;) { + pendingNodes.next(nodes); + if ( nodes.length === 0 ) { break; } + for ( const node of nodes ) { + uBOL_idFromNode(node); + uBOL_classesFromNode(node); + } + nodes.length = 0; + if ( performance.now() >= deadline ) { break; } + } + surveyCount += 1; + if ( styleSheetSelectors.length === 0 ) { + surveyMissCount += 1; + if ( + surveyCount >= 100 && + (surveyMissCount / surveyCount) >= stopAllRatio + ) { + stopAll(`too many misses in surveyor (${surveyMissCount}/${surveyCount})`); + } + return; + } + if ( styleSheetTimer !== undefined ) { return; } + styleSheetTimer = self.requestAnimationFrame(( ) => { + styleSheetTimer = undefined; + self.cssAPI.insert(`${styleSheetSelectors.join(',')}{display:none!important;}`); + styleSheetSelectors.length = 0; + }); +}; + +/******************************************************************************/ + +const uBOL_processChanges = mutations => { + for ( const mutation of mutations ) { + if ( mutation.type === 'childList' ) { + for ( const added of mutation.addedNodes ) { + if ( added.nodeType !== 1 ) { continue; } + if ( added.parentElement === null ) { continue; } + pendingNodes.add(added); + } + } else if ( mutation.attributeName === 'class' ) { + uBOL_classesFromNode(mutation.target); + } else { + uBOL_idFromNode(mutation.target); + } + } + if ( pendingNodes.hasNodes() === false ) { + if ( styleSheetSelectors.length === 0 ) { return; } + } + lastDomChange = Date.now(); + if ( processTimer !== undefined ) { return; } + processTimer = self.setTimeout(( ) => { + processTimer = undefined; + uBOL_processNodes(); + }, 64); +}; + +/******************************************************************************/ + +const stopAll = ( ) => { + if ( domChangeTimer !== undefined ) { + self.clearTimeout(domChangeTimer); + domChangeTimer = undefined; + } + domMutationObserver.disconnect(); + domMutationObserver.takeRecords(); + domMutationObserver = undefined; + genericSelectorMap.clear(); +}; + +/******************************************************************************/ + +if ( document.documentElement === null ) { return; } +pendingNodes.add(document.documentElement); +uBOL_processNodes(); + +let domMutationObserver = new MutationObserver(uBOL_processChanges); +domMutationObserver.observe(document, { + attributeFilter: [ 'class', 'id' ], + attributes: true, + childList: true, + subtree: true, +}); + +const needDomChangeObserver = ( ) => { + domChangeTimer = undefined; + if ( domMutationObserver === undefined ) { return; } + if ( (Date.now() - lastDomChange) > 20000 ) { + return stopAll('no more DOM changes'); + } + domChangeTimer = self.setTimeout(needDomChangeObserver, 20000); +}; + +needDomChangeObserver(); + +/******************************************************************************/ + +})(); + +/******************************************************************************/ diff --git a/platform/mv3/extension/js/scripting/css-procedural-api.js b/platform/mv3/extension/js/scripting/css-procedural-api.js new file mode 100644 index 0000000000000..256e427203aa5 --- /dev/null +++ b/platform/mv3/extension/js/scripting/css-procedural-api.js @@ -0,0 +1,813 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-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 +*/ + +// Important! +// Isolate from global scope +(function uBOL_cssProceduralAPI() { + +if ( self.ProceduralFiltererAPI !== undefined ) { + if ( self.ProceduralFiltererAPI instanceof Promise === false ) { return; } +} + +/******************************************************************************/ + +const nonVisualElements = { + head: true, + link: true, + meta: true, + script: true, + style: true, +}; + +const regexFromString = (s, exact = false) => { + if ( s === '' ) { return /^/; } + const match = /^\/(.+)\/([imu]*)$/.exec(s); + if ( match !== null ) { + return new RegExp(match[1], match[2] || undefined); + } + const reStr = s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + return new RegExp(exact ? `^${reStr}$` : reStr); +}; + +const randomToken = ( ) => { + const n = Math.random(); + return String.fromCharCode(n * 25 + 97) + + Math.floor( + (0.25 + n * 0.75) * Number.MAX_SAFE_INTEGER + ).toString(36).slice(-8); +}; + +/******************************************************************************/ + +// 'P' stands for 'Procedural' + +class PSelectorTask { + destructor() { + } + begin() { + } + end() { + } +} + +/******************************************************************************/ + +class PSelectorVoidTask extends PSelectorTask { + constructor(filterer, task) { + super(); + console.info(`uBO: :${task[0]}() operator does not exist`); + } + transpose() { + } +} + +/******************************************************************************/ + +class PSelectorHasTextTask extends PSelectorTask { + constructor(filterer, task) { + super(); + this.needle = regexFromString(task[1]); + } + transpose(node, output) { + if ( this.needle.test(node.textContent) ) { + output.push(node); + } + } +} + +/******************************************************************************/ + +class PSelectorIfTask extends PSelectorTask { + constructor(filterer, task) { + super(); + this.pselector = new PSelector(filterer, task[1]); + } + transpose(node, output) { + if ( this.pselector.test(node) === this.target ) { + output.push(node); + } + } + target = true; +} + +class PSelectorIfNotTask extends PSelectorIfTask { + target = false; +} + +/******************************************************************************/ + +class PSelectorMatchesAttrTask extends PSelectorTask { + constructor(filterer, task) { + super(); + this.reAttr = regexFromString(task[1].attr, true); + this.reValue = regexFromString(task[1].value, true); + } + transpose(node, output) { + if ( typeof node.getAttributeNames !== 'function' ) { return; } + const attrs = node.getAttributeNames(); + for ( const attr of attrs ) { + if ( this.reAttr.test(attr) === false ) { continue; } + if ( this.reValue.test(node.getAttribute(attr)) === false ) { continue; } + output.push(node); + } + } +} + +/******************************************************************************/ + +class PSelectorMatchesCSSTask extends PSelectorTask { + constructor(filterer, task) { + super(); + this.name = task[1].name; + this.pseudo = task[1].pseudo ? `::${task[1].pseudo}` : null; + let arg0 = task[1].value, arg1; + if ( Array.isArray(arg0) ) { + arg1 = arg0[1]; arg0 = arg0[0]; + } + this.value = new RegExp(arg0, arg1); + } + transpose(node, output) { + const style = window.getComputedStyle(node, this.pseudo); + if ( style !== null && this.value.test(style[this.name]) ) { + output.push(node); + } + } +} +class PSelectorMatchesCSSAfterTask extends PSelectorMatchesCSSTask { + constructor(filterer, task) { + super(filterer, task); + this.pseudo = '::after'; + } +} + +class PSelectorMatchesCSSBeforeTask extends PSelectorMatchesCSSTask { + constructor(filterer, task) { + super(filterer, task); + this.pseudo = '::before'; + } +} + +/******************************************************************************/ + +class PSelectorMatchesMediaTask extends PSelectorTask { + constructor(filterer, task) { + super(); + this.filterer = filterer; + this.mql = window.matchMedia(task[1]); + if ( this.mql.media === 'not all' ) { return; } + this.boundHandler = this.handler.bind(this); + this.mql.addEventListener('change', this.boundHandler); + } + destructor() { + super.destructor(); + this.mql.removeEventListener('change', this.boundHandler); + } + transpose(node, output) { + if ( this.mql.matches === false ) { return; } + output.push(node); + } + handler() { + if ( this.filterer instanceof Object === false ) { return; } + this.filterer.uBOL_DOMChanged(); + } +} + +/******************************************************************************/ + +class PSelectorMatchesPathTask extends PSelectorTask { + constructor(filterer, task) { + super(); + this.needle = regexFromString( + task[1].replace(/\P{ASCII}/gu, s => encodeURIComponent(s)) + ); + } + transpose(node, output) { + if ( this.needle.test(self.location.pathname + self.location.search) ) { + output.push(node); + } + } +} + +/******************************************************************************/ + +class PSelectorMatchesPropTask extends PSelectorTask { + constructor(filterer, task) { + super(); + this.props = task[1].attr.split('.'); + this.reValue = task[1].value !== '' + ? regexFromString(task[1].value, true) + : null; + } + transpose(node, output) { + let value = node; + for ( const prop of this.props ) { + if ( value === undefined ) { return; } + if ( value === null ) { return; } + value = value[prop]; + } + if ( this.reValue === null ) { + if ( value === undefined ) { return; } + } else if ( this.reValue.test(value) === false ) { + return; + } + output.push(node); + } +} + +/******************************************************************************/ + +class PSelectorMinTextLengthTask extends PSelectorTask { + constructor(filterer, task) { + super(); + this.min = task[1]; + } + transpose(node, output) { + if ( node.textContent.length >= this.min ) { + output.push(node); + } + } +} + +/******************************************************************************/ + +class PSelectorOthersTask extends PSelectorTask { + constructor() { + super(); + this.targets = new Set(); + } + begin() { + this.targets.clear(); + } + end(output) { + const toKeep = new Set(this.targets); + const toDiscard = new Set(); + const body = document.body; + const head = document.head; + let discard = null; + for ( let keep of this.targets ) { + while ( keep !== null && keep !== body && keep !== head ) { + toKeep.add(keep); + toDiscard.delete(keep); + discard = keep.previousElementSibling; + while ( discard !== null ) { + if ( nonVisualElements[discard.localName] !== true ) { + if ( toKeep.has(discard) === false ) { + toDiscard.add(discard); + } + } + discard = discard.previousElementSibling; + } + discard = keep.nextElementSibling; + while ( discard !== null ) { + if ( nonVisualElements[discard.localName] !== true ) { + if ( toKeep.has(discard) === false ) { + toDiscard.add(discard); + } + } + discard = discard.nextElementSibling; + } + keep = keep.parentElement; + } + } + for ( discard of toDiscard ) { + output.push(discard); + } + this.targets.clear(); + } + transpose(candidate) { + for ( const target of this.targets ) { + if ( target.contains(candidate) ) { return; } + if ( candidate.contains(target) ) { + this.targets.delete(target); + } + } + this.targets.add(candidate); + } +} + +/******************************************************************************/ + +class PSelectorShadowTask extends PSelectorTask { + constructor(filterer, task) { + super(); + this.selector = task[1]; + } + transpose(node, output) { + const root = this.openOrClosedShadowRoot(node); + if ( root === null ) { return; } + const nodes = root.querySelectorAll(this.selector); + output.push(...nodes); + } + get openOrClosedShadowRoot() { + if ( PSelectorShadowTask.openOrClosedShadowRoot !== undefined ) { + return PSelectorShadowTask.openOrClosedShadowRoot; + } + if ( typeof chrome === 'object' && chrome !== null ) { + if ( chrome.dom instanceof Object ) { + if ( typeof chrome.dom.openOrClosedShadowRoot === 'function' ) { + PSelectorShadowTask.openOrClosedShadowRoot = + chrome.dom.openOrClosedShadowRoot; + return PSelectorShadowTask.openOrClosedShadowRoot; + } + } + } + PSelectorShadowTask.openOrClosedShadowRoot = node => + node.openOrClosedShadowRoot || null; + return PSelectorShadowTask.openOrClosedShadowRoot; + } +} + +/******************************************************************************/ + +// https://github.com/AdguardTeam/ExtendedCss/issues/31#issuecomment-302391277 +// Prepend `:scope ` if needed. +class PSelectorSpathTask extends PSelectorTask { + constructor(filterer, task) { + super(); + this.spath = task[1]; + this.nth = /^(?:\s*[+~]|:)/.test(this.spath); + if ( this.nth ) { return; } + if ( /^\s*>/.test(this.spath) ) { + this.spath = `:scope ${this.spath.trim()}`; + } + } + transpose(node, output) { + const nodes = this.nth + ? PSelectorSpathTask.qsa(node, this.spath) + : node.querySelectorAll(this.spath); + for ( const node of nodes ) { + output.push(node); + } + } + // Helper method for other operators. + static qsa(node, selector) { + const parent = node.parentElement; + if ( parent === null ) { return []; } + let pos = 1; + for (;;) { + node = node.previousElementSibling; + if ( node === null ) { break; } + pos += 1; + } + return parent.querySelectorAll( + `:scope > :nth-child(${pos})${selector}` + ); + } +} + +/******************************************************************************/ + +class PSelectorUpwardTask extends PSelectorTask { + constructor(filterer, task) { + super(); + const arg = task[1]; + if ( typeof arg === 'number' ) { + this.i = arg; + } else { + this.s = arg; + } + } + transpose(node, output) { + if ( this.s !== '' ) { + const parent = node.parentElement; + if ( parent === null ) { return; } + node = parent.closest(this.s); + if ( node === null ) { return; } + } else { + let nth = this.i; + for (;;) { + node = node.parentElement; + if ( node === null ) { return; } + nth -= 1; + if ( nth === 0 ) { break; } + } + } + output.push(node); + } + i = 0; + s = ''; +} + +/******************************************************************************/ + +class PSelectorWatchAttrs extends PSelectorTask { + constructor(filterer, task) { + super(); + this.filterer = filterer; + this.observer = null; + this.observed = new WeakSet(); + this.observerOptions = { + attributes: true, + subtree: true, + }; + const attrs = task[1]; + if ( Array.isArray(attrs) && attrs.length !== 0 ) { + this.observerOptions.attributeFilter = task[1]; + } + } + destructor() { + super.destructor(); + if ( this.observer ) { + this.observer.takeRecords(); + this.observer.disconnect(); + this.observer = null; + } + } + transpose(node, output) { + output.push(node); + if ( this.filterer instanceof Object === false ) { return; } + if ( this.observed.has(node) ) { return; } + if ( this.observer === null ) { + this.observer = new MutationObserver(( ) => { + this.filterer.uBOL_DOMChanged(); + }); + } + this.observer.observe(node, this.observerOptions); + this.observed.add(node); + } +} + +/******************************************************************************/ + +class PSelectorXpathTask extends PSelectorTask { + constructor(filterer, task) { + super(); + this.xpe = document.createExpression(task[1], null); + this.xpr = null; + } + transpose(node, output) { + this.xpr = this.xpe.evaluate( + node, + XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, + this.xpr + ); + let j = this.xpr.snapshotLength; + while ( j-- ) { + const node = this.xpr.snapshotItem(j); + if ( node.nodeType === 1 ) { + output.push(node); + } + } + } +} + +/******************************************************************************/ + +class PSelector { + constructor(filterer, o) { + this.selector = o.selector; + this.tasks = []; + const tasks = []; + if ( Array.isArray(o.tasks) === false ) { return; } + for ( const task of o.tasks ) { + const ctor = PSelector.operatorToTaskMap.get(task[0]) || PSelectorVoidTask; + tasks.push(new ctor(filterer, task)); + } + this.tasks = tasks; + } + destructor() { + for ( const task of this.tasks ) { + task.destructor(); + } + } + prime(input) { + const root = input || document; + if ( this.selector === '' ) { return [ root ]; } + if ( input !== document ) { + const c0 = this.selector.charCodeAt(0); + if ( c0 === 0x2B /* + */ || c0 === 0x7E /* ~ */ ) { + return Array.from(PSelectorSpathTask.qsa(input, this.selector)); + } else if ( c0 === 0x3E /* > */ ) { + return Array.from(input.querySelectorAll(`:scope ${this.selector}`)); + } + } + return Array.from(root.querySelectorAll(this.selector)); + } + exec(input) { + let nodes = this.prime(input); + for ( const task of this.tasks ) { + if ( nodes.length === 0 ) { break; } + const transposed = []; + task.begin(); + for ( const node of nodes ) { + task.transpose(node, transposed); + } + task.end(transposed); + nodes = transposed; + } + return nodes; + } + test(input) { + const nodes = this.prime(input); + for ( const node of nodes ) { + let output = [ node ]; + for ( const task of this.tasks ) { + const transposed = []; + task.begin(); + for ( const node of output ) { + task.transpose(node, transposed); + } + task.end(transposed); + output = transposed; + if ( output.length === 0 ) { break; } + } + if ( output.length !== 0 ) { return true; } + } + return false; + } + static operatorToTaskMap = new Map([ + [ 'has', PSelectorIfTask ], + [ 'has-text', PSelectorHasTextTask ], + [ 'if', PSelectorIfTask ], + [ 'if-not', PSelectorIfNotTask ], + [ 'matches-attr', PSelectorMatchesAttrTask ], + [ 'matches-css', PSelectorMatchesCSSTask ], + [ 'matches-css-after', PSelectorMatchesCSSAfterTask ], + [ 'matches-css-before', PSelectorMatchesCSSBeforeTask ], + [ 'matches-media', PSelectorMatchesMediaTask ], + [ 'matches-path', PSelectorMatchesPathTask ], + [ 'matches-prop', PSelectorMatchesPropTask ], + [ 'min-text-length', PSelectorMinTextLengthTask ], + [ 'not', PSelectorIfNotTask ], + [ 'others', PSelectorOthersTask ], + [ 'shadow', PSelectorShadowTask ], + [ 'spath', PSelectorSpathTask ], + [ 'upward', PSelectorUpwardTask ], + [ 'watch-attr', PSelectorWatchAttrs ], + [ 'xpath', PSelectorXpathTask ], + ]); +} + +/******************************************************************************/ + +class PSelectorRoot extends PSelector { + constructor(filterer, o) { + super(filterer, o); + this.budget = 200; // I arbitrary picked a 1/5 second + this.raw = o.raw; + this.cost = 0; + this.lastAllowanceTime = 0; + this.action = o.action; + } + prime(input) { + try { + return super.prime(input); + } catch { + } + return []; + } + exec(input) { + try { + return super.exec(input); + } catch { + } + return []; + } +} + +/******************************************************************************/ + +class ProceduralFilterer { + constructor() { + this.selectors = []; + this.styleTokenMap = new Map(); + this.styledNodes = new Set(); + this.timer = undefined; + this.hideStyle = 'display:none!important;'; + } + + async reset() { + if ( this.timer ) { + self.cancelAnimationFrame(this.timer); + this.timer = undefined; + } + for ( const pselector of this.selectors.values() ) { + pselector.destructor(); + } + this.selectors.length = 0; + const promises = []; + for ( const [ style, token ] of this.styleTokenMap ) { + for ( const elem of this.styledNodes ) { + elem.removeAttribute(token); + } + const css = `[${token}]\n{${style}}\n`; + promises.push( + chrome.runtime.sendMessage({ what: 'removeCSS', css }).catch(( ) => { }) + ); + } + this.styleTokenMap.clear(); + this.styledNodes.clear(); + return Promise.all(promises); + } + + addSelectors(selectors) { + for ( const selector of selectors ) { + const pselector = new PSelectorRoot(this, selector); + this.primeProceduralSelector(pselector); + this.selectors.push(pselector); + } + } + + // This allows to perform potentially expensive initialization steps + // before the filters are ready to be applied. + primeProceduralSelector(pselector) { + if ( pselector.action === undefined ) { + this.styleTokenFromStyle(this.hideStyle); + } else if ( pselector.action[0] === 'style' ) { + this.styleTokenFromStyle(pselector.action[1]); + } + return pselector; + } + + uBOL_commit() { + if ( this.timer !== undefined ) { + self.cancelAnimationFrame(this.timer); + this.timer = undefined; + } + + // https://github.com/uBlockOrigin/uBlock-issues/issues/341 + // Be ready to unhide nodes which no longer matches any of + // the procedural selectors. + const toUnstyle = this.styledNodes; + this.styledNodes = new Set(); + + let t0 = Date.now(); + + for ( const pselector of this.selectors.values() ) { + const allowance = Math.floor((t0 - pselector.lastAllowanceTime) / 2000); + if ( allowance >= 1 ) { + pselector.budget += allowance * 50; + if ( pselector.budget > 200 ) { pselector.budget = 200; } + pselector.lastAllowanceTime = t0; + } + if ( pselector.budget <= 0 ) { continue; } + const nodes = pselector.exec(); + const t1 = Date.now(); + pselector.budget += t0 - t1; + if ( pselector.budget < -500 ) { + console.info('uBOL: disabling %s', pselector.raw); + pselector.budget = -0x7FFFFFFF; + } + t0 = t1; + if ( nodes.length === 0 ) { continue; } + this.processNodes(nodes, pselector.action); + } + + this.unprocessNodes(toUnstyle); + } + + styleTokenFromStyle(style) { + if ( style === undefined ) { return; } + let styleToken = this.styleTokenMap.get(style); + if ( styleToken !== undefined ) { return styleToken; } + styleToken = randomToken(); + this.styleTokenMap.set(style, styleToken); + self.cssAPI.insert(`[${styleToken}]\n{${style}}\n`); + return styleToken; + } + + processNodes(nodes, action) { + const op = action && action[0] || ''; + const arg = op !== '' ? action[1] : ''; + switch ( op ) { + case '': + /* fall through */ + case 'style': { + const styleToken = this.styleTokenFromStyle( + arg === '' ? this.hideStyle : arg + ); + for ( const node of nodes ) { + node.setAttribute(styleToken, ''); + this.styledNodes.add(node); + } + break; + } + case 'remove': { + for ( const node of nodes ) { + node.remove(); + node.textContent = ''; + } + break; + } + case 'remove-attr': { + const reAttr = regexFromString(arg, true); + for ( const node of nodes ) { + for ( const name of node.getAttributeNames() ) { + if ( reAttr.test(name) === false ) { continue; } + node.removeAttribute(name); + } + } + break; + } + case 'remove-class': { + const reClass = regexFromString(arg, true); + for ( const node of nodes ) { + const cl = node.classList; + for ( const name of cl.values() ) { + if ( reClass.test(name) === false ) { continue; } + cl.remove(name); + } + } + break; + } + default: + break; + } + } + + unprocessNodes(nodes) { + const tokens = Array.from(this.styleTokenMap.values()); + for ( const node of nodes ) { + if ( this.styledNodes.has(node) ) { continue; } + for ( const token of tokens ) { + node.removeAttribute(token); + } + } + } + + uBOL_DOMChanged() { + if ( this.timer !== undefined ) { return; } + this.timer = self.requestAnimationFrame(( ) => { + this.timer = undefined; + this.uBOL_commit(); + }); + } +} + +/******************************************************************************/ + +self.ProceduralFiltererAPI = class { + constructor() { + this.proceduralFilterer = null; + this.domObserver = null; + } + + async reset() { + if ( this.domObserver ) { + this.domObserver.takeRecords(); + this.domObserver.disconnect(); + this.domObserver = null; + } + if ( this.proceduralFilterer ) { + await this.proceduralFilterer.reset(); + this.proceduralFilterer = null; + } + } + + addSelectors(selectors) { + if ( this.proceduralFilterer === null ) { + this.proceduralFilterer = new ProceduralFilterer(); + } + if ( this.domObserver === null ) { + this.domObserver = new MutationObserver(mutations => { + this.onDOMChanged(mutations); + }); + this.domObserver.observe(document, { childList: true, subtree: true }); + } + this.proceduralFilterer.addSelectors(selectors); + this.proceduralFilterer.uBOL_commit(); + } + + qsa(selector) { + const o = JSON.parse(selector); + const pselector = new PSelectorRoot(null, o); + return pselector.exec(); + } + + onDOMChanged(mutations) { + for ( const mutation of mutations ) { + for ( const added of mutation.addedNodes ) { + if ( added.nodeType !== 1 ) { continue; } + return this.proceduralFilterer.uBOL_DOMChanged(); + } + for ( const removed of mutation.removedNodes ) { + if ( removed.nodeType !== 1 ) { continue; } + return this.proceduralFilterer.uBOL_DOMChanged(); + } + } + } +}; + +/******************************************************************************/ + +})(); + +void 0; diff --git a/platform/mv3/extension/js/scripting/css-procedural.js b/platform/mv3/extension/js/scripting/css-procedural.js new file mode 100644 index 0000000000000..0a7769d939cde --- /dev/null +++ b/platform/mv3/extension/js/scripting/css-procedural.js @@ -0,0 +1,105 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-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 +*/ + +// Important! +// Isolate from global scope +(async function uBOL_cssProcedural() { + +/******************************************************************************/ + +const proceduralImports = self.proceduralImports || []; +self.proceduralImports = undefined; + +/******************************************************************************/ + +const selectors = await self.cosmeticAPI.getSelectors('procedural', proceduralImports); +self.cosmeticAPI.release(); +if ( selectors.length === 0 ) { return; } + +proceduralImports.length = 0; + +const declaratives = selectors.filter(a => a.cssable); +if ( declaratives.length !== 0 ) { + const cssRuleFromProcedural = details => { + const { tasks, action } = details; + let mq, selector; + if ( Array.isArray(tasks) ) { + if ( tasks[0][0] !== 'matches-media' ) { return; } + mq = tasks[0][1]; + if ( tasks.length > 2 ) { return; } + if ( tasks.length === 2 ) { + if ( tasks[1][0] !== 'spath' ) { return; } + selector = tasks[1][1]; + } + } + let style; + if ( Array.isArray(action) ) { + if ( action[0] !== 'style' ) { return; } + selector = selector || details.selector; + style = action[1]; + } + if ( mq === undefined && style === undefined && selector === undefined ) { return; } + if ( mq === undefined ) { + return `${selector}\n{${style}}`; + } + if ( style === undefined ) { + return `@media ${mq} {\n${selector}\n{display:none!important;}\n}`; + } + return `@media ${mq} {\n${selector}\n{${style}}\n}`; + }; + const sheetText = []; + for ( const details of declaratives ) { + const ruleText = cssRuleFromProcedural(details); + if ( ruleText === undefined ) { continue; } + sheetText.push(ruleText); + } + if ( sheetText.length !== 0 ) { + self.cssAPI.insert(sheetText.join('\n')); + } +} + +const procedurals = selectors.filter(a => a.cssable === undefined); +if ( procedurals.length !== 0 ) { + const addSelectors = selectors => { + if ( self.listsProceduralFiltererAPI instanceof Object === false ) { return; } + self.listsProceduralFiltererAPI.addSelectors(selectors); + }; + if ( self.ProceduralFiltererAPI === undefined ) { + self.ProceduralFiltererAPI = chrome.runtime.sendMessage({ + what: 'injectCSSProceduralAPI' + }).catch(( ) => { + }); + } + if ( self.ProceduralFiltererAPI instanceof Promise ) { + self.ProceduralFiltererAPI.then(( ) => { + self.listsProceduralFiltererAPI = new self.ProceduralFiltererAPI(); + addSelectors(procedurals); + }); + } else { + addSelectors(procedurals); + } +} + +/******************************************************************************/ + +})(); + +void 0; diff --git a/platform/mv3/extension/js/scripting/css-specific.js b/platform/mv3/extension/js/scripting/css-specific.js new file mode 100644 index 0000000000000..10de503f9bac7 --- /dev/null +++ b/platform/mv3/extension/js/scripting/css-specific.js @@ -0,0 +1,42 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2019-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 +*/ + +// Important! +// Isolate from global scope +(async function uBOL_cssSpecific() { + +/******************************************************************************/ + +const specificImports = self.specificImports || []; +self.specificImports = undefined; + +/******************************************************************************/ + +const selectors = await self.cosmeticAPI.getSelectors('specific', specificImports); +self.cosmeticAPI.release(); +if ( selectors.length === 0 ) { return; } +self.cssAPI.insert(`${selectors.join(',\n')}{display:none!important;}`); + +/******************************************************************************/ + +})(); + +void 0; diff --git a/platform/mv3/extension/js/scripting/css-user-terminate.js b/platform/mv3/extension/js/scripting/css-user-terminate.js new file mode 100644 index 0000000000000..6e63eb9343d26 --- /dev/null +++ b/platform/mv3/extension/js/scripting/css-user-terminate.js @@ -0,0 +1,45 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2019-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 +*/ + +(function uBOL_cssUserTerminate() { + +/******************************************************************************/ + +const plainSelectors = self.customFilters?.plainSelectors; +if ( plainSelectors ) { + chrome.runtime.sendMessage({ + what: 'removeCSS', + css: `${plainSelectors.join(',\n')}{display:none!important;}`, + }).catch(( ) => { + }); +} + +if ( self.customProceduralFiltererAPI instanceof Object ) { + self.customProceduralFiltererAPI.reset(); +} + +self.customFilters = undefined; + +/******************************************************************************/ + +})(); + +void 0; diff --git a/platform/mv3/extension/js/scripting/css-user.js b/platform/mv3/extension/js/scripting/css-user.js new file mode 100644 index 0000000000000..04a8ddcec0290 --- /dev/null +++ b/platform/mv3/extension/js/scripting/css-user.js @@ -0,0 +1,48 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2019-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 +*/ + +(async function uBOL_cssUser() { + +/******************************************************************************/ + +const docURL = new URL(document.baseURI); +const details = await chrome.runtime.sendMessage({ + what: 'injectCustomFilters', + hostname: docURL.hostname, +}).catch(( ) => { +}); + +if ( details?.proceduralSelectors?.length ) { + if ( self.ProceduralFiltererAPI ) { + self.customProceduralFiltererAPI = new self.ProceduralFiltererAPI(); + self.customProceduralFiltererAPI.addSelectors( + details.proceduralSelectors.map(a => JSON.parse(a)) + ); + } +} + +self.customFilters = details; + +/******************************************************************************/ + +})(); + +void 0; diff --git a/platform/mv3/extension/js/scripting/isolated-api.js b/platform/mv3/extension/js/scripting/isolated-api.js new file mode 100644 index 0000000000000..774517268ca78 --- /dev/null +++ b/platform/mv3/extension/js/scripting/isolated-api.js @@ -0,0 +1,234 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2022-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/ + +*/ + +/******************************************************************************/ + +(api => { + if ( typeof api === 'object' ) { return; } + + const isolatedAPI = self.isolatedAPI = {}; + + const hostnameStack = (( ) => { + const docloc = document.location; + const origins = [ docloc.origin ]; + if ( docloc.ancestorOrigins ) { + origins.push(...docloc.ancestorOrigins); + } + return origins.map((origin, i) => { + const beg = origin.lastIndexOf('://'); + if ( beg === -1 ) { return; } + const hn1 = origin.slice(beg+3) + const end = hn1.indexOf(':'); + const hn2 = end === -1 ? hn1 : hn1.slice(0, end); + return { hnparts: hn2.split('.'), i }; + }).filter(a => a !== undefined); + })(); + + isolatedAPI.topHostname = hostnameStack.at(-1)?.hnparts.join('.') ?? ''; + + const forEachHostname = (entry, callback, details) => { + const hnparts = entry.hnparts; + const hnpartslen = hnparts.length; + if ( hnpartslen === 0 ) { return; } + for ( let i = 0; i < hnpartslen; i++ ) { + const r = callback(`${hnparts.slice(i).join('.')}`, details); + if ( r !== undefined ) { return r; } + } + if ( details?.hasEntities !== true ) { return; } + const n = hnpartslen - 1; + for ( let i = 0; i < n; i++ ) { + for ( let j = n; j > i; j-- ) { + const r = callback(`${hnparts.slice(i,j).join('.')}.*`, details); + if ( r !== undefined ) { return r; } + } + } + }; + + isolatedAPI.forEachHostname = (callback, details) => { + if ( hostnameStack.length === 0 ) { return; } + return forEachHostname(hostnameStack[0], callback, details); + }; + + isolatedAPI.forEachHostnameAncestors = (callback, details) => { + for ( const entry of hostnameStack ) { + if ( entry.i === 0 ) { continue; } + const r = forEachHostname(entry, callback, details); + if ( r !== undefined ) { return r; } + } + }; + +})(self.isolatedAPI); + + +(api => { + if ( typeof api === 'object' ) { return; } + + const cosmeticAPI = self.cosmeticAPI = {}; + const { isolatedAPI } = self; + const { topHostname } = isolatedAPI; + const thisHostname = document.location.hostname || ''; + + const sessionRead = async function(key) { + try { + const bin = await chrome.storage.session.get(key); + return bin?.[key] ?? undefined; + } catch { + } + }; + + const sessionWrite = function(key, data) { + try { + chrome.storage.session.set({ [key]: data }); + } catch { + } + }; + + const localRead = async function(key) { + try { + const bin = await chrome.storage.local.get(key); + return bin?.[key] ?? undefined; + } catch { + } + }; + + const binarySearch = (sorted, target) => { + let l = 0, i = 0, d = 0; + let r = sorted.length; + let candidate; + while ( l < r ) { + i = l + r >>> 1; + candidate = sorted[i]; + d = target.length - candidate.length; + if ( d === 0 ) { + if ( target === candidate ) { return i; } + d = target < candidate ? -1 : 1; + } + if ( d < 0 ) { + r = i; + } else { + l = i + 1; + } + } + return -1; + }; + + const selectorsFromListIndex = (data, ilist) => { + const list = JSON.parse(`[${data.selectorLists[ilist]}]`); + const { result } = data; + for ( const iselector of list ) { + if ( iselector >= 0 ) { + result.selectors.add(data.selectors[iselector]); + } else { + result.exceptions.add(data.selectors[~iselector]); + } + } + }; + + const lookupHostname = (hostname, data) => { + const listref = binarySearch(data.hostnames, hostname); + if ( listref !== -1 ) { + selectorsFromListIndex(data, data.selectorListRefs[listref]); + } + const { fromRegexes } = data; + for ( let i = 0, n = fromRegexes.length; i < n; i += 3 ) { + if ( hostname.includes(fromRegexes[i+0]) === false ) { continue; } + if ( typeof fromRegexes[i+1] === 'string' ) { + fromRegexes[i+1] = new RegExp(fromRegexes[i+1]); + } + if ( fromRegexes[i+1].test(hostname) === false ) { continue; } + selectorsFromListIndex(data, fromRegexes[i+2]); + } + }; + + const selectorsFromRuleset = async (realm, rulesetId, result) => { + const data = await localRead(`css.${realm}.${rulesetId}`); + if ( typeof data !== 'object' || data === null ) { return; } + data.result = result; + isolatedAPI.forEachHostname(lookupHostname, data); + }; + + const fillCache = async function(realm, rulesetIds) { + const selectors = new Set(); + const exceptions = new Set(); + const result = { selectors, exceptions }; + const [ filteringModeDetails ] = await Promise.all([ + localRead('filteringModeDetails'), + ...rulesetIds.map(a => selectorsFromRuleset(realm, a, result)), + ]); + const skip = filteringModeDetails?.none.some(a => { + if ( topHostname.endsWith(a) === false ) { return false; } + const n = a.length; + return topHostname.length === n || topHostname.at(-n-1) === '.'; + }); + for ( const selector of exceptions ) { + selectors.delete(selector); + } + if ( skip ) { + selectors.clear(); + } + cacheEntry[realm.charAt(0)] = Array.from(selectors).map(a => + a.startsWith('{') ? JSON.parse(a) : a + ); + }; + + const readCache = async ( ) => { + cacheEntry = await sessionRead(cacheKey) || {}; + }; + + const cacheKey = + `cache.css.${thisHostname || ''}${topHostname !== thisHostname ? `/${topHostname}` : ''}`; + let clientCount = 0; + let cacheEntry; + + cosmeticAPI.getSelectors = async function(realm, rulesetIds) { + clientCount += 1; + const slot = realm.charAt(0); + if ( cacheEntry === undefined ) { + cacheEntry = readCache(); + } + if ( cacheEntry instanceof Promise ) { + await cacheEntry; + } + if ( cacheEntry[slot] === undefined ) { + cacheEntry[slot] = fillCache(realm, rulesetIds); + } + if ( cacheEntry[slot] instanceof Promise ) { + await cacheEntry[slot]; + } + return cacheEntry[slot]; + }; + + cosmeticAPI.release = function() { + clientCount -= 1; + if ( clientCount !== 0 ) { return; } + self.cosmeticAPI = undefined; + const now = Math.round(Date.now() / 15000); + const since = now - (cacheEntry.t || 0); + if ( since <= 1 ) { return; } + cacheEntry.t = now; + sessionWrite(cacheKey, cacheEntry); + }; +})(self.cosmeticAPI); + +/******************************************************************************/ + +void 0; \ No newline at end of file diff --git a/platform/mv3/extension/js/scripting/picker.js b/platform/mv3/extension/js/scripting/picker.js new file mode 100644 index 0000000000000..60df48b0ecf42 --- /dev/null +++ b/platform/mv3/extension/js/scripting/picker.js @@ -0,0 +1,303 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant 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 +*/ + +(async ( ) => { + +/******************************************************************************/ + +const ubolOverlay = self.ubolOverlay; +if ( ubolOverlay === undefined ) { return; } +if ( ubolOverlay.file === '/picker-ui.html' ) { return; } + +/******************************************************************************/ + +function attributeNameFromPart(part) { + const pos = part.search(/\^?=/); + return part.slice(1, pos); +} + +function selectorFromAddresses(partsDB, addresses) { + const selector = []; + let majorLast = -1; + for ( const address of addresses ) { + const major = address >>> 12; + if ( majorLast !== -1 ) { + const delta = majorLast - major; + if ( delta > 1 ) { + selector.push(' '); + } else if ( delta === 1 ) { + selector.push(' > '); + } + } + majorLast = major; + const part = partsDB.get(address); + selector.push( + (address & 0xF) === 3 + ? `[${attributeNameFromPart(part)}]` + : part + ); + } + return selector.join(''); +} + +/******************************************************************************* + * + * Selector part address: + * 0b00000000_00000000_0000 + * | | | + * | | +-- 4-bit: Descriptor + * | +------- 8-bit: Part index + * +---------------- 8-bit: List index + * Descriptor: + * - 0: tag name + * - 1: id + * - 2: class + * - 3: attribute + * - 4: :nth-of-type + * List index: 0 is deepest + * + * Selector part addresses are used to reference parts in associated database. + * + * */ + +function candidatesAtPoint(x, y) { + // We need at least one element. + let elem = null; + if ( typeof x === 'number' ) { + elem = ubolOverlay.elementFromPoint(x, y); + } else if ( x instanceof HTMLElement ) { + elem = x; + x = undefined; + } + + const partsDB = new Map(); + const listParts = []; + while ( elem && elem !== document.body ) { + const tagName = elem.localName; + const addressMajor = listParts.length << 12; + partsDB.set(addressMajor, CSS.escape(tagName)); + const parts = [ addressMajor ]; + // Id + if ( typeof elem.id === 'string' && elem.id !== '' ) { + const address = addressMajor | parts.length << 4 | 1; + partsDB.set(address, `#${CSS.escape(elem.id)}`); + parts.push(address); + } + // Classes + for ( const name of elem.classList.values() ) { + const address = addressMajor | parts.length << 4 | 2; + partsDB.set(address, `.${CSS.escape(name)}`); + parts.push(address); + } + // Attributes + for ( const name of elem.getAttributeNames() ) { + if ( name === 'id' || name === 'class' ) { continue; } + if ( excludedAttributeExpansion.includes(name) ) { + const address = addressMajor | parts.length << 4 | 3; + partsDB.set(address, `[${CSS.escape(name)}]`); + parts.push(address); + continue; + } + let value = elem.getAttribute(name); + const pos = value.search(/[\n\r]/); + if ( pos !== -1 ) { + value = value.slice(0, pos); + } + const address = addressMajor | parts.length << 4 | 3; + partsDB.set(address, `[${CSS.escape(name)}="${value}"]`); + parts.push(address); + } + // https://github.com/chrisaljoudi/uBlock/issues/637 + // If the selector is still ambiguous at this point, further narrow + // using `:nth-of-type`. + const parentNode = elem.parentNode; + if ( ubolOverlay.qsa(parentNode, `:scope > ${selectorFromAddresses(partsDB, parts)}`).length > 1 ) { + let i = 1; + while ( elem.previousSibling !== null ) { + elem = elem.previousSibling; + if ( typeof elem.localName !== 'string' ) { continue; } + if ( elem.localName !== tagName ) { continue; } + i++; + } + const address = addressMajor | parts.length << 4 | 4; + partsDB.set(address, `:nth-of-type(${i})`); + parts.push(address); + } + listParts.push(parts); + elem = elem.parentElement; + } + if ( listParts.length === 0 ) { return; } + + const sliderCandidates = []; + for ( let i = 0, n = listParts.length; i < n; i++ ) { + sliderCandidates.push(listParts[i]); + for ( let j = i + 1; j < n; j++ ) { + sliderCandidates.push([ + ...listParts[j], + ...sliderCandidates.at(-1), + ]); + } + } + const sliderMap = new Map(); + for ( const candidates of sliderCandidates ) { + if ( candidates.some(a => (a & 0xF) === 1) ) { + const selectorPath = candidates.filter(a => (a & 0xF) === 1); + sliderMap.set(JSON.stringify(selectorPath), 0); + } else if ( candidates.some(a => (a & 0xF) === 4) ) { + const selectorPath = candidates.filter(a => { + return a &= 0xF, a === 0 || a === 4; + }); + sliderMap.set(JSON.stringify(selectorPath), 0); + } + if ( candidates.some(a => (a & 0xF) === 2) ) { + const selectorPath = candidates.filter(a => { + return a &= 0xF, a === 0 || a === 2; + }); + sliderMap.set(JSON.stringify(selectorPath), 0); + } + const selectorPath = candidates.filter(a => { + return a &= 0xF, a === 0 || a === 3; + }); + sliderMap.set(JSON.stringify(selectorPath), 0); + } + sliderMap.delete('[]'); + const elemToIdMap = new Map(); + const resultSetMap = new Map(); + let elemId = 1; + for ( const json of sliderMap.keys() ) { + const addresses = JSON.parse(json); + const selector = selectorFromAddresses(partsDB, addresses); + if ( excludedSelectors.includes(selector) ) { continue; } + const elems = ubolOverlay.qsa(document, selector); + if ( elems.length === 0 ) { continue; } + const resultSet = []; + for ( const elem of elems ) { + if ( elemToIdMap.has(elem) === false ) { + elemToIdMap.set(elem, elemId++); + } + resultSet.push(elemToIdMap.get(elem)); + } + const resultSetKey = JSON.stringify(resultSet.sort()); + const current = resultSetMap.get(resultSetKey); + if ( current ) { + if ( current.length < addresses.length ) { continue; } + if ( current.length === addresses.length ) { + if ( addresses.some(a => (a & 0xF) === 2) === false ) { + if ( current.some(a => (a & 0xF) === 2) ) { continue; } + } + } + } + resultSetMap.set(resultSetKey, addresses); + } + const sliderParts = Array.from(resultSetMap).toSorted((a, b) => { + let amajor = a[1].at(-1) >>> 12; + let bmajor = b[1].at(-1) >>> 12; + if ( amajor !== bmajor ) { return bmajor - amajor; } + amajor = a[1].at(0) >>> 12; + bmajor = b[1].at(0) >>> 12; + if ( amajor !== bmajor ) { return bmajor - amajor; } + if ( a[0].length !== b[0].length ) { + return b[0].length - a[0].length; + } + return b[1].length - a[1].length; + }).map(a => a[1]); + return { + partsDB: Array.from(partsDB), + listParts, + sliderParts, + }; +} + +const excludedAttributeExpansion = [ + 'sizes', + 'srcset', +]; +const excludedSelectors = [ + 'div', + 'span', +]; + +/******************************************************************************/ + +async function previewSelector(selector) { + if ( selector === previewedSelector ) { return; } + if ( previewedSelector !== '' ) { + if ( previewedSelector.startsWith('{') ) { + if ( self.pickerProceduralFilteringAPI ) { + await self.pickerProceduralFilteringAPI.reset(); + } + } + if ( previewedCSS !== '' ) { + await ubolOverlay.sendMessage({ what: 'removeCSS', css: previewedCSS }); + previewedCSS = ''; + } + } + previewedSelector = selector || ''; + if ( selector === '' ) { return; } + if ( selector.startsWith('{') ) { + if ( self.ProceduralFiltererAPI === undefined ) { return; } + if ( self.pickerProceduralFilteringAPI === undefined ) { + self.pickerProceduralFilteringAPI = new self.ProceduralFiltererAPI(); + } + self.pickerProceduralFilteringAPI.addSelectors([ JSON.parse(selector) ]); + return; + } + previewedCSS = `${selector}{display:none!important;}`; + await ubolOverlay.sendMessage({ what: 'insertCSS', css: previewedCSS }); +} + +let previewedSelector = ''; +let previewedCSS = ''; + +/******************************************************************************/ + +const previewProceduralFiltererAPI = new self.ProceduralFiltererAPI(); + +/******************************************************************************/ + +function onMessage(msg) { + switch ( msg.what ) { + case 'quitTool': + previewProceduralFiltererAPI.reset(); + break; + case 'startCustomFilters': + return ubolOverlay.sendMessage({ what: 'startCustomFilters' }); + case 'terminateCustomFilters': + return ubolOverlay.sendMessage({ what: 'terminateCustomFilters' }); + case 'candidatesAtPoint': + return candidatesAtPoint(msg.mx, msg.my, msg.broad); + case 'previewSelector': + return previewSelector(msg.selector); + default: + break; + } +} + +/******************************************************************************/ + +await ubolOverlay.install('/picker-ui.html', onMessage); + +/******************************************************************************/ + +})(); + + +void 0; diff --git a/platform/mv3/extension/js/scripting/tool-overlay.js b/platform/mv3/extension/js/scripting/tool-overlay.js new file mode 100644 index 0000000000000..39d14cc632c38 --- /dev/null +++ b/platform/mv3/extension/js/scripting/tool-overlay.js @@ -0,0 +1,367 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant 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 +*/ + +(function uBOLOverlay() { + +/******************************************************************************/ + +if ( self.ubolOverlay ) { + self.ubolOverlay.stop(); + self.ubolOverlay = undefined; +} + +self.ubolOverlay = { + file: '', + webext: typeof browser === 'object' ? browser : chrome, + url: new URL(document.baseURI), + port: null, + highlightedElements: [], + secretAttr: (( ) => { + let secret = String.fromCharCode((Math.random() * 26) + 97); + do { + secret += (Math.floor(Math.random() * 2147483647) + 2147483647) + .toString(36) + .slice(2); + } while ( secret.length < 8 ); + return secret; + })(), + + start() { + const cssStyle = [ + 'background: transparent', + 'border: 0', + 'border-radius: 0', + 'box-shadow: none', + 'color-scheme: light dark', + 'display: block', + 'filter: none', + 'height: 100vh', + ' height: 100svh', + 'left: 0', + 'margin: 0', + 'max-height: none', + 'max-width: none', + 'min-height: unset', + 'min-width: unset', + 'opacity: 1', + 'outline: 0', + 'padding: 0', + 'pointer-events: auto', + 'position: fixed', + 'top: 0', + 'transform: none', + 'visibility: hidden', + 'width: 100%', + 'z-index: 2147483647', + '' + ].join(' !important;\n'); + this.pickerCSS = [ + `:root > [${this.secretAttr}] { ${cssStyle} }`, + `:root > [${this.secretAttr}-loaded] { visibility: visible !important; }`, + `:root > [${this.secretAttr}-click] { pointer-events: none !important; }`, + ].join('\n'); + this.sendMessage({ what: 'insertCSS', css: this.pickerCSS }); + self.addEventListener('scroll', this.onViewportChanged, { passive: true }); + self.addEventListener('resize', this.onViewportChanged, { passive: true }); + self.addEventListener('keydown', this.onKeyPressed, true); + }, + + stop() { + if ( this.pickerCSS ) { + this.sendMessage({ what: 'removeCSS', css: this.pickerCSS }); + this.pickerCSS = undefined; + } + self.removeEventListener('scroll', this.onViewportChanged, { passive: true }); + self.removeEventListener('resize', this.onViewportChanged, { passive: true }); + self.removeEventListener('keydown', this.onKeyPressed, true); + if ( this.frame ) { + this.frame.remove(); + this.frame = null; + } + if ( this.port ) { + this.port.close(); + this.port.onmessage = null; + this.port.onmessageerror = null; + this.port = null; + } + this.onmessage = null; + self.ubolOverlay = undefined; + }, + + onViewportChanged() { + self.ubolOverlay.highlightUpdate(); + }, + + onKeyPressed(ev) { + if ( ev.key !== 'Escape' && ev.which !== 27 ) { return; } + ev.stopPropagation(); + ev.preventDefault(); + if ( self.ubolOverlay.onmessage ) { + self.ubolOverlay.onmessage({ what: 'quitTool' }); + } + }, + + sendMessage(msg) { + try { + return this.webext.runtime.sendMessage(msg).catch(( ) => { }); + } catch { + } + }, + + onMessage(wrapped) { + // Response to script-initiated message? + if ( typeof wrapped?.fromScriptId === 'number' ) { + const resolve = this.pendingMessages.get(wrapped.fromScriptId); + if ( resolve ) { + this.pendingMessages.delete(wrapped.fromScriptId); + resolve(wrapped.msg); + } + return; + } + const onmessage = this.onmessage; + const msg = wrapped.msg || wrapped; + let response; + switch ( msg.what ) { + case 'startTool': + this.start(); + break; + case 'quitTool': + this.stop(); + break; + case 'highlightElementAtPoint': + this.highlightElementAtPoint(msg.mx, msg.my); + break; + case 'highlightFromSelector': { + const { elems, error } = this.elementsFromSelector(msg.selector); + this.highlightElements(elems); + if ( msg.scrollTo && elems.length !== 0 ) { + elems[0].scrollIntoView({ block: 'nearest', inline: 'nearest' }); + } + response = { count: elems.length, error }; + break; + } + case 'unhighlight': + this.unhighlight(); + break; + } + response = onmessage && onmessage(msg) || response; + // Send response if this is frame-initiated message + if ( wrapped?.fromFrameId && this.port ) { + const { fromFrameId } = wrapped; + if ( response instanceof Promise ) { + response.then(response => { + if ( this.port === null ) { return; } + this.port.postMessage({ fromFrameId, msg: response }); + }); + } else { + this.port.postMessage({ fromFrameId, msg: response }); + } + } + }, + postMessage(msg) { + if ( this.port === null ) { return; } + const wrapped = { + fromScriptId: this.messageId++, + msg, + }; + return new Promise(resolve => { + this.pendingMessages.set(wrapped.fromScriptId, resolve); + this.port.postMessage(wrapped); + }); + }, + messageId: 1, + pendingMessages: new Map(), + + getElementBoundingClientRect(elem) { + let rect = typeof elem.getBoundingClientRect === 'function' + ? elem.getBoundingClientRect() + : { height: 0, left: 0, top: 0, width: 0 }; + + // https://github.com/gorhill/uBlock/issues/1024 + // Try not returning an empty bounding rect. + if ( rect.width !== 0 && rect.height !== 0 ) { + return rect; + } + if ( elem.shadowRoot instanceof DocumentFragment ) { + return this.getElementBoundingClientRect(elem.shadowRoot); + } + let left = rect.left, + right = left + rect.width, + top = rect.top, + bottom = top + rect.height; + for ( const child of elem.children ) { + rect = this.getElementBoundingClientRect(child); + if ( rect.width === 0 || rect.height === 0 ) { continue; } + if ( rect.left < left ) { left = rect.left; } + if ( rect.right > right ) { right = rect.right; } + if ( rect.top < top ) { top = rect.top; } + if ( rect.bottom > bottom ) { bottom = rect.bottom; } + } + return { + left, right, + top, bottom, + width: right - left, + height: bottom - top, + }; + }, + + highlightUpdate() { + const ow = self.innerWidth; + const oh = self.innerHeight; + const islands = []; + for ( const elem of this.highlightedElements ) { + const rect = this.getElementBoundingClientRect(elem); + // Ignore offscreen areas + if ( rect.left > ow ) { continue; } + if ( rect.top > oh ) { continue; } + if ( rect.left + rect.width < 0 ) { continue; } + if ( rect.top + rect.height < 0 ) { continue; } + islands.push( + `M${rect.left} ${rect.top}h${rect.width}v${rect.height}h-${rect.width}z` + ); + } + this.port.postMessage({ + what: 'svgPaths', + ocean: `M0 0h${ow}v${oh}h-${ow}z`, + islands: islands.join(''), + }); + }, + + highlightElements(iter = []) { + this.highlightedElements = + Array.from(iter).filter(a => + a instanceof Element && a !== this.frame + ); + this.highlightUpdate(); + }, + + qsa(node, selector) { + if ( node === null ) { return []; } + if ( selector.startsWith('{') ) { + if ( this.proceduralFiltererAPI === undefined ) { + if ( self.ProceduralFiltererAPI === undefined ) { return []; } + this.proceduralFiltererAPI = new self.ProceduralFiltererAPI(); + } + return this.proceduralFiltererAPI.qsa(selector); + } + selector = selector.replace(/::[^:]+$/, ''); + try { + const elems = node.querySelectorAll(selector); + this.qsa.error = undefined; + return elems; + } catch (reason) { + this.qsa.error = `${reason}`; + } + return []; + }, + + elementFromPoint(x, y) { + if ( x !== undefined ) { + this.lastX = x; this.lastY = y; + } else if ( this.lastX !== undefined ) { + x = this.lastX; y = this.lastY; + } else { + return null; + } + const magicAttr = `${this.secretAttr}-click`; + this.frame.setAttribute(magicAttr, ''); + let elem = document.elementFromPoint(x, y); + if ( elem === document.body || elem === document.documentElement ) { + elem = null; + } + // https://github.com/uBlockOrigin/uBlock-issues/issues/380 + this.frame.removeAttribute(magicAttr); + return elem; + }, + + elementsFromSelector(selector) { + const elems = this.qsa(document, selector); + return { elems, error: this.qsa.error }; + }, + + highlightElementAtPoint(x, y) { + const elem = self.ubolOverlay.elementFromPoint(x, y); + this.highlightElements([ elem ]); + }, + + unhighlight() { + this.highlightElements([]); + }, + + async install(file, onmessage) { + this.file = file; + const dynamicURL = new URL(this.webext.runtime.getURL(file)); + return new Promise(resolve => { + const frame = document.createElement('iframe'); + const secretAttr = this.secretAttr; + frame.setAttribute(secretAttr, ''); + const onLoad = ( ) => { + frame.onload = null; + frame.setAttribute(`${secretAttr}-loaded`, ''); + const channel = new MessageChannel(); + const port = channel.port1; + port.onmessage = ev => { + self.ubolOverlay && + self.ubolOverlay.onMessage(ev.data || {}) + }; + port.onmessageerror = ( ) => { + self.ubolOverlay && + self.ubolOverlay.onMessage({ what: 'quitTool' }) + }; + const realURL = new URL(dynamicURL); + realURL.hostname = + self.ubolOverlay.webext.i18n.getMessage('@@extension_id'); + frame.contentWindow.postMessage( + { + what: 'startOverlay', + url: document.baseURI, + width: self.innerWidth, + height: self.innerHeight, + }, + realURL.origin, + [ channel.port2 ] + ); + frame.contentWindow.focus(); + self.ubolOverlay.onmessage = onmessage; + self.ubolOverlay.port = port; + self.ubolOverlay.frame = frame; + resolve(true); + }; + if ( dynamicURL.protocol !== 'safari-web-extension:' ) { + frame.onload = ( ) => { + frame.onload = onLoad; + frame.contentWindow.location = dynamicURL.href; + }; + } else { + frame.onload = onLoad; + frame.setAttribute('src', dynamicURL.href); + } + document.documentElement.append(frame); + }); + }, +}; + +/******************************************************************************/ + +})(); + + +void 0; diff --git a/platform/mv3/extension/js/scripting/toolbar-icon.js b/platform/mv3/extension/js/scripting/toolbar-icon.js new file mode 100644 index 0000000000000..c5843a05c77c2 --- /dev/null +++ b/platform/mv3/extension/js/scripting/toolbar-icon.js @@ -0,0 +1,27 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant 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 +*/ + +(function uBOL_toggleToolbarIcon() { + chrome.runtime.sendMessage({ + what: 'toggleToolbarIcon', + }).catch(( ) => { + }); +})(); diff --git a/platform/mv3/extension/js/scripting/unpicker.js b/platform/mv3/extension/js/scripting/unpicker.js new file mode 100644 index 0000000000000..6350ac74a1b87 --- /dev/null +++ b/platform/mv3/extension/js/scripting/unpicker.js @@ -0,0 +1,57 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant 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 +*/ + +(async ( ) => { + +/******************************************************************************/ + +const ubolOverlay = self.ubolOverlay; +if ( ubolOverlay === undefined ) { return; } +if ( ubolOverlay.file === '/unpicker-ui.html' ) { return; } + +/******************************************************************************/ + +function onMessage(msg) { + switch ( msg.what ) { + case 'startCustomFilters': + return ubolOverlay.sendMessage({ what: 'startCustomFilters' }); + case 'terminateCustomFilters': + return ubolOverlay.sendMessage({ what: 'terminateCustomFilters' }); + case 'removeCustomFilters': + return ubolOverlay.sendMessage({ what: 'removeCustomFilters', + hostname: ubolOverlay.url.hostname, + selectors: [ msg.selector ], + }); + default: + break; + } +} + +/******************************************************************************/ + +await ubolOverlay.install('/unpicker-ui.html', onMessage); + +/******************************************************************************/ + +})(); + + +void 0; diff --git a/platform/mv3/extension/js/scripting/zapper.js b/platform/mv3/extension/js/scripting/zapper.js new file mode 100644 index 0000000000000..262be1b8ee4dd --- /dev/null +++ b/platform/mv3/extension/js/scripting/zapper.js @@ -0,0 +1,138 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant 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 +*/ + +(async ( ) => { + +/******************************************************************************/ + +const ubolOverlay = self.ubolOverlay; +if ( ubolOverlay === undefined ) { return; } +if ( ubolOverlay.file === '/zapper-ui.html' ) { return; } + +/******************************************************************************/ + +// https://www.reddit.com/r/uBlockOrigin/comments/bktxtb/scrolling_doesnt_work/emn901o +// Override 'fixed' position property on body element if present. + +// With touch-driven devices, first highlight the element and remove only +// when tapping again the highlighted area. + +function zapElementAtPoint(mx, my, options) { + if ( options.highlight ) { + const elem = ubolOverlay.elementFromPoint(mx, my); + if ( elem ) { + ubolOverlay.highlightElements([ elem ]); + } + return; + } + + let elemToRemove = ubolOverlay.highlightedElements?.[0] ?? null; + if ( elemToRemove === null && mx !== undefined ) { + elemToRemove = ubolOverlay.elementFromPoint(mx, my); + } + + if ( elemToRemove instanceof Element === false ) { return; } + + const getStyleValue = (elem, prop) => { + const style = window.getComputedStyle(elem); + return style ? style[prop] : ''; + }; + + // Heuristic to detect scroll-locking: remove such lock when detected. + let maybeScrollLocked = elemToRemove.shadowRoot instanceof DocumentFragment; + if ( maybeScrollLocked === false ) { + let elem = elemToRemove; + do { + maybeScrollLocked = + parseInt(getStyleValue(elem, 'zIndex'), 10) >= 1000 || + getStyleValue(elem, 'position') === 'fixed'; + elem = elem.parentElement; + } while ( elem !== null && maybeScrollLocked === false ); + } + if ( maybeScrollLocked ) { + const doc = document; + if ( getStyleValue(doc.body, 'overflowY') === 'hidden' ) { + doc.body.style.setProperty('overflow', 'auto', 'important'); + } + if ( getStyleValue(doc.body, 'position') === 'fixed' ) { + doc.body.style.setProperty('position', 'initial', 'important'); + } + if ( getStyleValue(doc.documentElement, 'position') === 'fixed' ) { + doc.documentElement.style.setProperty('position', 'initial', 'important'); + } + if ( getStyleValue(doc.documentElement, 'overflowY') === 'hidden' ) { + doc.documentElement.style.setProperty('overflow', 'auto', 'important'); + } + } + elemToRemove.remove(); + ubolOverlay.highlightElementAtPoint(mx, my); +} + +/******************************************************************************/ + +function onKeyPressed(ev) { + if ( ev.key !== 'Delete' && ev.key !== 'Backspace' ) { return; } + ev.stopPropagation(); + ev.preventDefault(); + zapElementAtPoint(); +} + +/******************************************************************************/ + +function startZapper() { + self.addEventListener('keydown', onKeyPressed, true); +} + +function quitZapper() { + self.removeEventListener('keydown', onKeyPressed, true); +} + +/******************************************************************************/ + +function onMessage(msg) { + switch ( msg.what ) { + case 'startTool': + startZapper(); + break; + case 'quitTool': + quitZapper(); + break; + case 'zapElementAtPoint': + zapElementAtPoint(msg.mx, msg.my, msg.options); + if ( msg.options.highlight !== true && msg.options.stay !== true ) { + quitZapper(); + } + break; + default: + break; + } +} + +/******************************************************************************/ + +await ubolOverlay.install('/zapper-ui.html', onMessage); + +/******************************************************************************/ + +})(); + + +void 0; diff --git a/platform/mv3/extension/js/settings.js b/platform/mv3/extension/js/settings.js new file mode 100644 index 0000000000000..51d9de498c8ca --- /dev/null +++ b/platform/mv3/extension/js/settings.js @@ -0,0 +1,327 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-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 { browser, i18n, sendMessage } from './ext.js'; +import { dom, qs$ } from './dom.js'; +import { hashFromIterable } from './dashboard.js'; +import { renderFilterLists } from './filter-lists.js'; + +/******************************************************************************/ + +let cachedRulesetData = {}; + +/******************************************************************************/ + +function renderAdminRules() { + const { disabledFeatures: forbid = [] } = cachedRulesetData; + if ( forbid.length === 0 ) { return; } + dom.body.dataset.forbid = forbid.join(' '); + if ( forbid.includes('dashboard') ) { + dom.body.dataset.pane = 'about'; + } +} + +/******************************************************************************/ + +function renderWidgets() { + if ( cachedRulesetData.firstRun ) { + dom.cl.add(dom.body, 'firstRun'); + } + + renderDefaultMode(); + + qs$('#autoReload input[type="checkbox"]').checked = cachedRulesetData.autoReload; + + { + const input = qs$('#showBlockedCount input[type="checkbox"]'); + if ( cachedRulesetData.canShowBlockedCount ) { + input.checked = cachedRulesetData.showBlockedCount; + } else { + input.checked = false; + dom.attr(input, 'disabled', ''); + } + } + + { + const input = qs$('#strictBlockMode input[type="checkbox"]'); + const canStrictBlock = cachedRulesetData.hasOmnipotence; + input.checked = canStrictBlock && cachedRulesetData.strictBlockMode; + dom.attr(input, 'disabled', canStrictBlock ? null : ''); + } + + { + const state = Boolean(cachedRulesetData.developerMode) && + cachedRulesetData.disabledFeatures?.includes('develop') !== true; + dom.body.dataset.develop = `${state}`; + dom.prop('#developerMode input[type="checkbox"]', 'checked', state); + } +} + +/******************************************************************************/ + +function renderDefaultMode() { + const defaultLevel = cachedRulesetData.defaultFilteringMode; + if ( defaultLevel !== 0 ) { + qs$(`.filteringModeCard input[type="radio"][value="${defaultLevel}"]`).checked = true; + } else { + dom.prop('.filteringModeCard input[type="radio"]', 'checked', false); + } +} + +/******************************************************************************/ + +async function onFilteringModeChange(ev) { + const input = ev.target; + const newLevel = parseInt(input.value, 10); + + switch ( newLevel ) { + case 1: { + const actualLevel = await sendMessage({ + what: 'setDefaultFilteringMode', + level: newLevel, + }); + cachedRulesetData.defaultFilteringMode = actualLevel; + break; + } + case 2: + case 3: { + const granted = await browser.permissions.request({ + origins: [ '' ], + }); + if ( granted ) { + const actualLevel = await sendMessage({ + what: 'setDefaultFilteringMode', + level: newLevel, + }); + cachedRulesetData.defaultFilteringMode = actualLevel; + cachedRulesetData.hasOmnipotence = true; + } + break; + } + default: + break; + } + renderFilterLists(cachedRulesetData); + renderWidgets(); +} + +dom.on( + '#defaultFilteringMode', + 'change', + '.filteringModeCard input[type="radio"]', + ev => { onFilteringModeChange(ev); } +); + +/******************************************************************************/ + +async function backupSettings() { + const api = await import('./backup-restore.js'); + const data = await api.backupToObject(cachedRulesetData); + if ( data instanceof Object === false ) { return; } + const json = JSON.stringify(data, null, 2) + '\n'; + const a = document.createElement('a'); + a.href = `data:text/plain;charset=utf-8,${encodeURIComponent(json)}`; + dom.attr(a, 'download', 'my-ubol-settings.json'); + dom.attr(a, 'type', 'application/json'); + a.click(); +} + +async function restoreSettings() { + const promise = new Promise(resolve => { + const input = qs$('section[data-pane="settings"] input[type="file"]'); + input.onchange = ev => { + dom.cl.add(dom.body, 'busy'); + input.onchange = null; + const file = ev.target.files[0]; + if ( file === undefined || file.name === '' ) { return resolve(); } + const fr = new FileReader(); + fr.onload = ( ) => { + fr.onload = null; + if ( typeof fr.result !== 'string' ) { return resolve(); } + let data; + try { + data = JSON.parse(fr.result); + } catch { + } + if ( data instanceof Object === false ) { return resolve(); } + import('./backup-restore.js').then(api => { + resolve(api.restoreFromObject(data)); + }); + }; + fr.readAsText(file); + }; + input.oncancel = ( ) => { + resolve(); + }; + // Reset to empty string, this will ensure a change event is properly + // triggered if the user pick a file, even if it's the same as the last + // one picked. + input.value = ''; + input.click(); + }); + await promise; + dom.cl.remove(dom.body, 'busy'); +} + +async function resetSettings() { + const response = self.confirm(i18n.getMessage('resetToDefaultConfirm')); + if ( response !== true ) { return; } + dom.cl.add(dom.body, 'busy'); + const api = await import('./backup-restore.js'); + await api.restoreFromObject({}); + dom.cl.remove(dom.body, 'busy'); +} + +/******************************************************************************/ + +dom.on('#autoReload input[type="checkbox"]', 'change', ev => { + sendMessage({ + what: 'setAutoReload', + state: ev.target.checked, + }); +}); + +dom.on('#showBlockedCount input[type="checkbox"]', 'change', ev => { + sendMessage({ + what: 'setShowBlockedCount', + state: ev.target.checked, + }); +}); + +dom.on('#strictBlockMode input[type="checkbox"]', 'change', ev => { + sendMessage({ + what: 'setStrictBlockMode', + state: ev.target.checked, + }); +}); + +dom.on('#developerMode input[type="checkbox"]', 'change', ev => { + const state = ev.target.checked; + sendMessage({ what: 'setDeveloperMode', state }); + dom.body.dataset.develop = `${state}`; +}); + +dom.on('section[data-pane="settings"] [data-i18n="backupButton"]', 'click', ( ) => { + backupSettings(); +}); + +dom.on('section[data-pane="settings"] [data-i18n="restoreButton"]', 'click', ( ) => { + restoreSettings(); +}); + +dom.on('section[data-pane="settings"] [data-i18n="resetToDefaultButton"]', 'click', ( ) => { + resetSettings(); +}); + +/******************************************************************************/ + +function listen() { + const bc = new self.BroadcastChannel('uBOL'); + bc.onmessage = listen.onmessage; +} + +listen.onmessage = ev => { + const message = ev.data; + if ( message instanceof Object === false ) { return; } + const local = cachedRulesetData; + let render = false; + + if ( message.hasOmnipotence !== undefined ) { + if ( message.hasOmnipotence !== local.hasOmnipotence ) { + local.hasOmnipotence = message.hasOmnipotence; + render = true; + } + } + + if ( message.defaultFilteringMode !== undefined ) { + if ( message.defaultFilteringMode !== local.defaultFilteringMode ) { + local.defaultFilteringMode = message.defaultFilteringMode; + render = true; + } + } + + if ( message.autoReload !== undefined ) { + if ( message.autoReload !== local.autoReload ) { + local.autoReload = message.autoReload; + render = true; + } + } + + if ( message.showBlockedCount !== undefined ) { + if ( message.showBlockedCount !== local.showBlockedCount ) { + local.showBlockedCount = message.showBlockedCount; + render = true; + } + } + + if ( message.strictBlockMode !== undefined ) { + if ( message.strictBlockMode !== local.strictBlockMode ) { + local.strictBlockMode = message.strictBlockMode; + render = true; + } + } + + if ( message.developerMode !== undefined ) { + if ( message.developerMode !== local.developerMode ) { + local.developerMode = message.developerMode; + render = true; + } + } + + if ( message.adminRulesets !== undefined ) { + if ( hashFromIterable(message.adminRulesets) !== hashFromIterable(local.adminRulesets) ) { + local.adminRulesets = message.adminRulesets; + render = true; + } + } + + if ( message.enabledRulesets !== undefined ) { + local.enabledRulesets = message.enabledRulesets; + render = true; + } + + if ( render === false ) { return; } + renderFilterLists(cachedRulesetData); + renderWidgets(); +}; + +/******************************************************************************/ + +sendMessage({ + what: 'getOptionsPageData', +}).then(data => { + if ( !data ) { return; } + cachedRulesetData = data; + try { + renderAdminRules(); + renderFilterLists(cachedRulesetData); + renderWidgets(); + } catch(reason) { + console.error(reason); + } finally { + dom.cl.remove(dom.body, 'loading'); + } + listen(); +}).catch(reason => { + console.error(reason); +}); + +/******************************************************************************/ diff --git a/platform/mv3/extension/js/strictblock.js b/platform/mv3/extension/js/strictblock.js new file mode 100644 index 0000000000000..23e1372a2cd9f --- /dev/null +++ b/platform/mv3/extension/js/strictblock.js @@ -0,0 +1,295 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2024-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 { dom, qs$ } from './dom.js'; +import { fetchJSON } from './fetch.js'; +import { getEnabledRulesetsDetails } from './ruleset-manager.js'; +import { i18n$ } from './i18n.js'; +import { sendMessage } from './ext.js'; +import { urlSkip } from './urlskip.js'; + +/******************************************************************************/ + +const rulesetDetailsPromise = getEnabledRulesetsDetails(); + +/******************************************************************************/ + +function urlToFragment(raw) { + try { + const fragment = new DocumentFragment(); + const url = new URL(raw); + const hn = url.hostname; + const i = raw.indexOf(hn); + const b = document.createElement('b'); + b.append(hn); + fragment.append(raw.slice(0,i), b, raw.slice(i+hn.length)); + return fragment; + } catch { + } + return raw; +} + +/******************************************************************************/ + +const toURL = new URL('about:blank'); +const toFinalURL = new URL('about:blank'); + +try { + toURL.href = self.location.hash.slice(1); + toFinalURL.href = toURL.href; +} catch { +} + +dom.clear('#theURL > p > span:first-of-type'); +qs$('#theURL > p > span:first-of-type').append(urlToFragment(toURL.href)); + +/******************************************************************************/ + +async function proceed() { + const permanent = qs$('#disableWarning').checked; + // Do not exclude current hostname from strict-block ruleset if a urlskip + // directive to another site is in effect. + // TODO: what if the urlskip directive leads to a different subdomain on + // same site? + if ( toFinalURL.hostname !== toURL.hostname && permanent !== true ) { + return window.location.replace(toFinalURL.href); + } + await sendMessage({ + what: 'excludeFromStrictBlock', + hostname: toURL.hostname, + permanent, + }); + window.location.replace(toURL.href); +} + +/******************************************************************************/ + +function fragmentFromTemplate(template, placeholder, text, details) { + const fragment = new DocumentFragment(); + const pos = template.indexOf(placeholder); + if ( pos === -1 ) { + fragment.append(template); + return fragment; + } + const elem = document.createElement(details.tag); + const { attributes } = details; + if ( attributes ) { + for ( let i = 0; i < attributes.length; i+= 2 ) { + elem.setAttribute(attributes[i+0], attributes[i+1]); + } + } + elem.append(text); + fragment.append( + template.slice(0, pos), + elem, + template.slice(pos + placeholder.length) + ); + return fragment; +} + +/******************************************************************************/ + +// https://github.com/gorhill/uBlock/issues/691 +// Parse URL to extract as much useful information as possible. This is +// useful to assist the user in deciding whether to navigate to the web page. +(( ) => { + const reURL = /^https?:\/\//; + + const liFromParam = function(name, value) { + if ( value === '' ) { + value = name; + name = ''; + } + const li = dom.create('li'); + let span = dom.create('span'); + dom.text(span, name); + li.appendChild(span); + if ( name !== '' && value !== '' ) { + li.appendChild(document.createTextNode(' = ')); + } + span = dom.create('span'); + if ( reURL.test(value) ) { + const a = dom.create('a'); + dom.attr(a, 'href', value); + dom.text(a, value); + span.appendChild(a); + } else { + dom.text(span, value); + } + li.appendChild(span); + return li; + }; + + // https://github.com/uBlockOrigin/uBlock-issues/issues/1649 + // Limit recursion. + const renderParams = function(parentNode, rawURL, depth = 0) { + let url; + try { + url = new URL(rawURL); + } catch { + return false; + } + + const search = url.search.slice(1); + if ( search === '' ) { return false; } + + url.search = ''; + const li = liFromParam(i18n$('strictblockNoParamsPrompt'), url.href); + parentNode.appendChild(li); + + const params = new self.URLSearchParams(search); + for ( const [ name, value ] of params ) { + const li = liFromParam(name, value); + if ( depth < 2 && reURL.test(value) ) { + const ul = dom.create('ul'); + renderParams(ul, value, depth + 1); + li.appendChild(ul); + } + parentNode.appendChild(li); + } + + return true; + }; + + if ( renderParams(qs$('#parsed'), toURL.href) === false ) { return; } + + dom.cl.remove('#toggleParse', 'hidden'); + + dom.on('#toggleParse', 'click', ( ) => { + dom.cl.toggle('#theURL', 'collapsed'); + }); +})(); + +/******************************************************************************/ + +// Find which list caused the blocking. +(async ( ) => { + const rulesetDetails = await rulesetDetailsPromise; + let iList = -1; + const searchInList = async i => { + if ( iList !== -1 ) { return; } + const rules = await fetchJSON(`/rulesets/strictblock/${rulesetDetails[i].id}`); + if ( iList !== -1 ) { return; } + const toHref = toURL.href; + for ( const rule of rules ) { + const { regexFilter, requestDomains } = rule.condition; + let matchesDomain = requestDomains === undefined; + if ( requestDomains ) { + let hn = toURL.hostname; + for (;;) { + if ( requestDomains.includes(hn) ) { + matchesDomain = true; + break; + } + const pos = hn.indexOf('.'); + if ( pos === -1 ) { break; } + hn = hn.slice(pos+1); + } + if ( matchesDomain === false ) { continue; } + } + const re = new RegExp(regexFilter); + const matchesRegex = re.test(toHref); + if ( matchesDomain && matchesRegex ) { + iList = i; + } + } + }; + const toFetch = []; + for ( let i = 0; i < rulesetDetails.length; i++ ) { + if ( rulesetDetails[i].rules.strictblock === 0 ) { continue; } + toFetch.push(searchInList(i)); + } + if ( toFetch.length === 0 ) { return; } + await Promise.all(toFetch); + if ( iList === -1 ) { return; } + const fragment = fragmentFromTemplate( + i18n$('strictblockReasonSentence1'), + '{{listname}}', rulesetDetails[iList].name, + { tag: 'q' } + ); + qs$('#reason').append(fragment); + dom.attr('#reason', 'hidden', null); +})(); + +/******************************************************************************/ + +// Offer to skip redirection whenever possible +(async ( ) => { + const rulesetDetails = await rulesetDetailsPromise; + const toFetch = []; + for ( const details of rulesetDetails ) { + if ( details.rules.urlskip === 0 ) { continue; } + toFetch.push(fetchJSON(`/rulesets/urlskip/${details.id}`)); + } + if ( toFetch.length === 0 ) { return; } + const urlskipLists = await Promise.all(toFetch); + const toHn = toURL.hostname; + const matchesHn = hn => { + if ( toHn.endsWith(hn) === false ) { return false; } + if ( hn.length === toHn.length ) { return true; } + return toHn.charAt(toHn.length - hn.length - 1) === '.'; + }; + for ( const urlskips of urlskipLists ) { + for ( const urlskip of urlskips ) { + const re = new RegExp(urlskip.re, urlskip.c ? undefined : 'i'); + if ( re.test(toURL.href) === false ) { continue; } + if ( urlskip.hostnames ) { + if ( urlskip.hostnames.some(hn => matchesHn(hn)) === false ) { + continue; + } + } + const finalURL = urlSkip(toURL.href, false, urlskip.steps); + if ( finalURL === undefined ) { continue; } + toFinalURL.href = finalURL; + const fragment = fragmentFromTemplate( + i18n$('strictblockRedirectSentence1'), + '{{url}}', urlToFragment(finalURL), + { tag: 'a', attributes: [ 'href', finalURL, 'class', 'code' ] } + ); + qs$('#urlskip').append(fragment); + dom.attr('#urlskip', 'hidden', null); + return; + } + } +})(); + +/******************************************************************************/ + +// https://www.reddit.com/r/uBlockOrigin/comments/breeux/ +if ( window.history.length > 1 ) { + dom.on('#back', 'click', ( ) => { window.history.back(); }); + qs$('#bye').style.display = 'none'; +} else { + dom.on('#bye', 'click', ( ) => { window.close(); }); + qs$('#back').style.display = 'none'; +} + +dom.on('#disableWarning', 'change', ev => { + const checked = ev.target.checked; + dom.cl.toggle('[data-i18n="strictblockBack"]', 'disabled', checked); + dom.cl.toggle('[data-i18n="strictblockClose"]', 'disabled', checked); +}); + +dom.on('#proceed', 'click', ( ) => { proceed(); }); + +dom.cl.remove(dom.body, 'loading'); + +/******************************************************************************/ diff --git a/platform/mv3/extension/js/theme.js b/platform/mv3/extension/js/theme.js new file mode 100644 index 0000000000000..d816250a3d512 --- /dev/null +++ b/platform/mv3/extension/js/theme.js @@ -0,0 +1,40 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-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 { dom } from './dom.js'; + +/******************************************************************************/ + +{ + const mql = self.matchMedia('(prefers-color-scheme: dark)'); + const theme = mql instanceof Object && mql.matches === true + ? 'dark' + : 'light'; + dom.cl.toggle(dom.html, 'dark', theme === 'dark'); + dom.cl.toggle(dom.html, 'light', theme !== 'dark'); +} + +{ + const mql = self.matchMedia('(hover: hover)'); + const isTouchScreen = mql.matches !== true; + dom.cl.toggle(dom.html, 'mobile', isTouchScreen); + dom.cl.toggle(dom.html, 'desktop', isTouchScreen === false); +} diff --git a/platform/mv3/extension/js/tool-overlay-ui.js b/platform/mv3/extension/js/tool-overlay-ui.js new file mode 100644 index 0000000000000..3b2fea8c7bb67 --- /dev/null +++ b/platform/mv3/extension/js/tool-overlay-ui.js @@ -0,0 +1,237 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant 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 { dom, qs$ } from './dom.js'; +import { sendMessage } from './ext.js'; + +/******************************************************************************/ + +export const toolOverlay = { + url: new URL('about:blank'), + svgRoot: qs$('svg#overlay'), + svgOcean: qs$('svg#overlay > path'), + svgIslands: qs$('svg#overlay > path + path'), + emptyPath: 'M0 0', + port: null, + + start(onmessage) { + this.onmessage = onmessage; + globalThis.addEventListener('message', ev => { + const msg = ev.data || {}; + if ( msg.what !== 'startOverlay' ) { return; } + if ( Array.isArray(ev.ports) === false ) { return; } + if ( ev.ports.length === 0 ) { return; } + toolOverlay.port = ev.ports[0]; + toolOverlay.port.onmessage = ev => { + this.onMessage(ev.data || {}); + }; + toolOverlay.port.onmessageerror = ( ) => { + this.onmessage({ what: 'stopTool' }); + }; + this.moveable = qs$('aside:has(#move)'); + if ( this.moveable !== null ) { + dom.on('aside #move', 'pointerdown', ev => { this.mover(ev); }); + dom.on('aside #move', 'touchstart', this.eatTouchEvent); + } + this.onMessage({ what: 'startTool', + url: msg.url, + width: msg.width, + height: msg.height, + }); + dom.cl.remove(dom.body, 'loading'); + }, { once: true }); + }, + + stop() { + this.highlightElementUnderMouse(false); + if ( this.port ) { + this.port.postMessage({ what: 'quitTool' }); + this.port.onmessage = null; + this.port.onmessageerror = null; + this.port = null; + } + }, + + onMessage(wrapped) { + // Response to frame-initiated message? + if ( typeof wrapped?.fromFrameId === 'number' ) { + const resolve = this.pendingMessages.get(wrapped.fromFrameId); + if ( resolve ) { + this.pendingMessages.delete(wrapped.fromFrameId); + resolve(wrapped.msg); + } + return; + } + const msg = wrapped.msg || wrapped; + switch ( msg.what ) { + case 'startTool': { + this.url.href = msg.url; + const ow = msg.width; + const oh = msg.height; + this.svgOcean.setAttribute('d', `M0 0h${ow}v${oh}h-${ow}z`); + break; + } + case 'svgPaths': + this.svgOcean.setAttribute('d', msg.ocean + msg.islands); + this.svgIslands.setAttribute('d', msg.islands || this.emptyPath); + break; + default: + break; + } + const response = this.onmessage && this.onmessage(msg) || undefined; + // Send response if this is script-initiated message + if ( wrapped?.fromScriptId && this.port ) { + const { fromScriptId } = wrapped; + if ( response instanceof Promise ) { + response.then(response => { + if ( this.port === null ) { return; } + this.port.postMessage({ fromScriptId, msg: response }); + }); + } else { + this.port.postMessage({ fromScriptId, msg: response }); + } + } + }, + postMessage(msg) { + if ( this.port === null ) { return; } + const wrapped = { + fromFrameId: this.messageId++, + msg, + }; + return new Promise(resolve => { + this.pendingMessages.set(wrapped.fromFrameId, resolve); + this.port.postMessage(wrapped); + }); + }, + messageId: 1, + pendingMessages: new Map(), + + sendMessage(msg) { + return sendMessage(msg); + }, + + highlightElementUnderMouse(state) { + if ( dom.cl.has(dom.root, 'mobile') ) { return; } + if ( state === this.mstrackerOn ) { return; } + this.mstrackerOn = state; + if ( this.mstrackerOn ) { + dom.on(document, 'mousemove', this.onHover, { passive: true }); + return; + } + dom.off(document, 'mousemove', this.onHover, { passive: true }); + if ( this.mstrackerTimer === undefined ) { return; } + self.cancelAnimationFrame(this.mstrackerTimer); + this.mstrackerTimer = undefined; + }, + onTimer() { + toolOverlay.mstrackerTimer = undefined; + if ( toolOverlay.port === null ) { return; } + toolOverlay.port.postMessage({ + what: 'highlightElementAtPoint', + mx: toolOverlay.mstrackerX, + my: toolOverlay.mstrackerY, + }); + }, + onHover(ev) { + toolOverlay.mstrackerX = ev.clientX; + toolOverlay.mstrackerY = ev.clientY; + if ( toolOverlay.mstrackerTimer !== undefined ) { return; } + toolOverlay.mstrackerTimer = + self.requestAnimationFrame(toolOverlay.onTimer); + }, + mstrackerOn: false, + mstrackerX: 0, mstrackerY: 0, + mstrackerTimer: undefined, + + mover(ev) { + const target = ev.target; + if ( target.matches('#move') === false ) { return; } + if ( dom.cl.has(this.moveable, 'moving') ) { return; } + target.setPointerCapture(ev.pointerId); + this.moverX0 = ev.pageX; + this.moverY0 = ev.pageY; + const rect = this.moveable.getBoundingClientRect(); + this.moverCX0 = rect.x + rect.width / 2; + this.moverCY0 = rect.y + rect.height / 2; + dom.cl.add(this.moveable, 'moving'); + self.addEventListener('pointermove', this.moverMoveAsync, { + passive: true, + capture: true, + }); + self.addEventListener('pointerup', this.moverStop, { capture: true, once: true }); + ev.stopPropagation(); + ev.preventDefault(); + }, + moverMove() { + this.moverTimer = undefined; + const cx1 = this.moverCX0 + this.moverX1 - this.moverX0; + const cy1 = this.moverCY0 + this.moverY1 - this.moverY0; + const rootW = dom.root.clientWidth; + const rootH = dom.root.clientHeight; + const moveableW = this.moveable.clientWidth; + const moveableH = this.moveable.clientHeight; + if ( cx1 < rootW / 2 ) { + this.moveable.style.setProperty('left', `${Math.max(cx1-moveableW/2,2)}px`); + this.moveable.style.removeProperty('right'); + } else { + this.moveable.style.removeProperty('left'); + this.moveable.style.setProperty('right', `${Math.max(rootW-cx1-moveableW/2,2)}px`); + } + if ( cy1 < rootH / 2 ) { + this.moveable.style.setProperty('top', `${Math.max(cy1-moveableH/2,2)}px`); + this.moveable.style.removeProperty('bottom'); + } else { + this.moveable.style.removeProperty('top'); + this.moveable.style.setProperty('bottom', `${Math.max(rootH-cy1-moveableH/2,2)}px`); + } + }, + moverMoveAsync(ev) { + toolOverlay.moverX1 = ev.pageX; + toolOverlay.moverY1 = ev.pageY; + if ( toolOverlay.moverTimer !== undefined ) { return; } + toolOverlay.moverTimer = self.requestAnimationFrame(( ) => { + toolOverlay.moverMove(); + }); + }, + moverStop(ev) { + if ( dom.cl.has(toolOverlay.moveable, 'moving') === false ) { return; } + dom.cl.remove(toolOverlay.moveable, 'moving'); + self.removeEventListener('pointermove', toolOverlay.moverMoveAsync, { + passive: true, + capture: true, + }); + ev.target.releasePointerCapture(ev.pointerId); + ev.stopPropagation(); + ev.preventDefault(); + }, + eatTouchEvent(ev) { + if ( ev.target !== qs$('aside #move') ) { return; } + ev.stopPropagation(); + ev.preventDefault(); + }, + moveable: null, + moverX0: 0, moverY0: 0, + moverX1: 0, moverY1: 0, + moverCX0: 0, moverCY0: 0, + moverTimer: undefined, +}; + +/******************************************************************************/ diff --git a/platform/mv3/extension/js/troubleshooting.js b/platform/mv3/extension/js/troubleshooting.js new file mode 100644 index 0000000000000..9f6bb2976705b --- /dev/null +++ b/platform/mv3/extension/js/troubleshooting.js @@ -0,0 +1,146 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2024-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 { browser, runtime, sendMessage } from './ext.js'; + +/******************************************************************************/ + +function renderData(data, depth = 0) { + const indent = ' '.repeat(depth); + if ( Array.isArray(data) ) { + const out = []; + for ( const value of data ) { + out.push(renderData(value, depth)); + } + return out.join('\n'); + } + if ( typeof data !== 'object' || data === null ) { + return `${indent}${data}`; + } + const out = []; + for ( const [ name, value ] of Object.entries(data) ) { + if ( typeof value === 'object' && value !== null ) { + out.push(`${indent}${name}:`); + out.push(renderData(value, depth + 1)); + continue; + } + out.push(`${indent}${name}: ${value}`); + } + return out.join('\n'); +} + +/******************************************************************************/ + +export async function getTroubleshootingInfo(details) { + const manifest = runtime.getManifest(); + const [ + platformInfo, + defaultConfig, + enabledRulesets, + defaultMode, + userRules, + consoleOutput, + showBlockedCount, + registeredScripts, + hasOmnipotence, + ] = await Promise.all([ + runtime.getPlatformInfo(), + sendMessage({ what: 'getDefaultConfig' }), + sendMessage({ what: 'getEnabledRulesets' }), + sendMessage({ what: 'getDefaultFilteringMode' }), + sendMessage({ what: 'getEffectiveUserRules' }), + sendMessage({ what: 'getConsoleOutput' }), + sendMessage({ what: 'getShowBlockedCount' }), + sendMessage({ what: 'getRegisteredContentScripts' }), + sendMessage({ what: 'hasBroadHostPermissions' }), + ]); + const vendor = (( ) => { + const extURL = runtime.getURL(''); + let agent = '', version = '?'; + if ( extURL.startsWith('moz-extension:') ) { + agent = 'Firefox'; + const match = /\bFirefox\/(\d+\.\d+)\b/.exec(navigator.userAgent); + version = match && match[1] || '?'; + } else if ( extURL.startsWith('safari-web-extension:') ) { + agent = 'Safari'; + const match = /\bVersion\/(\d+\.\d+)\b/.exec(navigator.userAgent); + version = match && match[1] || '?'; + } else if ( /\bEdg\/\b/.test(navigator.userAgent) ) { + agent = 'Edge'; + const match = /\bEdg\/(\d+)\b/.exec(navigator.userAgent); + version = match && match[1] || '?'; + } else { + agent = 'Chrome'; + const match = /\bChrome\/(\d+)\b/.exec(navigator.userAgent); + version = match && match[1] || '?'; + } + if ( /\bMobile\b/.test(navigator.userAgent) ) { + agent += ' Mobile'; + } + agent += ` ${version} (${platformInfo.os})` + return agent; + })(); + const modes = [ 'no filtering', 'basic', 'optimal', 'complete' ]; + const filtering = {}; + if ( details?.siteMode ) { + filtering.site = `${modes[details.siteMode]}` + } + filtering.default = `${modes[defaultMode]}`; + const config = { + name: manifest.name, + version: manifest.version, + browser: vendor, + filtering, + permission: hasOmnipotence ? 'all' : 'ask', + }; + if ( details?.tabId ) { + let badge = '?'; + if ( showBlockedCount ) { + badge = await browser.action.getBadgeText({ tabId: details.tabId }); + } + if ( badge ) { + config.badge = badge; + } + } + if ( userRules.length !== 0 ) { + config['user rules'] = userRules.length; + } + const defaultRulesets = defaultConfig.rulesets; + for ( let i = 0; i < enabledRulesets.length; i++ ) { + const id = enabledRulesets[i]; + if ( defaultRulesets.includes(id) ) { continue; } + enabledRulesets[i] = `+${id}`; + } + for ( const id of defaultRulesets ) { + if ( enabledRulesets.includes(id) ) { continue; } + enabledRulesets.push(`-${id}`); + } + config.rulesets = enabledRulesets.sort(); + if ( registeredScripts.length !== 0 ) { + config.scripting = registeredScripts; + } + if ( consoleOutput.length !== 0 ) { + config.console = details?.siteMode + ? consoleOutput.slice(-8) + : consoleOutput; + } + return renderData(config); +} diff --git a/platform/mv3/extension/js/ubo-parser.js b/platform/mv3/extension/js/ubo-parser.js new file mode 100644 index 0000000000000..c4f179fdba999 --- /dev/null +++ b/platform/mv3/extension/js/ubo-parser.js @@ -0,0 +1,581 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-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 sfp from './static-filtering-parser.js'; +import punycode from './punycode.js'; +import redirectResourceMap from './redirect-resources.js'; + +/******************************************************************************/ + +const validResourceTypes = [ + 'main_frame', + 'sub_frame', + 'stylesheet', + 'script', + 'image', + 'font', + 'object', + 'xmlhttprequest', + 'ping', + 'csp_report', + 'media', + 'websocket', + 'webtransport', + 'webbundle', + 'other', +]; + +/******************************************************************************/ + +const validRedirectResources = (( ) => { + const out = new Map(); + for ( const [ name, resource ] of redirectResourceMap ) { + out.set(name, name); + if ( resource.alias === undefined ) { continue; } + if ( typeof resource.alias === 'string' ) { + out.set(resource.alias, name); + continue; + } + if ( Array.isArray(resource.alias) ) { + for ( const alias of resource.alias ) { + out.set(alias, name); + } + } + } + return out; +})(); + +const isNotEntity = hn => hn.endsWith('.*') === false; + +/******************************************************************************/ + +function toSuperDomain(hn) { + const pos = hn.indexOf('.'); + if ( pos === -1 ) { return; } + return hn.slice(pos+1); +} + +/******************************************************************************/ + +function parseHostnameList(iter) { + const out = { + included: { + good: [], + bad: [], + }, + excluded: { + good: [], + bad: [], + }, + }; + for ( let { hn, not, bad } of iter ) { + bad ||= hn.includes('/') || hn.includes('*'); + const hnAscii = bad === false && hn.startsWith('xn--') + ? punycode.toASCII(hn) + : hn; + const destination = not ? out.excluded : out.included; + if ( bad ) { + destination.bad.push(hnAscii); + } else { + destination.good.push(hnAscii); + } + } + return out; +} + +/******************************************************************************/ + +function ownerFromPropertyPath(root, path) { + let owner = root; + let prop = path; + for (;;) { + if ( owner instanceof Object === false ) { break; } + const pos = prop.indexOf('.'); + if ( pos === -1 ) { break; } + owner = owner[prop.slice(0, pos)]; + prop = prop.slice(pos+1) + } + return { owner: owner ?? undefined, prop }; +} + +/******************************************************************************/ + +function mergeArrays(rules, propertyPath) { + const out = []; + const distinctRules = new Map(); + for ( const rule of rules ) { + const { id } = rule; + const { owner, prop } = ownerFromPropertyPath(rule, propertyPath); + if ( owner === undefined || Array.isArray(owner[prop]) === false ) { + out.push(rule); + continue; + } + const collection = owner[prop] || []; + owner[prop] = undefined; + rule.id = undefined; + const hash = JSON.stringify(rule); + const details = distinctRules.get(hash) || + { id, collection: new Set() }; + if ( details.collection.size === 0 ) { + distinctRules.set(hash, details); + } + for ( const hn of collection ) { + details.collection.add(hn); + } + } + for ( const [ hash, { id, collection } ] of distinctRules ) { + const rule = JSON.parse(hash); + if ( id ) { + rule.id = id; + } + if ( collection.size !== 0 ) { + const { owner, prop } = ownerFromPropertyPath(rule, propertyPath); + owner[prop] = Array.from(collection).sort(); + } + out.push(rule); + } + return out; +} + +/******************************************************************************/ + +function minimizeRuleset(rules) { + rules = mergeArrays(rules, 'condition.requestDomains'); + rules = mergeArrays(rules, 'condition.excludedRequestDomains'); + rules = mergeArrays(rules, 'condition.initiatorDomains'); + rules = mergeArrays(rules, 'condition.excludedInitiatorDomains'); + rules = mergeArrays(rules, 'condition.resourceTypes'); + rules = mergeArrays(rules, 'condition.excludedRequestMethods'); + rules = mergeArrays(rules, 'condition.requestMethods'); + rules = mergeArrays(rules, 'condition.excludedResourceTypes'); + rules = mergeArrays(rules, 'action.redirect.transform.queryTransform.removeParams'); + return rules; +} + +/******************************************************************************/ + +function minimizeRules(rules) { + const hostnameListProp = [ + 'requestDomains', + 'excludedRequestDomains', + 'initiatorDomains', + 'excludedInitiatorDomains', + ]; + for ( const rule of rules ) { + for ( const prop of hostnameListProp ) { + const hostnames = rule.condition[prop]; + if ( hostnames === undefined ) { continue; } + if ( hostnames.length === 1 ) { continue; } + const hnSet = new Set(hostnames); + for ( let hn of hnSet ) { + for (;;) { + const hnup = toSuperDomain(hn); + if ( hnup === undefined ) { break; } + if ( hnSet.has(hnup) ) { hnSet.delete(hn); } + hn = hnup; + } + } + if ( hnSet.size === hostnames.length ) { continue; } + rule.condition[prop] = Array.from(hnSet).sort(); + } + } + return rules; +} + +/******************************************************************************/ + +function dropEntities(rule, prop) { + const { condition } = rule; + if ( condition[prop] === undefined ) { return; } + const sanitized = condition[prop].filter(a => isNotEntity(a)); + if ( sanitized.length === condition[prop].length ) { return; } + if ( sanitized.length === 0 ) { return 0; } + condition.requestDomains = sanitized; +} + +/******************************************************************************/ + +function validateRules(rules) { + const out = []; + for ( const rule of rules ) { + const { condition } = rule; + // "Only one of resourceTypes and excludedResourceTypes should be specified" + if ( condition.resourceTypes ) { + if ( condition.excludedResourceTypes ) { continue; } + } + // "Only one of requestMethods and excludedRequestMethods should be specified" + if ( condition.requestMethods ) { + if ( condition.excludedRequestMethods ) { continue; } + } + // Drop entity-based hostnames + if ( dropEntities(rule, 'requestDomains') === 0 ) { continue; } + if ( dropEntities(rule, 'excludedRequestDomains') === 0 ) { continue; } + if ( dropEntities(rule, 'initiatorDomains') === 0 ) { continue; } + if ( dropEntities(rule, 'excludedInitiatorDomains') === 0 ) { continue; } + // regexSubstitution requires regexFilter + if ( rule.action?.redirect?.regexSubstitution ) { + if ( rule.condition.regexFilter === undefined ) { continue; } + } + out.push(rule); + } + return out; +} + +/******************************************************************************/ + +export function parseNetworkFilter(parser) { + if ( parser.isNetworkFilter() === false ) { return; } + if ( parser.hasError() ) { return; } + + const rule = { + action: { type: 'block' }, + condition: { }, + }; + if ( parser.isException() ) { + rule.action.type = 'allow'; + } + + let pattern = parser.getNetPattern(); + if ( parser.isHostnamePattern() ) { + rule.condition.requestDomains = [ pattern ]; + } else if ( parser.isPlainPattern() || parser.isGenericPattern() ) { + if ( parser.isLeftHnAnchored() ) { + pattern = `||${pattern}`; + } else if ( parser.isLeftAnchored() ) { + pattern = `|${pattern}`; + } + if ( parser.isRightAnchored() ) { + pattern = `${pattern}|`; + } + rule.condition.urlFilter = pattern; + } else if ( parser.isRegexPattern() ) { + rule.condition.regexFilter = pattern; + } else if ( parser.isAnyPattern() === false ) { + rule.condition.urlFilter = pattern; + } + + const defaultResourceTypes = new Set(); + let defaultUrlFilter = ''; + + const initiatorDomains = new Set(); + const excludedInitiatorDomains = new Set(); + const requestDomains = new Set(); + const excludedRequestDomains = new Set(); + const requestMethods = new Set(); + const excludedRequestMethods = new Set(); + const resourceTypes = new Set(); + const excludedResourceTypes = new Set(); + + const processResourceType = (resourceType, nodeType) => { + const not = parser.isNegatedOption(nodeType) + if ( validResourceTypes.includes(resourceType) === false ) { + if ( not ) { return; } + } + if ( not ) { + excludedResourceTypes.add(resourceType); + } else { + resourceTypes.add(resourceType); + } + }; + + let priority = 0; + + for ( const type of parser.getNodeTypes() ) { + switch ( type ) { + case sfp.NODE_TYPE_NET_OPTION_NAME_1P: + rule.condition.domainType = parser.isNegatedOption(type) + ? 'thirdParty' + : 'firstParty'; + break; + case sfp.NODE_TYPE_NET_OPTION_NAME_STRICT1P: + case sfp.NODE_TYPE_NET_OPTION_NAME_STRICT3P: + case sfp.NODE_TYPE_NET_OPTION_NAME_BADFILTER: + case sfp.NODE_TYPE_NET_OPTION_NAME_CNAME: + case sfp.NODE_TYPE_NET_OPTION_NAME_EHIDE: + case sfp.NODE_TYPE_NET_OPTION_NAME_GENERICBLOCK: + case sfp.NODE_TYPE_NET_OPTION_NAME_GHIDE: + case sfp.NODE_TYPE_NET_OPTION_NAME_IPADDRESS: + case sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE: + case sfp.NODE_TYPE_NET_OPTION_NAME_REPLACE: + case sfp.NODE_TYPE_NET_OPTION_NAME_SHIDE: + case sfp.NODE_TYPE_NET_OPTION_NAME_URLSKIP: + return; + case sfp.NODE_TYPE_NET_OPTION_NAME_INLINEFONT: + case sfp.NODE_TYPE_NET_OPTION_NAME_INLINESCRIPT: + case sfp.NODE_TYPE_NET_OPTION_NAME_POPUNDER: + case sfp.NODE_TYPE_NET_OPTION_NAME_POPUP: + case sfp.NODE_TYPE_NET_OPTION_NAME_WEBRTC: + processResourceType('', type); + break; + case sfp.NODE_TYPE_NET_OPTION_NAME_3P: + rule.condition.domainType = parser.isNegatedOption(type) + ? 'firstParty' + : 'thirdParty'; + break; + case sfp.NODE_TYPE_NET_OPTION_NAME_ALL: + validResourceTypes.forEach(a => resourceTypes.add(a)); + break; + case sfp.NODE_TYPE_NET_OPTION_NAME_CSP: + if ( rule.action.responseHeaders ) { return; } + rule.action.type = 'modifyHeaders'; + rule.action.responseHeaders = [ { + header: 'content-security-policy', + operation: 'append', + value: parser.getNetOptionValue(type), + } ]; + defaultResourceTypes.add('main_frame'); + defaultResourceTypes.add('sub_frame'); + defaultResourceTypes.add('object'); + break; + case sfp.NODE_TYPE_NET_OPTION_NAME_CSS: + processResourceType('stylesheet', type); + break; + case sfp.NODE_TYPE_NET_OPTION_NAME_DENYALLOW: { + const { included, excluded } = parseHostnameList( + parser.getNetFilterDenyallowOptionIterator() + ); + if ( excluded.good.length !== 0 || excluded.bad.length !== 0 ) { return; } + if ( included.bad.length !== 0 ) { return; } + if ( included.good.length === 0 ) { return; } + for ( const hn of included.good ) { + excludedRequestDomains.add(hn); + } + break; + } + case sfp.NODE_TYPE_NET_OPTION_NAME_DOC: + processResourceType('main_frame', type); + break; + case sfp.NODE_TYPE_NET_OPTION_NAME_FONT: + processResourceType('font', type); + break; + case sfp.NODE_TYPE_NET_OPTION_NAME_FRAME: + processResourceType('sub_frame', type); + break; + case sfp.NODE_TYPE_NET_OPTION_NAME_FROM: { + const { included, excluded } = parseHostnameList( + parser.getNetFilterFromOptionIterator() + ); + if ( included.good.length === 0 ) { + if ( included.bad.length !== 0 ) { return; } + } + if ( excluded.bad.length !== 0 ) { return; } + for ( const hn of included.good ) { + initiatorDomains.add(hn); + } + for ( const hn of excluded.good ) { + excludedInitiatorDomains.add(hn); + } + break; + } + case sfp.NODE_TYPE_NET_OPTION_NAME_HEADER: { + const details = sfp.parseHeaderValue(parser.getNetOptionValue(type)); + const headerInfo = { + header: details.name, + }; + if ( details.value !== '' ) { + if ( details.isRegex ) { return; } + headerInfo.values = [ details.value ]; + } + rule.condition.responseHeaders = [ headerInfo ]; + break; + } + case sfp.NODE_TYPE_NET_OPTION_NAME_IMAGE: + processResourceType('image', type); + break; + case sfp.NODE_TYPE_NET_OPTION_NAME_IMPORTANT: + priority += 30; + break; + case sfp.NODE_TYPE_NET_OPTION_NAME_MATCHCASE: + rule.condition.isUrlFilterCaseSensitive = true; + break; + case sfp.NODE_TYPE_NET_OPTION_NAME_MEDIA: + processResourceType('media', type); + break; + case sfp.NODE_TYPE_NET_OPTION_NAME_METHOD: { + const value = parser.getNetOptionValue(type); + for ( const method of value.toLowerCase().split('|') ) { + const not = method.charCodeAt(0) === 0x7E /* '~' */; + if ( not ) { + excludedRequestMethods.add(method.slice(1)); + } else { + requestMethods.add(method); + } + } + break; + } + case sfp.NODE_TYPE_NET_OPTION_NAME_OBJECT: + processResourceType('object', type); + break; + case sfp.NODE_TYPE_NET_OPTION_NAME_OTHER: + processResourceType('other', type); + break; + case sfp.NODE_TYPE_NET_OPTION_NAME_PERMISSIONS: + if ( rule.action.responseHeaders ) { return; } + rule.action.type = 'modifyHeaders'; + rule.action.responseHeaders = [ { + header: 'permissions-policy', + operation: 'append', + value: parser.getNetOptionValue(type), + } ]; + defaultResourceTypes.add('main_frame'); + defaultResourceTypes.add('sub_frame'); + defaultResourceTypes.add('object'); + break; + case sfp.NODE_TYPE_NET_OPTION_NAME_PING: + processResourceType('ping', type); + break; + case sfp.NODE_TYPE_NET_OPTION_NAME_REASON: + break; + case sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECT: { + if ( rule.action.type !== 'block' ) { return; } + let value = parser.getNetOptionValue(type); + const match = /:(\d+)$/.exec(value); + if ( match ) { + const subpriority = parseInt(match[1], 10); + priority += Math.min(subpriority, 8); + value = value.slice(0, match.index); + } + if ( validRedirectResources.has(value) === false ) { return; } + rule.action.type = 'redirect'; + rule.action.redirect = { + extensionPath: `/web_accessible_resources/${validRedirectResources.get(value)}`, + }; + priority += 11; + break; + } + case sfp.NODE_TYPE_NET_OPTION_NAME_REMOVEPARAM: { + const details = sfp.parseQueryPruneValue(parser.getNetOptionValue(type)); + if ( details.bad ) { return; } + if ( details.not ) { return; } + if ( details.re ) { return; } + const removeParams = []; + if ( details.name ) { + removeParams.push(details.name); + } + rule.action.type = 'redirect'; + rule.action.redirect = { + transform: { queryTransform: { removeParams } } + }; + defaultResourceTypes.add('main_frame'); + defaultResourceTypes.add('sub_frame'); + defaultResourceTypes.add('xmlhttprequest'); + defaultUrlFilter = '?'; + break; + } + case sfp.NODE_TYPE_NET_OPTION_NAME_SCRIPT: + processResourceType('script', type); + break; + case sfp.NODE_TYPE_NET_OPTION_NAME_TO: { + const { included, excluded } = parseHostnameList( + parser.getNetFilterToOptionIterator() + ); + if ( included.good.length === 0 ) { + if ( included.bad.length !== 0 ) { return; } + } + if ( excluded.bad.length !== 0 ) { return; } + for ( const hn of included.good ) { + requestDomains.add(hn); + } + for ( const hn of excluded.good ) { + excludedRequestDomains.add(hn); + } + break; + } + case sfp.NODE_TYPE_NET_OPTION_NAME_URLTRANSFORM: { + const parsed = sfp.parseReplaceByRegexValue(parser.getNetOptionValue(type)); + if ( parsed === undefined ) { return; } + if ( parsed.re ) { return; } + rule.action.type = 'redirect'; + rule.action.redirect = { + regexSubstitution: parsed.replacement.replace(/\$(\d+)/g, '\\$1'), + }; + break; + } + case sfp.NODE_TYPE_NET_OPTION_NAME_XHR: + processResourceType('xmlhttprequest', type); + break; + case sfp.NODE_TYPE_NET_OPTION_NAME_WEBSOCKET: + processResourceType('websocket', type); + break; + default: + break; + } + } + if ( pattern === '*' && defaultUrlFilter !== '' ) { + rule.condition.urlFilter = defaultUrlFilter; + } + if ( initiatorDomains.size !== 0 ) { + rule.condition.initiatorDomains = Array.from(initiatorDomains).sort(); + } + if ( excludedInitiatorDomains.size !== 0 ) { + rule.condition.excludedInitiatorDomains = Array.from(excludedInitiatorDomains).sort(); + } + if ( requestDomains.size !== 0 ) { + rule.condition.requestDomains = Array.from(requestDomains).sort(); + } + if ( excludedRequestDomains.size !== 0 ) { + rule.condition.excludedRequestDomains = Array.from(excludedRequestDomains).sort(); + } + if ( requestMethods.size !== 0 ) { + rule.condition.requestMethods = Array.from(requestMethods).sort(); + } + if ( excludedRequestMethods.size !== 0 ) { + rule.condition.excludedRequestMethods = Array.from(excludedRequestMethods).sort(); + } + if ( resourceTypes.size === 0 && excludedResourceTypes.size === 0 ) { + defaultResourceTypes.forEach(a => resourceTypes.add(a)); + } + if ( resourceTypes.size !== 0 ) { + const types = Array.from(resourceTypes).filter(a => a !== '').sort(); + if ( types.length === 0 ) { return; } + rule.condition.resourceTypes = types; + } + if ( excludedResourceTypes.size !== 0 ) { + if ( resourceTypes.size !== 0 ) { return; } + rule.condition.excludedResourceTypes = Array.from(excludedResourceTypes).sort(); + } + if ( priority !== 0 ) { + rule.priority = priority; + } + return rule; +} + +/******************************************************************************/ + +export function parseFilters(text) { + if ( text.startsWith('---') ) { return; } + if ( text.endsWith('---') ) { return; } + const lines = text.split(/\n/); + if ( lines.some(a => a.startsWith(' ')) ) { return; } + let rules = []; + const parser = new sfp.AstFilterParser({ trustedSource: true }); + for ( const line of lines ) { + parser.parse(line); + if ( parser.isNetworkFilter() === false ) { continue; } + const rule = parseNetworkFilter(parser); + if ( rule === undefined ) { continue; } + rules.push(rule); + } + rules = minimizeRuleset(rules); + rules = minimizeRules(rules); + rules = validateRules(rules); + return rules; +} diff --git a/platform/mv3/extension/js/unpicker-ui.js b/platform/mv3/extension/js/unpicker-ui.js new file mode 100644 index 0000000000000..f881eb06d667b --- /dev/null +++ b/platform/mv3/extension/js/unpicker-ui.js @@ -0,0 +1,171 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant 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 { dom, qs$, qsa$ } from './dom.js'; +import { faIconsInit } from './fa-icons.js'; +import { toolOverlay } from './tool-overlay-ui.js'; + +/******************************************************************************/ + +function onMinimizeClicked() { + dom.cl.toggle(dom.root, 'minimized'); +} + +/******************************************************************************/ + +function highlight() { + const selectors = []; + for ( const selectorElem of qsa$('#customFilters .customFilter.on') ) { + selectors.push(selectorElem.dataset.selector); + } + if ( selectors.length !== 0 ) { + toolOverlay.postMessage({ + what: 'highlightFromSelector', + selector: selectors.join(','), + scrollTo: true, + }); + } else { + toolOverlay.postMessage({ what: 'unhighlight' }); + } +} + +/******************************************************************************/ + +function onFilterClicked(ev) { + const target = ev.target; + const filterElem = target.closest('.customFilter'); + if ( filterElem === null ) { return; } + const selectorElem = qs$(filterElem, ':scope > span.selector'); + if ( target === selectorElem ) { + if ( dom.cl.has(filterElem, 'on') ) { + dom.cl.remove(filterElem, 'on'); + } else { + dom.cl.remove('.customFilter.on', 'on'); + dom.cl.add(filterElem, 'on'); + } + highlight(); + return; + } + const selector = filterElem.dataset.selector; + const trashElem = qs$(filterElem, ':scope > span.remove'); + if ( target === trashElem ) { + dom.cl.add(filterElem, 'removed'); + dom.cl.remove(filterElem, 'on'); + toolOverlay.sendMessage({ what: 'removeCustomFilters', + hostname: toolOverlay.url.hostname, + selectors: [ selector ], + }).then(( ) => { + autoSelectFilter(); + }); + return; + } + const undoElem = qs$(filterElem, ':scope > span.undo'); + if ( target === undoElem ) { + dom.cl.remove(filterElem, 'removed'); + toolOverlay.sendMessage({ what: 'addCustomFilters', + hostname: toolOverlay.url.hostname, + selectors: [ selector ], + }).then(( ) => { + dom.cl.remove('.customFilter.on', 'on'); + dom.cl.add(filterElem, 'on'); + highlight(); + }); + return; + } +} + +/******************************************************************************/ + +function autoSelectFilter() { + let filterElem = qs$('.customFilter.on'); + if ( filterElem !== null ) { return; } + filterElem = qs$('.customFilter:not(.removed)'); + if ( filterElem !== null ) { + dom.cl.add(filterElem, 'on'); + } + highlight(); +} + +/******************************************************************************/ + +function populateFilters(selectors) { + const container = qs$('#customFilters'); + dom.clear(container); + const rowTemplate = qs$('template#customFilterRow'); + for ( const selector of selectors ) { + const fragment = rowTemplate.content.cloneNode(true); + const row = qs$(fragment, '.customFilter'); + row.dataset.selector = selector; + let text = selector; + if ( selector.startsWith('{') ) { + const o = JSON.parse(selector); + text = o.raw; + } + qs$(row, '.selector').textContent = text; + container.append(fragment); + } + faIconsInit(container); + autoSelectFilter(); +} + +/******************************************************************************/ + +async function startUnpicker() { + const selectors = await toolOverlay.sendMessage({ + what: 'customFiltersFromHostname', + hostname: toolOverlay.url.hostname, + }) + if ( selectors.length === 0 ) { + return quitUnpicker(); + } + await toolOverlay.postMessage({ what: 'terminateCustomFilters' }); + await toolOverlay.postMessage({ what: 'startTool' }); + populateFilters(selectors); + dom.on('#minimize', 'click', onMinimizeClicked); + dom.on('#customFilters', 'click', onFilterClicked); + dom.on('#quit', 'click', quitUnpicker); +} + +/******************************************************************************/ + +async function quitUnpicker() { + await toolOverlay.postMessage({ what: 'startCustomFilters' }); + toolOverlay.stop(); +} + +/******************************************************************************/ + +function onMessage(msg) { + switch ( msg.what ) { + case 'startTool': + startUnpicker(); + break; + default: + break; + } +} + +/******************************************************************************/ + +// Wait for the content script to establish communication +toolOverlay.start(onMessage); + +/******************************************************************************/ diff --git a/platform/mv3/extension/js/utils.js b/platform/mv3/extension/js/utils.js new file mode 100644 index 0000000000000..2fdd02eead032 --- /dev/null +++ b/platform/mv3/extension/js/utils.js @@ -0,0 +1,206 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2022-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 +*/ + +/******************************************************************************/ + +function parsedURLromOrigin(origin) { + try { + return new URL(origin); + } catch { + } +} + +/******************************************************************************/ + +const toBroaderHostname = hn => { + if ( hn === '*' ) { return ''; } + const pos = hn.indexOf('.'); + return pos !== -1 ? hn.slice(pos+1) : '*'; +}; + +/******************************************************************************/ + +// Is hna descendant hostname of hnb? + +const isDescendantHostname = (hna, hnb) => { + if ( hnb === 'all-urls' ) { return true; } + if ( hna.endsWith(hnb) === false ) { return false; } + if ( hna === hnb ) { return false; } + return hna.charCodeAt(hna.length - hnb.length - 1) === 0x2E /* '.' */; +}; + +/** + * Returns whether a hostname is part of a collection, or is descendant of an + * item in the collection. + * @param hna - the hostname representing the needle. + * @param iterb - an iterable representing the haystack of hostnames. + */ + +const isDescendantHostnameOfIter = (hna, iterb) => { + const setb = iterb instanceof Set ? iterb : new Set(iterb); + if ( setb.has('all-urls') || setb.has('*') ) { return true; } + let hn = hna; + while ( hn ) { + const pos = hn.indexOf('.'); + if ( pos === -1 ) { break; } + hn = hn.slice(pos + 1); + if ( setb.has(hn) ) { return true; } + } + return false; +}; + +/** + * Returns all hostnames in the first collection which are equal or descendant + * of hostnames in the second collection. + * @param itera - an iterable which hostnames must be filtered out. + * @param iterb - an iterable which hostnames must be matched. + */ + +const intersectHostnameIters = (itera, iterb) => { + const setb = iterb instanceof Set ? iterb : new Set(iterb); + if ( setb.has('all-urls') || setb.has('*') ) { return Array.from(itera); } + const out = []; + for ( const hna of itera ) { + if ( setb.has(hna) || isDescendantHostnameOfIter(hna, setb) ) { + out.push(hna); + } + } + return out; +}; + +const subtractHostnameIters = (itera, iterb) => { + const setb = iterb instanceof Set ? iterb : new Set(iterb); + if ( setb.has('all-urls') || setb.has('*') ) { return []; } + const out = []; + for ( const hna of itera ) { + if ( setb.has(hna) ) { continue; } + if ( isDescendantHostnameOfIter(hna, setb) ) { continue; } + out.push(hna); + } + return out; +}; + +/******************************************************************************/ + +export const matchFromHostname = hn => + hn === '*' || hn === 'all-urls' ? '' : `*://*.${hn}/*`; + +export const matchesFromHostnames = hostnames => { + const out = []; + for ( const hn of hostnames ) { + out.push(matchFromHostname(hn)); + } + return out; +}; + +export const hostnameFromMatch = origin => { + if ( origin === '' || origin === '*://*/*' ) { return 'all-urls'; } + const match = /^[^:]+:\/\/(?:\*\.)?([^/]+)\/\*/.exec(origin); + if ( match === null ) { return ''; } + return match[1]; +}; + +export const hostnamesFromMatches = origins => { + const out = []; + for ( const origin of origins ) { + const hn = hostnameFromMatch(origin); + if ( hn === '' ) { continue; } + out.push(hn); + } + return out; +}; + +/******************************************************************************/ + +export const deepEquals = (a, b) => { + switch ( typeof a ) { + case 'undefined': + case 'boolean': + case 'number': + case 'string': + return a === b; + } + // case 'object': + if ( typeof b !== 'object' ) { return false; } + if ( a === null || b === null ) { return a === b; } + if ( Array.isArray(a) || Array.isArray(b) ) { + if ( Array.isArray(a) === false || Array.isArray(b) === false ) { return false; } + if ( a.length !== b.length ) { return false; } + for ( let i = 0; i < a.length; i++ ) { + if ( deepEquals(a[i], b[i]) === false ) { return false; } + } + return true; + } + const akeys = Object.keys(a); + const bkeys = Object.keys(b); + if ( akeys.length !== bkeys.length ) { return false; } + for ( const k of akeys ) { + if ( deepEquals(a[k], b[k]) === false ) { return false; } + } + return true; +}; + +/******************************************************************************/ + +const broadcastMessage = message => { + const bc = new self.BroadcastChannel('uBOL'); + bc.postMessage(message); +}; + +/******************************************************************************/ + +// Important: We need to sort the arrays for fast comparison +const strArrayEq = (a = [], b = [], sort = true) => { + const alen = a.length; + if ( alen !== b.length ) { return false; } + if ( sort ) { a.sort(); b.sort(); } + for ( let i = 0; i < alen; i++ ) { + if ( a[i] !== b[i] ) { return false; } + } + return true; +}; + +/******************************************************************************/ + +// The goal is just to be able to find out whether a specific version is older +// than another one. + +export function intFromVersion(version) { + const match = /^(\d+)\.(\d+)\.(\d+)$/.exec(version); + if ( match === null ) { return 0; } + const year = parseInt(match[1], 10); + const monthday = parseInt(match[2], 10); + const min = parseInt(match[3], 10); + return (year - 2022) * (1232 * 2400) + monthday * 2400 + min; +} + +/******************************************************************************/ + +export { + broadcastMessage, + parsedURLromOrigin, + toBroaderHostname, + isDescendantHostname, + isDescendantHostnameOfIter, + intersectHostnameIters, + subtractHostnameIters, + strArrayEq, +}; diff --git a/platform/mv3/extension/js/zapper-ui.js b/platform/mv3/extension/js/zapper-ui.js new file mode 100644 index 0000000000000..433ea0fa76cc1 --- /dev/null +++ b/platform/mv3/extension/js/zapper-ui.js @@ -0,0 +1,133 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant 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 { dom } from './dom.js'; +import { toolOverlay } from './tool-overlay-ui.js'; + +/******************************************************************************/ + +function onSvgClicked(ev) { + // If zap mode, highlight element under mouse, this makes the zapper usable + // on touch screens. + toolOverlay.postMessage({ + what: 'zapElementAtPoint', + mx: ev.clientX, + my: ev.clientY, + options: { + stay: true, + highlight: dom.cl.has(dom.root, 'mobile') && + ev.target !== toolOverlay.svgIslands, + }, + }); +} + +/******************************************************************************/ + +const onSvgTouch = (( ) => { + let startX = 0, startY = 0; + let t0 = 0; + return ev => { + if ( ev.type === 'touchstart' ) { + startX = ev.touches[0].screenX; + startY = ev.touches[0].screenY; + t0 = ev.timeStamp; + return; + } + if ( startX === undefined ) { return; } + const stopX = ev.changedTouches[0].screenX; + const stopY = ev.changedTouches[0].screenY; + const distance = Math.sqrt( + Math.pow(stopX - startX, 2) + + Math.pow(stopY - startY, 2) + ); + // Interpret touch events as a tap if: + // - Swipe is not valid; and + // - The time between start and stop was less than 200ms. + const duration = ev.timeStamp - t0; + if ( distance >= 32 || duration >= 200 ) { return; } + onSvgClicked({ + type: 'touch', + target: ev.target, + clientX: ev.changedTouches[0].pageX, + clientY: ev.changedTouches[0].pageY, + }); + ev.preventDefault(); + }; +})(); + +/******************************************************************************/ + +function onKeyPressed(ev) { + // Delete + if ( ev.key === 'Delete' || ev.key === 'Backspace' ) { + toolOverlay.postMessage({ + what: 'zapElementAtPoint', + options: { stay: true }, + }); + return; + } + // Esc + if ( ev.key === 'Escape' || ev.which === 27 ) { + quitZapper(); + return; + } +} + +/******************************************************************************/ + +function startZapper() { + toolOverlay.postMessage({ what: 'startTool' }); + self.addEventListener('keydown', onKeyPressed, true); + dom.on('svg#overlay', 'click', onSvgClicked); + dom.on('svg#overlay', 'touchstart', onSvgTouch, { passive: true }); + dom.on('svg#overlay', 'touchend', onSvgTouch); + dom.on('#quit', 'click', quitZapper ); + dom.on('#pick', 'click', resetZapper ); + toolOverlay.highlightElementUnderMouse(true); +} + +function quitZapper() { + self.removeEventListener('keydown', onKeyPressed, true); + toolOverlay.stop(); +} + +function resetZapper() { + toolOverlay.postMessage({ what: 'unhighlight' }); +} + +/******************************************************************************/ + +function onMessage(msg) { + switch ( msg.what ) { + case 'startTool': + startZapper(); + break; + default: + break; + } +} + +/******************************************************************************/ + +// Wait for the content script to establish communication +toolOverlay.start(onMessage); + +/******************************************************************************/ diff --git a/platform/mv3/extension/lib/codemirror/README.md b/platform/mv3/extension/lib/codemirror/README.md new file mode 100644 index 0000000000000..ac2833e77e7a9 --- /dev/null +++ b/platform/mv3/extension/lib/codemirror/README.md @@ -0,0 +1,9 @@ +Steps to build `cm6.bundle.ubol.min.js` -- command line from repo root: + +- `git submodule init platform/mv3/extension/lib/codemirror/codemirror-ubol` +- `cd platform/mv3/extension/lib/codemirror/codemirror-ubol/` + - We are now in a customized repo forked from +- `npm install` +- `npm run build` +- `cm6.bundle.ubol.min.js` should be in `dist` directory +- This is the origin of the `cm6.bundle.ubol.min.js` in the current directory diff --git a/platform/mv3/extension/lib/codemirror/codemirror-ubol b/platform/mv3/extension/lib/codemirror/codemirror-ubol new file mode 160000 index 0000000000000..0cd9b7a77cd16 --- /dev/null +++ b/platform/mv3/extension/lib/codemirror/codemirror-ubol @@ -0,0 +1 @@ +Subproject commit 0cd9b7a77cd166186ebdb483d6aac82f616685df diff --git a/platform/mv3/extension/lib/codemirror/codemirror.LICENSE b/platform/mv3/extension/lib/codemirror/codemirror.LICENSE new file mode 100644 index 0000000000000..9a91f48619f48 --- /dev/null +++ b/platform/mv3/extension/lib/codemirror/codemirror.LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (C) 2018-2021 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/platform/mv3/extension/managed_storage.json b/platform/mv3/extension/managed_storage.json new file mode 100644 index 0000000000000..85446f2e63cfe --- /dev/null +++ b/platform/mv3/extension/managed_storage.json @@ -0,0 +1,40 @@ +{ + "$schema": "http://json-schema.org/draft-03/schema#", + "type": "object", + "properties": { + "defaultFiltering": { + "title": "The default filtering mode", + "description": "Can be one of \"none\", \"basic\", \"optimal\", \"complete\".", + "type": "string" + }, + "disabledFeatures": { + "title": "User interface features to disable", + "description": "A list of tokens, each of which correspond to a user interface feature to disable.", + "type": "array", + "items": { "type": "string" } + }, + "disableFirstRunPage": { + "title": "Disable first run page", + "type": "boolean" + }, + "noFiltering": { + "title": "List of domains for which no filtering should occur", + "type": "array", + "items": { "type": "string" } + }, + "rulesets": { + "title": "Rulesets to add/remove", + "description": "Prefix a ruleset id with '+' to add, or '-' to remove. Use '-*' to disable all non-default lists.", + "type": "array", + "items": { "type": "string" } + }, + "showBlockedCount": { + "title": "Enable/disable toolbar icon count badge", + "type": "boolean" + }, + "strictBlockMode": { + "title": "Enable/disable strict blocking", + "type": "boolean" + } + } +} diff --git a/platform/mv3/extension/matched-rules.html b/platform/mv3/extension/matched-rules.html new file mode 100644 index 0000000000000..493c681fada78 --- /dev/null +++ b/platform/mv3/extension/matched-rules.html @@ -0,0 +1,33 @@ + + + + + + +Matched rules + + + + + + + + + + +
    +
    + + + + + + + + + diff --git a/platform/mv3/extension/picker-ui.html b/platform/mv3/extension/picker-ui.html new file mode 100644 index 0000000000000..d9e73d5f931ed --- /dev/null +++ b/platform/mv3/extension/picker-ui.html @@ -0,0 +1,56 @@ + + + + + + +uBO Lite Zapper + + + + + + + + + + + + + + + + + + + diff --git a/platform/mv3/extension/popup.html b/platform/mv3/extension/popup.html new file mode 100644 index 0000000000000..e60da7d28d466 --- /dev/null +++ b/platform/mv3/extension/popup.html @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + +
    +
    ­
    + +
    +
    + + + + +
    + +

    _
    + +
    + + + bolt + _ + + + eye-slash + _ + + + eye-open + _ + + + comment-alt + _ + +
    + +
    + list-altShow matched rules + cogs +
    +
    + + + + + + + + + + diff --git a/platform/mv3/extension/report.html b/platform/mv3/extension/report.html new file mode 100644 index 0000000000000..cde7614191306 --- /dev/null +++ b/platform/mv3/extension/report.html @@ -0,0 +1,69 @@ + + + + + + +uBO Lite — Report + + + + + + + + + + + +
    + +

    +

    +
    +
    +

    + +
    +
    +
    +

    +
    + +

    +

    +
    + +

    +

    + +

    + +
    +
    +
    +
    +
    
    +    
    +
    + +
    + + + + + + + + diff --git a/platform/mv3/extension/strictblock.html b/platform/mv3/extension/strictblock.html new file mode 100644 index 0000000000000..9cd2570302a27 --- /dev/null +++ b/platform/mv3/extension/strictblock.html @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + +
    + + +
    +

    + +
    + + + + + +
    + +
    + +
    + + + +
    +
    + + + + + + + diff --git a/platform/mv3/extension/unpicker-ui.html b/platform/mv3/extension/unpicker-ui.html new file mode 100644 index 0000000000000..3402f0267c622 --- /dev/null +++ b/platform/mv3/extension/unpicker-ui.html @@ -0,0 +1,40 @@ + + + + + + +uBO Lite Zapper + + + + + + + + + + + + + + + + + + + + + diff --git a/platform/mv3/extension/zapper-ui.html b/platform/mv3/extension/zapper-ui.html new file mode 100644 index 0000000000000..7e51230e18cb0 --- /dev/null +++ b/platform/mv3/extension/zapper-ui.html @@ -0,0 +1,32 @@ + + + + + + +uBO Lite Zapper + + + + + + + + + + + + + + + diff --git a/platform/mv3/firefox/manifest.json b/platform/mv3/firefox/manifest.json new file mode 100644 index 0000000000000..e2ca46cdbb2e2 --- /dev/null +++ b/platform/mv3/firefox/manifest.json @@ -0,0 +1,99 @@ +{ + "action": { + "default_area": "navbar", + "default_icon": { + "16": "img/icon_16.png", + "32": "img/icon_32.png", + "64": "img/icon_64.png" + }, + "default_popup": "popup.html" + }, + "author": "Raymond Hill", + "background": { + "scripts": [ "/js/background.js" ], + "type": "module" + }, + "browser_specific_settings": { + "gecko": { + "id": "uBOLiteRedux@raymondhill.net", + "strict_min_version": "128.0", + "data_collection_permissions": { + "required": [ "none" ] + } + }, + "gecko_android": { + "strict_min_version": "128.0" + } + }, + "commands": { + "enter-zapper-mode": { + "description": "__MSG_zapperTipEnter__" + }, + "enter-picker-mode": { + "description": "__MSG_pickerTipEnter__" + } + }, + "declarative_net_request": { + "rule_resources": [ + ] + }, + "default_locale": "en", + "description": "__MSG_extShortDesc__", + "icons": { + "16": "img/icon_16.png", + "32": "img/icon_32.png", + "64": "img/icon_64.png", + "128": "img/icon_128.png" + }, + "manifest_version": 3, + "name": "uBO Lite", + "options_ui": { + "open_in_tab": true, + "page": "dashboard.html" + }, + "host_permissions": [ + "" + ], + "permissions": [ + "activeTab", + "declarativeNetRequest", + "scripting", + "storage" + ], + "short_name": "uBO Lite", + "version": "1.0", + "web_accessible_resources": [ + { + "resources": [ + "/strictblock.html" + ], + "matches": [ + "" + ] + }, + { + "resources": [ + "/zapper-ui.html" + ], + "matches": [ + "" + ] + }, + { + "resources": [ + "/picker-ui.html" + ], + "matches": [ + "" + ] + }, + { + "resources": [ + "/unpicker-ui.html" + ], + "matches": [ + "" + ] + } + ] +} diff --git a/platform/mv3/firefox/patch-ruleset.js b/platform/mv3/firefox/patch-ruleset.js new file mode 100644 index 0000000000000..a8bd25c1b6f72 --- /dev/null +++ b/platform/mv3/firefox/patch-ruleset.js @@ -0,0 +1,30 @@ +/******************************************************************************* + + 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 +*/ + +export function patchRuleset(ruleset) { + const out = []; + for ( const rule of ruleset ) { + const condition = rule.condition; + if ( Array.isArray(condition.responseHeaders) ) { continue; } + out.push(rule); + } + return out; +} diff --git a/platform/mv3/make-rulesets.js b/platform/mv3/make-rulesets.js new file mode 100644 index 0000000000000..4ae57bc6b9767 --- /dev/null +++ b/platform/mv3/make-rulesets.js @@ -0,0 +1,1198 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2022-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 makeScriptlet from './make-scriptlets.js'; +import * as sfp from './js/static-filtering-parser.js'; + +import { + createHash, + randomBytes, +} from 'crypto'; +import { + dnrRulesetFromRawLists, + mergeRules, +} from './js/static-dnr-filtering.js'; + +import { execSync } from 'node:child_process'; +import fs from 'fs/promises'; +import { literalStrFromRegex } from './js/regex-analyzer.js'; +import path from 'path'; +import process from 'process'; +import redirectResourcesMap from './js/redirect-resources.js'; +import { safeReplace } from './safe-replace.js'; + +/******************************************************************************/ + +const commandLineArgs = (( ) => { + const args = new Map(); + let name, value; + for ( const arg of process.argv.slice(2) ) { + const pos = arg.indexOf('='); + if ( pos === -1 ) { + name = arg; + value = ''; + } else { + name = arg.slice(0, pos); + value = arg.slice(pos+1); + } + args.set(name, value); + } + return args; +})(); + +const platform = commandLineArgs.get('platform') || 'chromium'; +const outputDir = commandLineArgs.get('output') || '.'; +const cacheDir = `${outputDir}/../mv3-data`; +const rulesetDir = `${outputDir}/rulesets`; +const scriptletDir = `${rulesetDir}/scripting`; +const envExtra = (( ) => { + const env = commandLineArgs.get('env'); + return env ? env.split('|') : []; +})(); +const env = [ + platform, + 'native_css_has', + 'mv3', + 'ublock', + 'ubol', + 'user_stylesheet', + ...envExtra, +]; + +if ( platform === 'edge' ) { + env.push('chromium'); +} + +/******************************************************************************/ + +const jsonSetMapReplacer = (k, v) => { + if ( v instanceof Set || v instanceof Map ) { + if ( v.size === 0 ) { return; } + return Array.from(v); + } + return v; +}; + +/******************************************************************************/ + +const consoleLog = console.log; +const stdOutput = []; + +const log = (text, silent = true) => { + silent = silent && text.startsWith('!!!') === false; + stdOutput.push(text); + if ( silent === false ) { + consoleLog(text); + } +}; + +console.log = log; + +const logProgress = text => { + process?.stdout?.clearLine?.(); + process?.stdout?.cursorTo?.(0); + process?.stdout?.write?.(text.length > 120 ? `${text.slice(0, 119)}… ` : `${text} `); +}; + +const isHnRegexOrPath = hn => hn.includes('/'); + +/******************************************************************************/ + +async function fetchText(url, cacheDir) { + logProgress(`Reading locally cached ${path.basename(url)}`); + const fname = url + .replace(/^https?:\/\//, '') + .replace(/\//g, '_');(url); + const content = await fs.readFile( + `${cacheDir}/${fname}`, + { encoding: 'utf8' } + ).catch(( ) => { }); + if ( content !== undefined ) { + log(`\tFetched local ${url}`); + return { url, content }; + } + logProgress(`Fetching remote ${path.basename(url)}`); + log(`\tFetching remote ${url}`); + const response = await fetch(url).catch(( ) => { }); + if ( response === undefined ) { + return { url, error: `Fetching failed: ${url}` }; + } + let text; + if ( response.ok ) { + text = await response.text().catch(( ) => { }); + } else { + text = await fallbackFetchText(url).catch(( ) => { }); + } + if ( text === undefined ) { + return { url, error: `Fetching text content failed: ${url}` }; + } + writeFile(`${cacheDir}/${fname}`, text); + return { url, content: text }; +} + +async function fallbackFetchText(url) { + const match = /^https:\/\/raw\.githubusercontent\.com\/([^/]+)\/([^/]+)\/master\/([^?]+)/.exec(url); + if ( match === null ) { return; } + logProgress(`\tGitHub CLI-fetching remote ${path.basename(url)}`); + // https://docs.github.com/en/rest/repos/contents + const content = execSync(`gh api \ + -H "Accept: application/vnd.github.raw+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + /repos/${match[1]}/${match[2]}/contents/${match[3]} \ + `, { encoding: 'utf8' }); + return content; +} + +/******************************************************************************/ + +const writeFile = async (fname, data) => { + const dir = path.dirname(fname); + await fs.mkdir(dir, { recursive: true }); + const promise = fs.writeFile(fname, data); + writeOps.push(promise); + return promise; +}; + +const copyFile = async (from, to) => { + const dir = path.dirname(to); + await fs.mkdir(dir, { recursive: true }); + const promise = fs.copyFile(from, to); + writeOps.push(promise); + return promise; +}; + +const writeOps = []; + +/******************************************************************************/ + +const ruleResources = []; +const rulesetDetails = []; +const scriptletStats = new Map(); +const genericDetails = new Map(); +const requiredRedirectResources = new Set(); +let networkBad = new Set(); + +// This will be used to sign our inserted `!#trusted on` directives +const secret = createHash('sha256').update(randomBytes(16)).digest('hex').slice(0,16); +log(`Secret: ${secret}`, false); + +/******************************************************************************/ + +const restrSeparator = '(?:[^%.0-9a-z_-]|$)'; + +const rePatternFromUrlFilter = s => { + let anchor = 0b000; + if ( s.startsWith('||') ) { + anchor = 0b100; + s = s.slice(2); + } else if ( s.startsWith('|') ) { + anchor = 0b010; + s = s.slice(1); + } + if ( s.endsWith('|') ) { + anchor |= 0b001; + s = s.slice(0, -1); + } + let reStr = s.replace(rePatternFromUrlFilter.rePlainChars, '\\$&') + .replace(rePatternFromUrlFilter.reSeparators, restrSeparator) + .replace(rePatternFromUrlFilter.reDanglingAsterisks, '') + .replace(rePatternFromUrlFilter.reAsterisks, '.*?'); + if ( anchor & 0b100 ) { + reStr = ( + reStr.startsWith('\\.') ? + rePatternFromUrlFilter.restrHostnameAnchor2 : + rePatternFromUrlFilter.restrHostnameAnchor1 + ) + reStr; + } else if ( anchor & 0b010 ) { + reStr = '^' + reStr; + } + if ( anchor & 0b001 ) { + reStr += '$'; + } + return reStr; +}; +rePatternFromUrlFilter.rePlainChars = /[.+?${}()|[\]\\]/g; +rePatternFromUrlFilter.reSeparators = /\^/g; +rePatternFromUrlFilter.reDanglingAsterisks = /^\*+|\*+$/g; +rePatternFromUrlFilter.reAsterisks = /\*+/g; +rePatternFromUrlFilter.restrHostnameAnchor1 = '^[a-z-]+://(?:[^/?#]+\\.)?'; +rePatternFromUrlFilter.restrHostnameAnchor2 = '^[a-z-]+://(?:[^/?#]+)?'; + +/******************************************************************************/ + +async function fetchList(assetDetails) { + // Remember fetched URLs + const fetchedURLs = new Set(); + + // Fetch list and expand `!#include` directives + let parts = assetDetails.urls.map(url => ({ url })); + while ( parts.every(v => typeof v === 'string') === false ) { + const newParts = []; + for ( const part of parts ) { + if ( typeof part === 'string' ) { + newParts.push(part); + continue; + } + if ( fetchedURLs.has(part.url) ) { + newParts.push(''); + continue; + } + fetchedURLs.add(part.url); + if ( + assetDetails.trusted || + part.url.startsWith('https://ublockorigin.github.io/uAssets/filters/') + ) { + newParts.push(`!#trusted on ${secret}`); + } + newParts.push( + fetchText(part.url, cacheDir).then(details => { + const { url, error } = details; + if ( error !== undefined ) { return details; } + const content = details.content.trim(); + if ( /* content === '' || */ /^<.*>$/.test(content) ) { + return { url, error: `Bad content: ${url}` }; + } + return { url, content }; + }) + ); + newParts.push(`!#trusted off ${secret}`); + } + if ( parts.some(v => typeof v === 'object' && v.error) ) { return; } + parts = await Promise.all(newParts); + parts = sfp.utils.preparser.expandIncludes(parts, env); + } + const text = parts.join('\n'); + + if ( text === '' ) { + log('No filterset found', false); + } + return text; +} + +/******************************************************************************/ + +const isUnsupported = rule => + rule._error !== undefined; + +const isRegex = rule => + rule.condition !== undefined && + rule.condition.regexFilter !== undefined; + +const isGood = rule => + isUnsupported(rule) === false && + /^(allow|block|redirect|modifyHeaders|allowAllRequests)$/.test(rule.action?.type); + +const isURLSkip = rule => + isUnsupported(rule) === false && + rule.action !== undefined && + rule.action.type === 'urlskip'; + +/******************************************************************************/ + +async function patchRuleset(ruleset) { + return import(`./${platform}/patch-ruleset.js`).then(module => { + return module.patchRuleset(ruleset) + }).catch(( ) => { + return ruleset; + }); +} + +/******************************************************************************/ + +// Two distinct hostnames: +// www.example.com +// example.com +// Can be reduced to a single one: +// example.com +// Since if example.com matches, then www.example.com (or any other subdomain +// of example.com) will always match. + +function pruneHostnameArray(hostnames) { + const rootMap = new Map(); + for ( const hostname of hostnames ) { + const labels = hostname.split('.'); + let currentMap = rootMap; + let i = labels.length; + while ( i-- ) { + const label = labels[i]; + let nextMap = currentMap.get(label); + if ( nextMap === null ) { break; } + if ( nextMap === undefined ) { + if ( i === 0 ) { + currentMap.set(label, (nextMap = null)); + } else { + currentMap.set(label, (nextMap = new Map())); + } + } else if ( i === 0 ) { + currentMap.set(label, null); + } + currentMap = nextMap; + } + } + const assemble = (currentMap, currentHostname, out) => { + for ( const [ label, nextMap ] of currentMap ) { + const nextHostname = currentHostname === '' + ? label + : `${label}.${currentHostname}`; + if ( nextMap === null ) { + out.push(nextHostname); + } else { + assemble(nextMap, nextHostname, out); + } + } + return out; + }; + return assemble(rootMap, '', []); +} + +/******************************************************************************* + * + * For large rulesets, one rule per line for compromise between size and + * readability. This also means that the number of lines in resulting file + * representative of the number of rules in the ruleset. + * + * */ + +function toJSONRuleset(ruleset) { + const nodupProps = [ 'domains', 'excludedDomains', 'requestDomains', 'excludedRequestDomains', 'initiatorDomains', 'excludedInitiatorDomains' ]; + for ( const { condition } of ruleset ) { + if ( condition === undefined ) { continue; } + for ( const prop of nodupProps ) { + if ( condition[prop] === undefined ) { continue; } + condition[prop] = Array.from(new Set(condition[prop])); + } + } + const sortProps = [ 'requestDomains', 'initiatorDomains', 'domains' ]; + ruleset.sort((a, b) => { + let aLen = 0, bLen = 0; + for ( const prop of sortProps ) { + aLen += a.condition[prop]?.length ?? 0; + bLen += b.condition[prop]?.length ?? 0; + } + return bLen - aLen; + }); + const replacer = (k, v) => { + if ( k.startsWith('_') ) { return; } + if ( Array.isArray(v) ) { + return v.sort(); + } + if ( v instanceof Object ) { + const sorted = {}; + for ( const kk of Object.keys(v).sort() ) { + sorted[kk] = v[kk]; + } + return sorted; + } + return v; + }; + const indent = ruleset.length > 10 ? undefined : 1; + const out = []; + let id = 1; + for ( const rule of ruleset ) { + rule.id = id++; + out.push(JSON.stringify(rule, replacer, indent)); + } + return `[\n${out.join(',\n')}\n]\n`; +} + +/******************************************************************************/ + +function toStrictBlockRule(rule, out) { + if ( rule.action.type !== 'block' ) { return; } + const { condition } = rule; + if ( condition === undefined ) { return; } + if ( condition.domainType ) { return; } + if ( condition.excludedResourceTypes ) { return; } + if ( condition.requestMethods ) { return; } + if ( condition.excludedRequestMethods ) { return; } + if ( condition.responseHeaders ) { return; } + if ( condition.excludedResponseHeaders ) { return; } + if ( condition.initiatorDomains ) { return; } + if ( condition.excludedInitiatorDomains ) { return; } + const { resourceTypes } = condition; + if ( resourceTypes === undefined ) { + if ( condition.requestDomains === undefined ) { return; } + } else if ( resourceTypes.includes('main_frame') === false ) { + return; + } + let regexFilter; + if ( condition.urlFilter ) { + regexFilter = rePatternFromUrlFilter(condition.urlFilter); + } else if ( condition.regexFilter ) { + regexFilter = condition.regexFilter; + } else { + regexFilter = '^https?://.*'; + } + if ( regexFilter.startsWith('^') === false ) { + regexFilter = `^.*${regexFilter}`; + } + if ( + regexFilter.endsWith('$') === false && + regexFilter.endsWith('.*') === false && + regexFilter.endsWith('.+') === false + ) { + regexFilter = `${regexFilter}.*`; + } + const strictBlockRule = out.get(regexFilter) || { + action: { + type: 'redirect', + redirect: { + regexSubstitution: `/strictblock.html#\\0`, + }, + }, + condition: { + regexFilter, + resourceTypes: [ 'main_frame' ], + }, + priority: 29, + }; + if ( condition.requestDomains ) { + strictBlockRule.condition.requestDomains ??= []; + strictBlockRule.condition.requestDomains = Array.from( + new Set([ + ...strictBlockRule.condition.requestDomains, + ...condition.requestDomains, + ]) + ); + } + if ( condition.excludedRequestDomains ) { + strictBlockRule.condition.excludedRequestDomains ??= []; + strictBlockRule.condition.excludedRequestDomains = Array.from( + new Set([ + ...strictBlockRule.condition.excludedRequestDomains, + ...condition.excludedRequestDomains, + ]) + ); + } + out.set(regexFilter, strictBlockRule); +} +toStrictBlockRule.ruleId = 1; + +/******************************************************************************/ + +async function processNetworkFilters(assetDetails, network) { + const { ruleset: rules } = network; + log(`Input filter count: ${network.filterCount}`); + log(`\tAccepted filter count: ${network.acceptedFilterCount}`); + log(`\tRejected filter count: ${network.rejectedFilterCount}`); + log(`Output rule count: ${rules.length}`); + + // Minimize requestDomains arrays + for ( const rule of rules ) { + const condition = rule.condition; + if ( condition === undefined ) { continue; } + const requestDomains = condition.requestDomains; + if ( requestDomains === undefined ) { continue; } + const beforeCount = requestDomains.length; + condition.requestDomains = pruneHostnameArray(requestDomains); + const afterCount = condition.requestDomains.length; + if ( afterCount !== beforeCount ) { + log(`\tPruning requestDomains: from ${beforeCount} to ${afterCount}`); + } + } + + // Add native DNR ruleset if present + if ( assetDetails.dnrURL ) { + const result = await fetchText(assetDetails.dnrURL, cacheDir); + for ( const rule of JSON.parse(result.content) ) { + rules.push(rule); + } + } + + const staticRules = await patchRuleset( + rules.filter(rule => isGood(rule) && isRegex(rule) === false) + ); + log(`\tStatic rules: ${staticRules.length}`); + log(staticRules + .filter(rule => Array.isArray(rule._warning)) + .map(rule => rule._warning.map(v => `\t\t${v}`)) + .join('\n'), true + ); + + const regexRules = await patchRuleset( + rules.filter(rule => isGood(rule) && isRegex(rule)) + ); + log(`\tMaybe good (regexes): ${regexRules.length}`); + + staticRules.forEach(rule => { + if ( rule.action.redirect?.extensionPath === undefined ) { return; } + requiredRedirectResources.add( + rule.action.redirect.extensionPath.replace(/^\/+/, '') + ); + }); + + const urlskips = new Map(); + for ( const rule of rules ) { + if ( isURLSkip(rule) === false ) { continue; } + if ( rule.__modifierAction !== 0 ) { continue; } + const { condition } = rule; + if ( condition.resourceTypes ) { + if ( condition.resourceTypes.includes('main_frame') === false ) { + continue; + } + } + const { urlFilter, regexFilter, requestDomains } = condition; + let re; + if ( urlFilter !== undefined ) { + re = rePatternFromUrlFilter(urlFilter); + } else if ( regexFilter !== undefined ) { + re = regexFilter; + } else { + re = '^'; + } + const rawSteps = rule.__modifierValue; + const steps = rawSteps.includes(' ') && rawSteps.split(/ +/) || [ rawSteps ]; + const keyEntry = { + re, + c: condition.isUrlFilterCaseSensitive, + steps, + } + const key = JSON.stringify(keyEntry); + let actualEntry = urlskips.get(key); + if ( actualEntry === undefined ) { + urlskips.set(key, keyEntry); + actualEntry = keyEntry; + } + if ( requestDomains !== undefined ) { + if ( actualEntry.hostnames === undefined ) { + actualEntry.hostnames = []; + } + actualEntry.hostnames.push(...requestDomains); + } + } + log(`\turlskip=: ${urlskips.size}`); + + const bad = rules.filter(rule => + isUnsupported(rule) + ); + log(`\tUnsupported: ${bad.length}`); + log(bad.map(rule => rule._error.map(v => `\t\t${v}`)).join('\n'), true); + + writeFile(`${rulesetDir}/main/${assetDetails.id}.json`, + toJSONRuleset(staticRules) + ); + + if ( regexRules.length !== 0 ) { + writeFile(`${rulesetDir}/regex/${assetDetails.id}.json`, + toJSONRuleset(regexRules) + ); + } + + const strictBlocked = new Map(); + for ( const rule of staticRules ) { + toStrictBlockRule(rule, strictBlocked); + } + if ( strictBlocked.size !== 0 ) { + mergeRules(strictBlocked, 'requestDomains'); + writeFile(`${rulesetDir}/strictblock/${assetDetails.id}.json`, + toJSONRuleset(Array.from(strictBlocked.values())) + ); + } + + if ( urlskips.size !== 0 ) { + writeFile(`${rulesetDir}/urlskip/${assetDetails.id}.json`, + JSON.stringify(Array.from(urlskips.values()), null, 1) + ); + } + + return { + total: rules.length, + plain: staticRules.length, + rejected: bad.length, + regex: regexRules.length, + strictblock: strictBlocked.size, + urlskip: urlskips.size, + }; +} + +/******************************************************************************/ + +// TODO: unify css/scriptlet processing code since now css styles are +// injected using scriptlet injection. + +// Load all available scriptlets into a key-val map, where the key is the +// scriptlet token, and val is the whole content of the file. + +let scriptletsMapPromise; + +function loadAllSourceScriptlets() { + if ( scriptletsMapPromise !== undefined ) { + return scriptletsMapPromise; + } + + scriptletsMapPromise = fs.readdir('./scriptlets').then(files => { + const readTemplateFile = file => + fs.readFile(`./scriptlets/${file}`, { encoding: 'utf8' }) + .then(text => ({ file, text })); + const readPromises = []; + for ( const file of files ) { + readPromises.push(readTemplateFile(file)); + } + return Promise.all(readPromises).then(results => { + const originalScriptletMap = new Map(); + for ( const details of results ) { + originalScriptletMap.set( + details.file.replace('.template.js', '') + .replace('.template.css', ''), + details.text + ); + } + return originalScriptletMap; + }); + }); + + return scriptletsMapPromise; +} + +/******************************************************************************/ + +// http://www.cse.yorku.ca/~oz/hash.html#djb2 +// Must mirror content script surveyor's version + +async function processGenericCosmeticFilters( + assetDetails, + selectorList, + exceptionList, + declarativeMap +) { + const exceptionSet = new Set( + exceptionList && + exceptionList.filter(a => a.key !== undefined).map(a => a.selector) + ); + + const genericSelectorMap = new Map(); + if ( selectorList ) { + for ( const { key, selector } of selectorList ) { + if ( key === undefined ) { continue; } + if ( exceptionSet.has(selector) ) { continue; } + const type = key.charCodeAt(0); + const hash = hashFromStr(type, key.slice(1)); + const selectors = genericSelectorMap.get(hash); + if ( selectors === undefined ) { + genericSelectorMap.set(hash, selector) + } else { + genericSelectorMap.set(hash, `${selectors},\n${selector}`) + } + } + } + + // Specific exceptions + const genericExceptionSieve = new Set(); + const genericExceptionMap = new Map(); + if ( declarativeMap ) { + for ( const [ exception, details ] of declarativeMap ) { + if ( details.rejected ) { continue; } + if ( details.key === undefined ) { continue; } + if ( details.matches !== undefined ) { continue; } + if ( details.excludeMatches === undefined ) { continue; } + const type = details.key.charCodeAt(0); + const hash = hashFromStr(type, details.key.slice(1)); + genericExceptionSieve.add(hash); + for ( const hn of details.excludeMatches ) { + const exceptions = genericExceptionMap.get(hn); + if ( exceptions === undefined ) { + genericExceptionMap.set(hn, exception); + } else { + genericExceptionMap.set(hn, `${exceptions}\n${exception}`); + } + } + } + } + + if ( genericSelectorMap.size === 0 ) { + if ( genericExceptionMap.size === 0 ) { return 0; } + } + + const originalScriptletMap = await loadAllSourceScriptlets(); + let patchedScriptlet = originalScriptletMap.get('css-generic').replace( + '$rulesetId$', + assetDetails.id + ); + patchedScriptlet = safeReplace(patchedScriptlet, + /\bself\.\$genericSelectorMap\$/, + `${JSON.stringify(genericSelectorMap, scriptletJsonReplacer)}` + ); + patchedScriptlet = safeReplace(patchedScriptlet, + /\bself\.\$genericExceptionSieve\$/, + `${JSON.stringify(genericExceptionSieve, scriptletJsonReplacer)}` + ); + patchedScriptlet = safeReplace(patchedScriptlet, + /\bself\.\$genericExceptionMap\$/, + `${JSON.stringify(genericExceptionMap, scriptletJsonReplacer)}` + ); + + writeFile(`${scriptletDir}/generic/${assetDetails.id}.js`, + patchedScriptlet + ); + + log(`CSS-generic: ${genericExceptionSieve.size} specific CSS exceptions`); + log(`CSS-generic: ${genericSelectorMap.size} plain CSS selectors`); + + return genericSelectorMap.size + genericExceptionSieve.size; +} + +const hashFromStr = (type, s) => { + const len = s.length; + const step = len + 7 >>> 3; + let hash = (type << 5) + type ^ len; + for ( let i = 0; i < len; i += step ) { + hash = (hash << 5) + hash ^ s.charCodeAt(i); + } + return hash & 0xFFF; +}; + +/******************************************************************************/ + +async function processGenericHighCosmeticFilters( + assetDetails, + genericSelectorList, + genericExceptionList +) { + if ( genericSelectorList === undefined ) { return 0; } + const genericSelectorSet = new Set( + genericSelectorList + .filter(a => a.key === undefined) + .map(a => a.selector) + ); + // https://github.com/uBlockOrigin/uBOL-home/issues/365 + if ( genericExceptionList ) { + for ( const entry of genericExceptionList ) { + if ( entry.key !== undefined ) { continue; } + globalHighlyGenericExceptionSet.add(entry.selector); + } + } + for ( const selector of globalHighlyGenericExceptionSet ) { + if ( genericSelectorSet.has(selector) === false ) { continue; } + genericSelectorSet.delete(selector); + log(`\tRemoving excepted highly generic filter ##${selector}`); + } + if ( genericSelectorSet.size === 0 ) { return 0; } + const selectorLists = Array.from(genericSelectorSet).sort().join(',\n'); + const originalScriptletMap = await loadAllSourceScriptlets(); + + let patchedScriptlet = originalScriptletMap.get('css-generichigh').replace( + '$rulesetId$', + assetDetails.id + ); + patchedScriptlet = safeReplace(patchedScriptlet, + /\$selectorList\$/, + selectorLists + ); + + writeFile(`${scriptletDir}/generichigh/${assetDetails.id}.css`, + patchedScriptlet + ); + + log(`CSS-generic-high: ${genericSelectorSet.size} plain CSS selectors`); + + return genericSelectorSet.size; +} + +const globalHighlyGenericExceptionSet = new Set(); + +/******************************************************************************/ + +const scriptletJsonReplacer = (k, v) => { + if ( k === 'n' ) { + if ( v === undefined || v.size === 0 ) { return; } + return Array.from(v); + } + if ( v instanceof Set || v instanceof Map ) { + if ( v.size === 0 ) { return; } + return Array.from(v); + } + return v; +}; + +/******************************************************************************/ + +async function processCosmeticFilters(assetDetails, realm, mapin) { + if ( mapin === undefined ) { return 0; } + if ( mapin.size === 0 ) { return 0; } + + // Collate all distinct selectors + const allSelectors = new Map(); + const allHostnames = new Map(); + const allRegexesOrPaths = new Map(); + let hasEntities = false; + + const storeHostnameSelectorPair = (hn, iSelector) => { + if ( isHnRegexOrPath(hn) ) { + if ( allRegexesOrPaths.has(hn) === false ) { + allRegexesOrPaths.set(hn, new Set()); + } + allRegexesOrPaths.get(hn).add(iSelector); + } else { + if ( allHostnames.has(hn) === false ) { + allHostnames.set(hn, new Set()); + } + allHostnames.get(hn).add(iSelector); + hasEntities ||= hn.endsWith('.*'); + } + }; + + for ( const [ selector, details ] of mapin ) { + if ( details.rejected ) { continue; } + if ( allSelectors.has(selector) === false ) { + allSelectors.set(selector, allSelectors.size); + } + const iSelector = allSelectors.get(selector); + if ( details.matches ) { + for ( const hn of details.matches ) { + storeHostnameSelectorPair(hn, iSelector); + } + } + if ( details.excludeMatches ) { + for ( const hn of details.excludeMatches ) { + storeHostnameSelectorPair(hn, ~iSelector); + } + } + } + const allSelectorLists = new Map(); + + const ilistFromSelectorSet = selectorSet => { + const list = JSON.stringify(Array.from(selectorSet).sort()).slice(1, -1); + if ( allSelectorLists.has(list) === false ) { + allSelectorLists.set(list, allSelectorLists.size); + } + return allSelectorLists.get(list); + }; + + for ( const [ hn, selectorSet ] of allHostnames ) { + allHostnames.set(hn, ilistFromSelectorSet(selectorSet)); + } + for ( const [ regexOrPath, selectorSet ] of allRegexesOrPaths ) { + allRegexesOrPaths.set(regexOrPath, ilistFromSelectorSet(selectorSet)); + } + + const sortedHostnames = Array.from(allHostnames.keys()).toSorted((a, b) => { + const d = a.length - b.length; + if ( d !== 0 ) { return d; } + return a < b ? -1 : 1; + }); + + const data = { + selectors: Array.from(allSelectors.keys()), + selectorLists: Array.from(allSelectorLists.keys()), + selectorListRefs: sortedHostnames.map(a => allHostnames.get(a)), + hostnames: sortedHostnames, + hasEntities, + fromRegexes: Array.from(allRegexesOrPaths) + .filter(a => a[0].startsWith('/') && a[0].endsWith('/')) + .map(a => { + const restr = a[0].slice(1,-1); + return [ literalStrFromRegex(restr).slice(0,8), restr, a[1] ] + }).flat(), + }; + writeFile(`${scriptletDir}/${realm}/${assetDetails.id}.json`, JSON.stringify(data)); + + // The cosmetic filters will be injected programmatically as content + // script and the decisions to activate the cosmetic filters will be + // done at injection time according to the document's hostname. + const originalScriptletMap = await loadAllSourceScriptlets(); + let patchedScriptlet = originalScriptletMap.get(`css-${realm}`).replace( + 'self.$rulesetId$', + JSON.stringify(assetDetails.id) + ); + writeFile(`${scriptletDir}/${realm}/${assetDetails.id}.js`, patchedScriptlet); + + log(`CSS-${realm}: ${allSelectors.size} distinct filters for ${allHostnames.size} distinct hostnames`); + + return sortedHostnames.length + allRegexesOrPaths.size; +} + +/******************************************************************************/ + +async function processScriptletFilters(assetDetails, mapin) { + if ( mapin === undefined ) { return 0; } + if ( mapin.size === 0 ) { return 0; } + + for ( const details of mapin.values() ) { + makeScriptlet.compile(assetDetails, details); + } + const stats = await makeScriptlet.commit( + assetDetails.id, + `${scriptletDir}/scriptlet`, + writeFile + ); + if ( stats.length !== 0 ) { + scriptletStats.set(assetDetails.id, stats); + } + makeScriptlet.reset(); + return stats.length; +} + +/******************************************************************************/ + +async function rulesetFromURLs(assetDetails) { + log('============================'); + log(`Listset for '${assetDetails.id}':`); + + if ( assetDetails.text === undefined && assetDetails.urls.length !== 0 ) { + const text = await fetchList(assetDetails); + if ( text === undefined ) { + process.exit(1); + } + assetDetails.text = text; + } else { + assetDetails.text = ''; + } + + if ( Array.isArray(assetDetails.filters) && assetDetails.filters.length ) { + const extra = [ + `!#trusted on ${secret}`, + ...assetDetails.filters, + `!#trusted off ${secret}`, + assetDetails.text, + ]; + assetDetails.text = extra.join('\n').trim(); + } + + if ( assetDetails.text === '' ) { return; } + + const extensionPaths = []; + for ( const [ fname, details ] of redirectResourcesMap ) { + const path = `/web_accessible_resources/${fname}`; + extensionPaths.push([ fname, path ]); + if ( details.alias === undefined ) { continue; } + if ( typeof details.alias === 'string' ) { + extensionPaths.push([ details.alias, path ]); + continue; + } + if ( Array.isArray(details.alias) === false ) { continue; } + for ( const alias of details.alias ) { + extensionPaths.push([ alias, path ]); + } + } + + const results = await dnrRulesetFromRawLists( + [ { name: assetDetails.id, text: assetDetails.text } ], + { env, extensionPaths, secret, networkBad } + ); + networkBad = results.networkBad; + + // Release memory used by filter list content + assetDetails.text = undefined; + + const netStats = await processNetworkFilters( + assetDetails, + results.network + ); + + // Split cosmetic filters into two groups: declarative and procedural + const declarativeCosmetic = new Map(); + const proceduralCosmetic = new Map(); + const rejectedCosmetic = []; + if ( results.specificCosmetic ) { + for ( const [ selector, details ] of results.specificCosmetic ) { + if ( details.rejected ) { + rejectedCosmetic.push(selector); + continue; + } + if ( selector.startsWith('{') === false ) { + declarativeCosmetic.set(selector, details); + continue; + } + const parsed = JSON.parse(selector); + parsed.raw = undefined; + proceduralCosmetic.set(JSON.stringify(parsed), details); + } + } + if ( rejectedCosmetic.length !== 0 ) { + log(`Rejected cosmetic filters: ${rejectedCosmetic.length}`); + log(rejectedCosmetic.map(line => `\t${line}`).join('\n'), true); + } + + const genericDetailsForRuleset = {}; + if ( + Array.isArray(results.network.generichideExclusions) && + results.network.generichideExclusions.length !== 0 + ) { + genericDetailsForRuleset.unhide = results.network.generichideExclusions + .filter(hn => hn.endsWith('.*') === false) + .sort(); + } + if ( + Array.isArray(results.network.generichideInclusions) && + results.network.generichideInclusions.length !== 0 + ) { + genericDetailsForRuleset.hide = results.network.generichideInclusions + .filter(hn => hn.endsWith('.*') === false) + .sort(); + } + if ( genericDetailsForRuleset.unhide || genericDetailsForRuleset.hide ) { + genericDetails.set(assetDetails.id, genericDetailsForRuleset); + } + + const genericCosmeticStats = await processGenericCosmeticFilters( + assetDetails, + results.genericCosmeticFilters, + results.genericCosmeticExceptions, + declarativeCosmetic + ); + const genericHighCosmeticStats = await processGenericHighCosmeticFilters( + assetDetails, + results.genericCosmeticFilters, + results.genericCosmeticExceptions, + ); + const specificCosmeticStats = await processCosmeticFilters( + assetDetails, + 'specific', + declarativeCosmetic + ); + + const proceduralStats = await processCosmeticFilters( + assetDetails, + 'procedural', + proceduralCosmetic + ); + const scriptletStats = await processScriptletFilters( + assetDetails, + results.scriptlet + ); + + rulesetDetails.push({ + id: assetDetails.id, + name: assetDetails.name, + group: assetDetails.group, + parent: assetDetails.parent, + enabled: assetDetails.enabled, + lang: assetDetails.lang, + tags: assetDetails.tags, + homeURL: assetDetails.homeURL, + filters: { + total: results.network.filterCount, + accepted: results.network.acceptedFilterCount, + rejected: results.network.rejectedFilterCount, + }, + rules: { + total: netStats.total, + plain: netStats.plain, + regex: netStats.regex, + removeparam: netStats.removeparam, + redirect: netStats.redirect, + modifyHeaders: netStats.modifyHeaders, + strictblock: netStats.strictblock, + urlskip: netStats.urlskip, + discarded: netStats.discarded, + rejected: netStats.rejected, + }, + css: { + generic: genericCosmeticStats, + generichigh: genericHighCosmeticStats, + specific: specificCosmeticStats, + procedural: proceduralStats, + }, + scriptlets: scriptletStats, + }); + + ruleResources.push({ + id: assetDetails.id, + enabled: assetDetails.enabled, + path: `/rulesets/main/${assetDetails.id}.json` + }); +} + +/******************************************************************************/ + +async function main() { + + let version = ''; + { + const now = new Date(); + const yearPart = now.getUTCFullYear(); + const monthPart = now.getUTCMonth() + 1; + const dayPart = now.getUTCDate(); + const hourPart = Math.floor(now.getUTCHours()); + const minutePart = Math.floor(now.getUTCMinutes()); + version = `${yearPart}.${monthPart*100+dayPart}.${hourPart*100+minutePart}`; + } + log(`Version: ${version}`, false); + + // Get list of rulesets + const rulesets = await fs.readFile('rulesets.json', { + encoding: 'utf8' + }).then(text => + JSON.parse(text) + ); + + for ( const ruleset of rulesets ) { + if ( ruleset.excludedPlatforms?.includes(platform) ) { continue; } + await rulesetFromURLs(ruleset); + } + + logProgress(''); + + writeFile(`${rulesetDir}/ruleset-details.json`, + `${JSON.stringify(rulesetDetails, null, 1)}\n` + ); + + writeFile(`${rulesetDir}/scriptlet-details.json`, + `${JSON.stringify(scriptletStats, jsonSetMapReplacer, 1)}\n` + ); + + writeFile(`${rulesetDir}/generic-details.json`, + `${JSON.stringify(genericDetails, jsonSetMapReplacer, 1)}\n` + ); + + // Copy required redirect resources + for ( const path of requiredRedirectResources ) { + copyFile(`./${path}`, `${outputDir}/${path}`); + } + + await Promise.all(writeOps); + + // Patch manifest + // Get manifest content + const manifest = await fs.readFile( + `${outputDir}/manifest.json`, + { encoding: 'utf8' } + ).then(text => + JSON.parse(text) + ); + // Patch declarative_net_request key + manifest.declarative_net_request = { rule_resources: ruleResources }; + // Patch web_accessible_resources key + manifest.web_accessible_resources = manifest.web_accessible_resources || []; + const web_accessible_resources = { + resources: Array.from(requiredRedirectResources).map(path => `${path}`), + matches: [ '' ], + }; + if ( env.includes('chromium') && env.includes('safari') === false ) { + web_accessible_resources.use_dynamic_url = true; + } + manifest.web_accessible_resources.push(web_accessible_resources); + + // Patch manifest version property + manifest.version = version; + // Commit changes + await fs.writeFile(`${outputDir}/manifest.json`, + JSON.stringify(manifest, null, 2) + '\n' + ); + + // Log results + const logContent = stdOutput.join('\n') + '\n'; + await fs.writeFile(`${outputDir}/log.txt`, logContent); +} + +main(); + +/******************************************************************************/ diff --git a/platform/mv3/make-scriptlets.js b/platform/mv3/make-scriptlets.js new file mode 100644 index 0000000000000..9dd53b36d3fad --- /dev/null +++ b/platform/mv3/make-scriptlets.js @@ -0,0 +1,243 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2017-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 { builtinScriptlets } from './js/resources/scriptlets.js'; +import fs from 'fs/promises'; +import { literalStrFromRegex } from './js/regex-analyzer.js'; +import { safeReplace } from './safe-replace.js'; + +/******************************************************************************/ + +const resourceDetails = new Map(); +const resourceAliases = new Map(); +const worldTemplate = { + scriptletFunctions: new Map(), + allFunctions: new Map(), + args: new Map(), + arglists: new Map(), + hostnames: new Map(), + regexesOrPaths: new Map(), + matches: new Set(), + hasEntities: false, + hasAncestors: false, +}; +const worlds = { + ISOLATED: structuredClone(worldTemplate), + MAIN: structuredClone(worldTemplate), +}; + +/******************************************************************************/ + +function createScriptletCoreCode(worldDetails, resourceEntry) { + const { allFunctions } = worldDetails; + allFunctions.set(resourceEntry.name, resourceEntry.code); + const dependencies = resourceEntry.dependencies && + resourceEntry.dependencies.slice() || []; + while ( dependencies.length !== 0 ) { + const token = dependencies.shift(); + const details = resourceDetails.get(token); + if ( details === undefined ) { continue; } + if ( allFunctions.has(details.name) ) { continue; } + allFunctions.set(details.name, details.code); + if ( Array.isArray(details.dependencies) === false ) { continue; } + dependencies.push(...details.dependencies); + } +} + +/******************************************************************************/ + +export function reset() { + worlds.ISOLATED = structuredClone(worldTemplate); + worlds.MAIN = structuredClone(worldTemplate); +} + +/******************************************************************************/ + +export function compile(assetDetails, details) { + if ( details.args[0].endsWith('.js') === false ) { + details.args[0] += '.js'; + } + if ( resourceAliases.has(details.args[0]) ) { + details.args[0] = resourceAliases.get(details.args[0]); + } + const scriptletToken = details.args[0]; + const resourceEntry = resourceDetails.get(scriptletToken); + if ( resourceEntry === undefined ) { return; } + if ( resourceEntry.requiresTrust && details.trustedSource !== true ) { + console.log(`Rejecting +js(${details.args.join()}): ${assetDetails.id} is not trusted`); + return; + } + const worldDetails = worlds[resourceEntry.world]; + const { scriptletFunctions } = worldDetails; + if ( scriptletFunctions.has(resourceEntry.name) === false ) { + scriptletFunctions.set(resourceEntry.name, scriptletFunctions.size); + createScriptletCoreCode(worldDetails, resourceEntry); + } + // Convert args to arg indices + const arglist = details.args.slice(); + arglist[0] = scriptletFunctions.get(resourceEntry.name); + for ( let i = 1; i < arglist.length; i++ ) { + const arg = arglist[i]; + if ( worldDetails.args.has(arg) === false ) { + worldDetails.args.set(arg, worldDetails.args.size); + } + arglist[i] = worldDetails.args.get(arg); + } + const arglistKey = JSON.stringify(arglist).slice(1, -1); + if ( worldDetails.arglists.has(arglistKey) === false ) { + worldDetails.arglists.set(arglistKey, worldDetails.arglists.size); + } + const arglistIndex = worldDetails.arglists.get(arglistKey); + if ( details.matches ) { + for ( const hn of details.matches ) { + if ( hn.includes('/') ) { + worldDetails.matches.clear(); + worldDetails.matches.add('*'); + if ( worldDetails.regexesOrPaths.has(hn) === false ) { + worldDetails.regexesOrPaths.set(hn, new Set()); + } + worldDetails.regexesOrPaths.get(hn).add(arglistIndex); + continue; + } + const isEntity = hn.endsWith('.*') || hn.endsWith('.*>>'); + worldDetails.hasEntities ||= isEntity; + const isAncestor = hn.endsWith('>>') + worldDetails.hasAncestors ||= isAncestor; + if ( isEntity || isAncestor ) { + worldDetails.matches.clear(); + worldDetails.matches.add('*'); + } + if ( worldDetails.matches.has('*') === false ) { + worldDetails.matches.add(hn); + } + if ( worldDetails.hostnames.has(hn) === false ) { + worldDetails.hostnames.set(hn, new Set()); + } + worldDetails.hostnames.get(hn).add(arglistIndex); + } + } else { + worldDetails.matches.add('*'); + } + if ( details.excludeMatches ) { + for ( const hn of details.excludeMatches ) { + if ( hn.includes('/') ) { + if ( worldDetails.regexesOrPaths.has(hn) === false ) { + worldDetails.regexesOrPaths.set(hn, new Set()); + } + worldDetails.regexesOrPaths.get(hn).add(~arglistIndex); + continue; + } + if ( worldDetails.hostnames.has(hn) === false ) { + worldDetails.hostnames.set(hn, new Set()); + } + worldDetails.hostnames.get(hn).add(~arglistIndex); + } + } +} + +/******************************************************************************/ + +export async function commit(rulesetId, path, writeFn) { + const scriptletTemplate = await fs.readFile( + './scriptlets/scriptlet.template.js', + { encoding: 'utf8' } + ); + const stats = {}; + for ( const world of Object.keys(worlds) ) { + const worldDetails = worlds[world]; + const { scriptletFunctions, allFunctions, args, arglists } = worldDetails; + if ( scriptletFunctions.size === 0 ) { continue; } + const hostnames = Array.from(worldDetails.hostnames).toSorted((a, b) => { + const d = a[0].length - b[0].length; + if ( d !== 0 ) { return d; } + return a[0] < b[0] ? -1 : 1; + }).map(a => ([ a[0], JSON.stringify(Array.from(a[1]).map(a => JSON.parse(a))).slice(1,-1)])); + const scriptletFromRegexes = Array.from(worldDetails.regexesOrPaths) + .filter(a => a[0].startsWith('/') && a[0].endsWith('/')) + .map(a => { + const restr = a[0].slice(1,-1); + return [ + literalStrFromRegex(restr).slice(0,8), + restr, + JSON.stringify(Array.from(a[1])).slice(1,-1), + ]; + }).flat(); + let content = safeReplace(scriptletTemplate, 'self.$hasEntities$', JSON.stringify(worldDetails.hasEntities)); + content = safeReplace(content, 'self.$hasAncestors$', JSON.stringify(worldDetails.hasAncestors)); + content = safeReplace(content, 'self.$hasRegexes$', JSON.stringify(scriptletFromRegexes.length !== 0)); + content = safeReplace(content, + 'self.$scriptletFromRegexes$', + `/* ${worldDetails.regexesOrPaths.size} */ ${JSON.stringify(scriptletFromRegexes)}` + ); + content = safeReplace(content, + 'self.$scriptletHostnames$', + `/* ${hostnames.length} */ ${JSON.stringify(hostnames.map(a => a[0]))}` + ); + content = safeReplace(content, + 'self.$scriptletArglistRefs$', + `/* ${hostnames.length} */ ${JSON.stringify(hostnames.map(a => a[1]).join(';'))}` + ); + content = safeReplace(content, + 'self.$scriptletArglists$', + `/* ${arglists.size} */ ${JSON.stringify(Array.from(arglists.keys()).join(';'))}` + ); + content = safeReplace(content, + 'self.$scriptletArgs$', + `/* ${args.size} */ ${JSON.stringify(Array.from(args.keys()))}` + ); + content = safeReplace(content, + 'self.$scriptletFunctions$', + `/* ${scriptletFunctions.size} */\n[${Array.from(scriptletFunctions.keys()).join(',')}]` + ); + content = safeReplace(content, + 'self.$scriptletCode$', + Array.from(allFunctions.values()).sort().join('\n\n') + ); + content = safeReplace(content, /\$rulesetId\$/, rulesetId, 0); + writeFn(`${path}/${world.toLowerCase()}/${rulesetId}.js`, content); + stats[world] = Array.from(worldDetails.matches).sort(); + } + return stats; +} + +/******************************************************************************/ + +function init() { + for ( const scriptlet of builtinScriptlets ) { + const { name, aliases, fn } = scriptlet; + const entry = { + name: fn.name, + code: fn.toString(), + world: scriptlet.world || 'MAIN', + dependencies: scriptlet.dependencies, + requiresTrust: scriptlet.requiresTrust === true, + }; + resourceDetails.set(name, entry); + if ( Array.isArray(aliases) === false ) { continue; } + for ( const alias of aliases ) { + resourceAliases.set(alias, name); + } + } +} + +init(); + +/******************************************************************************/ diff --git a/platform/mv3/package.json b/platform/mv3/package.json new file mode 100644 index 0000000000000..c10527aa90d2c --- /dev/null +++ b/platform/mv3/package.json @@ -0,0 +1,6 @@ +{ + "engines": { + "node": ">=17.5.0" + }, + "type": "module" +} diff --git a/platform/mv3/rulesets.json b/platform/mv3/rulesets.json new file mode 100644 index 0000000000000..d46cd80e4c4c6 --- /dev/null +++ b/platform/mv3/rulesets.json @@ -0,0 +1,648 @@ +[ + { + "id": "ublock-filters", + "name": "uBlock filters – Ads, trackers, and more", + "group": "default", + "enabled": true, + "trusted": true, + "urls": [ + "https://ublockorigin.github.io/uAssets/filters/quick-fixes.min.txt", + "https://ublockorigin.github.io/uAssets/filters/unbreak.min.txt", + "https://ublockorigin.github.io/uAssets/filters/filters.min.txt", + "https://ublockorigin.github.io/uAssets/filters/privacy.min.txt", + "https://ublockorigin.github.io/uAssets/filters/ubol-filters.txt" + ], + "homeURL": "https://github.com/uBlockOrigin/uAssets" + }, + { + "id": "easylist", + "name": "EasyList", + "group": "default", + "enabled": true, + "urls": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist.txt" + ], + "homeURL": "https://easylist.to/" + }, + { + "id": "easyprivacy", + "name": "EasyPrivacy", + "group": "default", + "enabled": true, + "urls": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easyprivacy.txt" + ], + "homeURL": "https://easylist.to/" + }, + { + "id": "pgl", + "name": "Peter Lowe – Ads, trackers, and more", + "group": "default", + "enabled": true, + "urls": [ + "https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext" + ], + "homeURL": "https://pgl.yoyo.org/adservers/" + }, + { + "id": "ublock-badware", + "name": "uBlock filters – Badware risks", + "group": "malware", + "enabled": true, + "trusted": true, + "urls": [ + "https://ublockorigin.github.io/uAssets/filters/badware.min.txt" + ], + "homeURL": "https://github.com/uBlockOrigin/uAssets" + }, + { + "id": "urlhaus-full", + "name": "Malicious URL Blocklist", + "group": "malware", + "enabled": true, + "excludedPlatforms": [ "safari" ], + "urls": [ + "https://malware-filter.gitlab.io/malware-filter/urlhaus-filter-hosts.txt" + ], + "homeURL": "https://gitlab.com/malware-filter/urlhaus-filter" + }, + { + "id": "adguard-mobile", + "name": "AdGuard/uBO – Mobile Ads", + "group": "ads", + "enabled": false, + "tags": "mobile", + "urls": [ + "https://ublockorigin.github.io/uAssets/filters/filters-mobile.txt", + "https://filters.adtidy.org/extension/ublock/filters/11.txt" + ], + "homeURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + { + "id": "block-lan", + "name": "Block Outsider Intrusion into LAN", + "group": "privacy", + "enabled": false, + "urls": [ + "https://ublockorigin.github.io/uAssets/filters/lan-block.txt" + ], + "homeURL": "https://github.com/uBlockOrigin/uAssets" + }, + { + "id": "dpollock-0", + "name": "Dan Pollock’s hosts file", + "enabled": false, + "excludedPlatforms": [ "safari" ], + "urls": [ + "https://someonewhocares.org/hosts/hosts" + ], + "homeURL": "https://someonewhocares.org/hosts/" + }, + { + "id": "adguard-spyware-url", + "name": "AdGuard/uBO – URL Tracking Protection", + "group": "privacy", + "enabled": false, + "excludedPlatforms": [ "safari" ], + "urls": [ + "https://ublockorigin.github.io/uAssets/filters/privacy-removeparam.txt" + ], + "homeURL": "https://github.com/uBlockOrigin/uAssets" + }, + { + "id": "annoyances-ai", + "name": "EasyList – AI Widgets", + "group": "annoyances", + "enabled": false, + "urls": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist-ai.txt" + ], + "homeURL": "https://github.com/easylist/easylist#fanboy-lists" + }, + { + "id": "annoyances-cookies", + "name": "EasyList/uBO – Cookie Notices", + "group": "annoyances", + "enabled": false, + "urls": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist-cookies.txt", + "https://ublockorigin.github.io/uAssets/filters/annoyances-cookies.txt" + ], + "homeURL": "https://github.com/easylist/easylist#fanboy-lists" + }, + { + "id": "annoyances-overlays", + "name": "EasyList/uBO – Overlay Notices", + "group": "annoyances", + "enabled": false, + "urls": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist-newsletters.txt", + "https://ublockorigin.github.io/uAssets/filters/annoyances-others.txt" + ], + "homeURL": "https://github.com/easylist/easylist#fanboy-lists" + }, + { + "id": "annoyances-social", + "name": "EasyList – Social Widgets", + "group": "annoyances", + "enabled": false, + "urls": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist-social.txt" + ], + "homeURL": "https://github.com/easylist/easylist#fanboy-lists" + }, + { + "id": "annoyances-widgets", + "name": "EasyList – Chat Widgets", + "group": "annoyances", + "enabled": false, + "urls": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist-chat.txt" + ], + "homeURL": "https://github.com/easylist/easylist#fanboy-lists" + }, + { + "id": "annoyances-others", + "name": "EasyList – Other Annoyances", + "group": "annoyances", + "enabled": false, + "urls": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist-annoyances.txt" + ], + "homeURL": "https://github.com/easylist/easylist#fanboy-lists" + }, + { + "id": "annoyances-notifications", + "name": "EasyList – Notifications", + "group": "annoyances", + "enabled": false, + "urls": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist-notifications.txt" + ], + "homeURL": "https://github.com/easylist/easylist#fanboy-lists" + }, + { + "id": "ublock-experimental", + "name": "uBlock filters – Experimental", + "enabled": false, + "trusted": true, + "urls": [ + "https://ublockorigin.github.io/uAssets/filters/experimental.min.txt" + ], + "homeURL": "https://github.com/uBlockOrigin/uAssets" + }, + { + "id": "ubol-tests", + "name": "uBO Lite Test Filters", + "enabled": false, + "trusted": true, + "urls": [ + "https://ublockorigin.github.io/uBOL-home/tests/test-filters.txt" + ], + "homeURL": "https://ublockorigin.github.io/uBOL-home/tests/test-filters.html" + }, + { + "id": "alb-0", + "group": "regions", + "lang": "sq", + "name": "🇦🇱al 🇽🇰xk: Adblock List for Albania", + "tags": "ads albania shqipja", + "enabled": false, + "urls": [ + "https://raw.githubusercontent.com/AnXh3L0/blocklist/master/albanian-easylist-addition/Albania.txt" + ], + "homeURL": "https://github.com/AnXh3L0/blocklist" + }, + { + "id": "ara-0", + "group": "regions", + "lang": "ar kab", + "name": "🇪🇬eg 🇸🇦sa 🇲🇦ma 🇩🇿dz: Liste AR", + "tags": "ads arabic اَلْعَرَبِيَّةُ", + "enabled": false, + "urls": [ + "https://raw.githubusercontent.com/easylist/listear/master/Liste_AR.txt" + ], + "homeURL": "https://forums.lanik.us/viewforum.php?f=98" + }, + { + "id": "bgr-0", + "group": "regions", + "lang": "bg mk", + "name": "🇧🇬bg: Bulgarian Adblock list", + "tags": "ads bulgarian България macedonian Македонија", + "enabled": false, + "urls": [ + "https://stanev.org/abp/adblock_bg.txt" + ], + "homeURL": "https://stanev.org/abp/" + }, + { + "id": "chn-0", + "group": "regions", + "lang": "ug zh", + "name": "🇨🇳cn 🇹🇼tw: AdGuard Chinese (中文)", + "tags": "ads chinese 中文", + "enabled": false, + "urls": [ + "https://filters.adtidy.org/extension/ublock/filters/224.txt" + ], + "homeURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + { + "id": "cze-0", + "group": "regions", + "lang": "cs sk", + "name": "🇨🇿cz 🇸🇰sk: EasyList Czech and Slovak", + "tags": "ads czech česká slovak slovenská", + "enabled": false, + "urls": [ + "https://raw.githubusercontent.com/tomasko126/easylistczechandslovak/master/filters.txt" + ], + "homeURL": "https://github.com/tomasko126/easylistczechandslovak" + }, + { + "id": "deu-0", + "group": "regions", + "lang": "de dsb hsb lb rm", + "name": "🇩🇪de 🇨🇭ch 🇦🇹at: EasyList Germany", + "tags": "ads german deutschland luxembourgish lëtzebuerg romansh", + "enabled": false, + "urls": [ + "https://easylist.to/easylistgermany/easylistgermany.txt" + ], + "homeURL": "https://forums.lanik.us/viewforum.php?f=90" + }, + { + "id": "est-0", + "group": "regions", + "lang": "et", + "name": "🇪🇪ee: Eesti saitidele kohandatud filter", + "enabled": false, + "urls": [ + "https://ubo-et.lepik.io/list.txt" + ], + "homeURL": "https://github.com/sander85/uBO-et" + }, + { + "id": "fin-0", + "group": "regions", + "lang": "fi", + "name": "🇫🇮fi: Adblock List for Finland", + "tags": "ads finnish", + "enabled": false, + "urls": [ + "https://raw.githubusercontent.com/finnish-easylist-addition/finnish-easylist-addition/gh-pages/Finland_adb.txt" + ], + "homeURL": "https://github.com/finnish-easylist-addition/finnish-easylist-addition" + }, + { + "id": "fra-0", + "group": "regions", + "lang": "ar br ff fr lb oc son", + "name": "🇫🇷fr 🇨🇦ca: AdGuard Français", + "tags": "ads french", + "enabled": false, + "urls": [ + "https://filters.adtidy.org/extension/ublock/filters/16.txt" + ], + "homeURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + { + "id": "grc-0", + "group": "regions", + "lang": "el", + "name": "🇬🇷gr 🇨🇾cy: Greek AdBlock Filter", + "tags": "ads greek", + "enabled": false, + "urls": [ + "https://www.void.gr/kargig/void-gr-filters.txt" + ], + "homeURL": "https://github.com/kargig/greek-adblockplus-filter" + }, + { + "id": "hrv-0", + "group": "regions", + "lang": "bs hr sr", + "name": "🇭🇷hr 🇷🇸rs: Dandelion Sprout's Serbo-Croatian filters", + "tags": "ads croatian serbian bosnian", + "enabled": false, + "urls": [ + "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/SerboCroatianList.txt" + ], + "homeURL": "https://github.com/DandelionSprout/adfilt#readme" + }, + { + "id": "hun-0", + "group": "regions", + "lang": "hu", + "name": "🇭🇺hu: hufilter", + "tags": "ads hungarian", + "enabled": false, + "urls": [ + "https://cdn.jsdelivr.net/gh/hufilter/hufilter@gh-pages/hufilter-ublock.txt" + ], + "homeURL": "https://github.com/hufilter/hufilter" + }, + { + "id": "idn-0", + "group": "regions", + "lang": "id ms", + "name": "🇮🇩id 🇲🇾my: ABPindo", + "tags": "ads indonesian malay", + "enabled": false, + "urls": [ + "https://raw.githubusercontent.com/ABPindo/indonesianadblockrules/master/subscriptions/abpindo.txt" + ], + "homeURL": "https://github.com/ABPindo/indonesianadblockrules" + }, + { + "id": "ind-0", + "group": "regions", + "lang": "as bn gu hi kn ml mr ne pa si ta te", + "name": "🇮🇳in 🇱🇰lk 🇳🇵np: IndianList", + "tags": "ads assamese bengali gujarati hindi kannada malayalam marathi nepali punjabi sinhala tamil telugu", + "enabled": false, + "urls": [ + "https://easylist-downloads.adblockplus.org/indianlist.txt" + ], + "homeURL": "https://github.com/mediumkreation/IndianList" + }, + { + "id": "irn-0", + "group": "regions", + "lang": "fa ps tg", + "name": "🇮🇷ir: PersianBlocker", + "tags": "ads af ir persian pashto tajik tj", + "enabled": false, + "urls": [ + "https://raw.githubusercontent.com/MasterKia/PersianBlocker/main/PersianBlocker.txt" + ], + "homeURL": "https://github.com/MasterKia/PersianBlocker" + }, + { + "id": "isl-0", + "group": "regions", + "lang": "is", + "name": "🇮🇸is: Icelandic ABP List", + "tags": "ads icelandic", + "enabled": false, + "urls": [ + "https://raw.githubusercontent.com/brave/adblock-lists/master/custom/is.txt" + ], + "homeURL": "https://github.com/brave/adblock-lists/issues" + }, + { + "id": "isr-0", + "group": "regions", + "lang": "he", + "name": "🇮🇱il: EasyList Hebrew", + "tags": "ads hebrew", + "enabled": false, + "urls": [ + "https://raw.githubusercontent.com/easylist/EasyListHebrew/master/EasyListHebrew.txt" + ], + "homeURL": "https://github.com/easylist/EasyListHebrew" + }, + { + "id": "ita-0", + "group": "regions", + "lang": "it lij", + "name": "🇮🇹it: EasyList Italy", + "tags": "ads italian", + "enabled": false, + "urls": [ + "https://easylist-downloads.adblockplus.org/easylistitaly.txt" + ], + "homeURL": "https://forums.lanik.us/viewforum.php?f=96" + }, + { + "id": "jpn-1", + "group": "regions", + "lang": "ja", + "name": "🇯🇵jp: AdGuard Japanese", + "tags": "ads japanese 日本語", + "enabled": false, + "urls": [ + "https://filters.adtidy.org/extension/ublock/filters/7.txt" + ], + "homeURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + { + "id": "kor-1", + "group": "regions", + "lang": "ko", + "name": "🇰🇷kr: List-KR", + "tags": "ads korean 한국어", + "enabled": false, + "urls": [ + "https://cdn.jsdelivr.net/gh/List-KR/List-KR@latest/filter-uBlockOrigin.txt" + ], + "homeURL": "https://github.com/List-KR/List-KR#readme" + }, + { + "id": "ltu-0", + "group": "regions", + "lang": "lt", + "name": "🇱🇹lt: EasyList Lithuania", + "tags": "ads lithuanian", + "enabled": false, + "urls": [ + "https://raw.githubusercontent.com/EasyList-Lithuania/easylist_lithuania/master/easylistlithuania.txt" + ], + "homeURL": "https://github.com/EasyList-Lithuania/easylist_lithuania" + }, + { + "id": "lva-0", + "group": "regions", + "lang": "lv", + "name": "🇱🇻lv: Latvian List", + "tags": "ads latvian", + "enabled": false, + "urls": [ + "https://raw.githubusercontent.com/Latvian-List/adblock-latvian/master/lists/latvian-list.txt" + ], + "homeURL": "https://github.com/Latvian-List/adblock-latvian" + }, + { + "id": "mkd-0", + "group": "regions", + "lang": "mk", + "name": "🇲🇰mk: Macedonian adBlock Filters", + "tags": "ads macedonian", + "enabled": false, + "urls": [ + "https://raw.githubusercontent.com/DeepSpaceHarbor/Macedonian-adBlock-Filters/master/Filters" + ], + "homeURL": "https://github.com/DeepSpaceHarbor/Macedonian-adBlock-Filters" + }, + { + "id": "nld-0", + "group": "regions", + "lang": "af fy nl", + "name": "🇳🇱nl 🇧🇪be: AdGuard Dutch", + "tags": "ads afrikaans be belgië frisian dutch flemish nederlands netherlands nl sr suriname za", + "enabled": false, + "urls": [ + "https://filters.adtidy.org/extension/ublock/filters/8.txt" + ], + "homeURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + { + "id": "nor-0", + "group": "regions", + "lang": "nb nn no da is", + "name": "🇳🇴no 🇩🇰dk 🇮🇸is: Dandelion Sprouts nordiske filtre", + "tags": "ads norwegian danish icelandic", + "enabled": false, + "urls": [ + "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/NorwegianList.txt" + ], + "homeURL": "https://github.com/DandelionSprout/adfilt" + }, + { + "id": "pol-0", + "group": "regions", + "lang": "szl pl _", + "name": "🇵🇱pl: Oficjalne Polskie Filtry do uBlocka Origin", + "tags": "ads polish polski", + "enabled": false, + "urls": [ + "https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-adblock-filters/adblock.txt" + ], + "homeURL": "https://github.com/MajkiIT/polish-ads-filter" + }, + { + "id": "rou-1", + "group": "regions", + "lang": "ro", + "name": "🇷🇴ro 🇲🇩md: Romanian Ad (ROad) Block List Light", + "tags": "ads romanian română moldavian moldovenească молдовеняскэ", + "enabled": false, + "urls": [ + "https://raw.githubusercontent.com/tcptomato/ROad-Block/master/road-block-filters-light.txt" + ], + "homeURL": "https://github.com/tcptomato/ROad-Block" + }, + { + "id": "rus-0", + "group": "regions", + "parent": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList", + "lang": "be kk tt ru uz", + "name": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList", + "tags": "ads belarusian беларуская kazakh tatar russian русский ukrainian українська uzbek uk", + "enabled": false, + "urls": [ + "https://raw.githubusercontent.com/easylist/ruadlist/master/RuAdList-uBO.txt" + ], + "homeURL": "https://forums.lanik.us/viewforum.php?f=102" + }, + { + "id": "rus-1", + "group": "regions", + "parent": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList", + "name": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList: Counters", + "tags": "ads belarusian беларуская kazakh tatar russian русский ukrainian українська uzbek be kk tt ru uk uz", + "enabled": false, + "urls": [ + "https://raw.githubusercontent.com/easylist/ruadlist/master/cntblock.txt" + ], + "homeURL": "https://forums.lanik.us/viewforum.php?f=102" + }, + { + "id": "spa-0", + "group": "regions", + "lang": "an ast ca cak es eu gl gn trs quz", + "name": "🇪🇸es 🇦🇷ar 🇲🇽mx 🇨🇴co: EasyList Spanish", + "tags": "ads aragonese basque catalan spanish español galician guarani", + "enabled": false, + "urls": [ + "https://easylist-downloads.adblockplus.org/easylistspanish.txt" + ], + "homeURL": "https://forums.lanik.us/viewforum.php?f=103" + }, + { + "id": "spa-1", + "group": "regions", + "lang": "an ast ca cak es eu gl gn trs pt quz", + "name": "🇪🇸es 🇦🇷ar 🇧🇷br 🇵🇹pt: AdGuard Spanish/Portuguese", + "tags": "ads aragonese basque catalan spanish español galician guarani portuguese português", + "enabled": false, + "urls": [ + "https://filters.adtidy.org/extension/ublock/filters/9.txt" + ], + "homeURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + { + "id": "svn-0", + "group": "regions", + "lang": "sl", + "name": "🇸🇮si: Slovenian List", + "tags": "ads slovenian slovenski", + "enabled": false, + "urls": [ + "https://raw.githubusercontent.com/betterwebleon/slovenian-list/master/filters.txt" + ], + "homeURL": "https://github.com/betterwebleon/slovenian-list" + }, + { + "id": "swe-1", + "group": "regions", + "lang": "sv", + "name": "🇸🇪se: Frellwit's Swedish Filter", + "tags": "ads swedish svenska", + "enabled": false, + "urls": [ + "https://raw.githubusercontent.com/lassekongo83/Frellwits-filter-lists/master/Frellwits-Swedish-Filter.txt" + ], + "homeURL": "https://github.com/lassekongo83/Frellwits-filter-lists" + }, + { + "id": "tha-0", + "group": "regions", + "lang": "th", + "name": "🇹🇭th: EasyList Thailand", + "tags": "ads thai ไทย", + "enabled": false, + "urls": [ + "https://raw.githubusercontent.com/easylist-thailand/easylist-thailand/master/subscription/easylist-thailand.txt" + ], + "homeURL": "https://github.com/easylist-thailand/easylist-thailand" + }, + { + "id": "tur-0", + "group": "regions", + "lang": "tr", + "name": "🇹🇷tr: AdGuard Turkish", + "tags": "ads turkish türkçe", + "enabled": false, + "urls": [ + "https://filters.adtidy.org/extension/ublock/filters/13.txt" + ], + "homeURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + { + "id": "ukr-0", + "group": "regions", + "lang": "uk", + "name": "🇺🇦ua: AdGuard Ukrainian", + "tags": "ads ukraine україна", + "enabled": false, + "urls": [ + "https://filters.adtidy.org/extension/ublock/filters/23.txt" + ], + "homeURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + { + "id": "vie-1", + "group": "regions", + "lang": "vi", + "name": "🇻🇳vn: ABPVN List", + "tags": "ads vietnamese việt", + "enabled": false, + "urls": [ + "https://raw.githubusercontent.com/abpvn/abpvn/master/filter/abpvn_ublock.txt" + ], + "homeURL": "https://abpvn.com/" + } +] diff --git a/platform/mv3/safari/css-api.js b/platform/mv3/safari/css-api.js new file mode 100644 index 0000000000000..e9b8817f4a039 --- /dev/null +++ b/platform/mv3/safari/css-api.js @@ -0,0 +1,46 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant 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 +*/ + +(api => { + if ( typeof api === 'object' ) { return; } + + const inserted = new Set(); + + self.cssAPI = { + insert(css) { + chrome.runtime.sendMessage({ + what: 'insertCSS', + css, + }).catch(( ) => { + }); + inserted.add(css); + }, + }; + + self.addEventListener('pageshow', ( ) => { + chrome.runtime.sendMessage({ + what: 'insertCSS', + css: Array.from(inserted).join('\n'), + }).catch(( ) => { + }); + }); + +})(self.cssAPI); diff --git a/platform/mv3/safari/css-user.js b/platform/mv3/safari/css-user.js new file mode 100644 index 0000000000000..0f5caedaf2cbe --- /dev/null +++ b/platform/mv3/safari/css-user.js @@ -0,0 +1,59 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2019-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 +*/ + +(async function uBOL_cssUser() { + +/******************************************************************************/ + +const docURL = new URL(document.baseURI); +const details = await chrome.runtime.sendMessage({ + what: 'injectCustomFilters', + hostname: docURL.hostname, +}).catch(( ) => { +}); + +if ( details?.proceduralSelectors?.length ) { + if ( self.ProceduralFiltererAPI ) { + self.customProceduralFiltererAPI = new self.ProceduralFiltererAPI(); + self.customProceduralFiltererAPI.addSelectors( + details.proceduralSelectors.map(a => JSON.parse(a)) + ); + } +} + +if ( details?.plainSelectors?.length ) { + const selectors = details.plainSelectors; + self.addEventListener('pageshow', ( ) => { + chrome.runtime.sendMessage({ + what: 'insertCSS', + css: `${selectors.join(',\n')}{display:none!important;}`, + }).catch(( ) => { + }); + }); +} + +self.customFilters = details; + +/******************************************************************************/ + +})(); + +void 0; diff --git a/platform/mv3/safari/ext-compat.js b/platform/mv3/safari/ext-compat.js new file mode 100644 index 0000000000000..47ce82c8abd6e --- /dev/null +++ b/platform/mv3/safari/ext-compat.js @@ -0,0 +1,218 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2022-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 { deepEquals } from './utils.js'; + +export const webext = self.browser; + +/******************************************************************************/ + +// Workaround for: +// https://github.com/uBlockOrigin/uBOL-home/issues/515 +// https://bugs.webkit.org/show_bug.cgi?id=300236 +// +// For each realm, we will force-reload registered rulesets once. + +const { windows } = webext; +const NORMAL_REALM = 0b01; +const PRIVATE_REALM = 0b10; +const ALL_REALMS = NORMAL_REALM | PRIVATE_REALM; + +let seenRealms = 0b00; +let seenRealmsReady = webext.storage.session.get('safari.seenRealms').then(bin => { + seenRealms |= bin?.['safari.seenRealms'] ?? 0; +}).catch(( ) => { +}); + +async function forceEnableRulesets(windowId) { + await seenRealmsReady; + if ( seenRealms === ALL_REALMS ) { return; } + if ( windowId === windows.WINDOW_ID_NONE ) { return; } + const details = await windows.get(windowId, { windowTypes: [ 'normal' ] }); + const incognito = details?.incognito; + if ( typeof incognito !== 'boolean' ) { return; } + const currentRealm = incognito ? PRIVATE_REALM : NORMAL_REALM; + if ( (seenRealms & currentRealm) !== 0 ) { return; } + seenRealms |= currentRealm; + webext.storage.session.set({ 'safari.seenRealms': seenRealms }); + const ids = await nativeDNR.getEnabledRulesets(); + if ( ids.length === 0 ) { return; } + nativeDNR.updateEnabledRulesets({ + disableRulesetIds: ids.slice(), + enableRulesetIds: ids.slice(), + }); +} + +windows.onFocusChanged.addListener(forceEnableRulesets); + +/******************************************************************************/ + +// https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/declarativeNetRequest/ + +const nativeDNR = webext.declarativeNetRequest; + +const isSupportedRule = r => { + if ( r.action.responseHeaders ) { return false; } + const { condition } = r; + if ( condition.tabIds !== undefined ) { return false; } + if ( condition.resourceTypes?.includes('object') ) { + if ( condition.resourceTypes.length === 1 ) { return false; } + const i = condition.resourceTypes.indexOf('object'); + condition.resourceTypes.splice(i, 1); + } + if ( condition.excludedResourceTypes?.includes('object') ) { + const i = condition.excludedResourceTypes.indexOf('object'); + condition.excludedResourceTypes.splice(i, 1); + if ( condition.excludedResourceTypes.length === 0 ) { + delete condition.excludedResourceTypes; + } + } + return true; +}; + +const prepareUpdateRules = optionsBefore => { + const { addRules, removeRuleIds } = optionsBefore; + const addRulesAfter = addRules?.filter(isSupportedRule); + if ( Boolean(addRulesAfter?.length || removeRuleIds?.length) === false ) { return; } + addRulesAfter?.forEach(r => { + if ( r.action?.redirect?.regexSubstitution ) { + if ( r.condition?.requestDomains ) { + r.condition.domains = r.condition.requestDomains; + delete r.condition.requestDomains; + return; + } + } + if ( r.condition?.initiatorDomains ) { + r.condition.domains = r.condition.initiatorDomains; + delete r.condition.initiatorDomains; + } + if ( r.condition?.excludedInitiatorDomains ) { + r.condition.excludedDomains = r.condition.excludedInitiatorDomains; + delete r.condition.excludedInitiatorDomains; + } + }); + const optionsAfter = {}; + if ( addRulesAfter?.length ) { optionsAfter.addRules = addRulesAfter; } + if ( removeRuleIds?.length ) { optionsAfter.removeRuleIds = removeRuleIds; } + return optionsAfter; +}; + +/******************************************************************************/ + +export function normalizeDNRRules(rules, ruleIds) { + if ( Array.isArray(rules) === false ) { return rules; } + const selectedRules = Array.isArray(ruleIds) + ? rules.filter(rule => ruleIds.includes(rule.id)) + : rules; + selectedRules.forEach(rule => { + const { condition } = rule; + if ( Array.isArray(condition.domains) ) { + condition.initiatorDomains = condition.domains; + delete condition.domains; + } + if ( Array.isArray(condition.excludedDomains) ) { + condition.excludedInitiatorDomains = condition.excludedDomains; + delete condition.excludedDomains; + } + }); + return selectedRules; +} + +/******************************************************************************/ + +export const dnr = { + DYNAMIC_RULESET_ID: '_dynamic', + MAX_NUMBER_OF_ENABLED_STATIC_RULESETS: nativeDNR.MAX_NUMBER_OF_ENABLED_STATIC_RULESETS, + MAX_NUMBER_OF_REGEX_RULES: nativeDNR.MAX_NUMBER_OF_DYNAMIC_AND_SESSION_RULES, + async getAvailableStaticRuleCount() { + return 150000; + }, + getDynamicRules({ ruleIds } = {}) { + return new Promise(resolve => { + nativeDNR.getDynamicRules(rules => { + if ( Array.isArray(rules) === false ) { return resolve([]); } + return resolve(normalizeDNRRules(rules, ruleIds)); + }); + }); + }, + getEnabledRulesets(...args) { + return nativeDNR.getEnabledRulesets(...args); + }, + getMatchedRules(...args) { + return nativeDNR.getMatchedRules(...args); + }, + getSessionRules({ ruleIds } = {}) { + return new Promise(resolve => { + nativeDNR.getSessionRules(rules => { + if ( Array.isArray(rules) === false ) { return resolve([]); } + return resolve(normalizeDNRRules(rules, ruleIds)); + }); + }); + }, + isRegexSupported(...args) { + return nativeDNR.isRegexSupported(...args); + }, + async updateDynamicRules(optionsBefore) { + const optionsAfter = prepareUpdateRules(optionsBefore); + if ( optionsAfter === undefined ) { return; } + return nativeDNR.updateDynamicRules(optionsAfter); + }, + async updateEnabledRulesets(...args) { + await nativeDNR.updateEnabledRulesets(...args); + seenRealms = 0b00; + await webext.storage.session.remove('safari.seenRealms'); + }, + async updateSessionRules(optionsBefore) { + const optionsAfter = prepareUpdateRules(optionsBefore); + if ( optionsAfter === undefined ) { return; } + return nativeDNR.updateSessionRules(optionsAfter); + }, + async setAllowAllRules(id, allowed, notAllowed, reverse, priority) { + const beforeRules = await this.getDynamicRules({ ruleIds: [ id+0 ] }); + const addRules = []; + if ( reverse || allowed.length || notAllowed.length ) { + const rule0 = { + id: id+0, + action: { type: 'allow' }, + condition: { urlFilter: '*' }, + priority, + }; + if ( allowed.length ) { + rule0.condition.domains = allowed; + } else if ( notAllowed.length ) { + rule0.condition.excludedDomains = notAllowed; + } + addRules.push(rule0); + } + if ( deepEquals(addRules, beforeRules) ) { return false; } + return this.updateDynamicRules({ + addRules, + removeRuleIds: beforeRules.map(r => r.id), + }).then(( ) => + true + ).catch(( ) => + false + ); + }, + setExtensionActionOptions(...args) { + return nativeDNR.setExtensionActionOptions(...args); + }, +}; diff --git a/platform/mv3/safari/manifest.json b/platform/mv3/safari/manifest.json new file mode 100644 index 0000000000000..ce029cdc1be44 --- /dev/null +++ b/platform/mv3/safari/manifest.json @@ -0,0 +1,90 @@ +{ + "action": { + "default_icon": "/img/icon_64.png", + "default_popup": "popup.html" + }, + "author": "Raymond Hill", + "background": { + "scripts": [ "/js/background.js" ], + "type": "module", + "persistent": false + }, + "browser_specific_settings": { + "safari": { + "strict_min_version": "18.6" + } + }, + "commands": { + "enter-zapper-mode": { + "description": "__MSG_zapperTipEnter__" + }, + "enter-picker-mode": { + "description": "__MSG_pickerTipEnter__" + } + }, + "declarative_net_request": { + "rule_resources": [ + ] + }, + "default_locale": "en", + "description": "__MSG_extShortDesc__", + "icons": { + "16": "/img/icon_16.png", + "32": "/img/icon_32.png", + "64": "/img/icon_64.png", + "128": "/img/icon_128.png", + "512": "/img/icon_512.png" + }, + "manifest_version": 3, + "name": "__MSG_extName__", + "options_ui": { + "page": "dashboard.html" + }, + "host_permissions": [ + "" + ], + "permissions": [ + "activeTab", + "declarativeNetRequest", + "declarativeNetRequestWithHostAccess", + "scripting", + "storage", + "unlimitedStorage" + ], + "short_name": "uBO Lite", + "version": "1.0", + "web_accessible_resources": [ + { + "resources": [ + "strictblock.html" + ], + "matches": [ + "" + ] + }, + { + "resources": [ + "zapper-ui.html" + ], + "matches": [ + "" + ] + }, + { + "resources": [ + "picker-ui.html" + ], + "matches": [ + "" + ] + }, + { + "resources": [ + "unpicker-ui.html" + ], + "matches": [ + "" + ] + } + ] +} diff --git a/platform/mv3/safari/patch-extension.js b/platform/mv3/safari/patch-extension.js new file mode 100644 index 0000000000000..142d48033936b --- /dev/null +++ b/platform/mv3/safari/patch-extension.js @@ -0,0 +1,107 @@ +/******************************************************************************* + + 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 fs from 'fs/promises'; +import process from 'process'; + +/******************************************************************************/ + +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 = ''; + } else { + name = arg.slice(0, pos); + value = arg.slice(pos+1); + } + args[name] = value; + } + return args; +})(); + +/******************************************************************************/ + +// Apple store rejects when description (extShortDesc) is longer than 112 +// characters. + +async function fixLongDescription(path) { + let text = await fs.readFile(path, { encoding: 'utf8' }); + const messages = JSON.parse(text); + let message = messages.extShortDesc.message; + if ( message.length <= 112 ) { return; } + const pos = message.indexOf('.'); + if ( pos !== -1 ) { + message = message.slice(0, pos+1); + } + if ( message.length >= 112 ) { + message = `${message.slice(0, 111)}…`; + } + messages.extShortDesc.message = message; + text = JSON.stringify(messages, null, 2); + await fs.writeFile(path, text); +} + +async function fixLongDescriptions() { + const promises = []; + const packageDir = commandLineArgs.packageDir; + const entries = await fs.readdir(`${packageDir}/_locales/`, { withFileTypes: true }); + for ( const entry of entries ) { + if ( entry.isDirectory() === false ) { continue; } + promises.push(fixLongDescription(`${packageDir}/_locales/${entry.name}/messages.json`)); + } + return Promise.all(promises); +} + +/******************************************************************************/ + +// Apple store rejects when version has four components. + +async function fixManifest() { + const packageDir = commandLineArgs.packageDir; + const path = `${packageDir}/manifest.json`; + let text = await fs.readFile(path, { encoding: 'utf8' }); + const manifest = JSON.parse(text); + const match = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/.exec(manifest.version); + if ( match === null ) { return; } + const month = parseInt(match[2], 10); + const dayofmonth = parseInt(match[3], 10); + const monthday /* sort of */ = month * 100 + dayofmonth; + manifest.version = `${match[1]}.${monthday}.${match[4]}`; + text = JSON.stringify(manifest, null, 2); + await fs.writeFile(path, text); +} + +/******************************************************************************/ + +async function main() { + await Promise.all([ + fixLongDescriptions(), + fixManifest(), + ]); +} + +main(); + +/******************************************************************************/ diff --git a/platform/mv3/safari/patch-ruleset.js b/platform/mv3/safari/patch-ruleset.js new file mode 100644 index 0000000000000..a821251e160ae --- /dev/null +++ b/platform/mv3/safari/patch-ruleset.js @@ -0,0 +1,91 @@ +/******************************************************************************* + + 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 +*/ + +// https://github.com/uBlockOrigin/uBOL-home/issues/539 +function patchRuleForIssue539(rule) { + const { condition } = rule; + if ( Array.isArray(condition.requestDomains) === false ) { return; } + if ( Array.isArray(condition.initiatorDomains) ) { return; } + if ( Array.isArray(condition.excludedRequestDomains) ) { + if ( Array.isArray(condition.excludedInitiatorDomains) ) { return; } + } + if ( Array.isArray(condition.resourceTypes) === false ) { return; } + if ( condition.resourceTypes.length !== 1 ) { return; } + if ( condition.resourceTypes.includes('main_frame') === false ) { return; } + if ( condition.regexFilter === undefined ) { return; } + condition.initiatorDomains = condition.requestDomains; + delete condition.requestDomains; + if ( Array.isArray(condition.excludedRequestDomains) ) { + condition.excludedInitiatorDomains = condition.excludedRequestDomains; + delete condition.excludedRequestDomains; + } +} + +function patchRule(rule, out) { + const copy = structuredClone(rule); + const condition = copy.condition; + if ( copy.action.type === 'modifyHeaders' ) { return; } + if ( Array.isArray(copy.condition.responseHeaders) ) { return; } + // https://github.com/uBlockOrigin/uBOL-home/issues/476#issuecomment-3299309478 + // https://github.com/uBlockOrigin/uBOL-home/issues/608 + if ( copy.action.redirect?.transform?.queryTransform?.removeParams ) { + const resourceTypes = condition.resourceTypes; + if ( resourceTypes?.includes('main_frame') ) { + condition.resourceTypes = resourceTypes.filter(a => a !== 'main_frame' && a !== 'image'); + if ( condition.resourceTypes.length === 0 ) { return; } + } + } + if ( Array.isArray(condition.initiatorDomains) ) { + condition.domains = condition.initiatorDomains; + delete condition.initiatorDomains; + } + if ( Array.isArray(condition.excludedInitiatorDomains) ) { + condition.excludedDomains = condition.excludedInitiatorDomains; + delete condition.excludedInitiatorDomains; + } + patchRuleForIssue539(copy); + // https://github.com/uBlockOrigin/uBOL-home/issues/434 + let { urlFilter } = condition; + if ( urlFilter?.endsWith('^') ) { + urlFilter = urlFilter.slice(0, -1); + const match = /^(.*?\/\/|\|\|)/.exec(urlFilter); + const pattern = match + ? urlFilter.slice(match[0].length) + : urlFilter; + if ( /[^\w.%*-]/.test(pattern) ) { + const extra = structuredClone(copy); + extra.condition.urlFilter = `${urlFilter}|`; + out.push(extra); + console.log(`\tAdd ${extra.condition.urlFilter}`); + } + } + out.push(copy); + return copy; +} + +export function patchRuleset(ruleset) { + const out = []; + for ( const rule of ruleset ) { + if ( patchRule(rule, out) ) { continue; } + console.log(`\tReject ${JSON.stringify(rule)}`); + } + return out; +} diff --git a/platform/mv3/safe-replace.js b/platform/mv3/safe-replace.js new file mode 100644 index 0000000000000..6f417b20b733c --- /dev/null +++ b/platform/mv3/safe-replace.js @@ -0,0 +1,37 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2017-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 +*/ + +export function safeReplace(text, pattern, replacement, count = 1) { + const rePattern = typeof pattern === 'string' + ? new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')) + : pattern; + let out = text; + for (;;) { + const match = rePattern.exec(out); + if ( match === null ) { break; } + out = out.slice(0, match.index) + + replacement + + out.slice(match.index + match[0].length); + count -= 1; + if ( count === 0 ) { break; } + } + return out; +} diff --git a/platform/mv3/salvage-ruleids.mjs b/platform/mv3/salvage-ruleids.mjs new file mode 100644 index 0000000000000..c272597b9b420 --- /dev/null +++ b/platform/mv3/salvage-ruleids.mjs @@ -0,0 +1,116 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2024-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 fs from 'fs/promises'; +import process from 'process'; + +/******************************************************************************/ + +const commandLineArgs = (( ) => { + const args = new Map(); + let name, value; + for ( const arg of process.argv.slice(2) ) { + const pos = arg.indexOf('='); + if ( pos === -1 ) { + name = arg; + value = ''; + } else { + name = arg.slice(0, pos); + value = arg.slice(pos+1); + } + args.set(name, value); + } + return args; +})(); + +const beforeDir = commandLineArgs.get('before') || ''; +const afterDir = commandLineArgs.get('after') || ''; + +if ( beforeDir === '' || afterDir === '' ) { + process.exit(0); +} + +/******************************************************************************/ + +async function main() { + const folders = [ + 'main', + 'modify-headers', + 'redirect', + 'regex', + 'removeparam', + ]; + const writePromises = []; + for ( const folder of folders ) { + const afterFiles = await fs.readdir(`${afterDir}/rulesets/${folder}`).catch(( ) => { }); + if ( afterFiles === undefined ) { continue; } + for ( const file of afterFiles ) { + let raw = await fs.readFile(`${beforeDir}/rulesets/${folder}/${file}`, 'utf-8').catch(( ) => ''); + let beforeRules; + try { beforeRules = JSON.parse(raw); } catch { } + if ( Array.isArray(beforeRules) === false ) { continue; } + raw = await fs.readFile(`${afterDir}/rulesets/${folder}/${file}`, 'utf-8').catch(( ) => ''); + let afterRules; + try { afterRules = JSON.parse(raw); } catch { } + if ( Array.isArray(afterRules) === false ) { continue; } + const beforeMap = new Map(beforeRules.map(a => { + const id = a.id; + a.id = 0; + return [ JSON.stringify(a), id ]; + })); + const reusedIds = new Set(); + for ( const afterRule of afterRules ) { + afterRule.id = 0; + const key = JSON.stringify(afterRule); + const beforeId = beforeMap.get(key); + if ( beforeId === undefined ) { continue; } + if ( reusedIds.has(beforeId) ) { continue; } + afterRule.id = beforeId; + reusedIds.add(beforeId); + } + // Assign new ids to unmatched rules + let ruleIdGenerator = 1; + for ( const afterRule of afterRules ) { + if ( afterRule.id !== 0 ) { continue; } + while ( reusedIds.has(ruleIdGenerator) ) { ruleIdGenerator += 1; } + afterRule.id = ruleIdGenerator++; + } + afterRules.sort((a, b) => a.id - b.id); + const indent = afterRules.length > 10 ? undefined : 1; + const lines = []; + for ( const afterRule of afterRules ) { + lines.push(JSON.stringify(afterRule, null, indent)); + } + const path = `${afterDir}/rulesets/${folder}/${file}`; + console.log(` Salvaged ${reusedIds.size} ids in ${folder}/${file}`); + writePromises.push( + fs.writeFile(path, `[\n${lines.join(',\n')}\n]\n`) + ); + } + } + await Promise.all(writePromises); +} + +main(); + +/******************************************************************************/ diff --git a/platform/mv3/scriptlets/css-generic.template.js b/platform/mv3/scriptlets/css-generic.template.js new file mode 100644 index 0000000000000..a353d58544016 --- /dev/null +++ b/platform/mv3/scriptlets/css-generic.template.js @@ -0,0 +1,87 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-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 +*/ + +// $rulesetId$ + +// Important! +// Isolate from global scope +(function uBOL_cssGenericImport() { + +/******************************************************************************/ + +const genericSelectorMap = self.$genericSelectorMap$; +const genericExceptionSieve = self.$genericExceptionSieve$; +const genericExceptionMap = self.$genericExceptionMap$; + +if ( genericSelectorMap ) { + const map = self.genericSelectorMap = + self.genericSelectorMap || new Map(); + if ( map.size !== 0 ) { + for ( const entry of genericSelectorMap ) { + const before = map.get(entry[0]); + if ( before === undefined ) { + map.set(entry[0], entry[1]); + } else { + map.set(entry[0], `${before},\n${entry[1]}`); + } + } + } else { + self.genericSelectorMap = new Map(genericSelectorMap); + } + genericSelectorMap.length = 0; +} + +if ( genericExceptionSieve ) { + const hashes = self.genericExceptionSieve = + self.genericExceptionSieve || new Set(); + if ( hashes.size !== 0 ) { + for ( const hash of genericExceptionSieve ) { + hashes.add(hash); + } + } else { + self.genericExceptionSieve = new Set(genericExceptionSieve); + } + genericExceptionSieve.length = 0; +} + +if ( genericExceptionMap ) { + const map = self.genericExceptionMap = + self.genericExceptionMap || new Map(); + if ( map.size !== 0 ) { + for ( const entry of genericExceptionMap ) { + const before = map.get(entry[0]); + if ( before === undefined ) { + map.set(entry[0], entry[1]); + } else { + map.set(entry[0], `${before}\n${entry[1]}`); + } + } + } else { + self.genericExceptionMap = new Map(genericExceptionMap); + } + genericExceptionMap.length = 0; +} + +/******************************************************************************/ + +})(); + +/******************************************************************************/ diff --git a/platform/mv3/scriptlets/css-generichigh.template.css b/platform/mv3/scriptlets/css-generichigh.template.css new file mode 100644 index 0000000000000..370bc4c04de6a --- /dev/null +++ b/platform/mv3/scriptlets/css-generichigh.template.css @@ -0,0 +1,26 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-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 +*/ + +/* $rulesetId$ */ + +$selectorList$ { + display: none !important; +} diff --git a/platform/mv3/scriptlets/css-procedural.template.js b/platform/mv3/scriptlets/css-procedural.template.js new file mode 100644 index 0000000000000..0aaf6c67f1d7a --- /dev/null +++ b/platform/mv3/scriptlets/css-procedural.template.js @@ -0,0 +1,37 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-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 +*/ + +// Important! +// Isolate from global scope +(function uBOL_cssProceduralImport() { + +/******************************************************************************/ + +const rulesetId = self.$rulesetId$; + +self.proceduralImports = self.proceduralImports || []; +self.proceduralImports.push(rulesetId); + +/******************************************************************************/ + +})(); + +/******************************************************************************/ diff --git a/platform/mv3/scriptlets/css-specific.template.js b/platform/mv3/scriptlets/css-specific.template.js new file mode 100644 index 0000000000000..7630892fbb379 --- /dev/null +++ b/platform/mv3/scriptlets/css-specific.template.js @@ -0,0 +1,37 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2019-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 +*/ + +// Important! +// Isolate from global scope +(function uBOL_cssSpecificImports() { + +/******************************************************************************/ + +const rulesetId = self.$rulesetId$; + +self.specificImports = self.specificImports || []; +self.specificImports.push(rulesetId); + +/******************************************************************************/ + +})(); + +/******************************************************************************/ diff --git a/platform/mv3/scriptlets/scriptlet.template.js b/platform/mv3/scriptlets/scriptlet.template.js new file mode 100644 index 0000000000000..6655d3ca9b211 --- /dev/null +++ b/platform/mv3/scriptlets/scriptlet.template.js @@ -0,0 +1,188 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-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 + +*/ + +// ruleset: $rulesetId$ + +// Important! +// Isolate from global scope + +// Start of local scope +(function uBOL_scriptlets() { + +/******************************************************************************/ + +self.$scriptletCode$ + +/******************************************************************************/ + +const scriptletGlobals = {}; // eslint-disable-line + +const $scriptletFunctions$ = self.$scriptletFunctions$; + +const $scriptletArgs$ = self.$scriptletArgs$; + +const $scriptletArglists$ = self.$scriptletArglists$; + +const $scriptletArglistRefs$ = self.$scriptletArglistRefs$; + +const $scriptletHostnames$ = self.$scriptletHostnames$; + +const $scriptletFromRegexes$ = self.$scriptletFromRegexes$; + +const $hasEntities$ = self.$hasEntities$; +const $hasAncestors$ = self.$hasAncestors$; +const $hasRegexes$ = self.$hasRegexes$; + +/******************************************************************************/ + +const entries = (( ) => { + const docloc = document.location; + const origins = [ docloc.origin ]; + if ( docloc.ancestorOrigins ) { + origins.push(...docloc.ancestorOrigins); + } + return origins.map((origin, i) => { + const beg = origin.indexOf('://'); + if ( beg === -1 ) { return; } + const hn1 = origin.slice(beg+3) + const end = hn1.indexOf(':'); + const hn2 = end === -1 ? hn1 : hn1.slice(0, end); + const hnParts = hn2.split('.'); + if ( hn2.length === 0 ) { return; } + const hns = []; + for ( let i = 0; i < hnParts.length; i++ ) { + hns.push(`${hnParts.slice(i).join('.')}`); + } + const ens = []; + if ( $hasEntities$ ) { + const n = hnParts.length - 1; + for ( let i = 0; i < n; i++ ) { + for ( let j = n; j > i; j-- ) { + ens.push(`${hnParts.slice(i,j).join('.')}.*`); + } + } + ens.sort((a, b) => { + const d = b.length - a.length; + if ( d !== 0 ) { return d; } + return a > b ? -1 : 1; + }); + } + return { hns, ens, i }; + }).filter(a => a !== undefined); +})(); +if ( entries.length === 0 ) { return; } + +const collectArglistRefIndices = (out, hn, r) => { + let l = 0, i = 0, d = 0; + let candidate = ''; + while ( l < r ) { + i = l + r >>> 1; + candidate = $scriptletHostnames$[i]; + d = hn.length - candidate.length; + if ( d === 0 ) { + if ( hn === candidate ) { + out.add(i); break; + } + d = hn < candidate ? -1 : 1; + } + if ( d < 0 ) { + r = i; + } else { + l = i + 1; + } + } + return i; +}; + +const indicesFromHostname = (out, hnDetails, suffix = '') => { + if ( hnDetails.hns.length === 0 ) { return; } + let r = $scriptletHostnames$.length; + for ( const hn of hnDetails.hns ) { + r = collectArglistRefIndices(out, `${hn}${suffix}`, r); + } + if ( $hasEntities$ ) { + let r = $scriptletHostnames$.length; + for ( const en of hnDetails.ens ) { + r = collectArglistRefIndices(out, `${en}${suffix}`, r); + } + } +}; + +const todoIndices = new Set(); +indicesFromHostname(todoIndices, entries[0]); +if ( $hasAncestors$ ) { + for ( const entry of entries ) { + if ( entry.i === 0 ) { continue; } + indicesFromHostname(todoIndices, entry, '>>'); + } +} +$scriptletHostnames$.length = 0; + +// Collect arglist references +const todo = new Set(); +if ( todoIndices.size !== 0 ) { + const arglistRefs = $scriptletArglistRefs$.split(';'); + for ( const i of todoIndices ) { + for ( const ref of JSON.parse(`[${arglistRefs[i]}]`) ) { + todo.add(ref); + } + } +} +if ( $hasRegexes$ ) { + const { hns } = entries[0]; + for ( let i = 0, n = $scriptletFromRegexes$.length; i < n; i += 3 ) { + const needle = $scriptletFromRegexes$[i+0]; + let regex; + for ( const hn of hns ) { + if ( hn.includes(needle) === false ) { continue; } + if ( regex === undefined ) { + regex = new RegExp($scriptletFromRegexes$[i+1]); + } + if ( regex.test(hn) === false ) { continue; } + for ( const ref of JSON.parse(`[${$scriptletFromRegexes$[i+2]}]`) ) { + todo.add(ref); + } + } + } +} +if ( todo.size === 0 ) { return; } + +// Execute scriplets +{ + const arglists = $scriptletArglists$.split(';'); + const args = $scriptletArgs$; + for ( const ref of todo ) { + if ( ref < 0 ) { continue; } + if ( todo.has(~ref) ) { continue; } + const arglist = JSON.parse(`[${arglists[ref]}]`); + const fn = $scriptletFunctions$[arglist[0]]; + try { fn(...arglist.slice(1).map(a => args[a])); } + catch { } + } +} + +/******************************************************************************/ + +// End of local scope +})(); + +void 0; diff --git a/platform/nodejs/.eslintrc.json b/platform/nodejs/.eslintrc.json new file mode 100644 index 0000000000000..5f7c6b58c5ccf --- /dev/null +++ b/platform/nodejs/.eslintrc.json @@ -0,0 +1,38 @@ +{ + "root": true, + "env": { + "es2021": true, + "node": true + }, + "extends": "eslint:recommended", + "parserOptions": { + "ecmaVersion": 12, + "sourceType": "module" + }, + "rules": { + "eqeqeq": [ "warn", "always" ], + "indent": [ + "warn", + 4, + { + "ArrayExpression": "first", + "CallExpression": { "arguments": "first" }, + "MemberExpression": "off", + "ObjectExpression": "off", + "ignoreComments": true, + "ignoredNodes": [ + "AssignmentExpression:has(Literal)" + ] + } + ], + "getter-return": "off", + "no-control-regex": "off", + "no-empty": [ "error", { "allowEmptyCatch": true } ], + "no-promise-executor-return": [ "error" ], + "no-template-curly-in-string": [ "error" ], + "no-unreachable-loop": [ "error" ], + "no-useless-backreference": [ "error" ], + "no-useless-escape": "off", + "require-atomic-updates": [ "warn" ] + } +} diff --git a/platform/nodejs/build.js b/platform/nodejs/build.js new file mode 100644 index 0000000000000..eb22693ff8bf0 --- /dev/null +++ b/platform/nodejs/build.js @@ -0,0 +1,29 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2014-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 fs from 'fs'; +import { pslInit } from './index.js'; + +/******************************************************************************/ + +fs.mkdirSync('./build', { recursive: true }); +fs.writeFileSync('./build/publicsuffixlist.json', + JSON.stringify(pslInit().toSelfie())); diff --git a/platform/nodejs/index.js b/platform/nodejs/index.js new file mode 100644 index 0000000000000..3b82cb9ab383e --- /dev/null +++ b/platform/nodejs/index.js @@ -0,0 +1,295 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2014-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 +*/ + +/* globals process */ + +import * as s14e from './js/s14e-serializer.js'; +import * as sfp from './js/static-filtering-parser.js'; + +import { + CompiledListReader, + CompiledListWriter, +} from './js/static-filtering-io.js'; +import { + TextDecoder, + TextEncoder, +} from 'util'; +import { + dirname, + resolve +} from 'path'; +import { + domainToASCII, + fileURLToPath +} from 'url'; + +import { FilteringContext } from './js/filtering-context.js'; +import { LineIterator } from './js/text-utils.js'; +import { createRequire } from 'module'; +import publicSuffixList from './lib/publicsuffixlist/publicsuffixlist.js'; +import { readFileSync } from 'fs'; +import snfe from './js/static-net-filtering.js'; + +/******************************************************************************/ + +const __dirname = dirname(fileURLToPath(import.meta.url)); + +// https://stackoverflow.com/questions/69187442/const-utf8encoder-new-textencoder-in-node-js +globalThis.TextDecoder = TextDecoder; +globalThis.TextEncoder = TextEncoder; + +/******************************************************************************/ + +function loadJSON(path) { + return JSON.parse(readFileSync(resolve(__dirname, path), 'utf8')); +} + +/******************************************************************************/ + +async function enableWASM() { + const wasmModuleFetcher = function(path) { + const require = createRequire(import.meta.url); // jshint ignore:line + const wasm = new Uint8Array(require(`${path}.wasm.json`)); + return WebAssembly.compile(wasm); + }; + try { + const results = await Promise.all([ + publicSuffixList.enableWASM(wasmModuleFetcher, './lib/publicsuffixlist/wasm/'), + snfe.enableWASM(wasmModuleFetcher, './js/wasm/'), + ]); + return results.every(a => a === true); + } catch(reason) { + console.log(reason); + } + return false; +} + +/******************************************************************************/ + +function pslInit(raw) { + if ( typeof raw === 'string' && raw.trim() !== '' ) { + publicSuffixList.parse(raw, domainToASCII); + return publicSuffixList; + } + + // Use serialized version if available + let serialized = null; + try { + // Use loadJSON() because require() would keep the string in memory. + serialized = loadJSON('build/publicsuffixlist.json'); + } catch (error) { + if ( process.env.npm_lifecycle_event !== 'build' ) { + // This should never happen except during package building. + console.error(error); + } + } + if ( serialized !== null ) { + publicSuffixList.fromSelfie(serialized); + return publicSuffixList; + } + + raw = readFileSync( + resolve(__dirname, './assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat'), + 'utf8' + ); + if ( typeof raw !== 'string' || raw.trim() === '' ) { + console.error('Unable to populate public suffix list'); + return; + } + publicSuffixList.parse(raw, domainToASCII); + return publicSuffixList; +} + +/******************************************************************************/ + +function compileList({ name, raw }, compiler, writer, options = {}) { + if ( typeof raw !== 'string' || raw === '' ) { return; } + const lineIter = new LineIterator(raw); + const events = Array.isArray(options.events) ? options.events : undefined; + + if ( name ) { + writer.properties.set('name', name); + } + + const parser = new sfp.AstFilterParser({ + maxTokenLength: snfe.MAX_TOKEN_LENGTH, + }); + + while ( lineIter.eot() === false ) { + let line = lineIter.next(); + while ( line.endsWith(' \\') ) { + if ( lineIter.peek(4) !== ' ' ) { break; } + line = line.slice(0, -2).trim() + lineIter.next().trim(); + } + parser.parse(line); + if ( parser.isFilter() === false ) { continue; } + if ( parser.isNetworkFilter() === false ) { continue; } + if ( compiler.compile(parser, writer) ) { continue; } + if ( compiler.error !== undefined && events !== undefined ) { + options.events.push({ + type: 'error', + text: compiler.error + }); + } + } + + return writer.toString(); +} + +/******************************************************************************/ + +async function useLists(lists, options = {}) { + if ( useLists.promise !== null ) { + throw new Error('Pending useLists() operation'); + } + + // Remove all filters + snfe.reset(); + + if ( Array.isArray(lists) === false || lists.length === 0 ) { + return; + } + + let compiler = null; + + const consumeList = list => { + let { compiled } = list; + if ( typeof compiled !== 'string' || compiled === '' ) { + const writer = new CompiledListWriter(); + if ( compiler === null ) { + compiler = snfe.createCompiler(); + } + compiled = compileList(list, compiler, writer, options); + } + snfe.fromCompiled(new CompiledListReader(compiled)); + }; + + // Populate filtering engine with resolved filter lists + const promises = []; + for ( const list of lists ) { + promises.push(Promise.resolve(list).then(list => consumeList(list))); + } + + useLists.promise = Promise.all(promises); + await useLists.promise; + useLists.promise = null; + + // Commit changes + snfe.freeze(); + snfe.optimize(); +} + +useLists.promise = null; + +/******************************************************************************/ + +const fctx = new FilteringContext(); +let snfeProxyInstance = null; + +class StaticNetFilteringEngine { + constructor() { + if ( snfeProxyInstance !== null ) { + throw new Error('Only a single instance is supported.'); + } + snfeProxyInstance = this; + } + + useLists(lists) { + return useLists(lists); + } + + matchRequest(details) { + return snfe.matchRequest(fctx.fromDetails(details)); + } + + matchAndFetchModifiers(details, modifier) { + return snfe.matchAndFetchModifiers(fctx.fromDetails(details), modifier); + } + + hasQuery(details) { + return snfe.hasQuery(details); + } + + filterQuery(details) { + fctx.redirectURL = undefined; + const directives = snfe.filterQuery(fctx.fromDetails(details)); + if ( directives === undefined ) { return; } + return { redirectURL: fctx.redirectURL, directives }; + } + + isBlockImportant() { + return snfe.isBlockImportant(); + } + + toLogData() { + return snfe.toLogData(); + } + + createCompiler(parser) { + return snfe.createCompiler(parser); + } + + compileList(...args) { + return compileList(...args); + } + + async serialize() { + const data = snfe.serialize(); + return s14e.serialize(data, { compress: true }); + } + + async deserialize(serialized) { + const data = s14e.deserialize(serialized); + return snfe.unserialize(data); + } + + static async create({ noPSL = false } = {}) { + const instance = new StaticNetFilteringEngine(); + + if ( noPSL !== true && !pslInit() ) { + throw new Error('Failed to initialize public suffix list.'); + } + + return instance; + } + + static async release() { + if ( snfeProxyInstance === null ) { return; } + snfeProxyInstance = null; + await useLists([]); + } +} + +/******************************************************************************/ + +// rollup.js needs module.exports to be set back to the local exports object. +// This is because some of the code (e.g. publicsuffixlist.js) sets +// module.exports. Once all included files are written like ES modules, using +// export statements, this should no longer be necessary. +if ( typeof module !== 'undefined' && typeof exports !== 'undefined' ) { + module.exports = exports; // eslint-disable-line no-undef +} + +export { + enableWASM, + pslInit, + StaticNetFilteringEngine, +}; diff --git a/platform/npm/.npmignore b/platform/npm/.npmignore new file mode 100644 index 0000000000000..5c606d41e8eb6 --- /dev/null +++ b/platform/npm/.npmignore @@ -0,0 +1,5 @@ +assets/ +coverage/ +tests/ +.eslintrc.json +test.js diff --git a/platform/npm/README.md b/platform/npm/README.md new file mode 100644 index 0000000000000..a1ce7f42e7004 --- /dev/null +++ b/platform/npm/README.md @@ -0,0 +1,170 @@ +# uBlock Origin Core + +The core filtering engines used in the uBlock Origin ("uBO") extension, and has +no external dependencies. + +## Installation + +Install: `npm install @gorhill/ubo-core` + +This is a very early version and the API is subject to change at any time. + +This package uses [native JavaScript modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules). + + +## Description + +The package contains uBO's static network filtering engine ("SNFE"), which +purpose is to parse and enforce filter lists. The matching algorithm is highly +efficient, and _especially_ optimized to match against large sets of pure +hostnames. + +The SNFE can be fed filter lists from a variety of sources, such as [EasyList/EasyPrivacy](https://easylist.to/), +[uBlock filters](https://github.com/uBlockOrigin/uAssets/tree/master/filters), +and also lists of domain names or hosts file format (i.e. block lists from [The Block List Project](https://github.com/blocklistproject/Lists#the-block-list-project), +[Steven Black's HOSTS](https://github.com/StevenBlack/hosts#readme), etc). + + +## Usage + +See `./demo.js` in package for instructions to quickly get started. + +At the moment, there can be only one instance of the static network filtering +engine ("SNFE"), which proxy API must be imported as follow: + +```js +import { StaticNetFilteringEngine } from '@gorhill/ubo-core'; +``` + +If you must import as a NodeJS module: + +```js +const { StaticNetFilteringEngine } = await import('@gorhill/ubo-core'); +``` + + +Create an instance of SNFE: + +```js +const snfe = await StaticNetFilteringEngine.create(); +``` + +Feed the SNFE with filter lists -- `useLists()` accepts an array of +objects (or promises to object) which expose the raw text of a list +through the `raw` property, and optionally the name of the list through the +`name` property (how you fetch the lists is up to you): + +```js +await snfe.useLists([ + fetch('easylist').then(r => r.text()).then(raw => ({ name: 'easylist', raw })), + fetch('easyprivacy').then(r => r.text()).then(raw => ({ name: 'easyprivacy', raw })), +]); +``` + +Now we are ready to match network requests: + +```js +// Not blocked +if ( snfe.matchRequest({ + originURL: 'https://www.bloomberg.com/', + url: 'https://www.bloomberg.com/tophat/assets/v2.6.1/that.css', + type: 'stylesheet' +}) !== 0 ) { + console.log(snfe.toLogData()); +} + +// Blocked +if ( snfe.matchRequest({ + originURL: 'https://www.bloomberg.com/', + url: 'https://securepubads.g.doubleclick.net/tag/js/gpt.js', + type: 'script' +}) !== 0 ) { + console.log(snfe.toLogData()); +} + +// Unblocked +if ( snfe.matchRequest({ + originURL: 'https://www.bloomberg.com/', + url: 'https://sourcepointcmp.bloomberg.com/ccpa.js', + type: 'script' +}) !== 0 ) { + console.log(snfe.toLogData()); +} +``` + +Once all the filter lists are loaded into the static network filtering engine, +you can serialize the content of the engine into a JS string: + +```js +const serializedData = await snfe.serialize(); +``` + +You can save and later use that JS string to fast-load the content of the +static network filtering engine without having to parse and compile the lists: + +```js +const snfe = await StaticNetFilteringEngine.create(); +await snfe.deserialize(serializedData); +``` + +--- + +## Extras + +You can directly use specific APIs exposed by this package, here are some of +them, which are used internally by uBO's SNFE. + +### HNTrieContainer + +A well optimised [compressed trie](https://en.wikipedia.org/wiki/Trie#Compressing_tries) +container specialized to specifically store and lookup hostnames. + +The matching algorithm is designed for hostnames, i.e. the hostname labels +making up a hostname are matched from right to left, such that `www.example.org` +with be a match if `example.org` is stored into the trie, while +`anotherexample.org` won't be a match. + +`HNTrieContainer` is designed to store a large number of hostnames with CPU and +memory efficiency as a main concern -- and is a key component of uBO. + +To create and use a standalone `HNTrieContainer` object: + +```js +import HNTrieContainer from '@gorhill/ubo-core/js/hntrie.js'; + +const trieContainer = new HNTrieContainer(); + +const aTrie = trieContainer.createOne(); +trieContainer.add(aTrie, 'example.org'); +trieContainer.add(aTrie, 'example.com'); + +const anotherTrie = trieContainer.createOne(); +trieContainer.add(anotherTrie, 'foo.invalid'); +trieContainer.add(anotherTrie, 'bar.invalid'); + +// matches() return the position at which the match starts, or -1 when +// there is no match. + +// Matches: return 4 +console.log("trieContainer.matches(aTrie, 'www.example.org')", trieContainer.matches(aTrie, 'www.example.org')); + +// Does not match: return -1 +console.log("trieContainer.matches(aTrie, 'www.foo.invalid')", trieContainer.matches(aTrie, 'www.foo.invalid')); + +// Does not match: return -1 +console.log("trieContainer.matches(anotherTrie, 'www.example.org')", trieContainer.matches(anotherTrie, 'www.example.org')); + +// Matches: return 0 +console.log("trieContainer.matches(anotherTrie, 'foo.invalid')", trieContainer.matches(anotherTrie, 'foo.invalid')); +``` + +The `reset()` method must be used to remove all the tries from a trie container, +you can't remove a single trie from the container. + +```js +trieContainer.reset(); +``` + +When you reset a trie container, you can't use the reference to prior instances +of trie, i.e. `aTrie` and `anotherTrie` are no longer valid and shouldn't be +used following a reset. diff --git a/platform/npm/demo.js b/platform/npm/demo.js new file mode 100644 index 0000000000000..8baec24e47c52 --- /dev/null +++ b/platform/npm/demo.js @@ -0,0 +1,121 @@ +/******************************************************************************* + * + * A simple demo to quickly get started. + * + * Command line: + * + * mkdir myproject + * cd myproject + * npm install @gorhill/ubo-core + * cp node_modules/@gorhill/ubo-core/demo.js . + * + * There will be a `demo.js` file in your `myproject` folder, which you can + * modify and execute: + * + * node demo.js + * + * Since the demo here uses ES module syntax, you may want to add the following + * to the generated package.json file to avoid the warning: + * + * "type": "module", + * + * The demo will fetch filter lists from EasyList server, then serialize the + * content of the static network filtering engine into a local `./cache/` + * folder. + * + * The serialized data will be reused if available in order to avoid fetching + * from remote server each time it is executed. + * + * This demo is kept as simple as possible, so there is not a lot of error + * handling. + * + * */ + +import { StaticNetFilteringEngine } from '@gorhill/ubo-core'; +import fs from 'fs/promises'; + +/******************************************************************************/ + +async function fetchList(name, url) { + return fetch(url).then(r => { + return r.text(); + }).then(raw => { + console.log(`${name} fetched`); + return { name, raw }; + }).catch(reason => { + console.error(reason); + }); +} + +async function main() { + const pathToSelfie = 'cache/selfie.txt'; + + const snfe = await StaticNetFilteringEngine.create(); + + // Up to date serialization data (aka selfie) available? + let selfie; + const ageInDays = await fs.stat(pathToSelfie).then(stat => { + const fileDate = new Date(stat.mtime); + return (Date.now() - fileDate.getTime()) / (7 * 24 * 60 * 60); + }).catch(( ) => Number.MAX_SAFE_INTEGER); + + // Use a selfie if available and not older than 7 days + if ( ageInDays <= 7 ) { + selfie = await fs.readFile(pathToSelfie, { encoding: 'utf8' }) + .then(data => typeof data === 'string' && data !== '' && data) + .catch(( ) => { }); + if ( typeof selfie === 'string' ) { + await snfe.deserialize(selfie); + } + } + + // Fetch filter lists if no up to date selfie available + if ( !selfie ) { + console.log(`Fetching lists...`); + await snfe.useLists([ + fetchList('ubo-ads', 'https://ublockorigin.github.io/uAssetsCDN/filters/filters.min.txt'), + fetchList('ubo-badware', 'https://ublockorigin.github.io/uAssetsCDN/filters/badware.min.txt'), + fetchList('ubo-privacy', 'https://ublockorigin.github.io/uAssetsCDN/filters/privacy.min.txt'), + fetchList('ubo-unbreak', 'https://ublockorigin.github.io/uAssetsCDN/filters/unbreak.min.txt'), + fetchList('ubo-quick', 'https://ublockorigin.github.io/uAssetsCDN/filters/quick-fixes.min.txt'), + fetchList('easylist', 'https://easylist.to/easylist/easylist.txt'), + fetchList('easyprivacy', 'https://easylist.to/easylist/easyprivacy.txt'), + fetchList('plowe', 'https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext'), + ]); + const selfie = await snfe.serialize(); + await fs.mkdir('cache', { recursive: true }); + await fs.writeFile(pathToSelfie, selfie); + } + + // List of tests to perform + const tests = [ + { + originURL: 'https://www.bloomberg.com/', + url: 'https://www.google-analytics.com/gs.js', + type: 'script', + }, { + originURL: 'https://www.bloomberg.com/', + url: 'https://securepubads.g.doubleclick.net/tag/js/gpt.js', + type: 'script', + }, { + originURL: 'https://www.bloomberg.com/', + url: 'https://bloomberg.com/main.css', + type: 'stylesheet', + } + ]; + + // Test each entry for a match against the content of the engine + for ( const test of tests ) { + console.log('\nRequest details:', test); + const r = snfe.matchRequest(test); + if ( r === 1 ) { // Blocked + console.log('Blocked:', snfe.toLogData()); + } else if ( r === 2 ) { // Unblocked + console.log('Unblocked:', snfe.toLogData()); + } else { // Not blocked + console.log('Not blocked'); + } + } +} + +main(); diff --git a/platform/npm/package-lock.json b/platform/npm/package-lock.json new file mode 100644 index 0000000000000..4bb972818122e --- /dev/null +++ b/platform/npm/package-lock.json @@ -0,0 +1,18 @@ +{ + "name": "@gorhill/ubo-core", + "version": "0.1.30", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@gorhill/ubo-core", + "version": "0.1.30", + "license": "GPL-3.0-or-later", + "devDependencies": {}, + "engines": { + "node": ">=18.0.0", + "npm": ">=6.14.4" + } + } + } +} diff --git a/platform/npm/package.json b/platform/npm/package.json new file mode 100644 index 0000000000000..87431aa9d3eef --- /dev/null +++ b/platform/npm/package.json @@ -0,0 +1,35 @@ +{ + "name": "@gorhill/ubo-core", + "version": "0.1.30", + "description": "To create a working instance of uBlock Origin's static network filtering engine", + "type": "module", + "main": "index.js", + "scripts": { + "build": "node build.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/gorhill/uBlock.git" + }, + "keywords": [ + "uBlock", + "uBO", + "adblock", + "trie" + ], + "author": "Raymond Hill (https://github.com/gorhill)", + "license": "GPL-3.0-or-later", + "contributors": [ + "Manish Jethani " + ], + "bugs": { + "url": "https://github.com/uBlockOrigin/uBlock-issues/issues" + }, + "homepage": "https://github.com/gorhill/uBlock#readme", + "engines": { + "node": ">=18.0.0", + "npm": ">=6.14.4" + }, + "devDependencies": { + } +} diff --git a/platform/npm/test.js b/platform/npm/test.js new file mode 100644 index 0000000000000..25ff9e74302ec --- /dev/null +++ b/platform/npm/test.js @@ -0,0 +1,54 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2014-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 +*/ + +/* globals process */ + +import { promisify } from 'util'; +import { spawn } from "child_process"; + +/******************************************************************************/ + +async function spawnMocha() { + const files = [ + 'tests/wasm.js', + 'tests/snfe.js', + ]; + + const options = []; + + if ( process.argv[3] === '--full-battery' ) { + files.push('tests/request-data.js'); + + options.push('--reporter', 'progress'); + } + + await promisify(spawn)('mocha', [ '--experimental-vm-modules', '--no-warnings', ...files, ...options ], { stdio: [ 'inherit', 'inherit', 'inherit' ] }); +} + +async function main() { + if ( process.argv[2] === '--mocha' ) { + await spawnMocha(); + } +} + +main(); + +/******************************************************************************/ diff --git a/platform/npm/tests/.eslintrc.json b/platform/npm/tests/.eslintrc.json new file mode 100644 index 0000000000000..4668ae79fa4ee --- /dev/null +++ b/platform/npm/tests/.eslintrc.json @@ -0,0 +1,5 @@ +{ + "env": { + "mocha": true + } +} diff --git a/platform/npm/tests/_common.js b/platform/npm/tests/_common.js new file mode 100644 index 0000000000000..c252113cd5112 --- /dev/null +++ b/platform/npm/tests/_common.js @@ -0,0 +1,34 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2014-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 +*/ + +'use strict'; + +/******************************************************************************/ + +import process from 'process'; + +process.on('warning', warning => { + // Ignore warnings about experimental features like + // --experimental-vm-modules + if ( warning.name !== 'ExperimentalWarning' ) { + console.warn(warning.stack); + } +}); diff --git a/platform/npm/tests/data/bundle.tgz b/platform/npm/tests/data/bundle.tgz new file mode 100644 index 0000000000000..e5e3c33c87718 Binary files /dev/null and b/platform/npm/tests/data/bundle.tgz differ diff --git a/platform/npm/tests/leaks.js b/platform/npm/tests/leaks.js new file mode 100644 index 0000000000000..32853981d3204 --- /dev/null +++ b/platform/npm/tests/leaks.js @@ -0,0 +1,30 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2014-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 +*/ + +'use strict'; + +/******************************************************************************/ + +describe('Leaks', () => { + it('should not leak global variables', async () => { + await import('../index.js'); + }); +}); diff --git a/platform/npm/tests/request-data.js b/platform/npm/tests/request-data.js new file mode 100644 index 0000000000000..886fea3315285 --- /dev/null +++ b/platform/npm/tests/request-data.js @@ -0,0 +1,117 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2014-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 +*/ + +'use strict'; + +/******************************************************************************/ + +import { strict as assert } from 'assert'; +import { readFile } from 'fs/promises'; +import { createRequire } from 'module'; +import { dirname, resolve } from 'path'; +import { fileURLToPath } from 'url'; + +import { createWorld } from 'esm-world'; + +import './_common.js'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); + +const require = createRequire(import.meta.url); + +const requests = require('scaling-palm-tree/requests.json'); +const results = require('./data/results.json'); + +async function read(path) { + return readFile(resolve(__dirname, path), 'utf8'); +} + +describe('Request data', () => { + const typeMap = { + document: 'sub_frame', + stylesheet: 'stylesheet', + image: 'image', + media: 'media', + font: 'font', + script: 'script', + xhr: 'xmlhttprequest', + fetch: 'xmlhttprequest', + websocket: 'websocket', + ping: 'ping', + + other: 'other', + eventsource: 'other', + manifest: 'other', + texttrack: 'other', + }; + + for ( let wasm of [ false, true ] ) { + context(`${wasm ? 'Wasm on' : 'Wasm off'}`, () => { + let engine = null; + + before(async () => { + const { StaticNetFilteringEngine, enableWASM } = await createWorld('./index.js', { globals: global }); + + if ( wasm ) { + assert(await enableWASM()); + } + + engine = await StaticNetFilteringEngine.create(); + + await engine.useLists([ + read('./data/assets/ublock/badware.txt') + .then(raw => ({ name: 'badware', raw })), + read('./data/assets/ublock/filters.txt') + .then(raw => ({ name: 'filters', raw })), + read('./data/assets/ublock/filters-2020.txt') + .then(raw => ({ name: 'filters-2020', raw })), + read('./data/assets/ublock/filters-2021.txt') + .then(raw => ({ name: 'filters-2021', raw })), + read('./data/assets/ublock/privacy.txt') + .then(raw => ({ name: 'privacy', raw })), + read('./data/assets/ublock/resource-abuse.txt') + .then(raw => ({ name: 'resource-abuse', raw })), + read('./data/assets/ublock/unbreak.txt') + .then(raw => ({ name: 'unbreak.txt', raw })), + read('./data/assets/thirdparties/easylist-downloads.adblockplus.org/easylist.txt') + .then(raw => ({ name: 'easylist', raw })), + read('./data/assets/thirdparties/easylist-downloads.adblockplus.org/easyprivacy.txt') + .then(raw => ({ name: 'easyprivacy', raw })), + read('./data/assets/thirdparties/pgl.yoyo.org/as/serverlist') + .then(raw => ({ name: 'PGL', raw })), + read('./data/assets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt') + .then(raw => ({ name: 'urlhaus', raw })), + ]); + }); + + for ( let i = 0; i < requests.length; i++ ) { + const { url, frameUrl, cpt } = requests[i]; + const request = { url, originURL: frameUrl, type: typeMap[cpt] }; + + const expected = results[i]; + + it(`should ${expected === 1 ? 'block' : 'allow'} ${request.type} URL ${request.url} from origin ${request.originURL}`, () => { + assert.equal(engine.matchRequest(request), expected); + }); + } + }); + } +}); diff --git a/platform/npm/tests/snfe.js b/platform/npm/tests/snfe.js new file mode 100644 index 0000000000000..f6f3158f64993 --- /dev/null +++ b/platform/npm/tests/snfe.js @@ -0,0 +1,372 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2014-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 +*/ + +'use strict'; + +/******************************************************************************/ + +import { strict as assert } from 'assert'; + +import { createWorld } from 'esm-world'; + +import './_common.js'; + +describe('SNFE', () => { + for ( let wasm of [ false/*, true*/ ] ) { + context(`${wasm ? 'Wasm on' : 'Wasm off'}`, () => { + let module = null; + let engine = null; + + beforeEach(async () => { + module = await createWorld('./index.js', { globals: global }); + + if ( wasm ) { + assert(await module.enableWASM()); + } + }); + + afterEach(() => { + engine = null; + module = null; + }); + + describe('Initialization', () => { + it('should not reject on first attempt', async () => { + await module.StaticNetFilteringEngine.create(); + }); + + it('should reject on second attempt', async () => { + await module.StaticNetFilteringEngine.create(); + await assert.rejects(module.StaticNetFilteringEngine.create()); + }); + + it('should reject on third attempt', async () => { + await module.StaticNetFilteringEngine.create(); + + try { + await module.StaticNetFilteringEngine.create(); + } catch (error) { + } + + await assert.rejects(module.StaticNetFilteringEngine.create()); + }); + }); + + describe('Filter loading', () => { + beforeEach(async () => { + engine = await module.StaticNetFilteringEngine.create(); + }); + + it('should not reject on no lists', async () => { + await engine.useLists([]); + }); + + it('should not reject on one empty list', async () => { + await engine.useLists([ + { name: 'easylist', raw: '' }, + ]); + }); + + it('should not reject on one list containing one filter', async () => { + await engine.useLists([ + { name: 'easylist', raw: '/foo^' }, + ]); + }); + + it('should not reject on one list containing multiple filters', async () => { + await engine.useLists([ + { name: 'easylist', raw: '/foo^\n||example.com^' }, + ]); + }); + + it('should not reject on multiple lists containing multiple filters', async () => { + await engine.useLists([ + { name: 'easylist', raw: '/foo^\n||example.com^' }, + { name: 'easyprivacy', raw: '||example.net/bar/\n^bar.js?' }, + ]); + }); + + it('should not reject on promised-based lists', async () => { + await engine.useLists([ + Promise.resolve({ name: 'easylist', raw: '/foo^\n||example.com^' }), + Promise.resolve({ name: 'easyprivacy', raw: '||example.net/bar/\n^bar.js?' }), + ]); + }); + + it('should reject on promised-based lists in which a promise is rejected', async () => { + await assert.rejects(engine.useLists([ + Promise.reject({ name: 'easylist', raw: '/foo^\n||example.com^' }), + Promise.resolve({ name: 'easyprivacy', raw: '||example.net/bar/\n^bar.js?' }), + ])); + }); + + it('should reject on promised-based lists in which all promises are rejected', async () => { + await assert.rejects(engine.useLists([ + Promise.reject({ name: 'easylist', raw: '/foo^\n||example.com^' }), + Promise.reject({ name: 'easyprivacy', raw: '||example.net/bar/\n^bar.js?' }), + ])); + }); + + it('should not reject on second call in sequence', async () => { + await engine.useLists([ + Promise.resolve({ name: 'easylist', raw: '/foo^\n||example.com^' }), + Promise.resolve({ name: 'easyprivacy', raw: '||example.net/bar/\n^bar.js?' }), + ]); + + await engine.useLists([ + Promise.resolve({ name: 'easylist', raw: '/foo^\n||example.com^' }), + Promise.resolve({ name: 'easyprivacy', raw: '||example.net/bar/\n^bar.js?' }), + ]); + }); + }); + + describe('Serialization', () => { + beforeEach(async () => { + engine = await module.StaticNetFilteringEngine.create(); + }); + + it('should not reject with no lists', async () => { + await engine.useLists([]); + + await engine.serialize(); + }); + + it('should not reject with one empty list', async () => { + await engine.useLists([ + { name: 'easylist', raw: '' }, + ]); + + await engine.serialize(); + }); + + it('should not reject with one list containing one filter', async () => { + await engine.useLists([ + { name: 'easylist', raw: '/foo^' }, + ]); + + await engine.serialize(); + }); + + it('should not reject with one list containing multiple filters', async () => { + await engine.useLists([ + { name: 'easylist', raw: '/foo^\n||example.com^' }, + ]); + + await engine.serialize(); + }); + + it('should not reject with multiple lists containing multiple filters', async () => { + await engine.useLists([ + { name: 'easylist', raw: '/foo^\n||example.com^' }, + { name: 'easyprivacy', raw: '||example.net/bar/\n^bar.js?' }, + ]); + + await engine.serialize(); + }); + }); + + describe('Deserialization', () => { + beforeEach(async () => { + engine = await module.StaticNetFilteringEngine.create(); + }); + + it('should not reject with no lists', async () => { + await engine.useLists([]); + + const serialized = await engine.serialize(); + await engine.deserialize(serialized); + }); + + it('should not reject with one empty list', async () => { + await engine.useLists([ + { name: 'easylist', raw: '' }, + ]); + + const serialized = await engine.serialize(); + await engine.deserialize(serialized); + }); + + it('should not reject with one list containing one filter', async () => { + await engine.useLists([ + { name: 'easylist', raw: '/foo^' }, + ]); + + const serialized = await engine.serialize(); + await engine.deserialize(serialized); + }); + + it('should not reject with one list containing multiple filters', async () => { + await engine.useLists([ + { name: 'easylist', raw: '/foo^\n||example.com^' }, + ]); + + const serialized = await engine.serialize(); + await engine.deserialize(serialized); + }); + + it('should not reject with multiple lists containing multiple filters', async () => { + await engine.useLists([ + { name: 'easylist', raw: '/foo^\n||example.com^' }, + { name: 'easyprivacy', raw: '||example.net/bar/\n^bar.js?' }, + ]); + + const serialized = await engine.serialize(); + await engine.deserialize(serialized); + }); + + // https://github.com/gorhill/uBlock/commit/8f461072f576cdf72c088a952ef342281a7c44d6 + it('should correctly remove query parameter following deserialization', async () => { + await engine.useLists([ + { name: 'custom', raw: '*$removeparam=/^utm_/' }, + ]); + const request = { + originURL: 'https://www.example.com/?utm_source=1', + type: 'document', + url: 'https://www.example.com/?utm_source=1', + }; + let result = engine.filterQuery(request); + assert.strictEqual(result.redirectURL, 'https://www.example.com/'); + const serialized = await engine.serialize(); + await engine.deserialize(serialized); + result = engine.filterQuery(request); + assert.strictEqual(result.redirectURL, 'https://www.example.com/'); + }); + }); + + describe('Filter matching', () => { + beforeEach(async () => { + engine = await module.StaticNetFilteringEngine.create(); + }); + + it('should match pure-hostname block filter', async () => { + await engine.useLists([ + { name: 'test', raw: '||example.net^' }, + ]); + const r = engine.matchRequest({ + originURL: 'https://www.example.com/', + type: 'image', + url: 'https://www.example.net/', + }); + assert.strictEqual(r, 1); + }); + + it('should match pure-hostname exception filter', async () => { + await engine.useLists([ + { name: 'test', raw: '||example.net^\n@@||example.net^' }, + ]); + const r = engine.matchRequest({ + originURL: 'https://www.example.com/', + type: 'image', + url: 'https://www.example.net/', + }); + assert.strictEqual(r, 2); + }); + + it('should match pure-hostname block-important filter', async () => { + await engine.useLists([ + { name: 'test', raw: '@@||example.net^\n||example.net^$important' }, + ]); + const r = engine.matchRequest({ + originURL: 'https://www.example.com/', + type: 'image', + url: 'https://www.example.net/', + }); + assert.strictEqual(r, 1); + assert(engine.isBlockImportant()); + }); + + it('should detect the filter is block-important', async () => { + await engine.useLists([ + { name: 'test', raw: '||example.net^$important' }, + ]); + engine.matchRequest({ + originURL: 'https://www.example.com/', + type: 'image', + url: 'https://www.example.net/', + }); + assert(engine.isBlockImportant()); + }); + + it('should block all except stylesheets #1', async () => { + await engine.useLists([ + { name: 'test', raw: '||example.com^$~stylesheet,all' }, + ]); + const r = engine.matchRequest({ + originURL: 'https://www.example.com/', + type: 'stylesheet', + url: 'https://www.example.com/', + }); + assert.strictEqual(r, 0); + }); + + it('should block all except stylesheets #2', async () => { + await engine.useLists([ + { name: 'test', raw: '||example.com^$all,~stylesheet' }, + ]); + const r = engine.matchRequest({ + originURL: 'https://www.example.com/', + type: 'stylesheet', + url: 'https://www.example.com/', + }); + assert.strictEqual(r, 0); + }); + + // https://github.com/gorhill/uBlock/commit/d66cd1116c0e + it('should not match on localhost', async () => { + await engine.useLists([ + { name: 'test', raw: '.js$domain=foo.*|bar.*\n/^/$domain=example.*|foo.*' }, + ]); + const r = engine.matchRequest({ + originURL: 'https://localhost/', + type: 'script', + url: 'https://localhost/baz.js', + }); + assert.strictEqual(r, 0); + }); + + // https://github.com/AdguardTeam/AdguardFilters/issues/88067#issuecomment-1019518277 + it('should match regex-based filter without `match-case` option', async () => { + await engine.useLists([ + { name: 'test', raw: '/\.com\/[a-z]{9,}\/[a-z]{9,}\.js$/$script,1p' }, + ]); + const r = engine.matchRequest({ + originURL: 'https://example.com/', + type: 'script', + url: 'https://example.com/LQMDQSMLDAZAEHERE/LQMDQSMLDAZAEHERE.js', + }); + assert.strictEqual(r, 1); + }); + + it('should not match regex-based filter with `match-case` option', async () => { + await engine.useLists([ + { name: 'test', raw: '/\.com\/[a-z]{9,}\/[a-z]{9,}\.js$/$script,1p,match-case' }, + ]); + const r = engine.matchRequest({ + originURL: 'https://example.com/', + type: 'script', + url: 'https://example.com/LQMDQSMLDAZAEHERE/LQMDQSMLDAZAEHERE.js', + }); + assert.strictEqual(r, 0); + }); + }); + }); + } +}); diff --git a/platform/npm/tests/wasm.js b/platform/npm/tests/wasm.js new file mode 100644 index 0000000000000..5e7cbd2fa9790 --- /dev/null +++ b/platform/npm/tests/wasm.js @@ -0,0 +1,53 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2014-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 +*/ + +/* globals WebAssembly */ + +'use strict'; + +/******************************************************************************/ + +import { strict as assert } from 'assert'; + +import { createWorld } from 'esm-world'; + +import './_common.js'; + +describe('WASM', () => { + context('WebAssembly available', () => { + it('should fulfill with true', async () => { + const { enableWASM } = await createWorld('./index.js', { globals: { URL, WebAssembly } }); + + assert.equal(await enableWASM(), true); + }); + }); + + context('WebAssembly not available', () => { + it('should fulfill with false', async () => { + // WebAssembly must be set to undefined explicitly; otherwise + // createWorld() ends up using the global WebAssembly object + // anyway. + const { enableWASM } = await createWorld('./index.js', { globals: { URL, WebAssembly: undefined } }); + + assert.equal(await enableWASM(), false); + }); + }); +}); diff --git a/platform/opera/manifest.json b/platform/opera/manifest.json index cf79bee59b3ec..6b9f0e015c453 100644 --- a/platform/opera/manifest.json +++ b/platform/opera/manifest.json @@ -1,58 +1,119 @@ { - "manifest_version": 2, - - "name": "uBlock Origin", - "version": "1.9.15.3", - - "default_locale": "en", - "description": "__MSG_extShortDesc__", - "icons": { - "16": "img/icon_16.png", - "128": "img/icon_128.png" - }, - - "browser_action": { - "default_icon": { - "19": "img/browsericons/icon19.png", - "38": "img/browsericons/icon19.png" - }, - "default_title": "uBlock Origin", - "default_popup": "popup.html" - }, - - "author": "All uBlock Origin contributors", - "background": { - "page": "background.html" - }, - "content_scripts": [ - { - "matches": ["http://*/*", "https://*/*"], - "js": ["js/vapi-client.js", "js/contentscript.js"], - "run_at": "document_start", - "all_frames": true - }, - { - "matches": ["http://*/*", "https://*/*"], - "js": ["js/scriptlets/subscriber.js"], - "run_at": "document_idle", - "all_frames": false - } - ], - "incognito": "split", - "minimum_chrome_version": "26.0", - "optional_permissions": [ "file:///*" ], - "options_page": "dashboard.html", - "permissions": [ - "contextMenus", - "privacy", - "storage", - "tabs", - "unlimitedStorage", - "webNavigation", - "webRequest", - "webRequestBlocking", + "author": "Raymond Hill & contributors", + "background": { + "page": "background.html" + }, + "browser_action": { + "default_icon": { + "16": "img/icon_16.png", + "32": "img/icon_32.png", + "64": "img/icon_64.png" + }, + "default_popup": "popup-fenix.html", + "default_title": "uBlock Origin" + }, + "commands": { + "launch-element-picker": { + "description": "__MSG_popupTipPicker__" + }, + "launch-element-zapper": { + "description": "__MSG_popupTipZapper__" + }, + "launch-logger": { + "description": "__MSG_popupTipLog__" + }, + "open-dashboard": { + "description": "__MSG_popupTipDashboard__" + }, + "relax-blocking-mode": { + "description": "__MSG_relaxBlockingMode__" + }, + "toggle-cosmetic-filtering": { + "description": "__MSG_toggleCosmeticFiltering__" + }, + "toggle-javascript": { + "description": "__MSG_toggleJavascript__" + } + }, + "content_scripts": [ + { + "matches": [ "http://*/*", "https://*/*" - ], - "short_name": "uBlock₀" + ], + "js": [ + "js/vapi.js", + "js/vapi-client.js", + "js/contentscript.js" + ], + "all_frames": true, + "match_about_blank": true, + "run_at": "document_start" + }, + { + "matches": [ + "https://easylist.to/*", + "https://*.fanboy.co.nz/*", + "https://filterlists.com/*", + "https://forums.lanik.us/*", + "https://github.com/*", + "https://*.github.io/*" + ], + "js": [ + "/js/scriptlets/subscriber.js" + ], + "run_at": "document_idle", + "all_frames": false + }, + { + "matches": [ + "https://github.com/uBlockOrigin/*", + "https://ublockorigin.github.io/*", + "https://*.reddit.com/r/uBlockOrigin/*" + ], + "js": [ + "/js/scriptlets/updater.js" + ], + "run_at": "document_idle", + "all_frames": false + } + ], + "default_locale": "en", + "description": "__MSG_extShortDesc__", + "icons": { + "16": "img/icon_16.png", + "32": "img/icon_32.png", + "64": "img/icon_64.png", + "128": "img/icon_128.png" + }, + "incognito": "split", + "manifest_version": 2, + "minimum_opera_version": "79.0", + "name": "uBlock Origin", + "options_page": "dashboard.html", + "permissions": [ + "alarms", + "contextMenus", + "privacy", + "storage", + "tabs", + "unlimitedStorage", + "webNavigation", + "webRequest", + "webRequestBlocking", + "" + ], + "short_name": "uBlock₀", + "sidebar_action": { + "default_icon": { + "16": "img/icon_16.png", + "32": "img/icon_32.png" + }, + "default_panel": "logger-ui.html", + "default_title": "__MSG_statsPageName__" + }, + "version": "1.14.23.17", + "web_accessible_resources": [ + "/web_accessible_resources/*" + ] } diff --git a/platform/safari/Info.plist b/platform/safari/Info.plist deleted file mode 100644 index a36cc034fdc44..0000000000000 --- a/platform/safari/Info.plist +++ /dev/null @@ -1,91 +0,0 @@ - - - - - Author - Chris Aljoudi - Builder Version - 534.57.2 - CFBundleDisplayName - {name} - CFBundleIdentifier - net.gorhill.uBlock - CFBundleInfoDictionaryVersion - 6.0 - CFBundleShortVersionString - {version} - CFBundleVersion - {buildNumber} - Chrome - - Database Quota - 104857600 - Global Page - background.html - Popovers - - - Filename - popup.html - Identifier - popover - - - Toolbar Items - - - Identifier - toolbarItem - Image - img/browsericons/safari-icon16.png - Label - {name} - Palette Label - {name} - Popover - popover - Tool Tip - {name} {version} - - - - Content - - Scripts - - End - - js/contentscript-end.js - - Start - - js/vapi-client.js - js/contentscript-start.js - - - Whitelist - - http://*/* - https://*/* - - - Description - {description} - ExtensionInfoDictionaryVersion - 1.0 - Permissions - - Website Access - - Include Secure Pages - - Level - All - - - Update Manifest URL - https://chrismatic.io/ublock/Update.plist - Website - https://chrismatic.io/ - - diff --git a/platform/safari/README.md b/platform/safari/README.md new file mode 100644 index 0000000000000..769d2450e5ccf --- /dev/null +++ b/platform/safari/README.md @@ -0,0 +1,16 @@ +# Safari platform + +The Safari platform does not support the WebExtensions +framework and thus is no longer supported. Consequently +the code base has been removed. + +Note that the code base here was before the +[official fork Safari fork](https://github.com/el1t/uBlock-Safari) was +created, so it does not correspond to the version of +uBlock Origin which could be installed on Safari. + +The last commit which contains the code is +917f3620e0c08b722bbd4d400bca2735d9f6975f. + +You can browse the last state of the removed code base at +. diff --git a/platform/safari/Settings.plist b/platform/safari/Settings.plist deleted file mode 100644 index 6c80bbb437572..0000000000000 --- a/platform/safari/Settings.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - DefaultValue - - FalseValue - - Key - open_prefs - Secure - - Title - Click to see the Preferences - TrueValue - - Type - CheckBox - - - diff --git a/platform/safari/Update.plist b/platform/safari/Update.plist deleted file mode 100644 index 1b0c141a4fe76..0000000000000 --- a/platform/safari/Update.plist +++ /dev/null @@ -1,21 +0,0 @@ - - - - - Extension Updates - - - CFBundleIdentifier - net.gorhill.uBlock - Developer Identifier - 96G4BAKDQ9 - CFBundleShortVersionString - {version} - CFBundleVersion - {buildNumber} - URL - https://chrismatic.io/ublock/ublock-latest.safariextz - - - - diff --git a/platform/safari/img/browsericons/safari-icon16-off.png b/platform/safari/img/browsericons/safari-icon16-off.png deleted file mode 100644 index 445908c37cefc..0000000000000 Binary files a/platform/safari/img/browsericons/safari-icon16-off.png and /dev/null differ diff --git a/platform/safari/img/browsericons/safari-icon16-off.svg b/platform/safari/img/browsericons/safari-icon16-off.svg deleted file mode 100644 index 57f67bdf3a713..0000000000000 --- a/platform/safari/img/browsericons/safari-icon16-off.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/platform/safari/img/browsericons/safari-icon16-off@2x.png b/platform/safari/img/browsericons/safari-icon16-off@2x.png deleted file mode 100644 index 69f8263a72686..0000000000000 Binary files a/platform/safari/img/browsericons/safari-icon16-off@2x.png and /dev/null differ diff --git a/platform/safari/img/browsericons/safari-icon16.png b/platform/safari/img/browsericons/safari-icon16.png deleted file mode 100644 index 3d10b30f05ddd..0000000000000 Binary files a/platform/safari/img/browsericons/safari-icon16.png and /dev/null differ diff --git a/platform/safari/img/browsericons/safari-icon16.svg b/platform/safari/img/browsericons/safari-icon16.svg deleted file mode 100644 index f4e68c2b6f46d..0000000000000 --- a/platform/safari/img/browsericons/safari-icon16.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/platform/safari/img/browsericons/safari-icon16@2x.png b/platform/safari/img/browsericons/safari-icon16@2x.png deleted file mode 100644 index aed9c52c1002f..0000000000000 Binary files a/platform/safari/img/browsericons/safari-icon16@2x.png and /dev/null differ diff --git a/platform/safari/vapi-background.js b/platform/safari/vapi-background.js deleted file mode 100644 index 6f90033930b73..0000000000000 --- a/platform/safari/vapi-background.js +++ /dev/null @@ -1,895 +0,0 @@ -/******************************************************************************* - - uBlock - a browser extension to block requests. - Copyright (C) 2015 The uBlock authors - - 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 -*/ - -/* global self, safari, SafariBrowserTab, µBlock */ - -// For background page - -/******************************************************************************/ - - -(function() { - - "use strict"; - - var vAPI = self.vAPI = self.vAPI || {}; - - vAPI.isMainProcess = true; - vAPI.safari = true; - - /******************************************************************************/ - - vAPI.app = { - name: "uBlock", - version: safari.extension.displayVersion - }; - - /******************************************************************************/ - - if(navigator.userAgent.indexOf("Safari/6") === -1) { // If we're not on at least Safari 8 - var _open = XMLHttpRequest.prototype.open; - XMLHttpRequest.prototype.open = function(m, u) { - if(u.lastIndexOf("safari-extension:", 0) === 0) { - var i = u.length, seeDot = false; - while(i --) { - if(u[i] === ".") { - seeDot = true; - } - else if(u[i] === "/") { - break; - } - } - if(seeDot === false) { - throw 'InvalidAccessError'; // Avoid crash - return; - } - } - _open.apply(this, arguments); - }; - } - /******************************************************************************/ - - vAPI.app.restart = function() { - µBlock.restart(); - }; - - /******************************************************************************/ - - safari.extension.addContentScriptFromURL(vAPI.getURL("js/subscriber.js"), [ - "https://*.adblockplus.org/*", - "https://*.adblockplus.me/*", - "https://www.fanboy.co.nz/*", - "http://*.adblockplus.org/*", - "http://*.adblockplus.me/*", - "http://www.fanboy.co.nz/*" - ], [], true); - - /******************************************************************************/ - - safari.extension.settings.addEventListener('change', function(e) { - if(e.key === 'open_prefs') { - vAPI.tabs.open({ - url: 'dashboard.html', - active: true - }); - } - }, false); - - /******************************************************************************/ - - initStorageLib(); // Initialize storage library - - /******************************************************************************/ - - var storageQuota = 104857600; // copied from Info.plist - localforage.config({ - name: "ublock", - size: storageQuota, - storeName: "keyvaluepairs" - }); - var oldSettings = safari.extension.settings; // To smoothly transition users - if(oldSettings.hasOwnProperty("version")) { // Old 'storage'! - for(var key in oldSettings) { - if(!oldSettings.hasOwnProperty(key) || key === "open_prefs") { - continue; - } - localforage.setItem(key, oldSettings[key]); - } - oldSettings.clear(); - } - vAPI.storage = { - QUOTA_BYTES: storageQuota, // copied from Info.plist - - get: function(keys, callback) { - if(typeof callback !== "function") { - return; - } - - var result = {}; - - if(keys === null) { - localforage.iterate(function(value, key) { - if(typeof value === "string") { - result[key] = JSON.parse(value); - } - }, function() { - callback(result); - }); - } - else if(typeof keys === "string") { - localforage.getItem(keys, function(err, value) { - if(typeof value === "string") { - result[keys] = JSON.parse(value); - } - callback(result); - }); - } - else if(Array.isArray(keys)) { - var toSatisfy = keys.length, n = toSatisfy; - if(n === 0) { - callback(result); - return; - } - for(var i = 0; i < n; i++) { - var key = keys[i]; - var func = function(err, value) { - toSatisfy--; - if(typeof value === "string") { - result[arguments.callee.myKey] = JSON.parse(value); - } - if(toSatisfy === 0) { - callback(result); - } - }; - func.myKey = key; - localforage.getItem(key, func); - } - } - else if(typeof keys === "object") { - for(var key in keys) { - if(!keys.hasOwnProperty(key)) { - continue; - } - result[key] = keys[key]; - } - localforage.iterate(function(value, key) { - if(!keys.hasOwnProperty(key)) return; - if(typeof value === "string") { - result[key] = JSON.parse(value); - } - }, function() { - callback(result); - }); - } - }, - - set: function(details, callback) { - var toSatisfy = 0; - for(var key in details) { - if(!details.hasOwnProperty(key)) { - continue; - } - toSatisfy++; - } - for(var key in details) { - if(!details.hasOwnProperty(key)) { - continue; - } - localforage.setItem(key, JSON.stringify(details[key]), function() { - if(--toSatisfy === 0) { - callback && callback(); - } - }); - } - }, - - remove: function(keys) { - if(typeof keys === "string") { - keys = [keys]; - } - - for(var i = 0, n = keys.length; i < n; i++) { - localforage.removeItem(keys[i]); - } - }, - - clear: function(callback) { - localforage.clear(function() { - callback(); - }); - }, - - getBytesInUse: function(keys, callback) { - if(typeof callback !== "function") { - return; - } - var size = 0; - localforage.iterate(function(value, key) { - size += (value || "").length; - }, function() { - callback(size); - }); - } - }; - - /******************************************************************************/ - - vAPI.tabs = { - stack: {}, - stackId: 1 - }; - - /******************************************************************************/ - - vAPI.isBehindTheSceneTabId = function(tabId) { - return tabId.toString() === this.noTabId; - }; - - vAPI.noTabId = '-1'; - - /******************************************************************************/ - - vAPI.tabs.registerListeners = function() { - safari.application.addEventListener("beforeNavigate", function(e) { - if(!vAPI.tabs.popupCandidate || !e.target || e.url === "about:blank") { - return; - } - var url = e.url, - tabId = vAPI.tabs.getTabId(e.target); - var details = { - targetURL: url, - targetTabId: tabId, - openerTabId: vAPI.tabs.popupCandidate - }; - if(vAPI.tabs.onPopup(details)) { - e.preventDefault(); - if(vAPI.tabs.stack[details.openerTabId]) { - vAPI.tabs.stack[details.openerTabId].activate(); - } - } - }, true); - // onClosed handled in the main tab-close event - // onUpdated handled via monitoring the history.pushState on web-pages - // onPopup is handled in window.open on web-pages - }; - - /******************************************************************************/ - - vAPI.tabs.getTabId = function(tab) { - if(typeof tab.uBlockCachedID !== "undefined") { - return tab.uBlockCachedID; - } - for(var i in vAPI.tabs.stack) { - if(vAPI.tabs.stack[i] === tab) { - return (tab.uBlockCachedID = +i); - } - } - - return -1; - }; - - /******************************************************************************/ - - vAPI.tabs.get = function(tabId, callback) { - var tab; - - if(tabId === null) { - tab = safari.application.activeBrowserWindow.activeTab; - tabId = this.getTabId(tab); - } else { - tab = this.stack[tabId]; - } - - if(!tab) { - callback(); - return; - } - - callback({ - id: tabId, - index: tab.browserWindow.tabs.indexOf(tab), - windowId: safari.application.browserWindows.indexOf(tab.browserWindow), - active: tab === tab.browserWindow.activeTab, - url: tab.url || "about:blank", - title: tab.title - }); - }; - - /******************************************************************************/ - - // properties of the details object: - // url: 'URL', // the address that will be opened - // tabId: 1, // the tab is used if set, instead of creating a new one - // index: -1, // undefined: end of the list, -1: following tab, or after index - // active: false, // opens the tab in background - true and undefined: foreground - // select: true // if a tab is already opened with that url, then select it instead of opening a new one - - vAPI.tabs.open = function(details) { - if(!details.url) { - return null; - } - // extension pages - if(/^[\w-]{2,}:/.test(details.url) === false) { - details.url = vAPI.getURL(details.url); - } - - var curWin, tab; - - if(details.select) { - tab = safari.application.browserWindows.some(function(win) { - var rgxHash = /#.*/; - // this is questionable - var url = details.url.replace(rgxHash, ''); - - for(var i = 0; i < win.tabs.length; i++) { - // Some tabs don't have a URL - if(win.tabs[i].url && - win.tabs[i].url.replace(rgxHash, '') === url) { - win.tabs[i].activate(); - return true; - } - } - }); - - if(tab) { - return; - } - } - - if(details.active === undefined) { - details.active = true; - } - - curWin = safari.application.activeBrowserWindow; - - // it must be calculated before opening a new tab, - // otherwise the new tab will be the active tab here - if(details.index === -1) { - details.index = curWin.tabs.indexOf(curWin.activeTab) + 1; - } - - tab = (details.tabId ? this.stack[details.tabId] : curWin.openTab(details.active ? 'foreground' : 'background')); - - if(details.index !== undefined) { - curWin.insertTab(tab, details.index); - } - - tab.url = details.url; - }; - - /******************************************************************************/ - - // Replace the URL of a tab. Noop if the tab does not exist. - - vAPI.tabs.replace = function(tabId, url) { - var targetURL = url; - - // extension pages - if ( /^[\w-]{2,}:/.test(targetURL) !== true ) { - targetURL = vAPI.getURL(targetURL); - } - - var tab = this.stack[tabId]; - if ( tab ) { - tab.url = targetURL; - } - }; - - /******************************************************************************/ - - vAPI.tabs.remove = function(tabIds) { - if(tabIds instanceof SafariBrowserTab) { - tabIds = this.getTabId(tabIds); - } - - if(!Array.isArray(tabIds)) { - tabIds = [tabIds]; - } - - for(var i = 0; i < tabIds.length; i++) { - if(this.stack[tabIds[i]]) { - this.stack[tabIds[i]].close(); - } - } - }; - - /******************************************************************************/ - - vAPI.tabs.reload = function(tabId) { - var tab = this.stack[tabId]; - - if(tab) { - tab.url = tab.url; - } - }; - - /******************************************************************************/ - - vAPI.tabs.injectScript = function(tabId, details, callback) { - var tab; - - if(tabId) { - tab = this.stack[tabId]; - } else { - tab = safari.application.activeBrowserWindow.activeTab; - } - - if(details.file) { - var xhr = new XMLHttpRequest(); - xhr.open('GET', details.file, true); - xhr.addEventListener("readystatechange", function() { - if(this.readyState === 4) { - details.code = xhr.responseText; - tab.page.dispatchMessage('broadcast', { - channelName: 'vAPI', - msg: { - cmd: 'injectScript', - details: details - } - }); - if(typeof callback === 'function') { - setTimeout(callback, 13); - } - } - }); - xhr.send(); - } - }; - - /******************************************************************************/ - - // bind tabs to unique IDs - - (function() { - var wins = safari.application.browserWindows, - i = wins.length, - j; - - while(i --) { - j = wins[i].tabs.length; - - while(j--) { - vAPI.tabs.stack[vAPI.tabs.stackId++] = wins[i].tabs[j]; - } - } - })(); - - /******************************************************************************/ - - safari.application.addEventListener('open', function(e) { - // ignore windows - if(e.target instanceof SafariBrowserTab) { - vAPI.tabs.stack[vAPI.tabs.stackId++] = e.target; - } - }, true); - - /******************************************************************************/ - - safari.application.addEventListener('close', function(e) { - // ignore windows - if(!(e.target instanceof SafariBrowserTab)) { - return; - } - - var tabId = vAPI.tabs.getTabId(e.target); - - if(tabId !== -1) { - // to not add another listener, put this here - // instead of vAPI.tabs.registerListeners - if(typeof vAPI.tabs.onClosed === 'function') { - vAPI.tabs.onClosed(tabId); - } - - delete vAPI.tabIconState[tabId]; - delete vAPI.tabs.stack[tabId]; - } - }, true); - - /******************************************************************************/ - - vAPI.toolbarItem = false; - safari.application.addEventListener("validate", function(event) { - if(vAPI.toolbarItem === event.target) { - return; - } - vAPI.toolbarItem = event.target; - }, true); - safari.application.addEventListener("activate", function(event) { - if(!(event.target instanceof SafariBrowserTab)) { - return; - } - vAPI.updateIcon(vAPI.toolbarItem); - }, true); - - /******************************************************************************/ - - // reload the popup when it's opened - safari.application.addEventListener("popover", function(event) { - var w = event.target.contentWindow, body = w.document.body, child; - while(child = body.firstChild) { - body.removeChild(child); - } - w.location.reload(); - }, true); - - /******************************************************************************/ - - function TabIconState() {} - TabIconState.prototype.badge = 0; - TabIconState.prototype.img = ""; - - vAPI.tabIconState = { /*tabId: {badge: 0, img: suffix}*/ }; - vAPI.updateIcon = function(icon) { - var tabId = vAPI.tabs.getTabId(icon.browserWindow.activeTab), - state = vAPI.tabIconState[tabId]; - if(typeof state === "undefined") { - state = vAPI.tabIconState[tabId] = new TabIconState(); - } - icon.badge = state.badge; - icon.image = vAPI.getURL("img/browsericons/safari-icon16" + state.img + ".png"); - }; - vAPI.setIcon = function(tabId, iconStatus, badge) { - var state = vAPI.tabIconState[tabId]; - if(typeof state === "undefined") { - state = vAPI.tabIconState[tabId] = new TabIconState(); - } - state.badge = badge || 0; - state.img = (iconStatus === "on" ? "" : "-off"); - vAPI.updateIcon(vAPI.toolbarItem); - }; - - /******************************************************************************/ - - vAPI.messaging = { - listeners: {}, - defaultHandler: null, - NOOPFUNC: function() {}, - UNHANDLED: 'vAPI.messaging.notHandled' - }; - - /******************************************************************************/ - - vAPI.messaging.listen = function(listenerName, callback) { - this.listeners[listenerName] = callback; - }; - - /******************************************************************************/ - - var CallbackWrapper = function(request, port) { - // No need to bind every single time - this.callback = this.proxy.bind(this); - this.messaging = vAPI.messaging; - this.init(request, port); - }; - CallbackWrapper.junkyard = []; - - CallbackWrapper.factory = function(request, port) { - var wrapper = CallbackWrapper.junkyard.pop(); - if(wrapper) { - wrapper.init(request, port); - return wrapper; - } - return new CallbackWrapper(request, port); - }; - CallbackWrapper.prototype.init = function(request, port) { - this.request = request; - this.port = port; - }; - CallbackWrapper.prototype.proxy = function(response) { - this.port.dispatchMessage(this.request.name, { - requestId: this.request.message.requestId, - channelName: this.request.message.channelName, - msg: response !== undefined ? response: null - }); - this.port = this.request = null; - CallbackWrapper.junkyard.push(this); - }; - - vAPI.messaging.onMessage = function(request) { - var callback = vAPI.messaging.NOOPFUNC; - if(request.message.requestId !== undefined) { - callback = CallbackWrapper.factory(request, request.target.page).callback; - } - - var sender = { - tab: { - id: vAPI.tabs.getTabId(request.target) - } - }; - - // Specific handler - var r = vAPI.messaging.UNHANDLED; - var listener = vAPI.messaging.listeners[request.message.channelName]; - if(typeof listener === 'function') { - r = listener(request.message.msg, sender, callback); - } - if(r !== vAPI.messaging.UNHANDLED) { - return; - } - - // Default handler - r = vAPI.messaging.defaultHandler(request.message.msg, sender, callback); - if(r !== vAPI.messaging.UNHANDLED) { - return; - } - - console.error('µBlock> messaging > unknown request: %o', request.message); - - // Unhandled: - // Need to callback anyways in case caller expected an answer, or - // else there is a memory leak on caller's side - callback(); - }; - - /******************************************************************************/ - - vAPI.messaging.setup = function(defaultHandler) { - // Already setup? - if(this.defaultHandler !== null) { - return; - } - - if(typeof defaultHandler !== 'function') { - defaultHandler = function() { - return vAPI.messaging.UNHANDLED; - }; - } - this.defaultHandler = defaultHandler; - - // the third parameter must stay false (bubbling), so later - // onBeforeRequest will use true (capturing), where we can invoke - // stopPropagation() (this way this.onMessage won't be fired) - safari.application.addEventListener('message', this.onMessage, false); - }; - - /******************************************************************************/ - - vAPI.messaging.broadcast = function(message) { - message = { - broadcast: true, - msg: message - }; - - for(var tabId in vAPI.tabs.stack) { - vAPI.tabs.stack[tabId].page.dispatchMessage('broadcast', message); - } - }; - - /******************************************************************************/ - - vAPI.net = {}; - - /******************************************************************************/ - - // Fast `contains` - - Array.prototype.contains = function(a) { - var b = this.length; - while(b--) { - if(this[b] === a) { - return true; - } - } - return false; - }; - - /******************************************************************************/ - - vAPI.net.registerListeners = function() { - var µb = µBlock; - - // Until Safari has more specific events, those are instead handled - // in the onBeforeRequestAdapter; clean them up so they're garbage-collected - vAPI.net.onBeforeSendHeaders = null; - vAPI.net.onHeadersReceived = null; - - var onBeforeRequest = vAPI.net.onBeforeRequest, - onBeforeRequestClient = onBeforeRequest.callback, - blockableTypes = onBeforeRequest.types; - - var onBeforeRequestAdapter = function(e) { - if(e.name !== "canLoad") { - return; - } - e.stopPropagation && e.stopPropagation(); - if(e.message.type === "main_frame") { - vAPI.tabs.onNavigation({ - url: e.message.url, - frameId: 0, - tabId: vAPI.tabs.getTabId(e.target) - }); - e.message.hostname = µb.URI.hostnameFromURI(e.message.url); - e.message.tabId = vAPI.tabs.getTabId(e.target); - var blockVerdict = onBeforeRequestClient(e.message); - if(blockVerdict && blockVerdict.redirectUrl) { - e.target.url = blockVerdict.redirectUrl; - e.message = false; - } - else { - e.message = true; - } - return; - } - switch(e.message.type) { - case "popup": - vAPI.tabs.popupCandidate = vAPI.tabs.getTabId(e.target); - if(e.message.url === "about:blank") { - e.message = false; - return; - } - else { - e.message = !vAPI.tabs.onPopup({ - targetURL: e.message.url, - targetTabId: 0, - openerTabId: vAPI.tabs.getTabId(e.target) - }); - } - break; - case "popstate": - vAPI.tabs.onUpdated(vAPI.tabs.getTabId(e.target), { - url: e.message.url - }, { - url: e.message.url - }); - break; - default: - e.message.hostname = µb.URI.hostnameFromURI(e.message.url); - e.message.tabId = vAPI.tabs.getTabId(e.target); - var blockVerdict = onBeforeRequestClient(e.message); - if(blockVerdict && blockVerdict.cancel) { - e.message = false; - return; - } - else { - e.message = true; - return; - } - } - return; - }; - safari.application.addEventListener("message", onBeforeRequestAdapter, true); - }; - - /******************************************************************************/ - - vAPI.contextMenu = { - contextMap: { - frame: 'insideFrame', - link: 'linkHref', - image: 'srcUrl', - editable: 'editable' - } - }; - - /******************************************************************************/ - - vAPI.contextMenu.create = function(details, callback) { - var contexts = details.contexts; - var menuItemId = details.id; - var menuTitle = details.title; - - if(Array.isArray(contexts) && contexts.length) { - contexts = contexts.indexOf('all') === -1 ? contexts : null; - } else { - // default in Chrome - contexts = ['page']; - } - - this.onContextMenu = function(e) { - var uI = e.userInfo; - - if(!uI || /^https?:\/\//i.test(uI.pageUrl) === false) { - return; - } - - if(contexts) { - var invalidContext = true; - var ctxMap = vAPI.contextMenu.contextMap; - - for(var i = 0; i < contexts.length; i++) { - var ctx = contexts[i]; - - if(ctx === 'audio' || ctx === 'video') { - if(uI[ctxMap['image']] && uI.tagName === ctx) { - invalidContext = false; - break; - } - } else if(uI[ctxMap[ctx]]) { - invalidContext = false; - break; - } else if(ctx === 'page') { - if(!(uI.insideFrame || uI.linkHref || uI.mediaType || uI.editable)) { - invalidContext = false; - break; - } - } - } - - if(invalidContext) { - return; - } - } - - e.contextMenu.appendContextMenuItem(menuItemId, menuTitle); - }; - - this.onContextMenuCmd = function(e) { - if(e.command === menuItemId) { - var tab = e.currentTarget.activeBrowserWindow.activeTab; - e.userInfo.menuItemId = menuItemId; - callback(e.userInfo, tab ? { - id: vAPI.tabs.getTabId(tab), - url: tab.url - } : undefined); - } - }; - - safari.application.addEventListener('contextmenu', this.onContextMenu); - safari.application.addEventListener('command', this.onContextMenuCmd); - }; - - /******************************************************************************/ - - vAPI.contextMenu.remove = function() { - safari.application.removeEventListener('contextmenu', this.onContextMenu); - safari.application.removeEventListener('command', this.onContextMenuCmd); - this.onContextMenu = null; - this.onContextMenuCmd = null; - }; - - /******************************************************************************/ - - vAPI.lastError = function() { - return null; - }; - - /******************************************************************************/ - - // This is called only once, when everything has been loaded in memory after - // the extension was launched. It can be used to inject content scripts - // in already opened web pages, to remove whatever nuisance could make it to - // the web pages before uBlock was ready. - - vAPI.onLoadAllCompleted = function() {}; - - /******************************************************************************/ - - vAPI.punycodeHostname = function(hostname) { - return hostname; - }; - - vAPI.punycodeURL = function(url) { - return url; - }; - - /******************************************************************************/ - - function initStorageLib() { - /*! - localForage -- Offline Storage, Improved - Version 1.2.2 - https://mozilla.github.io/localForage - (c) 2013-2015 Mozilla, Apache License 2.0 -*/ -!function(){var a,b,c,d;!function(){var e={},f={};a=function(a,b,c){e[a]={deps:b,callback:c}},d=c=b=function(a){function c(b){if("."!==b.charAt(0))return b;for(var c=b.split("/"),d=a.split("/").slice(0,-1),e=0,f=c.length;f>e;e++){var g=c[e];if(".."===g)d.pop();else{if("."===g)continue;d.push(g)}}return d.join("/")}if(d._eak_seen=e,f[a])return f[a];if(f[a]={},!e[a])throw new Error("Could not find module "+a);for(var g,h=e[a],i=h.deps,j=h.callback,k=[],l=0,m=i.length;m>l;l++)k.push("exports"===i[l]?g={}:b(c(i[l])));var n=j.apply(this,k);return f[a]=g||n}}(),a("promise/all",["./utils","exports"],function(a,b){"use strict";function c(a){var b=this;if(!d(a))throw new TypeError("You must pass an array to all.");return new b(function(b,c){function d(a){return function(b){f(a,b)}}function f(a,c){h[a]=c,0===--i&&b(h)}var g,h=[],i=a.length;0===i&&b([]);for(var j=0;jb;b+=4)c=e.indexOf(a[b]),d=e.indexOf(a[b+1]),f=e.indexOf(a[b+2]),g=e.indexOf(a[b+3]),l[j++]=c<<2|d>>4,l[j++]=(15&d)<<4|f>>2,l[j++]=(3&f)<<6|63&g;return k}function d(a){var b,c=new Uint8Array(a),d="";for(b=0;b>2],d+=e[(3&c[b])<<4|c[b+1]>>4],d+=e[(15&c[b+1])<<2|c[b+2]>>6],d+=e[63&c[b+2]];return c.length%3===2?d=d.substring(0,d.length-1)+"=":c.length%3===1&&(d=d.substring(0,d.length-2)+"=="),d}var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",f="__lfsc__:",g=f.length,h="arbf",i="blob",j="si08",k="ui08",l="uic8",m="si16",n="si32",o="ur16",p="ui32",q="fl32",r="fl64",s=g+h.length,t={serialize:a,deserialize:b,stringToBuffer:c,bufferToString:d};"undefined"!=typeof module&&module.exports?module.exports=t:"function"==typeof define&&define.amd?define("localforageSerializer",function(){return t}):this.localforageSerializer=t}.call(window),function(){"use strict";function a(a){var b=this,c={db:null};if(a)for(var d in a)c[d]=a[d];return new m(function(a,d){var e=n.open(c.name,c.version);e.onerror=function(){d(e.error)},e.onupgradeneeded=function(){e.result.createObjectStore(c.storeName)},e.onsuccess=function(){c.db=e.result,b._dbInfo=c,a()}})}function b(a,b){var c=this;"string"!=typeof a&&(window.console.warn(a+" used as a key, but it is not a string."),a=String(a));var d=new m(function(b,d){c.ready().then(function(){var e=c._dbInfo,f=e.db.transaction(e.storeName,"readonly").objectStore(e.storeName),g=f.get(a);g.onsuccess=function(){var a=g.result;void 0===a&&(a=null),b(a)},g.onerror=function(){d(g.error)}})["catch"](d)});return k(d,b),d}function c(a,b){var c=this,d=new m(function(b,d){c.ready().then(function(){var e=c._dbInfo,f=e.db.transaction(e.storeName,"readonly").objectStore(e.storeName),g=f.openCursor(),h=1;g.onsuccess=function(){var c=g.result;if(c){var d=a(c.value,c.key,h++);void 0!==d?b(d):c["continue"]()}else b()},g.onerror=function(){d(g.error)}})["catch"](d)});return k(d,b),d}function d(a,b,c){var d=this;"string"!=typeof a&&(window.console.warn(a+" used as a key, but it is not a string."),a=String(a));var e=new m(function(c,e){d.ready().then(function(){var f=d._dbInfo,g=f.db.transaction(f.storeName,"readwrite"),h=g.objectStore(f.storeName);null===b&&(b=void 0);var i=h.put(b,a);g.oncomplete=function(){void 0===b&&(b=null),c(b)},g.onabort=g.onerror=function(){e(i.error)}})["catch"](e)});return k(e,c),e}function e(a,b){var c=this;"string"!=typeof a&&(window.console.warn(a+" used as a key, but it is not a string."),a=String(a));var d=new m(function(b,d){c.ready().then(function(){var e=c._dbInfo,f=e.db.transaction(e.storeName,"readwrite"),g=f.objectStore(e.storeName),h=g["delete"](a);f.oncomplete=function(){b()},f.onerror=function(){d(h.error)},f.onabort=function(a){var b=a.target.error;"QuotaExceededError"===b&&d(b)}})["catch"](d)});return k(d,b),d}function f(a){var b=this,c=new m(function(a,c){b.ready().then(function(){var d=b._dbInfo,e=d.db.transaction(d.storeName,"readwrite"),f=e.objectStore(d.storeName),g=f.clear();e.oncomplete=function(){a()},e.onabort=e.onerror=function(){c(g.error)}})["catch"](c)});return k(c,a),c}function g(a){var b=this,c=new m(function(a,c){b.ready().then(function(){var d=b._dbInfo,e=d.db.transaction(d.storeName,"readonly").objectStore(d.storeName),f=e.count();f.onsuccess=function(){a(f.result)},f.onerror=function(){c(f.error)}})["catch"](c)});return j(c,a),c}function h(a,b){var c=this,d=new m(function(b,d){return 0>a?void b(null):void c.ready().then(function(){var e=c._dbInfo,f=e.db.transaction(e.storeName,"readonly").objectStore(e.storeName),g=!1,h=f.openCursor();h.onsuccess=function(){var c=h.result;return c?void(0===a?b(c.key):g?b(c.key):(g=!0,c.advance(a))):void b(null)},h.onerror=function(){d(h.error)}})["catch"](d)});return j(d,b),d}function i(a){var b=this,c=new m(function(a,c){b.ready().then(function(){var d=b._dbInfo,e=d.db.transaction(d.storeName,"readonly").objectStore(d.storeName),f=e.openCursor(),g=[];f.onsuccess=function(){var b=f.result;return b?(g.push(b.key),void b["continue"]()):void a(g)},f.onerror=function(){c(f.error)}})["catch"](c)});return j(c,a),c}function j(a,b){b&&a.then(function(a){b(null,a)},function(a){b(a)})}function k(a,b){b&&a.then(function(a){l(b,a)},function(a){b(a)})}function l(a,b){return a?setTimeout(function(){return a(null,b)},0):void 0}var m="undefined"!=typeof module&&module.exports?require("promise"):this.Promise,n=n||this.indexedDB||this.webkitIndexedDB||this.mozIndexedDB||this.OIndexedDB||this.msIndexedDB;if(n){var o={_driver:"asyncStorage",_initStorage:a,iterate:c,getItem:b,setItem:d,removeItem:e,clear:f,length:g,key:h,keys:i};"undefined"!=typeof module&&module.exports?module.exports=o:"function"==typeof define&&define.amd?define("asyncStorage",function(){return o}):this.asyncStorage=o}}.call(window),function(){"use strict";function a(a){var b=this,c={};if(a)for(var d in a)c[d]=a[d];c.keyPrefix=c.name+"/",b._dbInfo=c;var e=new k(function(a){q===p.DEFINE?require(["localforageSerializer"],a):a(q===p.EXPORT?require("./../utils/serializer"):l.localforageSerializer)});return e.then(function(a){return m=a,k.resolve()})}function b(a){var b=this,c=b.ready().then(function(){for(var a=b._dbInfo.keyPrefix,c=n.length-1;c>=0;c--){var d=n.key(c);0===d.indexOf(a)&&n.removeItem(d)}});return j(c,a),c}function c(a,b){var c=this;"string"!=typeof a&&(window.console.warn(a+" used as a key, but it is not a string."),a=String(a));var d=c.ready().then(function(){var b=c._dbInfo,d=n.getItem(b.keyPrefix+a);return d&&(d=m.deserialize(d)),d});return j(d,b),d}function d(a,b){var c=this,d=c.ready().then(function(){for(var b=c._dbInfo.keyPrefix,d=b.length,e=n.length,f=0;e>f;f++){var g=n.key(f),h=n.getItem(g);if(h&&(h=m.deserialize(h)),h=a(h,g.substring(d),f+1),void 0!==h)return h}});return j(d,b),d}function e(a,b){var c=this,d=c.ready().then(function(){var b,d=c._dbInfo;try{b=n.key(a)}catch(e){b=null}return b&&(b=b.substring(d.keyPrefix.length)),b});return j(d,b),d}function f(a){var b=this,c=b.ready().then(function(){for(var a=b._dbInfo,c=n.length,d=[],e=0;c>e;e++)0===n.key(e).indexOf(a.keyPrefix)&&d.push(n.key(e).substring(a.keyPrefix.length));return d});return j(c,a),c}function g(a){var b=this,c=b.keys().then(function(a){return a.length});return j(c,a),c}function h(a,b){var c=this;"string"!=typeof a&&(window.console.warn(a+" used as a key, but it is not a string."),a=String(a));var d=c.ready().then(function(){var b=c._dbInfo;n.removeItem(b.keyPrefix+a)});return j(d,b),d}function i(a,b,c){var d=this;"string"!=typeof a&&(window.console.warn(a+" used as a key, but it is not a string."),a=String(a));var e=d.ready().then(function(){void 0===b&&(b=null);var c=b;return new k(function(e,f){m.serialize(b,function(b,g){if(g)f(g);else try{var h=d._dbInfo;n.setItem(h.keyPrefix+a,b),e(c)}catch(i){("QuotaExceededError"===i.name||"NS_ERROR_DOM_QUOTA_REACHED"===i.name)&&f(i),f(i)}})})});return j(e,c),e}function j(a,b){b&&a.then(function(a){b(null,a)},function(a){b(a)})}var k="undefined"!=typeof module&&module.exports?require("promise"):this.Promise,l=this,m=null,n=null;try{if(!(this.localStorage&&"setItem"in this.localStorage))return;n=this.localStorage}catch(o){return}var p={DEFINE:1,EXPORT:2,WINDOW:3},q=p.WINDOW;"undefined"!=typeof module&&module.exports?q=p.EXPORT:"function"==typeof define&&define.amd&&(q=p.DEFINE);var r={_driver:"localStorageWrapper",_initStorage:a,iterate:d,getItem:c,setItem:i,removeItem:h,clear:b,length:g,key:e,keys:f};q===p.EXPORT?module.exports=r:q===p.DEFINE?define("localStorageWrapper",function(){return r}):this.localStorageWrapper=r}.call(window),function(){"use strict";function a(a){var b=this,c={db:null};if(a)for(var d in a)c[d]="string"!=typeof a[d]?a[d].toString():a[d];var e=new k(function(a){p===o.DEFINE?require(["localforageSerializer"],a):a(p===o.EXPORT?require("./../utils/serializer"):l.localforageSerializer)}),f=new k(function(d,e){try{c.db=n(c.name,String(c.version),c.description,c.size)}catch(f){return b.setDriver(b.LOCALSTORAGE).then(function(){return b._initStorage(a)}).then(d)["catch"](e)}c.db.transaction(function(a){a.executeSql("CREATE TABLE IF NOT EXISTS "+c.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],function(){b._dbInfo=c,d()},function(a,b){e(b)})})});return e.then(function(a){return m=a,f})}function b(a,b){var c=this;"string"!=typeof a&&(window.console.warn(a+" used as a key, but it is not a string."),a=String(a));var d=new k(function(b,d){c.ready().then(function(){var e=c._dbInfo;e.db.transaction(function(c){c.executeSql("SELECT * FROM "+e.storeName+" WHERE key = ? LIMIT 1",[a],function(a,c){var d=c.rows.length?c.rows.item(0).value:null;d&&(d=m.deserialize(d)),b(d)},function(a,b){d(b)})})})["catch"](d)});return j(d,b),d}function c(a,b){var c=this,d=new k(function(b,d){c.ready().then(function(){var e=c._dbInfo;e.db.transaction(function(c){c.executeSql("SELECT * FROM "+e.storeName,[],function(c,d){for(var e=d.rows,f=e.length,g=0;f>g;g++){var h=e.item(g),i=h.value;if(i&&(i=m.deserialize(i)),i=a(i,h.key,g+1),void 0!==i)return void b(i)}b()},function(a,b){d(b)})})})["catch"](d)});return j(d,b),d}function d(a,b,c){var d=this;"string"!=typeof a&&(window.console.warn(a+" used as a key, but it is not a string."),a=String(a));var e=new k(function(c,e){d.ready().then(function(){void 0===b&&(b=null);var f=b;m.serialize(b,function(b,g){if(g)e(g);else{var h=d._dbInfo;h.db.transaction(function(d){d.executeSql("INSERT OR REPLACE INTO "+h.storeName+" (key, value) VALUES (?, ?)",[a,b],function(){c(f)},function(a,b){e(b)})},function(a){a.code===a.QUOTA_ERR&&e(a)})}})})["catch"](e)});return j(e,c),e}function e(a,b){var c=this;"string"!=typeof a&&(window.console.warn(a+" used as a key, but it is not a string."),a=String(a));var d=new k(function(b,d){c.ready().then(function(){var e=c._dbInfo;e.db.transaction(function(c){c.executeSql("DELETE FROM "+e.storeName+" WHERE key = ?",[a],function(){b()},function(a,b){d(b)})})})["catch"](d)});return j(d,b),d}function f(a){var b=this,c=new k(function(a,c){b.ready().then(function(){var d=b._dbInfo;d.db.transaction(function(b){b.executeSql("DELETE FROM "+d.storeName,[],function(){a()},function(a,b){c(b)})})})["catch"](c)});return j(c,a),c}function g(a){var b=this,c=new k(function(a,c){b.ready().then(function(){var d=b._dbInfo;d.db.transaction(function(b){b.executeSql("SELECT COUNT(key) as c FROM "+d.storeName,[],function(b,c){var d=c.rows.item(0).c;a(d)},function(a,b){c(b)})})})["catch"](c)});return j(c,a),c}function h(a,b){var c=this,d=new k(function(b,d){c.ready().then(function(){var e=c._dbInfo;e.db.transaction(function(c){c.executeSql("SELECT key FROM "+e.storeName+" WHERE id = ? LIMIT 1",[a+1],function(a,c){var d=c.rows.length?c.rows.item(0).key:null;b(d)},function(a,b){d(b)})})})["catch"](d)});return j(d,b),d}function i(a){var b=this,c=new k(function(a,c){b.ready().then(function(){var d=b._dbInfo;d.db.transaction(function(b){b.executeSql("SELECT key FROM "+d.storeName,[],function(b,c){for(var d=[],e=0;e" + ], + "short_name": "uBlock₀", + "version": "1.9.15.101", + "web_accessible_resources": [ + "/web_accessible_resources/*" + ] +} diff --git a/platform/webext/img/browsericons/icon19-off.png b/platform/webext/img/browsericons/icon19-off.png deleted file mode 100644 index 79fb3b823faa1..0000000000000 Binary files a/platform/webext/img/browsericons/icon19-off.png and /dev/null differ diff --git a/platform/webext/img/browsericons/icon19.png b/platform/webext/img/browsericons/icon19.png deleted file mode 100644 index e6d57bdda9a31..0000000000000 Binary files a/platform/webext/img/browsericons/icon19.png and /dev/null differ diff --git a/platform/webext/img/browsericons/icon38-off.png b/platform/webext/img/browsericons/icon38-off.png deleted file mode 100644 index a1b5c00bf32b7..0000000000000 Binary files a/platform/webext/img/browsericons/icon38-off.png and /dev/null differ diff --git a/platform/webext/img/browsericons/icon38.png b/platform/webext/img/browsericons/icon38.png deleted file mode 100644 index 09a57d2ffb6e3..0000000000000 Binary files a/platform/webext/img/browsericons/icon38.png and /dev/null differ diff --git a/platform/webext/is-webrtc-supported.html b/platform/webext/is-webrtc-supported.html deleted file mode 100644 index 15c155583b91e..0000000000000 --- a/platform/webext/is-webrtc-supported.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/platform/webext/is-webrtc-supported.js b/platform/webext/is-webrtc-supported.js deleted file mode 100644 index 5a3eea1e7f25f..0000000000000 --- a/platform/webext/is-webrtc-supported.js +++ /dev/null @@ -1,52 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2015 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 -*/ - -// https://github.com/gorhill/uBlock/issues/533#issuecomment-164292868 -// If WebRTC is supported, there won't be an exception if we -// try to instanciate a peer connection object. - -// https://github.com/gorhill/uBlock/issues/533#issuecomment-168097594 -// Because Chromium leaks WebRTC connections after they have been closed -// and forgotten, we need to test for WebRTC support inside an iframe, this -// way the closed and forgottetn WebRTC connections are properly garbage -// collected. - -(function() { - 'use strict'; - - var pc = null; - try { - var PC = self.RTCPeerConnection || self.webkitRTCPeerConnection; - if ( PC ) { - pc = new PC(null); - } - } catch (ex) { - console.error(ex); - } - if ( pc !== null ) { - pc.close(); - } - - window.top.postMessage( - pc !== null ? 'webRTCSupported' : 'webRTCNotSupported', - window.location.origin - ); -})(); diff --git a/platform/webext/managed_storage.json b/platform/webext/managed_storage.json deleted file mode 100644 index d3f2c864f9adf..0000000000000 --- a/platform/webext/managed_storage.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-03/schema#", - "type": "object", - "properties": { - "adminSettings": { - "title": "A valid JSON string compliant with uBO's backup format.", - "description": "All entries present will overwrite local settings.", - "type": "string" - } - } -} diff --git a/platform/webext/manifest.json b/platform/webext/manifest.json deleted file mode 100644 index f1537012269e1..0000000000000 --- a/platform/webext/manifest.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "manifest_version": 2, - - "name": "uBlock Origin", - "version": "1.9.15.3", - - "applications": { - "gecko": { - "id": "uBlock0@raymondhill.net", - "strict_min_version": "51.0", - "strict_max_version": "52.*" - } - }, - - "default_locale": "en", - "description": "__MSG_extShortDesc__", - "icons": { - "16": "img/icon_16.png", - "128": "img/icon_128.png" - }, - - "browser_action": { - "default_icon": { - "19": "img/browsericons/icon19.png", - "38": "img/browsericons/icon38.png" - }, - "default_title": "uBlock Origin", - "default_popup": "popup.html" - }, - - "author": "All uBlock Origin contributors", - "background": { - "page": "background.html" - }, - "content_scripts": [ - { - "matches": ["http://*/*", "https://*/*"], - "js": ["js/vapi-client.js", "js/contentscript.js"], - "run_at": "document_start", - "all_frames": true - }, - { - "matches": ["http://*/*", "https://*/*"], - "js": ["js/scriptlets/subscriber.js"], - "run_at": "document_idle", - "all_frames": false - } - ], - "minimum_chrome_version": "26.0", - "optional_permissions": [ "file:///*" ], - "options_page": "dashboard.html", - "options_ui": { - "page": "options_ui.html" - }, - "permissions": [ - "contextMenus", - "storage", - "tabs", - "unlimitedStorage", - "webNavigation", - "webRequest", - "webRequestBlocking", - "http://*/*", - "https://*/*" - ], - "short_name": "uBlock₀", - "storage": { - "managed_schema": "managed_storage.json" - } -} diff --git a/platform/webext/options_ui.html b/platform/webext/options_ui.html deleted file mode 100644 index d94c001efb4b5..0000000000000 --- a/platform/webext/options_ui.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - -Dashboard - - diff --git a/platform/webext/options_ui.js b/platform/webext/options_ui.js deleted file mode 100644 index 1e7f552b12bd9..0000000000000 --- a/platform/webext/options_ui.js +++ /dev/null @@ -1,47 +0,0 @@ -/******************************************************************************* - - µBlock - a browser extension to block requests. - Copyright (C) 2015 The µBlock authors - - 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 -*/ - -/******************************************************************************/ - -(function() { - -/******************************************************************************/ - -'use strict'; - -vAPI.messaging.send( - 'default', - { - what: 'gotoURL', - details: { - url: 'dashboard.html', - select: true, - index: -1 - } - } -); -window.close(); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff --git a/platform/webext/polyfill.js b/platform/webext/polyfill.js deleted file mode 100644 index ca8d82cd28b80..0000000000000 --- a/platform/webext/polyfill.js +++ /dev/null @@ -1,214 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2014-2016 The uBlock Origin authors - - 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 -*/ - -// For background page or non-background pages - -'use strict'; - -/******************************************************************************/ -/******************************************************************************/ - -// https://github.com/gorhill/uBlock/issues/1067 -// https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith -// Firefox 17/Chromium 41 supports `startsWith`. - -if ( String.prototype.startsWith instanceof Function === false ) { - String.prototype.startsWith = function(needle, pos) { - if ( typeof pos !== 'number' ) { - pos = 0; - } - return this.lastIndexOf(needle, pos) === pos; - }; -} - -/******************************************************************************/ - -// https://github.com/gorhill/uBlock/issues/1067 -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith -// Firefox 17/Chromium 41 supports `endsWith`. - -if ( String.prototype.endsWith instanceof Function === false ) { - String.prototype.endsWith = function(needle, pos) { - if ( typeof pos !== 'number' ) { - pos = this.length; - } - pos -= needle.length; - return this.indexOf(needle, pos) === pos; - }; -} - -/******************************************************************************/ - -// https://github.com/gorhill/uBlock/issues/1070 -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set#Browser_compatibility -// This polyfill is designed to fulfill *only* what uBlock Origin needs -- this -// is not an accurate API of the real Set() type. - -if ( self.Set instanceof Function === false ) { - self.Set = function(iter) { - this.clear(); - if ( Array.isArray(iter) ) { - for ( var i = 0, n = iter.length; i < n; i++ ) { - this.add(iter[i]); - } - return; - } - }; - - self.Set.polyfill = true; - - self.Set.prototype.clear = function() { - this._set = Object.create(null); - this.size = 0; - // Iterator stuff - this._values = undefined; - this._i = undefined; - this.value = undefined; - this.done = true; - }; - - self.Set.prototype.add = function(k) { - if ( this._set[k] === undefined ) { - this._set[k] = true; - this.size += 1; - } - return this; - }; - - self.Set.prototype.delete = function(k) { - if ( this._set[k] !== undefined ) { - delete this._set[k]; - this.size -= 1; - return true; - } - return false; - }; - - self.Set.prototype.has = function(k) { - return this._set[k] !== undefined; - }; - - self.Set.prototype.next = function() { - if ( this._i < this.size ) { - this.value = this._values[this._i++]; - } else { - this._values = undefined; - this.value = undefined; - this.done = true; - } - return this; - }; - - self.Set.prototype.values = function() { - this._values = Object.keys(this._set); - this._i = 0; - this.value = undefined; - this.done = false; - return this; - }; -} - -/******************************************************************************/ - -// https://github.com/gorhill/uBlock/issues/1070 -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set#Browser_compatibility -// This polyfill is designed to fulfill *only* what uBlock Origin needs -- this -// is not an accurate API of the real Map() type. - -if ( self.Map instanceof Function === false ) { - self.Map = function(iter) { - this.clear(); - if ( Array.isArray(iter) ) { - for ( var i = 0, n = iter.length, entry; i < n; i++ ) { - entry = iter[i]; - this.set(entry[0], entry[1]); - } - return; - } - }; - - self.Map.polyfill = true; - - self.Map.prototype.clear = function() { - this._map = Object.create(null); - this.size = 0; - // Iterator stuff - this._keys = undefined; - this._i = undefined; - this.value = undefined; - this.done = true; - }; - - self.Map.prototype.delete = function(k) { - if ( this._map[k] !== undefined ) { - delete this._map[k]; - this.size -= 1; - return true; - } - return false; - }; - - self.Map.prototype.entries = function() { - this._keys = Object.keys(this._map); - this._i = 0; - this.value = [ undefined, undefined ]; - this.done = false; - return this; - }; - - self.Map.prototype.get = function(k) { - return this._map[k]; - }; - - self.Map.prototype.has = function(k) { - return this._map[k] !== undefined; - }; - - self.Map.prototype.next = function() { - if ( this._i < this.size ) { - var key = this._keys[this._i++]; - this.value[0] = key; - this.value[1] = this._map[key]; - } else { - this._keys = undefined; - this.value = undefined; - this.done = true; - } - return this; - }; - - self.Map.prototype.set = function(k, v) { - if ( v !== undefined ) { - if ( this._map[k] === undefined ) { - this.size += 1; - } - this._map[k] = v; - } else { - if ( this._map[k] !== undefined ) { - this.size -= 1; - } - delete this._map[k]; - } - return this; - }; -} - -/******************************************************************************/ diff --git a/platform/webext/vapi-background.js b/platform/webext/vapi-background.js deleted file mode 100644 index 5e95622d6cb74..0000000000000 --- a/platform/webext/vapi-background.js +++ /dev/null @@ -1,1424 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2014-2016 The uBlock Origin authors - - 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 -*/ - -// For background page - -/******************************************************************************/ - -(function() { - -'use strict'; - -/******************************************************************************/ - -var vAPI = self.vAPI = self.vAPI || {}; - -var chrome = self.chrome; -var manifest = chrome.runtime.getManifest(); - -vAPI.chrome = true; -vAPI.cantWebsocket = true; - -var noopFunc = function(){}; - -/******************************************************************************/ - -vAPI.app = { - name: manifest.name, - version: manifest.version -}; - -/******************************************************************************/ - -vAPI.app.restart = function() { - chrome.runtime.reload(); -}; - -/******************************************************************************/ -/******************************************************************************/ - -// chrome.storage.local.get(null, function(bin){ console.debug('%o', bin); }); - -vAPI.storage = chrome.storage.local; - -/******************************************************************************/ -/******************************************************************************/ - -// https://github.com/gorhill/uMatrix/issues/234 -// https://developer.chrome.com/extensions/privacy#property-network - -// 2015-08-12: Wrapped Chrome API in try-catch statements. I had a fluke -// event in which it appeared Chrome 46 decided to restart uBlock (for -// unknown reasons) and again for unknown reasons the browser acted as if -// uBlock did not declare the `privacy` permission in its manifest, putting -// uBlock in a bad, non-functional state -- because call to `chrome.privacy` -// API threw an exception. - -// https://github.com/gorhill/uBlock/issues/2048 -// Do not mess up with existing settings if not assigning them stricter -// values. - -vAPI.browserSettings = { - webRTCSupported: undefined, - - // https://github.com/gorhill/uBlock/issues/875 - // Must not leave `lastError` unchecked. - noopCallback: function() { - void chrome.runtime.lastError; - }, - - // Calling with `true` means IP address leak is not prevented. - // https://github.com/gorhill/uBlock/issues/533 - // We must first check wether this Chromium-based browser was compiled - // with WebRTC support. To do this, we use an iframe, this way the - // empty RTCPeerConnection object we create to test for support will - // be properly garbage collected. This prevents issues such as - // a computer unable to enter into sleep mode, as reported in the - // Chrome store: - // https://github.com/gorhill/uBlock/issues/533#issuecomment-167931681 - setWebrtcIPAddress: function(setting) { - // We don't know yet whether this browser supports WebRTC: find out. - if ( this.webRTCSupported === undefined ) { - this.webRTCSupported = { setting: setting }; - var iframe = document.createElement('iframe'); - var me = this; - var messageHandler = function(ev) { - if ( ev.origin !== self.location.origin ) { - return; - } - window.removeEventListener('message', messageHandler); - var setting = me.webRTCSupported.setting; - me.webRTCSupported = ev.data === 'webRTCSupported'; - me.setWebrtcIPAddress(setting); - iframe.parentNode.removeChild(iframe); - iframe = null; - }; - window.addEventListener('message', messageHandler); - iframe.src = 'is-webrtc-supported.html'; - document.body.appendChild(iframe); - return; - } - - // We are waiting for a response from our iframe. This makes the code - // safe to re-entrancy. - if ( typeof this.webRTCSupported === 'object' ) { - this.webRTCSupported.setting = setting; - return; - } - - // https://github.com/gorhill/uBlock/issues/533 - // WebRTC not supported: `webRTCMultipleRoutesEnabled` can NOT be - // safely accessed. Accessing the property will cause full browser - // crash. - if ( this.webRTCSupported !== true ) { - return; - } - - var cp = chrome.privacy, - cpn = cp.network; - - // Older version of Chromium do not support this setting, and is - // marked as "deprecated" since Chromium 48. - if ( typeof cpn.webRTCMultipleRoutesEnabled === 'object' ) { - try { - if ( setting ) { - cpn.webRTCMultipleRoutesEnabled.clear({ - scope: 'regular' - }, this.noopCallback); - } else { - cpn.webRTCMultipleRoutesEnabled.set({ - value: false, - scope: 'regular' - }, this.noopCallback); - } - } catch(ex) { - console.error(ex); - } - } - - // This setting became available in Chromium 48. - if ( typeof cpn.webRTCIPHandlingPolicy === 'object' ) { - try { - if ( setting ) { - cpn.webRTCIPHandlingPolicy.clear({ - scope: 'regular' - }, this.noopCallback); - } else { - // Respect current stricter setting if any. - cpn.webRTCIPHandlingPolicy.get({}, function(details) { - var value = details.value === 'disable_non_proxied_udp' ? - 'disable_non_proxied_udp' : - 'default_public_interface_only'; - cpn.webRTCIPHandlingPolicy.set({ - value: value, - scope: 'regular' - }, this.noopCallback); - }.bind(this)); - } - } catch(ex) { - console.error(ex); - } - } - }, - - set: function(details) { - for ( var setting in details ) { - if ( details.hasOwnProperty(setting) === false ) { - continue; - } - switch ( setting ) { - case 'prefetching': - try { - if ( !!details[setting] ) { - chrome.privacy.network.networkPredictionEnabled.clear({ - scope: 'regular' - }, this.noopCallback); - } else { - chrome.privacy.network.networkPredictionEnabled.set({ - value: false, - scope: 'regular' - }, this.noopCallback); - } - } catch(ex) { - console.error(ex); - } - break; - - case 'hyperlinkAuditing': - try { - if ( !!details[setting] ) { - chrome.privacy.websites.hyperlinkAuditingEnabled.clear({ - scope: 'regular' - }, this.noopCallback); - } else { - chrome.privacy.websites.hyperlinkAuditingEnabled.set({ - value: false, - scope: 'regular' - }, this.noopCallback); - } - } catch(ex) { - console.error(ex); - } - break; - - case 'webrtcIPAddress': - this.setWebrtcIPAddress(!!details[setting]); - break; - - default: - break; - } - } - } -}; - -/******************************************************************************/ -/******************************************************************************/ - -vAPI.tabs = {}; - -/******************************************************************************/ - -vAPI.isBehindTheSceneTabId = function(tabId) { - return tabId.toString() === '-1'; -}; - -vAPI.noTabId = '-1'; - -/******************************************************************************/ - -var toChromiumTabId = function(tabId) { - if ( typeof tabId === 'string' ) { - tabId = parseInt(tabId, 10); - } - if ( typeof tabId !== 'number' || isNaN(tabId) || tabId === -1 ) { - return 0; - } - return tabId; -}; - -/******************************************************************************/ - -vAPI.tabs.registerListeners = function() { - var onNavigationClient = this.onNavigation || noopFunc; - var onUpdatedClient = this.onUpdated || noopFunc; - - // https://developer.chrome.com/extensions/webNavigation - // [onCreatedNavigationTarget ->] - // onBeforeNavigate -> - // onCommitted -> - // onDOMContentLoaded -> - // onCompleted - - // The chrome.webRequest.onBeforeRequest() won't be called for everything - // else than `http`/`https`. Thus, in such case, we will bind the tab as - // early as possible in order to increase the likelihood of a context - // properly setup if network requests are fired from within the tab. - // Example: Chromium + case #6 at - // http://raymondhill.net/ublock/popup.html - var reGoodForWebRequestAPI = /^https?:\/\//; - - // https://forums.lanik.us/viewtopic.php?f=62&t=32826 - // Chromium-based browsers: sanitize target URL. I've seen data: URI with - // newline characters in standard fields, possibly as a way of evading - // filters. As per spec, there should be no whitespaces in a data: URI's - // standard fields. - var sanitizeURL = function(url) { - if ( url.startsWith('data:') === false ) { return url; } - var pos = url.indexOf(','); - if ( pos === -1 ) { return url; } - var s = url.slice(0, pos); - if ( s.search(/\s/) === -1 ) { return url; } - return s.replace(/\s+/, '') + url.slice(pos); - }; - - var onCreatedNavigationTarget = function(details) { - //console.debug('onCreatedNavigationTarget: popup candidate tab id %d = "%s"', details.tabId, details.url); - if ( reGoodForWebRequestAPI.test(details.url) === false ) { - details.frameId = 0; - details.url = sanitizeURL(details.url); - onNavigationClient(details); - } - if ( typeof vAPI.tabs.onPopupCreated === 'function' ) { - vAPI.tabs.onPopupCreated(details.tabId.toString(), details.sourceTabId.toString()); - } - }; - - var onBeforeNavigate = function(details) { - if ( details.frameId !== 0 ) { - return; - } - }; - - var onCommitted = function(details) { - if ( details.frameId !== 0 ) { - return; - } - details.url = sanitizeURL(details.url); - onNavigationClient(details); - }; - - var onActivated = function(details) { - vAPI.contextMenu.onMustUpdate(details.tabId); - }; - - var onUpdated = function(tabId, changeInfo, tab) { - if ( changeInfo.url ) { - changeInfo.url = sanitizeURL(changeInfo.url); - } - onUpdatedClient(tabId, changeInfo, tab); - }; - - chrome.webNavigation.onBeforeNavigate.addListener(onBeforeNavigate); - chrome.webNavigation.onCommitted.addListener(onCommitted); - chrome.webNavigation.onCreatedNavigationTarget.addListener(onCreatedNavigationTarget); - chrome.tabs.onActivated.addListener(onActivated); - chrome.tabs.onUpdated.addListener(onUpdated); - - if ( typeof this.onClosed === 'function' ) { - chrome.tabs.onRemoved.addListener(this.onClosed); - } - -}; - -/******************************************************************************/ - -vAPI.tabs.get = function(tabId, callback) { - var onTabReady = function(tab) { - // https://code.google.com/p/chromium/issues/detail?id=410868#c8 - if ( chrome.runtime.lastError ) { - /* noop */ - } - // Caller must be prepared to deal with nil tab value - callback(tab); - }; - - if ( tabId !== null ) { - tabId = toChromiumTabId(tabId); - if ( tabId === 0 ) { - onTabReady(null); - } else { - chrome.tabs.get(tabId, onTabReady); - } - return; - } - - var onTabReceived = function(tabs) { - // https://code.google.com/p/chromium/issues/detail?id=410868#c8 - void chrome.runtime.lastError; - callback(tabs[0]); - }; - chrome.tabs.query({ active: true, currentWindow: true }, onTabReceived); -}; - -/******************************************************************************/ - -// properties of the details object: -// url: 'URL', // the address that will be opened -// tabId: 1, // the tab is used if set, instead of creating a new one -// index: -1, // undefined: end of the list, -1: following tab, or after index -// active: false, // opens the tab in background - true and undefined: foreground -// select: true, // if a tab is already opened with that url, then select it instead of opening a new one -// popup: true // open in a new window - -vAPI.tabs.open = function(details) { - var targetURL = details.url; - if ( typeof targetURL !== 'string' || targetURL === '' ) { - return null; - } - - // extension pages - if ( /^[\w-]{2,}:/.test(targetURL) !== true ) { - targetURL = vAPI.getURL(targetURL); - } - - // dealing with Chrome's asynchronous API - var wrapper = function() { - if ( details.active === undefined ) { - details.active = true; - } - - var subWrapper = function() { - var _details = { - url: targetURL, - active: !!details.active - }; - - // Opening a tab from incognito window won't focus the window - // in which the tab was opened - var focusWindow = function(tab) { - if ( tab.active ) { - chrome.windows.update(tab.windowId, { focused: true }); - } - }; - - if ( !details.tabId ) { - if ( details.index !== undefined ) { - _details.index = details.index; - } - - chrome.tabs.create(_details, focusWindow); - return; - } - - // update doesn't accept index, must use move - chrome.tabs.update(toChromiumTabId(details.tabId), _details, function(tab) { - // if the tab doesn't exist - if ( vAPI.lastError() ) { - chrome.tabs.create(_details, focusWindow); - } else if ( details.index !== undefined ) { - chrome.tabs.move(tab.id, {index: details.index}); - } - }); - }; - - // Open in a standalone window - if ( details.popup === true ) { - chrome.windows.create({ - url: details.url, - focused: details.active, - type: 'popup' - }); - return; - } - - if ( details.index !== -1 ) { - subWrapper(); - return; - } - - vAPI.tabs.get(null, function(tab) { - if ( tab ) { - details.index = tab.index + 1; - } else { - delete details.index; - } - - subWrapper(); - }); - }; - - if ( !details.select ) { - wrapper(); - return; - } - - // https://developer.chrome.com/extensions/tabs#method-query - // "Note that fragment identifiers are not matched." - // It's a lie, fragment identifiers ARE matched. So we need to remove the - // fragment. - var pos = targetURL.indexOf('#'); - var targetURLWithoutHash = pos === -1 ? targetURL : targetURL.slice(0, pos); - - chrome.tabs.query({ url: targetURLWithoutHash }, function(tabs) { - var tab = tabs[0]; - if ( !tab ) { - wrapper(); - return; - } - - var _details = { - active: true, - url: undefined - }; - if ( targetURL !== tab.url ) { - _details.url = targetURL; - } - chrome.tabs.update(tab.id, _details, function(tab) { - chrome.windows.update(tab.windowId, { focused: true }); - }); - }); -}; - -/******************************************************************************/ - -// Replace the URL of a tab. Noop if the tab does not exist. - -vAPI.tabs.replace = function(tabId, url) { - tabId = toChromiumTabId(tabId); - if ( tabId === 0 ) { - return; - } - - var targetURL = url; - - // extension pages - if ( /^[\w-]{2,}:/.test(targetURL) !== true ) { - targetURL = vAPI.getURL(targetURL); - } - - chrome.tabs.update(tabId, { url: targetURL }, function() { - // https://code.google.com/p/chromium/issues/detail?id=410868#c8 - if ( chrome.runtime.lastError ) { - /* noop */ - } - }); -}; - -/******************************************************************************/ - -vAPI.tabs.remove = function(tabId) { - tabId = toChromiumTabId(tabId); - if ( tabId === 0 ) { - return; - } - - var onTabRemoved = function() { - // https://code.google.com/p/chromium/issues/detail?id=410868#c8 - if ( chrome.runtime.lastError ) { - /* noop */ - } - }; - - chrome.tabs.remove(tabId, onTabRemoved); -}; - -/******************************************************************************/ - -vAPI.tabs.reload = function(tabId /*, flags*/) { - tabId = toChromiumTabId(tabId); - if ( tabId === 0 ) { - return; - } - - var onReloaded = function() { - // https://code.google.com/p/chromium/issues/detail?id=410868#c8 - if ( chrome.runtime.lastError ) { - /* noop */ - } - }; - - chrome.tabs.reload(tabId, onReloaded); -}; - -/******************************************************************************/ - -// Select a specific tab. - -vAPI.tabs.select = function(tabId) { - tabId = toChromiumTabId(tabId); - if ( tabId === 0 ) { - return; - } - - chrome.tabs.update(tabId, { active: true }, function(tab) { - if ( chrome.runtime.lastError ) { - /* noop */ - } - if ( !tab ) { - return; - } - chrome.windows.update(tab.windowId, { focused: true }); - }); -}; - -/******************************************************************************/ - -vAPI.tabs.injectScript = function(tabId, details, callback) { - var onScriptExecuted = function() { - // https://code.google.com/p/chromium/issues/detail?id=410868#c8 - if ( chrome.runtime.lastError ) { - /* noop */ - } - if ( typeof callback === 'function' ) { - callback(); - } - }; - if ( tabId ) { - chrome.tabs.executeScript(toChromiumTabId(tabId), details, onScriptExecuted); - } else { - chrome.tabs.executeScript(details, onScriptExecuted); - } -}; - -/******************************************************************************/ -/******************************************************************************/ - -// Must read: https://code.google.com/p/chromium/issues/detail?id=410868#c8 - -// https://github.com/chrisaljoudi/uBlock/issues/19 -// https://github.com/chrisaljoudi/uBlock/issues/207 -// Since we may be called asynchronously, the tab id may not exist -// anymore, so this ensures it does still exist. - -vAPI.setIcon = function(tabId, iconStatus, badge) { - tabId = toChromiumTabId(tabId); - if ( tabId === 0 ) { - return; - } - - var onIconReady = function() { - if ( vAPI.lastError() ) { - return; - } - chrome.browserAction.setBadgeText({ tabId: tabId, text: badge }); - if ( badge !== '' ) { - chrome.browserAction.setBadgeBackgroundColor({ - tabId: tabId, - color: '#666' - }); - } - }; - - var iconPaths = iconStatus === 'on' ? - { '19': 'img/browsericons/icon19.png', '38': 'img/browsericons/icon38.png' } : - { '19': 'img/browsericons/icon19-off.png', '38': 'img/browsericons/icon38-off.png' }; - - chrome.browserAction.setIcon({ tabId: tabId, path: iconPaths }, onIconReady); - vAPI.contextMenu.onMustUpdate(tabId); -}; - -/******************************************************************************/ -/******************************************************************************/ - -vAPI.messaging = { - ports: {}, - listeners: {}, - defaultHandler: null, - NOOPFUNC: noopFunc, - UNHANDLED: 'vAPI.messaging.notHandled' -}; - -/******************************************************************************/ - -vAPI.messaging.listen = function(listenerName, callback) { - this.listeners[listenerName] = callback; -}; - -/******************************************************************************/ - -vAPI.messaging.onPortMessage = (function() { - var messaging = vAPI.messaging; - var toAuxPending = {}; - - // Use a wrapper to avoid closure and to allow reuse. - var CallbackWrapper = function(port, request, timeout) { - this.callback = this.proxy.bind(this); // bind once - this.init(port, request, timeout); - }; - - CallbackWrapper.prototype.init = function(port, request, timeout) { - this.port = port; - this.request = request; - this.timerId = timeout !== undefined ? - vAPI.setTimeout(this.callback, timeout) : - null; - return this; - }; - - CallbackWrapper.prototype.proxy = function(response) { - if ( this.timerId !== null ) { - clearTimeout(this.timerId); - delete toAuxPending[this.timerId]; - this.timerId = null; - } - // https://github.com/chrisaljoudi/uBlock/issues/383 - if ( messaging.ports.hasOwnProperty(this.port.name) ) { - this.port.postMessage({ - auxProcessId: this.request.auxProcessId, - channelName: this.request.channelName, - msg: response !== undefined ? response : null - }); - } - // Mark for reuse - this.port = this.request = null; - callbackWrapperJunkyard.push(this); - }; - - var callbackWrapperJunkyard = []; - - var callbackWrapperFactory = function(port, request, timeout) { - var wrapper = callbackWrapperJunkyard.pop(); - if ( wrapper ) { - return wrapper.init(port, request, timeout); - } - return new CallbackWrapper(port, request, timeout); - }; - - var toAux = function(details, portFrom) { - var port, portTo; - var chromiumTabId = toChromiumTabId(details.toTabId); - - // TODO: This could be an issue with a lot of tabs: easy to address - // with a port name to tab id map. - for ( var portName in messaging.ports ) { - if ( messaging.ports.hasOwnProperty(portName) === false ) { - continue; - } - // When sending to an auxiliary process, the target is always the - // port associated with the root frame. - port = messaging.ports[portName]; - if ( port.sender.frameId === 0 && port.sender.tab.id === chromiumTabId ) { - portTo = port; - break; - } - } - - var wrapper; - if ( details.auxProcessId !== undefined ) { - wrapper = callbackWrapperFactory(portFrom, details, 1023); - } - - // Destination not found: - if ( portTo === undefined ) { - if ( wrapper !== undefined ) { - wrapper.callback(); - } - return; - } - - // As per HTML5, timer id is always an integer, thus suitable to be - // used as a key, and which value is safe to use across process - // boundaries. - if ( wrapper !== undefined ) { - toAuxPending[wrapper.timerId] = wrapper; - } - - portTo.postMessage({ - mainProcessId: wrapper && wrapper.timerId, - channelName: details.toChannel, - msg: details.msg - }); - }; - - var toAuxResponse = function(details) { - var mainProcessId = details.mainProcessId; - if ( mainProcessId === undefined ) { - return; - } - if ( toAuxPending.hasOwnProperty(mainProcessId) === false ) { - return; - } - var wrapper = toAuxPending[mainProcessId]; - delete toAuxPending[mainProcessId]; - wrapper.callback(details.msg); - }; - - return function(request, port) { - // Auxiliary process to auxiliary process - if ( request.toTabId !== undefined ) { - toAux(request, port); - return; - } - - // Auxiliary process to auxiliary process: response - if ( request.mainProcessId !== undefined ) { - toAuxResponse(request); - return; - } - - // Auxiliary process to main process: prepare response - var callback = messaging.NOOPFUNC; - if ( request.auxProcessId !== undefined ) { - callback = callbackWrapperFactory(port, request).callback; - } - - // Auxiliary process to main process: specific handler - var r = messaging.UNHANDLED; - var listener = messaging.listeners[request.channelName]; - if ( typeof listener === 'function' ) { - r = listener(request.msg, port.sender, callback); - } - if ( r !== messaging.UNHANDLED ) { - return; - } - - // Auxiliary process to main process: default handler - r = messaging.defaultHandler(request.msg, port.sender, callback); - if ( r !== messaging.UNHANDLED ) { - return; - } - - // Auxiliary process to main process: no handler - console.error('uBlock> messaging > unknown request: %o', request); - - // Need to callback anyways in case caller expected an answer, or - // else there is a memory leak on caller's side - callback(); - }; -})(); - -/******************************************************************************/ - -vAPI.messaging.onPortDisconnect = function(port) { - port.onDisconnect.removeListener(vAPI.messaging.onPortDisconnect); - port.onMessage.removeListener(vAPI.messaging.onPortMessage); - delete vAPI.messaging.ports[port.name]; -}; - -/******************************************************************************/ - -vAPI.messaging.onPortConnect = function(port) { - port.onDisconnect.addListener(vAPI.messaging.onPortDisconnect); - port.onMessage.addListener(vAPI.messaging.onPortMessage); - vAPI.messaging.ports[port.name] = port; -}; - -/******************************************************************************/ - -vAPI.messaging.setup = function(defaultHandler) { - // Already setup? - if ( this.defaultHandler !== null ) { - return; - } - - if ( typeof defaultHandler !== 'function' ) { - defaultHandler = function(){ return vAPI.messaging.UNHANDLED; }; - } - this.defaultHandler = defaultHandler; - - chrome.runtime.onConnect.addListener(this.onPortConnect); -}; - -/******************************************************************************/ - -vAPI.messaging.broadcast = function(message) { - var messageWrapper = { - broadcast: true, - msg: message - }; - - for ( var portName in this.ports ) { - if ( this.ports.hasOwnProperty(portName) === false ) { - continue; - } - this.ports[portName].postMessage(messageWrapper); - } -}; - -/******************************************************************************/ -/******************************************************************************/ - -vAPI.net = {}; - -/******************************************************************************/ - -vAPI.net.registerListeners = function() { - var µb = µBlock; - var µburi = µb.URI; - - // https://bugs.chromium.org/p/chromium/issues/detail?id=410382 - // Between Chromium 38-48, plug-ins' network requests were reported as - // type "other" instead of "object". - var is_v38_48 = /\bChrom[a-z]+\/(?:3[89]|4[0-8])\.[\d.]+\b/.test(navigator.userAgent), - is_v49_55 = /\bChrom[a-z]+\/(?:49|5[012345])\b/.test(navigator.userAgent); - - // Chromium-based browsers understand only these network request types. - var validTypes = { - 'main_frame': true, - 'sub_frame': true, - 'stylesheet': true, - 'script': true, - 'image': true, - 'object': true, - 'xmlhttprequest': true, - 'other': true - }; - - var denormalizeTypes = function(aa) { - if ( aa.length === 0 ) { - return Object.keys(validTypes); - } - var out = []; - var i = aa.length, - type, - needOther = true; - while ( i-- ) { - type = aa[i]; - if ( validTypes.hasOwnProperty(type) ) { - out.push(type); - } - if ( type === 'other' ) { - needOther = false; - } - } - if ( needOther ) { - out.push('other'); - } - return out; - }; - - var headerValue = function(headers, name) { - var i = headers.length; - while ( i-- ) { - if ( headers[i].name.toLowerCase() === name ) { - return headers[i].value.trim(); - } - } - return ''; - }; - - var normalizeRequestDetails = function(details) { - details.tabId = details.tabId.toString(); - - // https://github.com/gorhill/uBlock/issues/1493 - // Chromium 49+ support a new request type: `ping`, which is fired as - // a result of using `navigator.sendBeacon`. - if ( details.type === 'ping' ) { - details.type = 'beacon'; - return; - } - - // The rest of the function code is to normalize type - if ( details.type !== 'other' ) { - return; - } - - var path = µburi.pathFromURI(details.url); - var pos = path.indexOf('.', path.length - 6); - - // https://github.com/chrisaljoudi/uBlock/issues/862 - // If no transposition possible, transpose to `object` as per - // Chromium bug 410382 (see below) - if ( pos !== -1 ) { - var needle = path.slice(pos) + '.'; - if ( '.eot.ttf.otf.svg.woff.woff2.'.indexOf(needle) !== -1 ) { - details.type = 'font'; - return; - } - - if ( '.mp3.mp4.webm.'.indexOf(needle) !== -1 ) { - details.type = 'media'; - return; - } - - // Still need this because often behind-the-scene requests are wrongly - // categorized as 'other' - if ( '.ico.png.gif.jpg.jpeg.webp.'.indexOf(needle) !== -1 ) { - details.type = 'image'; - return; - } - } - - // Try to extract type from response headers if present. - if ( details.responseHeaders ) { - var contentType = headerValue(details.responseHeaders, 'content-type'); - if ( contentType.startsWith('font/') ) { - details.type = 'font'; - return; - } - if ( contentType.startsWith('image/') ) { - details.type = 'image'; - return; - } - if ( contentType.startsWith('audio/') || contentType.startsWith('video/') ) { - details.type = 'media'; - return; - } - } - - // https://code.google.com/p/chromium/issues/detail?id=410382 - if ( is_v38_48 ) { - details.type = 'object'; - } - }; - - // https://bugs.chromium.org/p/chromium/issues/detail?id=129353 - // https://github.com/gorhill/uBlock/issues/1497 - // Expose websocket-based network requests to uBO's filtering engine, - // logger, etc. - // Counterpart of following block of code is found in "vapi-client.js" -- - // search for "https://github.com/gorhill/uBlock/issues/1497". - var onBeforeWebsocketRequest = function(details) { - details.type = 'websocket'; - var matches = /url=([^&]+)/.exec(details.url); - details.url = decodeURIComponent(matches[1]); - var r = onBeforeRequestClient(details); - // Blocked? - if ( r && r.cancel ) { - return r; - } - // Returning a 1x1 transparent pixel means "not blocked". - return { redirectUrl: 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==' }; - }; - - var onBeforeRequestClient = this.onBeforeRequest.callback; - var onBeforeRequest = function(details) { - // https://github.com/gorhill/uBlock/issues/1497 - if ( - details.type === 'image' && - details.url.endsWith('ubofix=f41665f3028c7fd10eecf573336216d3') - ) { - return onBeforeWebsocketRequest(details); - } - - normalizeRequestDetails(details); - return onBeforeRequestClient(details); - }; - - // This is needed for Chromium 49-55. - var onBeforeSendHeaders = function(details) { - if ( details.type !== 'ping' || details.method !== 'POST' ) { return; } - var type = headerValue(details.requestHeaders, 'content-type'); - if ( type === '' ) { return; } - if ( type.endsWith('/csp-report') ) { - details.type = 'csp_report'; - return onBeforeRequestClient(details); - } - }; - - var onHeadersReceivedClient = this.onHeadersReceived.callback, - onHeadersReceivedClientTypes = this.onHeadersReceived.types.slice(0), - onHeadersReceivedTypes = denormalizeTypes(onHeadersReceivedClientTypes); - var onHeadersReceived = function(details) { - normalizeRequestDetails(details); - // Hack to work around Chromium API limitations, where requests of - // type `font` are returned as `other`. For example, our normalization - // fail at transposing `other` into `font` for URLs which are outside - // what is expected. At least when headers are received we can check - // for content type `font/*`. Blocking at onHeadersReceived time is - // less worse than not blocking at all. Also, due to Chromium bug, - // `other` always becomes `object` when it can't be normalized into - // something else. Test case for "unfriendly" font URLs: - // https://www.google.com/fonts - if ( details.type === 'font' ) { - var r = onBeforeRequestClient(details); - if ( typeof r === 'object' && r.cancel === true ) { - return { cancel: true }; - } - } - if ( - onHeadersReceivedClientTypes.length !== 0 && - onHeadersReceivedClientTypes.indexOf(details.type) === -1 - ) { - return; - } - return onHeadersReceivedClient(details); - }; - - var installListeners = (function() { - var crapi = chrome.webRequest; - - //listener = function(details) { - // quickProfiler.start('onBeforeRequest'); - // var r = onBeforeRequest(details); - // quickProfiler.stop(); - // return r; - //}; - if ( crapi.onBeforeRequest.hasListener(onBeforeRequest) === false ) { - crapi.onBeforeRequest.addListener( - onBeforeRequest, - { - 'urls': this.onBeforeRequest.urls || [''], - 'types': this.onBeforeRequest.types || undefined - }, - this.onBeforeRequest.extra - ); - } - - // Chromium 48 and lower does not support `ping` type. - // Chromium 56 and higher does support `csp_report` stype. - if ( is_v49_55 && crapi.onBeforeSendHeaders.hasListener(onBeforeSendHeaders) === false ) { - crapi.onBeforeSendHeaders.addListener( - onBeforeSendHeaders, - { - 'urls': [ '' ], - 'types': [ 'ping' ] - }, - [ 'blocking', 'requestHeaders' ] - ); - } - - if ( crapi.onHeadersReceived.hasListener(onHeadersReceived) === false ) { - crapi.onHeadersReceived.addListener( - onHeadersReceived, - { - 'urls': this.onHeadersReceived.urls || [''], - 'types': onHeadersReceivedTypes - }, - this.onHeadersReceived.extra - ); - } - - // https://github.com/gorhill/uBlock/issues/675 - // Experimental: keep polling to be sure our listeners are still installed. - //setTimeout(installListeners, 20000); - }).bind(this); - - installListeners(); -}; - -/******************************************************************************/ -/******************************************************************************/ - -vAPI.contextMenu = { - _callback: null, - _entries: [], - _createEntry: function(entry) { - chrome.contextMenus.create(JSON.parse(JSON.stringify(entry)), function() { - void chrome.runtime.lastError; - }); - }, - onMustUpdate: function() {}, - setEntries: function(entries, callback) { - entries = entries || []; - var n = Math.max(this._entries.length, entries.length), - oldEntryId, newEntry; - for ( var i = 0; i < n; i++ ) { - oldEntryId = this._entries[i]; - newEntry = entries[i]; - if ( oldEntryId && newEntry ) { - if ( newEntry.id !== oldEntryId ) { - chrome.contextMenus.remove(oldEntryId); - this._createEntry(newEntry); - this._entries[i] = newEntry.id; - } - } else if ( oldEntryId && !newEntry ) { - chrome.contextMenus.remove(oldEntryId); - } else if ( !oldEntryId && newEntry ) { - this._createEntry(newEntry); - this._entries[i] = newEntry.id; - } - } - n = this._entries.length = entries.length; - callback = callback || null; - if ( callback === this._callback ) { - return; - } - if ( n !== 0 && callback !== null ) { - chrome.contextMenus.onClicked.addListener(callback); - this._callback = callback; - } else if ( n === 0 && this._callback !== null ) { - chrome.contextMenus.onClicked.removeListener(this._callback); - this._callback = null; - } - } -}; - -/******************************************************************************/ -/******************************************************************************/ - -vAPI.lastError = function() { - return chrome.runtime.lastError; -}; - -/******************************************************************************/ -/******************************************************************************/ - -// This is called only once, when everything has been loaded in memory after -// the extension was launched. It can be used to inject content scripts -// in already opened web pages, to remove whatever nuisance could make it to -// the web pages before uBlock was ready. - -vAPI.onLoadAllCompleted = function() { - // http://code.google.com/p/chromium/issues/detail?id=410868#c11 - // Need to be sure to access `vAPI.lastError()` to prevent - // spurious warnings in the console. - var scriptDone = function() { - vAPI.lastError(); - }; - var scriptStart = function(tabId) { - vAPI.tabs.injectScript(tabId, { - file: 'js/vapi-client.js', - allFrames: true, - runAt: 'document_idle' - }, function(){ }); - vAPI.tabs.injectScript(tabId, { - file: 'js/contentscript.js', - allFrames: true, - runAt: 'document_idle' - }, scriptDone); - }; - var bindToTabs = function(tabs) { - var µb = µBlock; - var i = tabs.length, tab; - while ( i-- ) { - tab = tabs[i]; - µb.tabContextManager.commit(tab.id, tab.url); - µb.bindTabToPageStats(tab.id); - // https://github.com/chrisaljoudi/uBlock/issues/129 - scriptStart(tab.id); - } - }; - - chrome.tabs.query({ url: '' }, bindToTabs); -}; - -/******************************************************************************/ -/******************************************************************************/ - -vAPI.punycodeHostname = function(hostname) { - return hostname; -}; - -vAPI.punycodeURL = function(url) { - return url; -}; - -/******************************************************************************/ -/******************************************************************************/ - -// https://github.com/gorhill/uBlock/issues/531 -// Storage area dedicated to admin settings. Read-only. - -// https://github.com/gorhill/uBlock/commit/43a5ed735b95a575a9339b6e71a1fcb27a99663b#commitcomment-13965030 -// Not all Chromium-based browsers support managed storage. Merely testing or -// exception handling in this case does NOT work: I don't know why. The -// extension on Opera ends up in a non-sensical state, whereas vAPI become -// undefined out of nowhere. So only solution left is to test explicitly for -// Opera. -// https://github.com/gorhill/uBlock/issues/900 -// Also, UC Browser: http://www.upsieutoc.com/image/WXuH - -vAPI.adminStorage = { - getItem: function(key, callback) { - var onRead = function(store) { - var data; - if ( - !chrome.runtime.lastError && - typeof store === 'object' && - store !== null - ) { - data = store[key]; - } - callback(data); - }; - try { - chrome.storage.managed.get(key, onRead); - } catch (ex) { - callback(); - } - } -}; - -/******************************************************************************/ -/******************************************************************************/ - -vAPI.cloud = (function() { - var chunkCountPerFetch = 16; // Must be a power of 2 - - // Mind chrome.storage.sync.MAX_ITEMS (512 at time of writing) - var maxChunkCountPerItem = Math.floor(512 * 0.75) & ~(chunkCountPerFetch - 1); - - // Mind chrome.storage.sync.QUOTA_BYTES_PER_ITEM (8192 at time of writing) - var maxChunkSize = Math.floor(chrome.storage.sync.QUOTA_BYTES_PER_ITEM * 0.75); - - // Mind chrome.storage.sync.QUOTA_BYTES (128 kB at time of writing) - var maxStorageSize = chrome.storage.sync.QUOTA_BYTES; - - var options = { - defaultDeviceName: window.navigator.platform, - deviceName: window.localStorage.getItem('deviceName') || '' - }; - - // This is used to find out a rough count of how many chunks exists: - // We "poll" at specific index in order to get a rough idea of how - // large is the stored string. - // This allows reading a single item with only 2 sync operations -- a - // good thing given chrome.storage.sync.MAX_WRITE_OPERATIONS_PER_MINUTE - // and chrome.storage.sync.MAX_WRITE_OPERATIONS_PER_HOUR. - - var getCoarseChunkCount = function(dataKey, callback) { - var bin = {}; - for ( var i = 0; i < maxChunkCountPerItem; i += 16 ) { - bin[dataKey + i.toString()] = ''; - } - - chrome.storage.sync.get(bin, function(bin) { - if ( chrome.runtime.lastError ) { - callback(0, chrome.runtime.lastError.message); - return; - } - - var chunkCount = 0; - for ( var i = 0; i < maxChunkCountPerItem; i += 16 ) { - if ( bin[dataKey + i.toString()] === '' ) { - break; - } - chunkCount = i + 16; - } - - callback(chunkCount); - }); - }; - - var deleteChunks = function(dataKey, start) { - var keys = []; - - // No point in deleting more than: - // - The max number of chunks per item - // - The max number of chunks per storage limit - var n = Math.min( - maxChunkCountPerItem, - Math.ceil(maxStorageSize / maxChunkSize) - ); - for ( var i = start; i < n; i++ ) { - keys.push(dataKey + i.toString()); - } - chrome.storage.sync.remove(keys); - }; - - var start = function(/* dataKeys */) { - }; - - var push = function(dataKey, data, callback) { - var bin = { - 'source': options.deviceName || options.defaultDeviceName, - 'tstamp': Date.now(), - 'data': data, - 'size': 0 - }; - bin.size = JSON.stringify(bin).length; - var item = JSON.stringify(bin); - - // Chunkify taking into account QUOTA_BYTES_PER_ITEM: - // https://developer.chrome.com/extensions/storage#property-sync - // "The maximum size (in bytes) of each individual item in sync - // "storage, as measured by the JSON stringification of its value - // "plus its key length." - bin = {}; - var chunkCount = Math.ceil(item.length / maxChunkSize); - for ( var i = 0; i < chunkCount; i++ ) { - bin[dataKey + i.toString()] = item.substr(i * maxChunkSize, maxChunkSize); - } - bin[dataKey + i.toString()] = ''; // Sentinel - - chrome.storage.sync.set(bin, function() { - var errorStr; - if ( chrome.runtime.lastError ) { - errorStr = chrome.runtime.lastError.message; - } - callback(errorStr); - - // Remove potentially unused trailing chunks - deleteChunks(dataKey, chunkCount); - }); - }; - - var pull = function(dataKey, callback) { - var assembleChunks = function(bin) { - if ( chrome.runtime.lastError ) { - callback(null, chrome.runtime.lastError.message); - return; - } - - // Assemble chunks into a single string. - var json = [], jsonSlice; - var i = 0; - for (;;) { - jsonSlice = bin[dataKey + i.toString()]; - if ( jsonSlice === '' ) { - break; - } - json.push(jsonSlice); - i += 1; - } - - var entry = null; - try { - entry = JSON.parse(json.join('')); - } catch(ex) { - } - callback(entry); - }; - - var fetchChunks = function(coarseCount, errorStr) { - if ( coarseCount === 0 || typeof errorStr === 'string' ) { - callback(null, errorStr); - return; - } - - var bin = {}; - for ( var i = 0; i < coarseCount; i++ ) { - bin[dataKey + i.toString()] = ''; - } - - chrome.storage.sync.get(bin, assembleChunks); - }; - - getCoarseChunkCount(dataKey, fetchChunks); - }; - - var getOptions = function(callback) { - if ( typeof callback !== 'function' ) { - return; - } - callback(options); - }; - - var setOptions = function(details, callback) { - if ( typeof details !== 'object' || details === null ) { - return; - } - - if ( typeof details.deviceName === 'string' ) { - window.localStorage.setItem('deviceName', details.deviceName); - options.deviceName = details.deviceName; - } - - getOptions(callback); - }; - - return { - start: start, - push: push, - pull: pull, - getOptions: getOptions, - setOptions: setOptions - }; -})(); - -/******************************************************************************/ -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff --git a/platform/webext/vapi-client.js b/platform/webext/vapi-client.js deleted file mode 100644 index 0dd976fff3639..0000000000000 --- a/platform/webext/vapi-client.js +++ /dev/null @@ -1,525 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2014-2016 The uBlock Origin authors - - 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 -*/ - -/* global HTMLDocument, XMLDocument */ - -'use strict'; - -// For non background pages - -/******************************************************************************/ - -(function(self) { - -/******************************************************************************/ -/******************************************************************************/ - -// https://github.com/chrisaljoudi/uBlock/issues/464 -if ( document instanceof HTMLDocument === false ) { - // https://github.com/chrisaljoudi/uBlock/issues/1528 - // A XMLDocument can be a valid HTML document. - if ( - document instanceof XMLDocument === false || - document.createElement('div') instanceof HTMLDivElement === false - ) { - return; - } -} - -// https://github.com/gorhill/uBlock/issues/1124 -// Looks like `contentType` is on track to be standardized: -// https://dom.spec.whatwg.org/#concept-document-content-type -// https://forums.lanik.us/viewtopic.php?f=64&t=31522 -// Skip text/plain documents. -var contentType = document.contentType || ''; -if ( /^image\/|^text\/plain/.test(contentType) ) { - return; -} - -/******************************************************************************/ - -var vAPI = self.vAPI = self.vAPI || {}; -var chrome = self.chrome; - -// https://github.com/chrisaljoudi/uBlock/issues/456 -// Already injected? -if ( vAPI.sessionId ) { - return; -} - -/******************************************************************************/ - -// Support minimally working Set() for legacy Chromium. - -if ( self.Set instanceof Function ) { - self.createSet = function() { - return new Set(); - }; -} else { - self.createSet = (function() { - //console.log('Polyfilling for ES6-like Set().'); - var PrimitiveSet = function() { - this.clear(); - }; - PrimitiveSet.prototype = { - add: function(k) { - if ( this._set[k] === undefined ) { - this._set[k] = true; - this.size += 1; - } - return this; - }, - clear: function() { - this._set = Object.create(null); - this.size = 0; - this._values = undefined; - this._i = undefined; - this.value = undefined; - this.done = true; - }, - delete: function(k) { - if ( this._set[k] === undefined ) { return false; } - delete this._set[k]; - this.size -= 1; - return true; - }, - has: function(k) { - return this._set[k] !== undefined; - }, - next: function() { - if ( this._i < this.size ) { - this.value = this._values[this._i++]; - } else { - this._values = undefined; - this.value = undefined; - this.done = true; - } - return this; - }, - polyfill: true, - values: function() { - this._values = Object.keys(this._set); - this._i = 0; - this.value = undefined; - this.done = false; - return this; - } - }; - var ReferenceSet = function() { - this.clear(); - }; - ReferenceSet.prototype = { - add: function(k) { - if ( this._set.indexOf(k) === -1 ) { - this._set.push(k); - } - }, - clear: function() { - this._set = []; - this._i = 0; - this.value = undefined; - this.done = true; - }, - delete: function(k) { - var pos = this._set.indexOf(k); - if ( pos === -1 ) { return false; } - this._set.splice(pos, 1); - return true; - }, - has: function(k) { - return this._set.indexOf(k) !== -1; - }, - next: function() { - if ( this._i === this._set.length ) { - this.value = undefined; - this.done = true; - } else { - this.value = this._set[this._i]; - this._i += 1; - } - return this; - }, - polyfill: true, - values: function() { - this._i = 0; - this.done = false; - return this; - } - }; - Object.defineProperty(ReferenceSet.prototype, 'size', { - get: function() { return this._set.length; } - }); - return function(type) { - return type === 'object' ? new ReferenceSet() : new PrimitiveSet(); - }; - })(); -} - -/******************************************************************************/ - -var referenceCounter = 0; - -vAPI.lock = function() { - referenceCounter += 1; -}; - -vAPI.unlock = function() { - referenceCounter -= 1; - if ( referenceCounter === 0 ) { - // Eventually there will be code here to flush the javascript code - // from this file out of memory when it ends up unused. - - } -}; - -/******************************************************************************/ - -vAPI.executionCost = { - start: function(){}, - stop: function(){} -}; -/* -vAPI.executionCost = { - tcost: 0, - tstart: 0, - nstart: 0, - level: 1, - start: function() { - if ( this.nstart === 0 ) { - this.tstart = window.performance.now(); - } - this.nstart += 1; - }, - stop: function(mark) { - this.nstart -= 1; - if ( this.nstart !== 0 ) { - return; - } - var tcost = window.performance.now() - this.tstart; - this.tcost += tcost; - if ( mark === undefined ) { - return; - } - var top = window === window.top; - if ( !top && this.level < 2 ) { - return; - } - var context = window === window.top ? ' top' : 'frame'; - var percent = this.tcost / window.performance.now() * 100; - console.log( - 'uBO cost (%s): %sms/%s%% (%s: %sms)', - context, - this.tcost.toFixed(1), - percent.toFixed(1), - mark, - tcost.toFixed(2) - ); - } -}; -*/ -vAPI.executionCost.start(); - -/******************************************************************************/ - -vAPI.randomToken = function() { - return String.fromCharCode(Date.now() % 26 + 97) + - Math.floor(Math.random() * 982451653 + 982451653).toString(36); -}; - -vAPI.sessionId = vAPI.randomToken(); -vAPI.chrome = true; -vAPI.setTimeout = vAPI.setTimeout || self.setTimeout.bind(self); - -/******************************************************************************/ - -vAPI.shutdown = { - jobs: [], - add: function(job) { - this.jobs.push(job); - }, - exec: function() { - var job; - while ( (job = this.jobs.pop()) ) { - job(); - } - }, - remove: function(job) { - var pos; - while ( (pos = this.jobs.indexOf(job)) !== -1 ) { - this.jobs.splice(pos, 1); - } - } -}; - -/******************************************************************************/ -/******************************************************************************/ - -vAPI.messaging = { - port: null, - portTimer: null, - portTimerDelay: 10000, - channels: Object.create(null), - channelCount: 0, - pending: Object.create(null), - pendingCount: 0, - auxProcessId: 1, - shuttingDown: false, - - shutdown: function() { - this.shuttingDown = true; - this.destroyPort(); - }, - - disconnectListener: function() { - this.port = null; - vAPI.shutdown.exec(); - }, - disconnectListenerCallback: null, - - messageListener: function(details) { - if ( !details ) { - return; - } - - // Sent to all channels - if ( details.broadcast === true && !details.channelName ) { - for ( var channelName in this.channels ) { - this.sendToChannelListeners(channelName, details.msg); - } - return; - } - - // Response to specific message previously sent - if ( details.auxProcessId ) { - var listener = this.pending[details.auxProcessId]; - delete this.pending[details.auxProcessId]; - delete details.auxProcessId; // TODO: why? - if ( listener ) { - this.pendingCount -= 1; - listener(details.msg); - return; - } - } - - // Sent to a specific channel - var response = this.sendToChannelListeners(details.channelName, details.msg); - - // Respond back if required - if ( details.mainProcessId === undefined ) { - return; - } - var port = this.connect(); - if ( port !== null ) { - port.postMessage({ - mainProcessId: details.mainProcessId, - msg: response - }); - } - }, - messageListenerCallback: null, - - portPoller: function() { - this.portTimer = null; - if ( this.port !== null ) { - if ( this.channelCount !== 0 || this.pendingCount !== 0 ) { - this.portTimer = vAPI.setTimeout(this.portPollerCallback, this.portTimerDelay); - this.portTimerDelay = Math.min(this.portTimerDelay * 2, 60 * 60 * 1000); - return; - } - } - this.destroyPort(); - }, - portPollerCallback: null, - - destroyPort: function() { - if ( this.portTimer !== null ) { - clearTimeout(this.portTimer); - this.portTimer = null; - } - var port = this.port; - if ( port !== null ) { - port.disconnect(); - port.onMessage.removeListener(this.messageListenerCallback); - port.onDisconnect.removeListener(this.disconnectListenerCallback); - this.port = null; - } - if ( this.channelCount !== 0 ) { - this.channels = Object.create(null); - this.channelCount = 0; - } - // service pending callbacks - if ( this.pendingCount !== 0 ) { - var pending = this.pending, callback; - this.pending = Object.create(null); - this.pendingCount = 0; - for ( var auxId in pending ) { - callback = pending[auxId]; - if ( typeof callback === 'function' ) { - callback(null); - } - } - } - }, - - createPort: function() { - if ( this.shuttingDown ) { - return null; - } - if ( this.messageListenerCallback === null ) { - this.messageListenerCallback = this.messageListener.bind(this); - this.disconnectListenerCallback = this.disconnectListener.bind(this); - this.portPollerCallback = this.portPoller.bind(this); - } - try { - this.port = chrome.runtime.connect({name: vAPI.sessionId}) || null; - } catch (ex) { - this.port = null; - } - if ( this.port !== null ) { - this.port.onMessage.addListener(this.messageListenerCallback); - this.port.onDisconnect.addListener(this.disconnectListenerCallback); - } - this.portTimerDelay = 10000; - if ( this.portTimer === null ) { - this.portTimer = vAPI.setTimeout(this.portPollerCallback, this.portTimerDelay); - } - return this.port; - }, - - connect: function() { - return this.port !== null ? this.port : this.createPort(); - }, - - send: function(channelName, message, callback) { - this.sendTo(channelName, message, undefined, undefined, callback); - }, - - sendTo: function(channelName, message, toTabId, toChannel, callback) { - // Too large a gap between the last request and the last response means - // the main process is no longer reachable: memory leaks and bad - // performance become a risk -- especially for long-lived, dynamic - // pages. Guard against this. - if ( this.pendingCount > 25 ) { - vAPI.shutdown.exec(); - } - var port = this.connect(); - if ( port === null ) { - if ( typeof callback === 'function' ) { - callback(); - } - return; - } - var auxProcessId; - if ( callback ) { - auxProcessId = this.auxProcessId++; - this.pending[auxProcessId] = callback; - this.pendingCount += 1; - } - port.postMessage({ - channelName: channelName, - auxProcessId: auxProcessId, - toTabId: toTabId, - toChannel: toChannel, - msg: message - }); - }, - - addChannelListener: function(channelName, callback) { - if ( typeof callback !== 'function' ) { - return; - } - var listeners = this.channels[channelName]; - if ( listeners !== undefined && listeners.indexOf(callback) !== -1 ) { - console.error('Duplicate listener on channel "%s"', channelName); - return; - } - if ( listeners === undefined ) { - this.channels[channelName] = [callback]; - this.channelCount += 1; - } else { - listeners.push(callback); - } - this.connect(); - }, - - removeChannelListener: function(channelName, callback) { - if ( typeof callback !== 'function' ) { - return; - } - var listeners = this.channels[channelName]; - if ( listeners === undefined ) { - return; - } - var pos = this.listeners.indexOf(callback); - if ( pos === -1 ) { - console.error('Listener not found on channel "%s"', channelName); - return; - } - listeners.splice(pos, 1); - if ( listeners.length === 0 ) { - delete this.channels[channelName]; - this.channelCount -= 1; - } - }, - - removeAllChannelListeners: function(channelName) { - var listeners = this.channels[channelName]; - if ( listeners === undefined ) { - return; - } - delete this.channels[channelName]; - this.channelCount -= 1; - }, - - sendToChannelListeners: function(channelName, msg) { - var listeners = this.channels[channelName]; - if ( listeners === undefined ) { - return; - } - var response; - for ( var i = 0, n = listeners.length; i < n; i++ ) { - response = listeners[i](msg); - if ( response !== undefined ) { - break; - } - } - return response; - } -}; - -/******************************************************************************/ - -vAPI.shutdown.add(function() { - vAPI.messaging.shutdown(); - delete window.vAPI; -}); - -// https://www.youtube.com/watch?v=rT5zCHn0tsg -// https://www.youtube.com/watch?v=E-jS4e3zacI - -vAPI.executionCost.stop('vapi-client.js'); - -/******************************************************************************/ -/******************************************************************************/ - -})(this); - -/******************************************************************************/ diff --git a/platform/webext/vapi-common.js b/platform/webext/vapi-common.js deleted file mode 100644 index 6020d66652025..0000000000000 --- a/platform/webext/vapi-common.js +++ /dev/null @@ -1,101 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2014-2016 The uBlock Origin authors - - 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 -*/ - -// For background page or non-background pages - -'use strict'; - -/******************************************************************************/ -/******************************************************************************/ - -(function() { - -var vAPI = self.vAPI = self.vAPI || {}; -var chrome = self.chrome; - -/******************************************************************************/ - -vAPI.setTimeout = vAPI.setTimeout || self.setTimeout.bind(self); - -/******************************************************************************/ - -// http://www.w3.org/International/questions/qa-scripts#directions - -var setScriptDirection = function(language) { - document.body.setAttribute( - 'dir', - ['ar', 'he', 'fa', 'ps', 'ur'].indexOf(language) !== -1 ? 'rtl' : 'ltr' - ); -}; - -/******************************************************************************/ - -vAPI.download = function(details) { - if ( !details.url ) { - return; - } - - var a = document.createElement('a'); - a.href = details.url; - a.setAttribute('download', details.filename || ''); - a.dispatchEvent(new MouseEvent('click')); -}; - -/******************************************************************************/ - -vAPI.insertHTML = function(node, html) { - node.innerHTML = html; -}; - -/******************************************************************************/ - -vAPI.getURL = chrome.runtime.getURL; - -/******************************************************************************/ - -vAPI.i18n = chrome.i18n.getMessage; - -setScriptDirection(vAPI.i18n('@@ui_locale')); - -/******************************************************************************/ - -vAPI.closePopup = function() { - window.open('','_self').close(); -}; - -/******************************************************************************/ - -// A localStorage-like object which should be accessible from the -// background page or auxiliary pages. -// This storage is optional, but it is nice to have, for a more polished user -// experience. - -// This can throw in some contexts (like in devtool). -try { - vAPI.localStorage = window.localStorage; -} catch (ex) { -} - -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff --git a/publish-extension b/publish-extension new file mode 160000 index 0000000000000..b245171eac43e --- /dev/null +++ b/publish-extension @@ -0,0 +1 @@ +Subproject commit b245171eac43ed1faeecff4b5d277044cdbcdbea diff --git a/src/1p-filters.html b/src/1p-filters.html index 37e81610eab3e..d35124f21dcb9 100644 --- a/src/1p-filters.html +++ b/src/1p-filters.html @@ -2,36 +2,69 @@ + + uBlock — Your filters - - - - + + + + + + + + + + + + -
    +
    +
    +

    + + +   + + +

    +

    +
    +
    +
    +
    + -

    -

    -   - -

    -

    -

    -   - - -

    + + + + + + + + + + + + + - - - - - + + + + + + + + + + diff --git a/src/3p-filters.html b/src/3p-filters.html index 8bce9d01aaab4..c7db3b7bfb39f 100644 --- a/src/3p-filters.html +++ b/src/3p-filters.html @@ -2,8 +2,12 @@ -uBlock — Ubiquitous rules + + +uBlock — Filter lists + + @@ -11,67 +15,104 @@ +
    +
    +

    + + +

    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    - -
      -
    •   - - -
    • -
      -
        -
      • -
        -
      -
    • -
    -
      -
      -

      - - -

      -

      - -

      +
      + +
      search
      +
      +
      -
      -
      - -
      + + + + - - - - - + + + + + diff --git a/src/_locales/ar/messages.json b/src/_locales/ar/messages.json index 10c63a4d0d2c1..df3c75f262ebd 100644 --- a/src/_locales/ar/messages.json +++ b/src/_locales/ar/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"يو بلوك أوريجين", - "description":"extension name." + "extName": { + "message": "يو بلوك أوريجين", + "description": "extension name." }, - "extShortDesc":{ - "message":"وأخيراً, مانع اعلانات كفوء. خفيف على المعالج و الذاكرة.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "وأخيراً, مانع اعلانات كفوء. خفيف على المعالج و الذاكرة.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — لوحة التحكم", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — لوحة التحكم", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"الإعدادات", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "تنبيه! لديك تغييرات لم تقم بحفظها", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"فلاتر خارجيه", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "إبقى", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"الفلاتر الخاصة بي", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "تجاهل", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"القواعد الخاصة بي", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "الإعدادات", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"القائمة البيضاء", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "قوائم الفلاتر", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"\"uBlock₀\" — سجل الإتصال بالشبكة", - "description":"Title for the logger window" + "1pPageName": { + "message": "الفلاتر الخاصة بي", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"حول البرنامج", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "القواعد الخاصة بي", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"اضغط: لتعطيل\/تشغيل ميكروبلوك لهذا الموقع.\n\nCtrl+click لتعطيل ميكروبلوك لهذه الصفحة فقط.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "المواقع الموثوقة", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"تم منع الطلبات", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "الاختصارات", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"على هذه الصفحه", - "description":"English: on this page" + "statsPageName": { + "message": "\"uBlock₀\" — سجل الإتصال بالشبكة", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} أو {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "حول البرنامج", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"منذ التنصيب", - "description":"English: since install" + "supportPageName": { + "message": "الدعم", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"او", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — مُعاين العناصر", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"إضغط لفتح لوحة التحكم", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "الإعدادات المتقدمة", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"دخول وضع اختيار اليدوي", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "اضغط: لتعطيل/تشغيل ميكروبلوك لهذا الموقع.\n\nCtrl+click لتعطيل ميكروبلوك لهذه الصفحة فقط.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"إفتح سجل طلبات الشبكة", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "اضغط لتعطيل uBlock₀ لهذا الموقع.\n\nCtrl+click لتعطيل uBlock₀ لهذه الصفحة فقط.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"لا نوافذ منبثقة لهذا الموقع", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "اضغط لتفعيل uBlock₀ لهذا الموقع.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"تفعيل أو تعطيل حجب عناصر الوسائط الكبيرة لهذا الموقع", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "تم منع الطلبات", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"تفعيل أو تعطيل التصفية الجمالية لهذا الموقع", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "على هذه الصفحة", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"تبديل حجب الخطوط البعيدة لهذا الموقع", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} أو {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"القواعد العامة: هذا العمود يتعلق بالقواعد التي تنطبق على جميع الموقع.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "منذ التنصيب", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"القواعد الموضعية: هذا العمود يتعلق بالقواعد التي تنطبق فقط على الموقع المزار حاليا.\nالقواعد الموضعية تحل محل القواعد العامة.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "أو", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"إضغط لحفظ التغييرات بشكل دائم.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "محجوب على هذه الصفحة", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"إضغط لتعيد التغييرات للوضع السابِق.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "حُجِب منذ التنصيب", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"كل", - "description":"" + "popupDomainsConnected_v2": { + "message": "النطاقات المتصلة", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"صور", - "description":"" + "popupTipDashboard": { + "message": "إضغط لفتح لوحة التحكم", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"جهة خارجية", - "description":"" + "popupTipZapper": { + "message": "دخول وضع تحديد العناصر السريع", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"جهة خارجية ستايل\/صور", - "description":"" + "popupTipPicker": { + "message": "دخول وضع تحديد العناصر", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"نصوص برمجة بين السطور", - "description":"" + "popupTipLog": { + "message": "إفتح سجل طلبات الشبكة", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"سكربتات من الطرف الاول", - "description":"" + "popupTipReport": { + "message": "الإبلاغ عن مشكلة في هذا الموقع", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"سكربتات من طرف خارجي", - "description":"" + "popupTipNoPopups": { + "message": "تفعيل أو تعطيل النوافذ منبثقة لهذا الموقع", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"إطارات من طرف خارجي", - "description":"" + "popupTipNoPopups1": { + "message": "اضغط لحجب جميع النوافذ المنبثقة لهذا الموقع", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"النطاقات الملموسة", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "أضغط للوقف منع جميع النوافذ المنبثقة لهذا الموقع", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} من {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "تفعيل أو تعطيل حجب عناصر الوسائط الكبيرة لهذا الموقع", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"إنشاء", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "اضغط لحجب عناصر الوسائط الكبيرة لهذا الموقع", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"اختار", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "أضغط للوقف منع عناصر الوسائط الكبيرة لهذا الموقع", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"خروج", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "تفعيل أو تعطيل الفلترة التجميلية لهذا الموقع", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"معاينة", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "اضغط لتعطيل الفلترة التجميلية لهذا الموقع", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"فلاتر النت", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "اضغط لتشغيل الفلترة التجميلية لهذا الموقع", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"فلاتر تجميليه", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "تفعيل أو تعطيل حجب الخطوط الخارجية لهذا الموقع", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"إضغط، إضغط مع Ctrl", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "أضغط لحجب الخطوط الخارجية لهذا الموقع", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"أحجب العنصر", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "أضغط للسماح للخطوط الخارجية لهذا الموقع", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"اخفاء مكان العناصر المحجوبه", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "انقر لتعطيل الجافا سكريبت على هذا الموقع", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"عرض عدد طلبات المحضوره على الايقونه", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "انقر لإلغاء تعطيل الجافا سكريبت على هذا الموقع", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"تعطيل التلميحات", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "نوافذ منبثقة", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"إستخدم لائحة السياق في المكان المناسب", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "عناصر وسائط كبيرة", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"وضع عمى الألوان", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "المرشحات التجميلية", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"تفعيل دعم سحابة التخزين", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "الخطوط الخارجية", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"إظهار الإعدادات المتقدمة (يجب القراءة<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "جافا سكريبت", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"تعطيل الجلب المسبق على الشبكة (لمنع أي اتصال لطلبات الشبكة المحجوبة)", - "description":"English: " + "popupMoreButton_v2": { + "message": "المزيد", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"تعطيل مراجعة الروابط التشعبية", - "description":"English: " + "popupLessButton_v2": { + "message": "أقل", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"منع WebRTC من كشف عنوان الـ IP المحلي", - "description":"English: " + "popupTipGlobalRules": { + "message": "القواعد العامة: هذا العمود يتعلق بالقواعد التي تنطبق على جميع الموقع.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"السلوك الإفتراضي", - "description":"" + "popupTipLocalRules": { + "message": "الشروط المؤقتة: هذا العمود يتعلق بالقواعد التي تنطبق فقط على الموقع المزار حاليا.\nالشروط المؤقتة تحل محل الشروط العامة.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"هذه السلوكيات الإفتراضية يمكن إستبدالها في كل حالة", - "description":"" + "popupTipSaveRules": { + "message": "إضغط لحفظ التغييرات بشكل دائم.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"تعطيل الفلترة التجميلية", - "description":"" + "popupTipRevertRules": { + "message": "إضغط لإعادة التغييرات للوضع السابق.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"حجب عناصر الوسائط ذات الحجم أكبر من {{input:number}} كيلو بايت", - "description":"" + "popupAnyRulePrompt": { + "message": "الكل", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"منع الخطوط البعيدة", - "description":"" + "popupImageRulePrompt": { + "message": "الصور", + "description": "" }, - "settingsStorageUsed":{ - "message":"المساحة المستخدمة: {{value}} بايت", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "جهة خارجية", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"آخر إسترجاع:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "كود CSS/صورة من مصدر خارجي", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"آخر نسخ إحتياطي:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "نصوص برمجة بين السطور", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} من فلاتر الشبكه + {{cosmeticFilterCount}} فلاتر تجميليه:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "سكربتات من الطرف الاول", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} تم استعماله من {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "سكربتات من طرف خارجي", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"تحديث تلقائي للستات الفلاتر", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "إطارات من طرف خارجي", + "description": "" }, - "3pUpdateNow":{ - "message":"حدث الان", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "النطاقات المتصلة", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"نظف جميع المخابئ", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} من {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"تحليل وتطبيق فلاتر التجميليه", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "الإصدار", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      هذا الخيار يمكّن من تحليل و تطبيق فلاتر متطابقة مع فلاتر ”إخفاء العناصر“ لتطبيق آدبلوك بلس<\/a>. هذه الفلاتر جماليّة بالأساس، تهدف إلى إخفاء عناصر في صفحة الواب، و اللتي تعتبر إزعاجا بصريّا، قد لا يتمكّن محرّك فلاتر الرّوابط من كشفها و صدّها.<\/p>

      تفعيل هذا الخيار من شأنه زيادة أثر الذّاكرة uBlock₀<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "برنامَج نصي", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignore generic cosmetic filters", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "إطار", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites.

      Though handled efficiently by uBlock₀, generic cosmetic filters may still contribute measurable memory and CPU overhead on some web pages, especially for large and long-lived ones.

      Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters, and also lower the memory footprint of uBlock₀ itself.

      It is recommended to enable this option on less powerful devices.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "إنشاء", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"قائمة المواقع المحجوبة", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "اختار", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"حفظ التغيرات", - "description":"English: Apply changes" + "pickerQuit": { + "message": "خروج", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"اعلانات", - "description":"English: Ads" + "pickerPreview": { + "message": "معاينة", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"خصوصيه", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "فلاتر الشبكة", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"مواقع مصابه او تحتوي على فايروسات", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "فلاتر تجميلية", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"مواقع الاجتماعيه", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "إضغط، إضغط مع Ctrl", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"متعددة الأغراض", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "حجب العنصر...", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"المناطق واللغات", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "اخفاء مكان العناصر المحجوبه", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"مخصصه", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "عرض عدد طلبات المحضوره على الايقونه", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"رابط واحد كل سطر. روابط التي تحتوي على ‘!’ سوف يتم تجاهلها . الروابط الغير صحيحه سوف ايضاً تجاهلها .", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "تعطيل التلميحات", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"تحليل", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "إستخدم لائحة السياق في المكان المناسب", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"مسح الكاش ", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "وضع عمى الألوان", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"يوجد اصدار جديد", - "description":"English: new version available" + "settingsAppearance": { + "message": "مظهر", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"قد يكون قديم ولا يعمل ", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "السمة", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"آخر تحديث: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "لون التمييز المخصص", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"كل سطر يمكن ان يتحمل على فلتر واحد. يمكن ان يكون الفلتر رابط موقع او فلتر متعارف مع نظام AdBlock Plus. روابط التي تحتوي على ‘!’ سوف يتم تجاهلها.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "تفعيل دعم سحابة التخزين", + "description": "" }, - "1pImport":{ - "message":"استيراد", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "أنا مستخدم ذو خبرة (قراءة إجبارية)", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"تصدير", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "تعطيل الجلب المسبق على الشبكة (لمنع أي اتصال لطلبات الشبكة المحجوبة)", + "description": "English: " }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "تعطيل مراجعة الروابط التشعبية", + "description": "English: " }, - "1pApplyChanges":{ - "message":"حفظ التغيرات", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "منع WebRTC من كشف عنوان الـ IP المحلي", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"قواعد دائمة", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "السلوك الإفتراضي", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"قواعد مؤقتة", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "هذه السلوكيات الإفتراضية يمكن إستبدالها في كل حالة", + "description": "" }, - "rulesRevert":{ - "message":"إلغاء", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "تعطيل الفلترة التجميلية", + "description": "" }, - "rulesCommit":{ - "message":"تطبق", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "احجب عناصر الوسائط الأكبر من {{input}} كيلو بايت", + "description": "" }, - "rulesEdit":{ - "message":"تعديل", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "منع الخطوط البعيدة", + "description": "" }, - "rulesEditSave":{ - "message":"حفظ", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "تعطيل الجافا سكريبت", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"إلغاء", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "حظر تقارير الـ CSP", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"الاستيراد من ملف...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "فك الأسماء المتعارف عليها", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"تصدير إلى ملف", - "description":"" + "settingsAdvanced": { + "message": "متقدم", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "ميزات مناسبة فقط للمستخدمين التقنيين", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"قائمة قواعد الفلترات الديناميكية الخاصة بك.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "الإعدادات المتقدمة", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"صياغة القواعد: مصدر نوع وجهة العمل<\/code> (تعليمات كاملة<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "آخر إسترجاع:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"القائمة الخاصه التي سوف يتم تجاهلها من قبل uBlock₀. رابط واحد كل سطر.\nالروابط الغير صحيحه سوف يتم تجاهلها.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "آخر نسخ إحتياطي:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"استيراد", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} من فلاتر الشبكه + {{cosmeticFilterCount}} فلاتر تجميليه:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"تصدير", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} تم استعماله من {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "تحديث تلقائي للستات الفلاتر", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"حفظ التغيرات", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "حدث الان", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"النوع", - "description":"English: Type" + "3pPurgeAll": { + "message": "نظف جميع المخابئ", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"الموقع", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "تحليل وتطبيق فلاتر التجميليه", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"رابط الموقع", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "التشريحات التجميلية تعمل لإزالة العناصر في صفحة الويب التي تعتبر إزعاج بصريًا و تلك التي لا يمكن حجبها عن طريق محركات التشريحات القائمة على طلبات الشبكة.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"فلتر", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "تجاهل الفلاتر التجميلية العامة", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"كل", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "التشريحات التجميلية العمومية هي الفلاتر التجميلية التي تنطبق على كل مواقع الإنترنت. تفعيل هذا الخيار سوف يترك مساحة أقل من الذاكرة و قوة المعالجة للاستعمال من قبل صفحات الويب كنتيجة لمعالجة التشريحات التجميلية العمومية.\n\nمن الأفضل تفعيل هذا الخيار على الأجهزة الأقل قوة.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"خلف الكواليس", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "تعليق نشاط الشبكة حتى يتم تحميل كافة قوائم عوامل التشريحات", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"فلتر سجل الإدخالات", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "قائمة المواقع المحجوبة", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"العدد الأقصى للإدخالات في السجلات", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "حفظ التغيرات", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"حالة:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "مدمج", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"نوع:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "اعلانات", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"فلترات الروابط الديناميكية", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "خصوصيه", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"فلترة ثابتة", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "مواقع مصابة أو تحتوي على فايروسات", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} طلبات شبكة {{type}} {{br}}اللتي تحتوي عنوان الرابط {{url}} {{br}}من المصدر {{origin}},{{br}}{{importance}} هناك فلتر استثناء مطابق.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "أدوات مواقع التواصل الاجتماعية", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"حجب", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "اشعارات ملفات تعريف الارتباط", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"سماح", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "عناصر مزعجة", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"نوع “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "متعددة الأغراض", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"أي نوع", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "المناطق واللغات", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"من “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "مخصصه", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"في أي مكان", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "استرجاع…", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"باستثناء إذا", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "رابط واحد في كل سطر. الروابط الغير الصحيحة سوف يتم تجاهلها بصمت.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"حتى لو", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "متقادم.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"فلتر ثابت {{filter}} موجود على:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "اظهر المحتوى", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"سجل التغيير", - "description":"English: Change log" + "3pLastUpdate": { + "message": "آخر تحديث: {{ago}}. \nانقر لفرض التحديث.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"الويكي (Wiki)", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "جار التحديث…", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Support", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "حدث خطأ في الشبكة منع تحديث المورد.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"اكواد البرنامج (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "لا تضف مرشحات من مصادر غير موثوقة.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"المساهمين", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "مكّن تشريحاتي المخصصة", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"النسخ الإحتياطي لملف", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "السماح بالتشريحات المخصصة التي تتطلب الثقة", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"إحتياط-ublock-الخاص-بي_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "استورد وألحق…", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"إسترجع من الملف...", - "description":"English: Restore from file..." + "1pExport": { + "message": "تصدير", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"إعادة الضبط للوضع الافتراضي...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"كل إعداداتك سوف يتم كتابتها بإستعمال البيانات التي تم نسخها إحتياطيا على {{time}}، و سيعيد uBlock₀ التشغيل.\n\nأعد كتابة كل الإعدادات الموجود بإستخدام البيانات التي تم نسخها إحتياطيا؟", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "حفظ التغيرات", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"تعذر قراءة البيانات أو إنها غير صالحة", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "قواعد دائمة", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"كل إعداداتك سيتم إلغائها، و سيتم إعادة تشغيل \"uBlock₀\".\n\n\nإعادة ضبط \"uBlock₀\" على الإعدادات الأصلية؟", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "قواعد مؤقتة", + "description": "header" }, - "errorCantConnectTo":{ - "message":"ليس بالإمكان الإتصال بـ {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "إلغاء", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀ : إضافة الرابط التالي للقوائم الفلترات الخاصة لك؟\n\nعنوان : \"{{title}}\"\nرابط : {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "تطبق", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"منذ دقيقة", - "description":"English: a minute ago" + "rulesEdit": { + "message": "تعديل", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"منذ {{value}} دقيقة", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "حفظ", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"منذ ساعة", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "إلغاء", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"منذ {{value}} ساعات", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "استورد من ملف…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"قبل يوم واحد", - "description":"English: a day ago" + "rulesExport": { + "message": "تصدير إلى ملف", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"منذ {{value}} أيام", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"عرض لوحة التحكم", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "قائمة قواعد الفلترات الديناميكية الخاصة بك.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"عرض سجل الإتصال بالشبكة", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "صياغة القواعد: مصدر نوع وجهة العمل (تعليمات كاملة).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"تعطيل", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "الفرز:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock₀ منع الصفحة التالية من التحميل:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "نوع القاعدة", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"بسبب الفلتر التالي", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "المصدر", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"دون معلمات", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "الوجهة", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"موجود في:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "تحدد توجيهات المواقع الموثوقة الصفحات التي يجب تعطيل uBlock Origin عليها. إدخال واحد في كل سطر.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"العودة للخلف", - "description":"English: Go back" + "whitelistImport": { + "message": "استورد وألحق…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"أغلق هذه النافذة", - "description":"English: Close this window" + "whitelistExport": { + "message": "صدّر…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"تعطيل الحجب الصارم على {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"مؤقتا", - "description":"English: Temporarily" + "whitelistApply": { + "message": "حفظ التغيرات", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"بشكل دائم", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "النوع", + "description": "English: Type" }, - "cloudPush":{ - "message":"التصدير إلى سحابة التخزين", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "الموقع", + "description": "English: Domain" }, - "cloudPull":{ - "message":"إستيراد من سحابة التخزين", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "رابط الموقع", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"إستيراد التخزين من السحابية و دمجه مع الإعدادات الحالية", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "فلتر", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "كل", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"إسم هذا الجهاز:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "بلا تبويب", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"تطبيق", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "علامة التبويب الحالية", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"إلغاء", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "أعد تحميل محتوى علامة التبويب", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"بايت", - "description":"" + "loggerDomInspectorTip": { + "message": "بدّل فاحص DOM", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"السماح مؤقتا لعناصر الوسائط كبيرة", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "تفعيل أو تعطيل اللوحة المنبثقة", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"يجب أن يكون هذا الإدخال آخر واحد", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "ويكي يو بلوك أوريجين: حافظ السجلات", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "امسح المُسجّل", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "أوقف المُسجّل مؤقتا (استبعاد كل البيانات الواردة)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "استئناف حافظ السجلات", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "بدّل ترشيح المُسجّل", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "رشّح محتوى السجل", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "خيارات التصفية للمسجّل", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "ليس", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "محظور", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "مسموح", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "معدّل", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "أول طرف ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "ثالث-طرف ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "تفاصيل", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "المرشّح", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "قائمة المرشحات", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "قاعدة", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "السياق", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "سياق الجدر", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "عديمة الطرف", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "النوع", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "قاعدة URL", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "حالة:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "نوع:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "فلتر ثابت", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} طلبات شبكة {{type}} {{br}}اللتي تحتوي عنوان الرابط {{url}} {{br}}من المصدر {{origin}},{{br}}{{importance}} هناك فلتر استثناء مطابق.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "حجب", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "سماح", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "نوع “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "أي نوع", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "من “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "من أي مكان", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "باستثناء إذا", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "حتى لو", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "تصفية ثابتة {{filter}} موجود في:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "الترشيح الثابت لا يوجد في أي من قوائم التشريحات المفعلة", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "مدخلات المُسجّل التي لا تطابق أيا من المعايير ستتجاهل تلقائيا:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "أبق على المدخلات في آخر {{input}} دقيقة", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "أبقِ بحد أقصى على {{input}} تحميلات للصفحة في كل لسان", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "أبق بحد أقصى على {{input}} مدخلات في كل لسان", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "استخدم {{input}} من السطور لكل مدخلة في الوضع الرأسي", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "أخفِ الأعمدة:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} الوقت", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} المرشِّح\\القاعدة", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} السياق", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} الجهة", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "قائمة", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "جدول", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "واضح", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "افتح", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "إنشاء تقرير جديد", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "العثور على تقارير مماثلة", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "وثائق", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "اقرأ الوثائق الموجودة في uBlock/wiki للتعرف على جميع ميزات uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "الأسئلة والدعم", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "يتم توفير إجابات للأسئلة وأنواع أخرى من دعم المساعدة على subreddit /r/uBlockOriginuBlockOrigin/uAssets issue tracker. يتطلب حساب GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "هام: تجنب استخدام أدوات حظر أخرى ذات أغراض مماثلة مع uBlock Origin، لأن ذلك قد يتسبب في مشكلات في التصفية على مواقع ويب معينة.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "نصائح: تأكد من تحديث قوائم التصفية. المُسجِّل هو الأداة الأساسية لتشخيص المشكلات المتعلقة بالفلتر.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "تقرير الأخطاء", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "الإبلاغ عن المشكلات المتعلقة بيو بلوك أوريجين نفسه إلى uBlockOrigin/uBlock-issue أداة تعقب المشكلات. يتطلب حساب GitHub", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "رأس قسم \"معلومات استكشاف الأخطاء وإصلاحها\" في جزء الدعم", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "فيما يلي معلومات فنية قد تكون مفيدة عندما يحاول المتطوعون مساعدتك في حل مشكلة ما.فيما يلي معلومات فنية قد تكون مفيدة عندما يحاول المتطوعون مساعدتك في حل مشكلة ما. ", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "الإبلاغ عن مشكلة في عوامل التصفية", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "لتجنب إثقال كاهل المتطوعين بتقارير مكررة، يرجى التحقق من عدم الإبلاغ عن المشكلة بالفعل.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "يتم تحديث قوائم الفلتر بشكل يومي. تحقق أن مشكلتك لم يتم مواجهتها في أحدث قوائم الفلتر.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "تحقق من أن المشكلة ما تزال موجودة بعد إعادة تحميل صفحة الويب التي بها إشكالية.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "عنوان صفحة الويب:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "صفحة الويب…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- إختر خيارًا --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "ٌيُظهر الإعلانات أو بقايا الإعلانات", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "به تراكبات أو مضايقات أخرى", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "يكتشف يو بلوك أوريجين", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "توجد مشكلات متعلقة بالخصوصية", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "أعطال عند تمكين uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "افتح التبويبات أو النوافذ التي ليس مرغوبًا بها", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "يؤدي إلى البرامج الضارة والإحتيال", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "ضع علامة على صفحة الويب بـ ”NSFW“ (”غير آمن للعمل“)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "سياسة الخصوصية", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "سجل التغييرات", + "description": "" + }, + "aboutCode": { + "message": "اكواد البرنامج (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "المساهمين", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "شيفرة المصدر", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "الترجمات", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "القوائم المرشحة", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "الإعتماديات الخارجية (متوافقة مع GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "قوائم التصفية الخاصة بـ uBO مستضافة مجانًا على CDNs التالية:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "يتم استخدام CDN الذي تم اختياره عشوائيًا عند الحاجة إلى تحديث قائمة عوامل التصفية.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "النسخ الإحتياطي إلى ملف…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "إحتياط-ublock-الخاص-بي_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "إسترجع من الملف…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "إعادة الضبط للوضع الافتراضي...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "كل إعداداتك سوف يتم كتابتها بإستعمال البيانات التي تم نسخها إحتياطيا على {{time}}، و سيعيد uBlock₀ التشغيل.\n\nأعد كتابة كل الإعدادات الموجود بإستخدام البيانات التي تم نسخها إحتياطيا؟", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "تعذر قراءة البيانات أو إنها غير صالحة", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "كل إعداداتك سيتم إلغائها، و سيتم إعادة تشغيل \"uBlock₀\".\n\n\nإعادة ضبط \"uBlock₀\" على الإعدادات الأصلية؟", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "خطأ في الشبكة: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "اشترك", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "منذ دقيقة", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "منذ {{value}} دقائق", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "منذ ساعة", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "منذ {{value}} ساعات", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "قبل يوم واحد", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "منذ {{value}} أيام", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "عرض لوحة التحكم", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "عرض سجل الإتصال بالشبكة", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "تعطيل", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "الصفحة محجوبة", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock₀ منع الصفحة التالية من التحميل:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "بسبب الفلتر التالي", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "دون معلمات", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "موجود في:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "العودة للخلف", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "أغلق هذه النافذة", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "لا تحذرني مرة أخرى بشأن هذا الموقع", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "تعطيل الحجب الصارم على {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "مؤقتا", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "بشكل دائم", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "تقدّم", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "الصفحة المحظورة تريد إعادة توجيهك إلى موقع آخر. إذا اخترت المتابعة، فسوف تنتقل مباشرة إلى: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "السبب:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "ضار", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "متتبع", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "سيئ السمعة", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "التصدير إلى سحابة التخزين", + "description": "tooltip" + }, + "cloudPull": { + "message": "إستيراد من سحابة التخزين", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "إستيراد التخزين من السحابية و دمجه مع الإعدادات الحالية", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "إسم هذا الجهاز:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "تحذير! تغيير هذه الإعدادات المتقدمة يكون على مسؤوليتك.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "تطبيق", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "حفظ التغييرات", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "إلغاء", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "بايت", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "احظر العنصر في الإطار…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "اشترك في قائمة التصفية…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "السماح مؤقتا لعناصر الوسائط كبيرة", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "عرض كود المصدر…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "أدخِل اختصار", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "بدل حالة التمرير الموصَد", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "نسخ إلى الحافظة", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "اختر الكل", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "تبديل تصفية مستحضرات التجميل", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "تعطيل جافا سكريبت", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "وضع الحظر المتراخي", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "مساحة التخزين المستخدمة: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "كيلوبايت", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "ميجابايت", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "جيجابايت", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "اضغط للتحميل", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "أخطاء: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "لا يمكن الفلترة بشكل صحيح عند تشغيل المتصفح.\nقم بتحديث الصفحة للتأكد من الفلترة بشكل صحيح.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "يجب أن يكون هذا الإدخال آخر واحد", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/az/messages.json b/src/_locales/az/messages.json new file mode 100644 index 0000000000000..f09897ff5a744 --- /dev/null +++ b/src/_locales/az/messages.json @@ -0,0 +1,1314 @@ +{ + "extName": { + "message": "uBlock Origin", + "description": "extension name." + }, + "extShortDesc": { + "message": "Axır ki, prosessor və yaddaş yükünü azaldan səmərəli bir əngəlləyici var.", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "dashboardName": { + "message": "uBlock₀ — İdarəetmə paneli", + "description": "English: uBlock₀ — Dashboard" + }, + "dashboardUnsavedWarning": { + "message": "Xəbərdarlıq! Saxlamadığınız dəyişikliklər var", + "description": "A warning in the dashboard when navigating away from unsaved changes" + }, + "dashboardUnsavedWarningStay": { + "message": "Qal", + "description": "Label for button to prevent navigating away from unsaved changes" + }, + "dashboardUnsavedWarningIgnore": { + "message": "Əhəmiyyət vermə", + "description": "Label for button to ignore unsaved changes" + }, + "settingsPageName": { + "message": "Tənzimləmələr", + "description": "appears as tab name in dashboard" + }, + "3pPageName": { + "message": "Filtr siyahıları", + "description": "appears as tab name in dashboard" + }, + "1pPageName": { + "message": "Filtrlərim", + "description": "appears as tab name in dashboard" + }, + "rulesPageName": { + "message": "Qaydalarım", + "description": "appears as tab name in dashboard" + }, + "whitelistPageName": { + "message": "Etibarlı saytlar", + "description": "appears as tab name in dashboard" + }, + "shortcutsPageName": { + "message": "Qısayollar", + "description": "appears as tab name in dashboard" + }, + "statsPageName": { + "message": "uBlock₀ — Jurnal", + "description": "Title for the logger window" + }, + "aboutPageName": { + "message": "Haqqında", + "description": "appears as tab name in dashboard" + }, + "supportPageName": { + "message": "Dəstək", + "description": "appears as tab name in dashboard" + }, + "assetViewerPageName": { + "message": "uBlock₀ — Resurslar", + "description": "Title for the asset viewer page" + }, + "advancedSettingsPageName": { + "message": "Qabaqcıl tənzimləmələr", + "description": "Title for the advanced settings page" + }, + "popupPowerSwitchInfo": { + "message": "Klikləmə: Bu sayt üçün uBlock₀-u fəallaşdır/sıradan çıxart.\n\nCtrl+klikləmə: Yalnız bu səhifə üçün uBlock₀-u sıradan çıxart.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + }, + "popupPowerSwitchInfo1": { + "message": "Bu sayt üçün uBlock₀-u sıradan çıxartmaq üçün klikləyin.\n\nYalnız bu səhifə üçün uBlock₀-u sıradan çıxartmaq üçün Ctrl+klikləyin.", + "description": "Message to be read by screen readers" + }, + "popupPowerSwitchInfo2": { + "message": "Bu saytda uBlock₀-u fəallaşdırmaq üçün klikləyin.", + "description": "Message to be read by screen readers" + }, + "popupBlockedRequestPrompt": { + "message": "tələb(request) bloklandı", + "description": "English: requests blocked" + }, + "popupBlockedOnThisPagePrompt": { + "message": "bu səhifədə", + "description": "English: on this page" + }, + "popupBlockedStats": { + "message": "{{count}} və ya {{percent}}%", + "description": "Example: 15 (13%)" + }, + "popupBlockedSinceInstallPrompt": { + "message": "quraşdırmadan bəri", + "description": "English: since install" + }, + "popupOr": { + "message": "və ya", + "description": "English: or" + }, + "popupBlockedOnThisPage_v2": { + "message": "Bu səhifədə əngəllənən", + "description": "For the new mobile-friendly popup design" + }, + "popupBlockedSinceInstall_v2": { + "message": "Quraşdırmadan bəri əngəllənən", + "description": "For the new mobile-friendly popup design" + }, + "popupDomainsConnected_v2": { + "message": "Bağlantı qurulmuş domenlər", + "description": "For the new mobile-friendly popup design" + }, + "popupTipDashboard": { + "message": "İdarəetmə panelini aç", + "description": "English: Click to open the dashboard" + }, + "popupTipZapper": { + "message": "Element silmə rejiminə keç", + "description": "Tooltip for the element-zapper icon in the popup panel" + }, + "popupTipPicker": { + "message": "Element seçmə rejiminə keç", + "description": "English: Enter element picker mode" + }, + "popupTipLog": { + "message": "Jurnalı aç", + "description": "Tooltip used for the logger icon in the panel" + }, + "popupTipReport": { + "message": "Bu veb-saytdakı problemi bildir", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipNoPopups": { + "message": "Bu sayt üçün bütün açılan pəncələri aç/bağla", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups1": { + "message": "Bu saytda bütün açılan pəncərələri əngəlləmək üçün kliklə", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2": { + "message": "Bu saytdakı bütün açılan pəncələri artıq əngəlləməmək üçün kliklə", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoLargeMedia": { + "message": "Bu saytda böyük media elemetlərini əngəlləməyi aç/bağla", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia1": { + "message": "Bu saytda böyük media elementlərini əngəlləmək üçün düyməyə basın", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2": { + "message": "Bu saytda böyük media elementlərini daha əngəlləməmək üçün düyməyə basın", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoCosmeticFiltering": { + "message": "Bu saytda kosmetik filtrləri qoş/söndür", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering1": { + "message": "Bu saytda kosmetik filtrləri söndürmək üçün düyməyə basın", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2": { + "message": "Bu saytda kosmetik filtrləri qoşmaq üçün düyməyə basın", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoRemoteFonts": { + "message": "Bu saytda uzaqdan idarə olunan şriftləri qoş/söndür", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts1": { + "message": "Bu saytda uzaqdan idarə olunan şriftləri əngəlləmək üçün düyməyə basın", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts2": { + "message": "Bu saytda uzaqdan idarə olunan şriftləri daha əngəlləməmək üçün düyməyə basın", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoScripting1": { + "message": "Bu saytda JavaScript-i sıradan çıxartmaq üçün kliklə", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupTipNoScripting2": { + "message": "Bu saytda JavaScript-i artıq əngəlləməmək üçün düyməyə basın", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupNoPopups_v2": { + "message": "Peyda olan pəncərələr", + "description": "Caption for the no-popups per-site switch" + }, + "popupNoLargeMedia_v2": { + "message": "Böyük ölçülü media elementləri", + "description": "Caption for the no-large-media per-site switch" + }, + "popupNoCosmeticFiltering_v2": { + "message": "Kosmetik filtrləmə", + "description": "Caption for the no-cosmetic-filtering per-site switch" + }, + "popupNoRemoteFonts_v2": { + "message": "Kənar şriftlər", + "description": "Caption for the no-remote-fonts per-site switch" + }, + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" + }, + "popupMoreButton_v2": { + "message": "Daha çox", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton_v2": { + "message": "Daha az", + "description": "Label to be used to hide popup panel sections" + }, + "popupTipGlobalRules": { + "message": "Qlobal qaydalar: bu sütun bütün saytlarda tətbiq olunan qaydalar üçündür.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." + }, + "popupTipLocalRules": { + "message": "Lokal qaydalar: bu sütun yalnız bu saytda tətbiq olunan qaydalar üçündür.\nLokal qaydalar qlobal qaydalardan üstün tutulur.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." + }, + "popupTipSaveRules": { + "message": "Dəyişiklikləri daimi etmək üçün klikləyin.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." + }, + "popupTipRevertRules": { + "message": "Dəyişiklikləri geri qaytarmaq üçün düyməyə basın.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + }, + "popupAnyRulePrompt": { + "message": "hamısı", + "description": "" + }, + "popupImageRulePrompt": { + "message": "təsvirlər", + "description": "" + }, + "popup3pAnyRulePrompt": { + "message": "3-cü tərəf", + "description": "" + }, + "popup3pPassiveRulePrompt": { + "message": "3-cü tərəf CSS/təsvirlər", + "description": "" + }, + "popupInlineScriptRulePrompt": { + "message": "sətiriçi skriptlər", + "description": "" + }, + "popup1pScriptRulePrompt": { + "message": "1-ci tərəf skriptlər", + "description": "" + }, + "popup3pScriptRulePrompt": { + "message": "3-cü tərəf skriptlər", + "description": "" + }, + "popup3pFrameRulePrompt": { + "message": "3-cü tərəf frame-lər", + "description": "" + }, + "popupHitDomainCountPrompt": { + "message": "qoşulmuş domen", + "description": "appears in popup" + }, + "popupHitDomainCount": { + "message": "{{count}} / {{total}}", + "description": "appears in popup" + }, + "popupVersion": { + "message": "Versiya", + "description": "Example of use: Version 1.26.4" + }, + "popup3pScriptFilter": { + "message": "skript", + "description": "Appears as an option to filter out firewall rows" + }, + "popup3pFrameFilter": { + "message": "çərçivə", + "description": "Appears as an option to filter out firewall rows" + }, + "pickerCreate": { + "message": "Yarat", + "description": "English: Create" + }, + "pickerPick": { + "message": "Seç", + "description": "English: Pick" + }, + "pickerQuit": { + "message": "Çıxış", + "description": "English: Quit" + }, + "pickerPreview": { + "message": "Önbaxış", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + }, + "pickerNetFilters": { + "message": "Şəbəkə filtrləri", + "description": "English: header for a type of filter in the element picker dialog" + }, + "pickerCosmeticFilters": { + "message": "Kosmetik filtrlər", + "description": "English: Cosmetic filters" + }, + "pickerCosmeticFiltersHint": { + "message": "Klik, Ctrl-klik", + "description": "English: Click, Ctrl-click" + }, + "pickerContextMenuEntry": { + "message": "Elementi əngəllə...", + "description": "An entry in the browser's contextual menu" + }, + "settingsCollapseBlockedPrompt": { + "message": "Əngəllənmiş elementlərin tutduğu yeri gizlə", + "description": "English: Hide placeholders of blocked elements" + }, + "settingsIconBadgePrompt": { + "message": "Əngəllənən tələb sayını nişan üstündə göstər", + "description": "English: Show the number of blocked requests on the icon" + }, + "settingsTooltipsPrompt": { + "message": "Alət izahlarını söndür", + "description": "A checkbox in the Settings pane" + }, + "settingsContextMenuPrompt": { + "message": "Uyğun olduqda kontekst menüsündən istifadə et", + "description": "English: Make use of context menu where appropriate" + }, + "settingsColorBlindPrompt": { + "message": "Rəng seçmə qabiliyyəti olmayanlar üçün rəngləmə rejimi", + "description": "English: Color-blind friendly" + }, + "settingsAppearance": { + "message": "Görünüş", + "description": "Section for controlling user interface appearance" + }, + "settingsThemeLabel": { + "message": "Mövzu", + "description": "Label for checkbox to enable a custom dark theme" + }, + "settingsThemeAccent0Label": { + "message": "Xüsusi vurğu rəngi", + "description": "Label for checkbox to pick an accent color" + }, + "settingsCloudStorageEnabledPrompt": { + "message": "Bulud yaddaşı dəstəyini işə sal", + "description": "" + }, + "settingsAdvancedUserPrompt": { + "message": "Mən təcrübəli istifadəçiyəm (mütləq oxuyun)", + "description": "Checkbox to let user access advanced, technical features" + }, + "settingsPrefetchingDisabledPrompt": { + "message": "Erkən yükləməni dayandır (əngəllənmiş şəbəkə sorğuları üzrə qoşulmalara yol verməmək üçün)", + "description": "English: " + }, + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Hiperkeçidlərin yoxlanılmasını dayandır", + "description": "English: " + }, + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Lokal IP-ünvanların WebRTC vasitəsilə sızmasını əngəllə", + "description": "English: " + }, + "settingPerSiteSwitchGroup": { + "message": "Standart davranış", + "description": "" + }, + "settingPerSiteSwitchGroupSynopsis": { + "message": "Bu standart parametrlər hər bir sayt üçün ayrıca qeyd oluna bilər", + "description": "" + }, + "settingsNoCosmeticFilteringPrompt": { + "message": "Kosmetik filtrləri söndür", + "description": "" + }, + "settingsNoLargeMediaPrompt": { + "message": "{{input}} KB-dan artıq olan media elementlərini əngəllə", + "description": "" + }, + "settingsNoRemoteFontsPrompt": { + "message": "Uzaqdan idarə olunan şriftləri əngəllə", + "description": "" + }, + "settingsNoScriptingPrompt": { + "message": "JavaScript-i Əngəllə", + "description": "The default state for the per-site no-scripting switch" + }, + "settingsNoCSPReportsPrompt": { + "message": "CSP hesabatlarını əngəllə", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" + }, + "settingsUncloakCnamePrompt": { + "message": "Canonical adları ortaya çıxarın", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" + }, + "settingsAdvanced": { + "message": "Təkmil", + "description": "Section for controlling advanced-user settings" + }, + "settingsAdvancedSynopsis": { + "message": "Yalnız texniki istifadəçilərə uyğun parametrlər", + "description": "Description of section controlling advanced-user settings" + }, + "settingsAdvancedUserSettings": { + "message": "əlavə parametrlər", + "description": "For the tooltip of a link which gives access to advanced settings" + }, + "settingsLastRestorePrompt": { + "message": "Son bərpa əməliyyatının tarixi:", + "description": "English: Last restore:" + }, + "settingsLastBackupPrompt": { + "message": "Son ehtiyat nüsxəsinin tarixi:", + "description": "English: Last backup:" + }, + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} şəbəkə filtri + {{cosmeticFilterCount}} kosmetik filtr:", + "description": "Appears at the top of the _3rd-party filters_ pane" + }, + "3pListsOfBlockedHostsPerListStats": { + "message": "{{total}} ədəddən {{used}} ədədi istifadə olundu", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "3pAutoUpdatePrompt1": { + "message": "Filtr siyahılarını avtomatik yenilə", + "description": "A checkbox in the _3rd-party filters_ pane" + }, + "3pUpdateNow": { + "message": "Yenilə", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pPurgeAll": { + "message": "Bütün keşləri sil", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pParseAllABPHideFiltersPrompt1": { + "message": "Kosmetik filtrləri təhlil və tətbiq et", + "description": "English: Parse and enforce Adblock+ element hiding filters." + }, + "3pParseAllABPHideFiltersInfo": { + "message": "Kosmetik filtrlər bir veb səhifəsində görüntü rahatsızlığına səbəb olan və şəbəkə sorğularının filtrlənməsi vasitəsilə əngəllənə bilməyən elementləri gizlətmək üçün istifadə olunur.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + }, + "3pIgnoreGenericCosmeticFilters": { + "message": "Ümumi kosmetik filtrləri nəzərə alma", + "description": "This will cause uBO to ignore all generic cosmetic filters." + }, + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Ümumi kosmetik filtrlərin bütün veb-saytlarda istifadəsi nəzərdə tutulur. Bu seçimi etdiyiniz təqdirdə veb-səhifələrdə ümumi kosmetik filtrlərin işlənməsi ilə əlaqədar yaddaşdan istifadə və prosessor yükü azalacaq.\n\nAz güclü cihazlarda bu seçimin aktivləşdirilməsi tövsiyə olunur.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." + }, + "3pSuspendUntilListsAreLoaded": { + "message": "Filter siyahıları yüklənənə kimi şəbəkə fəaliyyətini dayandır", + "description": "A checkbox in the 'Filter lists' pane" + }, + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" + }, + "3pApplyChanges": { + "message": "Dəyişiklikləri tətbiq et", + "description": "English: Apply changes" + }, + "3pGroupDefault": { + "message": "Lokal filtrlər", + "description": "Filter lists section name" + }, + "3pGroupAds": { + "message": "Reklam", + "description": "Filter lists section name" + }, + "3pGroupPrivacy": { + "message": "Məxfilik", + "description": "Filter lists section name" + }, + "3pGroupMalware": { + "message": "Zərərli domenlər", + "description": "Filter lists section name" + }, + "3pGroupSocial": { + "message": "Social widgets", + "description": "Filter lists section name" + }, + "3pGroupCookies": { + "message": "Cookie notices", + "description": "Filter lists section name" + }, + "3pGroupAnnoyances": { + "message": "Zəhlətökən elementlər əleyhinə filtrlər", + "description": "Filter lists section name" + }, + "3pGroupMultipurpose": { + "message": "Çoxməqsədli filtrlər", + "description": "Filter lists section name" + }, + "3pGroupRegions": { + "message": "Bölgələr, dillər", + "description": "Filter lists section name" + }, + "3pGroupCustom": { + "message": "Fərdi", + "description": "Filter lists section name" + }, + "3pImport": { + "message": "Əlavə et...", + "description": "The label for the checkbox used to import external filter lists" + }, + "3pExternalListsHint": { + "message": "Hər sətrdə yalnız bir URL. Yanlış URL-lər xəbərdarlıq edilmədən nəzərə alınmayacaq.", + "description": "Short information about how to use the textarea to import external filter lists by URL" + }, + "3pExternalListObsolete": { + "message": "Köhnəlmişdir.", + "description": "used as a tooltip for the out-of-date icon beside a list" + }, + "3pViewContent": { + "message": "məzmunu nəzərdən keçir", + "description": "used as a tooltip for eye icon beside a list" + }, + "3pLastUpdate": { + "message": "Sonuncu yeniləmə: {{ago}}.\nYeniləmək üçün düyməyə basın.", + "description": "used as a tooltip for the clock icon beside a list" + }, + "3pUpdating": { + "message": "Yenilənir...", + "description": "used as a tooltip for the spinner icon beside a list" + }, + "3pNetworkError": { + "message": "Şəbəkə xətası üzündən yeniləmə mümkün olmadı.", + "description": "used as a tooltip for error icon beside a list" + }, + "1pTrustWarning": { + "message": "Etibarsız mənbələrdən filtrlər əlavə etməyin.", + "description": "Warning against copy-pasting filters from random sources" + }, + "1pEnableMyFiltersLabel": { + "message": "Enable my custom filters", + "description": "Label for the checkbox use to enable/disable 'My filters' list" + }, + "1pTrustMyFiltersLabel": { + "message": "Allow custom filters requiring trust", + "description": "Label for the checkbox use to trust the content of 'My filters' list" + }, + "1pImport": { + "message": "İdxal və əlavə et", + "description": "Button in the 'My filters' pane" + }, + "1pExport": { + "message": "İxrac et", + "description": "Button in the 'My filters' pane" + }, + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" + }, + "1pApplyChanges": { + "message": "Dəyişiklikləri tətbiq et", + "description": "English: Apply changes" + }, + "rulesPermanentHeader": { + "message": "Daimi qaydalar", + "description": "header" + }, + "rulesTemporaryHeader": { + "message": "Müvəqqəti qaydalar", + "description": "header" + }, + "rulesRevert": { + "message": "Geri qaytar", + "description": "This will remove all temporary rules" + }, + "rulesCommit": { + "message": "Təsdiq et", + "description": "This will persist temporary rules" + }, + "rulesEdit": { + "message": "Redaktə", + "description": "Will enable manual-edit mode (textarea)" + }, + "rulesEditSave": { + "message": "Yadda saxla", + "description": "Will save manually-edited content and exit manual-edit mode" + }, + "rulesEditDiscard": { + "message": "Nəzərə alma", + "description": "Will discard manually-edited content and exit manual-edit mode" + }, + "rulesImport": { + "message": "Fayldan götür...", + "description": "" + }, + "rulesExport": { + "message": "Fayla yaz", + "description": "Button in the 'My rules' pane" + }, + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" + }, + "rulesHint": { + "message": "Dinamik filtr qaydalarınızın siyahısı.", + "description": "English: List of your dynamic filtering rules." + }, + "rulesFormatHint": { + "message": "Qaydalar sintaksisi: mənbə təyinat növ əməliyyat (bütün sənədlər).", + "description": "English: dynamic rule syntax and full documentation." + }, + "rulesSort": { + "message": "Sırala:", + "description": "English: label for sort option." + }, + "rulesSortByType": { + "message": "Qayda növü", + "description": "English: a sort option for list of rules." + }, + "rulesSortBySource": { + "message": "Mənbə", + "description": "English: a sort option for list of rules." + }, + "rulesSortByDestination": { + "message": "Hədəf", + "description": "English: a sort option for list of rules." + }, + "whitelistPrompt": { + "message": "İstisnalar siyahısındakı təlimatlar uBlock Origin-in hansı veb-səhifələrdə işləyişinin dayandırılmasını təmin edir. Hər sətirdə yalnız bir təlimat ola bilər. Yanlış təlimatlar xəbərdarlıq edilmədən nəzərə alınmayacaq və şərhə çeviriləcəkdir.", + "description": "A concise description of the 'Trusted sites' pane." + }, + "whitelistImport": { + "message": "İdxal və əlavə et", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExport": { + "message": "İxrac et", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" + }, + "whitelistApply": { + "message": "Dəyişiklikləri tətbiq et", + "description": "English: Apply changes" + }, + "logRequestsHeaderType": { + "message": "Növü", + "description": "English: Type" + }, + "logRequestsHeaderDomain": { + "message": "Domen", + "description": "English: Domain" + }, + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" + }, + "logRequestsHeaderFilter": { + "message": "Filtr", + "description": "English: Filter" + }, + "logAll": { + "message": "Hamısı", + "description": "Appears in the logger's tab selector" + }, + "logBehindTheScene": { + "message": "Tabsız", + "description": "Pretty name for behind-the-scene network requests" + }, + "loggerCurrentTab": { + "message": "Cari tab vərəqi", + "description": "Appears in the logger's tab selector" + }, + "loggerReloadTip": { + "message": "Tab vərəqinin məzmununu yenidən yüklə", + "description": "Tooltip for the reload button in the logger page" + }, + "loggerDomInspectorTip": { + "message": "DOM müfəttişini işə sal/söndür", + "description": "Tooltip for the DOM inspector button in the logger page" + }, + "loggerPopupPanelTip": { + "message": "Peyda olan paneli aç/bağla", + "description": "Tooltip for the popup panel button in the logger page" + }, + "loggerInfoTip": { + "message": "uBlock Origin viki: Logger", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Loggeri təmizlə", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Loggeri dayandır (daxil olan bütün məlumatları rədd et)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Loggeri yenidən işə sal", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Logger filtrləməsini işə sal/dayandır", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "logger qeydlərinin filtrlənməsi", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Logger üçün filtrləmə parametrləri", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Deyil", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "əngəllənmiş", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "icazə verilmiş", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "dəyişdirildi", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "1-ci tərəf resurslar", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "3-cü tərəf resurslar", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Təfsilatlar", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filtr", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Filtr siyahısı", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Qayda", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Məzmun", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Ana məzmun", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Tərəf", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Növü", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL qaydası", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Məzmun:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Növ:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Statik filtr", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "Müvafiq istisna filtri varsa {{importance}},{{br}}URL ünvanı {{url}} {{br}}ilə eyni olan və mənbəyi {{origin}} {{br}}olan {{type}} növlü şəbəkə sorğularını {{action}}.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Əngəllə", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "İcazə ver", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "“{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "istənilən növ", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "“{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "istənilən yerdən", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "halından savayı", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "əgər hətta", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "{{filter}} statik filtrinin mənbəyi:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Statik filtr hal-hazırda aktiv olan filtr siyahılarının heç birində tapılmadı", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Üç şərtin hamısına cavab erməyən aşağıdakı logger qeydləri avtomatik olaraq rədd ediləcək:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Son {{input}} dəq. ərzində edilmiş qeydləri saxla", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Hər tab vərəqi üzrə ən çox {{input}} səh. yükləməsini saxla", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Hər tab vərəqi üzrə ən çox {{input}} qeyd saxla", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Şaquli genişləndirilmiş rejimdə hər qeyd üçün {{input}} sətir istifadə et", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Sütunları gizlə:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Vaxt", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filtr/Qayda", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Məzmun", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Tərəf", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Siyahı", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Cədvəl", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Sadə", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Nişanlı", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Aç", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Yeni hesabat yaradın", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Oxşar hesabat tap", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Dokumentasiya", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "UBlock Origin-in bütün xüsusiyyətlərini öyrənmək üçün uBlock/wiki ünvanında sənədləri oxuyun.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Suallar və dəstək", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Suallara və yardım dəstəyinin digər növlərinə cavablar /r/uBlock Origin - də təqdim olunur.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filter problemləri / vebsəhifə işləmir", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Müəyyən vebsaytların filtr problemlərini uBlockOrigin/uAssets problem izləyicisinə bildirin. GitHub hesabı tələb edir.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Vacib: uBlock Origin-lə yanaşı, oxşar bloklayıcı genişləndirmələrin istifadəsindən çəkinin. Əks halda bəzi veb-saytlarda filtr problemləri ilə üzləşə bilərsiniz.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "İpuçları: Filtr siyahınızın yenilənmiş olduğundan əmin olun. Qeydiyyatçı, filtrlərlə bağlı problemləri müəyyənləşdirmək üçün başlıca vasitədir.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Xəta bildirişi", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "uBlock Origin-lə bağlı problemləri uBlockOrigin/uBlock-issue problem izləyicisinə bildirin. Github hesabı tələb edir.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Problemlərin Həlli", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Aşağıdaki könüllülər sizə probleminizi aradan qaldırmağa çalışırkən faydalı ola biləcək texniki məlumatdır.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Filter problemini bildir", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Könüllülərə eyni hesabatların narahatçılıq verməməsi üçün, xahiş olunur problemin əvvəlcədən bildirilmədiyinə əmin olun.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filtr siyahıları hər gün yenilənir. Probleminizin ən son filtr siyahılarında həll edilmədiyinə əmin olun.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Problemli veb-səhifəni yenidən yüklədikdən sonra problemin hələ də qaldığından əmin olun.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Veb-səhifənin ünvanı:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Səhifə...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Bir daxiletmə seçin --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Reklam və ya reklam qalıqları göstərir", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Üst-üstə düşmə və ya digər nasazlıqları var", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "uBlock Origin-i aşkarlayır", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Məxfiliklə bağlı problemləri var", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "uBlock Origin aktiv ikən xarab olur", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Arzuolunmaz tab-vərəqələr və ya pəncərələr açır", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Veb-səhifəni uyğun olmayan (“NSFW”) olaraq işarələ (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Məxfilik siyasəti", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Dəyişikliklər siyahısı", + "description": "" + }, + "aboutCode": { + "message": "Mənbə kodu (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Layihəyə töhfə verənlər", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Mənbə kodu", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Tərcümələr", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Filtr siyahıları", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Xarici asılılıqlar (GPLv3-uyumlu):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO-nun öz filtr siyahıları ödənişsiz şəkildə bu CDN-lərdə yerləşdirilib:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Bir filtr siyahısının yenilənməsi lazım olduqda təsadüfi seçilən bir CDN istifadə olunur", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Fayla yaz", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Fayldan bərpa et...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Standart parametrləri yüklə...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Bütün parametrləriniz {{time}} tarixində yadda saxlanılmış məlumatlarla əvəz olunacaq və uBlock₀ yenidən başladılacaq.\n\nBütün cari parametrlər ehtiyat nüsxəsindəki məlumatlarla əvəz olunsun?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Məlumat oxunmur yaxud xətalıdır", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Bütün parametrləriniz silinəcək və uBlock₀ yenidən başladılacaq.\n\nuBlock₀ standart parametrlərə qaytarılsın?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Şəbəkə xətası: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Abunə ol", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "bir dəqiqə əvvəl", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} dəq. əvvəl", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "bir saat əvvəl", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} saat əvvəl", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "bir gün əvvəl", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} gün əvvəl", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "İdarəetmə panelini göstər", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Loggeri göstər", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "işləmir", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Səhifə əngəlləndi", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin bu səhifənin yüklənməsini əngəllədi:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Bu filtrə görə", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "parametrsiz", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Mənbə:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Geriyə qayıt", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Bu pəncərəni bağla", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Bu sayt barədə məni xəbərdar etmə", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "{{hostname}} üçün sərt əngəlləməni dayandır", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Müvəqqəti", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Daimi", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Davam et", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Bulud yaddaşa göndər", + "description": "tooltip" + }, + "cloudPull": { + "message": "Bulud yaddaşdan götür", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Bulud yaddaşdan götür və cari parametrlərlə birləşdir", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Bu cihazın adı:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Diqqət! Bu əlavə parametrlərdəki dəyişikliklərə görə siz məsuliyyət daşıyırsınız.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Təsdiqlə", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Dəyişiklikləri tətbiq et", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Geri qaytar", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bayt", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Çərçivədəki elementi əngəllə", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Filter siyahısına abunə ol", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Böyük media elementlərinin yüklənməsinə müvəqqəti icazə ver", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Mənbə kodunu nəzərdən keçir...", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Qısayol yaz", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Məhdud sürüşdürməni işə sal/dayandır", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Lövhəyə kopyala", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Hamısını seç", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Kozmetik filtrləməni yandır/söndür", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Toggle JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Əngəlləmə rejimini yüngülləşdir", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "İstifadə olunan anbar: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Yükləmək üçün düyməyə bas", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Xətalar: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Brauzer açılışında filtrləmə düzgün alınmadı. Düzgün filtrləməni təmin etmək üçün səhifəni yenidən yükləyin.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" + } +} diff --git a/src/_locales/be/messages.json b/src/_locales/be/messages.json new file mode 100644 index 0000000000000..11a9c39b62bd4 --- /dev/null +++ b/src/_locales/be/messages.json @@ -0,0 +1,1314 @@ +{ + "extName": { + "message": "uBlock Origin", + "description": "extension name." + }, + "extShortDesc": { + "message": "Нарэшце, эфектыўны блакавальнік. Не нагружае працэсар і памяць.", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "dashboardName": { + "message": "uBlock₀ — Панэль кіравання", + "description": "English: uBlock₀ — Dashboard" + }, + "dashboardUnsavedWarning": { + "message": "Увага! Ёсць незахаваныя змены", + "description": "A warning in the dashboard when navigating away from unsaved changes" + }, + "dashboardUnsavedWarningStay": { + "message": "Застацца", + "description": "Label for button to prevent navigating away from unsaved changes" + }, + "dashboardUnsavedWarningIgnore": { + "message": "Ігнараваць", + "description": "Label for button to ignore unsaved changes" + }, + "settingsPageName": { + "message": "Налады", + "description": "appears as tab name in dashboard" + }, + "3pPageName": { + "message": "Спісы фільтраў", + "description": "appears as tab name in dashboard" + }, + "1pPageName": { + "message": "Мае фільтры", + "description": "appears as tab name in dashboard" + }, + "rulesPageName": { + "message": "Мае правілы", + "description": "appears as tab name in dashboard" + }, + "whitelistPageName": { + "message": "Давераныя сайты", + "description": "appears as tab name in dashboard" + }, + "shortcutsPageName": { + "message": "Спалучэнні клавіш", + "description": "appears as tab name in dashboard" + }, + "statsPageName": { + "message": "uBlock₀ — Журнал сеткавых запытаў", + "description": "Title for the logger window" + }, + "aboutPageName": { + "message": "Пра пашырэнне", + "description": "appears as tab name in dashboard" + }, + "supportPageName": { + "message": "Падтрымка", + "description": "appears as tab name in dashboard" + }, + "assetViewerPageName": { + "message": "uBlock₀ — Прагляд рэсурсаў", + "description": "Title for the asset viewer page" + }, + "advancedSettingsPageName": { + "message": "Пашыраныя налады", + "description": "Title for the advanced settings page" + }, + "popupPowerSwitchInfo": { + "message": "Націсканне: адключыць/уключыць uBlock₀ для гэтага сайта.\n\nCtrl+націсканне: адключыць uBlock₀ толькі на гэтай старонцы.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + }, + "popupPowerSwitchInfo1": { + "message": "Націсніце, каб адключыць uBlock₀ для гэтага сайта.\n\nНацісніце з Ctrl, каб адключыць uBlock₀ толькі на гэтай старонцы.", + "description": "Message to be read by screen readers" + }, + "popupPowerSwitchInfo2": { + "message": "Націсніце, каб уключыць uBlock₀ для гэтага сайта.", + "description": "Message to be read by screen readers" + }, + "popupBlockedRequestPrompt": { + "message": "запытаў заблакавана", + "description": "English: requests blocked" + }, + "popupBlockedOnThisPagePrompt": { + "message": "на гэтай старонцы", + "description": "English: on this page" + }, + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 (13%)" + }, + "popupBlockedSinceInstallPrompt": { + "message": "з моманту ўсталявання", + "description": "English: since install" + }, + "popupOr": { + "message": "або", + "description": "English: or" + }, + "popupBlockedOnThisPage_v2": { + "message": "Заблакавана на гэтай старонцы", + "description": "For the new mobile-friendly popup design" + }, + "popupBlockedSinceInstall_v2": { + "message": "Заблакавана з моманту ўсталявання", + "description": "For the new mobile-friendly popup design" + }, + "popupDomainsConnected_v2": { + "message": "Даменаў падлучана", + "description": "For the new mobile-friendly popup design" + }, + "popupTipDashboard": { + "message": "Адкрыць панэль кіравання", + "description": "English: Click to open the dashboard" + }, + "popupTipZapper": { + "message": "Перайсці ў рэжым імгненнага хавання элементаў", + "description": "Tooltip for the element-zapper icon in the popup panel" + }, + "popupTipPicker": { + "message": "Перайсці ў рэжым выбару элементаў", + "description": "English: Enter element picker mode" + }, + "popupTipLog": { + "message": "Адкрыць журнал запытаў", + "description": "Tooltip used for the logger icon in the panel" + }, + "popupTipReport": { + "message": "Паведаміць аб праблеме з сайтам", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipNoPopups": { + "message": "Пераключыць блакаванне ўсіх выплыўных акон на гэтым сайце", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups1": { + "message": "Націсніце, каб блакаваць усе выплыўныя вокны на гэтым сайце", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2": { + "message": "Націсніце, каб выключыць блакаванне ўсіх выплыўных акон на гэтым сайце", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoLargeMedia": { + "message": "Пераключыць блакаванне вялікіх медыя-элементаў на гэтым сайце", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia1": { + "message": "Націсніце, каб блакаваць вялікія медыя-элементы на гэтым сайце", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2": { + "message": "Націсніце, каб выключыць блакаванне вялікіх медыя-элементаў на гэтым сайце", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoCosmeticFiltering": { + "message": "Пераключыць касметычнае фільтраванне на гэтым сайце", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering1": { + "message": "Націсніце, каб выключыць касметычнае фільтраванне на гэтым сайце", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2": { + "message": "Націсніце, каб уключыць касметычнае фільтраванне на гэтым сайце", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoRemoteFonts": { + "message": "Пераключыць блакаванне аддаленых шрыфтоў на гэтым сайце", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts1": { + "message": "Націсніце, каб блакаваць аддаленыя шрыфты на гэтым сайце", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts2": { + "message": "Націсніце, каб выключыць блакаванне аддаленых шрыфтоў на гэтым сайце", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoScripting1": { + "message": "Націсніце, каб выключыць JavaScript на гэтым сайце", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupTipNoScripting2": { + "message": "Націсніце, каб JavaScript не быў выключаны на гэтым сайце", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupNoPopups_v2": { + "message": "Выплыўныя вокны", + "description": "Caption for the no-popups per-site switch" + }, + "popupNoLargeMedia_v2": { + "message": "Вялікія медыя-элементы", + "description": "Caption for the no-large-media per-site switch" + }, + "popupNoCosmeticFiltering_v2": { + "message": "Касметычнае фільтраванне", + "description": "Caption for the no-cosmetic-filtering per-site switch" + }, + "popupNoRemoteFonts_v2": { + "message": "Аддаленыя шрыфты", + "description": "Caption for the no-remote-fonts per-site switch" + }, + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" + }, + "popupMoreButton_v2": { + "message": "Больш", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton_v2": { + "message": "Менш", + "description": "Label to be used to hide popup panel sections" + }, + "popupTipGlobalRules": { + "message": "Глабальныя правілы: гэты слупок для правіл, якія прымяняюцца на ўсіх сайтах.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." + }, + "popupTipLocalRules": { + "message": "Лакальныя правілы: гэты слупок для правіл, якія прымяняюцца толькі на гэтым сайце.\nЛакальныя правілы перавызначаюць глабальныя.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." + }, + "popupTipSaveRules": { + "message": "Націсніце, каб захаваць змены.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." + }, + "popupTipRevertRules": { + "message": "Націсніце, каб вярнуць змены.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + }, + "popupAnyRulePrompt": { + "message": "усе", + "description": "" + }, + "popupImageRulePrompt": { + "message": "відарысы", + "description": "" + }, + "popup3pAnyRulePrompt": { + "message": "староннія", + "description": "" + }, + "popup3pPassiveRulePrompt": { + "message": "староннія CSS/відарысы", + "description": "" + }, + "popupInlineScriptRulePrompt": { + "message": "убудаваныя скрыпты", + "description": "" + }, + "popup1pScriptRulePrompt": { + "message": "Асноўныя скрыпты", + "description": "" + }, + "popup3pScriptRulePrompt": { + "message": "староннія скрыпты", + "description": "" + }, + "popup3pFrameRulePrompt": { + "message": "староннія фрэймы", + "description": "" + }, + "popupHitDomainCountPrompt": { + "message": "даменаў падлучана", + "description": "appears in popup" + }, + "popupHitDomainCount": { + "message": "{{count}} з {{total}}", + "description": "appears in popup" + }, + "popupVersion": { + "message": "Версія", + "description": "Example of use: Version 1.26.4" + }, + "popup3pScriptFilter": { + "message": "скрыпт", + "description": "Appears as an option to filter out firewall rows" + }, + "popup3pFrameFilter": { + "message": "рамка", + "description": "Appears as an option to filter out firewall rows" + }, + "pickerCreate": { + "message": "Стварыць", + "description": "English: Create" + }, + "pickerPick": { + "message": "Выбраць", + "description": "English: Pick" + }, + "pickerQuit": { + "message": "Выйсці", + "description": "English: Quit" + }, + "pickerPreview": { + "message": "Папярэдні прагляд", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + }, + "pickerNetFilters": { + "message": "Сеткавыя фільтры", + "description": "English: header for a type of filter in the element picker dialog" + }, + "pickerCosmeticFilters": { + "message": "Касметычныя фільтры", + "description": "English: Cosmetic filters" + }, + "pickerCosmeticFiltersHint": { + "message": "Націсканне, Ctrl + націсканне", + "description": "English: Click, Ctrl-click" + }, + "pickerContextMenuEntry": { + "message": "Блакаваць элемент…", + "description": "An entry in the browser's contextual menu" + }, + "settingsCollapseBlockedPrompt": { + "message": "Хаваць контуры заблакаваных элементаў", + "description": "English: Hide placeholders of blocked elements" + }, + "settingsIconBadgePrompt": { + "message": "Паказваць колькасць заблакаваных запытаў на значцы", + "description": "English: Show the number of blocked requests on the icon" + }, + "settingsTooltipsPrompt": { + "message": "Адключыць выплыўныя падказкі", + "description": "A checkbox in the Settings pane" + }, + "settingsContextMenuPrompt": { + "message": "Выкарыстоўваць кантэкстнае меню, дзе магчыма", + "description": "English: Make use of context menu where appropriate" + }, + "settingsColorBlindPrompt": { + "message": "Колеравая схема для дальтонікаў", + "description": "English: Color-blind friendly" + }, + "settingsAppearance": { + "message": "Выгляд", + "description": "Section for controlling user interface appearance" + }, + "settingsThemeLabel": { + "message": "Тэма", + "description": "Label for checkbox to enable a custom dark theme" + }, + "settingsThemeAccent0Label": { + "message": "Уласны колеравы акцэнт", + "description": "Label for checkbox to pick an accent color" + }, + "settingsCloudStorageEnabledPrompt": { + "message": "Уключыць падтрымку воблачнага сховішча", + "description": "" + }, + "settingsAdvancedUserPrompt": { + "message": "Я — дасведчаны карыстальнік", + "description": "Checkbox to let user access advanced, technical features" + }, + "settingsPrefetchingDisabledPrompt": { + "message": "Адключыць папярэднюю загрузку (каб прадухіліць злучэнне для заблакаваных сеткавых запытаў)", + "description": "English: " + }, + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Выключыць праверку гіперспасылак", + "description": "English: " + }, + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Прадухіліць уцечку лакальнага IP-адраса праз WebRTC", + "description": "English: " + }, + "settingPerSiteSwitchGroup": { + "message": "Прадвызначаныя паводзіны", + "description": "" + }, + "settingPerSiteSwitchGroupSynopsis": { + "message": "Гэтыя налады могуць быць перавызначаныя для кожнага сайта асобна", + "description": "" + }, + "settingsNoCosmeticFilteringPrompt": { + "message": "Выключыць касметычныя фільтры", + "description": "" + }, + "settingsNoLargeMediaPrompt": { + "message": "Блакаваць медыя-элементы большыя за {{input}} КБ", + "description": "" + }, + "settingsNoRemoteFontsPrompt": { + "message": "Блакаваць аддаленыя шрыфты", + "description": "" + }, + "settingsNoScriptingPrompt": { + "message": "Адключыць JavaScript", + "description": "The default state for the per-site no-scripting switch" + }, + "settingsNoCSPReportsPrompt": { + "message": "Блакаваць справаздачы CSP", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" + }, + "settingsUncloakCnamePrompt": { + "message": "Раскрываць CNAME назвы", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" + }, + "settingsAdvanced": { + "message": "Пашыраныя налады", + "description": "Section for controlling advanced-user settings" + }, + "settingsAdvancedSynopsis": { + "message": "Функцыі, патрэбныя толькі тэхнічным карыстальнікам", + "description": "Description of section controlling advanced-user settings" + }, + "settingsAdvancedUserSettings": { + "message": "пашыраныя налады", + "description": "For the tooltip of a link which gives access to advanced settings" + }, + "settingsLastRestorePrompt": { + "message": "Апошняе аднаўленне:", + "description": "English: Last restore:" + }, + "settingsLastBackupPrompt": { + "message": "Апошняя рэзервовая копія:", + "description": "English: Last backup:" + }, + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} сеткавых фільтраў + {{cosmeticFilterCount}} касметычных фільтраў з:", + "description": "Appears at the top of the _3rd-party filters_ pane" + }, + "3pListsOfBlockedHostsPerListStats": { + "message": "Выкарыстана: {{used}} з {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "3pAutoUpdatePrompt1": { + "message": "Аўтаматычна абнаўляць спісы фільтраў", + "description": "A checkbox in the _3rd-party filters_ pane" + }, + "3pUpdateNow": { + "message": "Абнавіць зараз", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pPurgeAll": { + "message": "Ачысціць усе кэшы", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pParseAllABPHideFiltersPrompt1": { + "message": "Разбіраць і прымяняць касметычныя фільтры", + "description": "English: Parse and enforce Adblock+ element hiding filters." + }, + "3pParseAllABPHideFiltersInfo": { + "message": "Касметычныя фільтры служаць для хавання элементаў вэб-старонак, якія ствараюць візуальныя нязручнасці, і якія не могуць быць заблакаваныя сродкамі фільтравання сеткавых запытаў.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + }, + "3pIgnoreGenericCosmeticFilters": { + "message": "Ігнараваць агульныя касметычныя фільтры", + "description": "This will cause uBO to ignore all generic cosmetic filters." + }, + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Агульныя касметычныя фільтры — гэта тыя касметычныя фільтры, якія прызначаны для прымянення на ўсіх вэб-сайтах. Уключэнне гэтай налады знізіць спажыванне памяці і працэсара, дададзенае да вэб-старонак у выніку працы агульных касметычных фільтраў.\n\nРэкамендуецца ўключыць гэту наладу на менш магутных прыладах.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." + }, + "3pSuspendUntilListsAreLoaded": { + "message": "Прыпыніць сеткавую актыўнасць, пакуль не пагрузяцца ўсе спісы фільтраў", + "description": "A checkbox in the 'Filter lists' pane" + }, + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" + }, + "3pApplyChanges": { + "message": "Ужыць змяненні", + "description": "English: Apply changes" + }, + "3pGroupDefault": { + "message": "Убудаваныя", + "description": "Filter lists section name" + }, + "3pGroupAds": { + "message": "Рэклама", + "description": "Filter lists section name" + }, + "3pGroupPrivacy": { + "message": "Прыватнасць", + "description": "Filter lists section name" + }, + "3pGroupMalware": { + "message": "Дамены шкодных праграм", + "description": "Filter lists section name" + }, + "3pGroupSocial": { + "message": "Віджэты сацыяльных сетак", + "description": "Filter lists section name" + }, + "3pGroupCookies": { + "message": "Абвесткі пра кукі", + "description": "Filter lists section name" + }, + "3pGroupAnnoyances": { + "message": "Надакучлівасці", + "description": "Filter lists section name" + }, + "3pGroupMultipurpose": { + "message": "Шматмэтавыя", + "description": "Filter lists section name" + }, + "3pGroupRegions": { + "message": "Рэгіёны, мовы", + "description": "Filter lists section name" + }, + "3pGroupCustom": { + "message": "Карыстальніцкія", + "description": "Filter lists section name" + }, + "3pImport": { + "message": "Імпартаваць…", + "description": "The label for the checkbox used to import external filter lists" + }, + "3pExternalListsHint": { + "message": "Адзін URL на радок. Няспраўныя URL-адрасы будуць праігнараваныя.", + "description": "Short information about how to use the textarea to import external filter lists by URL" + }, + "3pExternalListObsolete": { + "message": "Неактуальны.", + "description": "used as a tooltip for the out-of-date icon beside a list" + }, + "3pViewContent": { + "message": "паглядзець змест", + "description": "used as a tooltip for eye icon beside a list" + }, + "3pLastUpdate": { + "message": "Апошняе абнаўленне: {{ago}}.\nНацісніце для прымусовага абнаўлення.", + "description": "used as a tooltip for the clock icon beside a list" + }, + "3pUpdating": { + "message": "Абнаўляецца…", + "description": "used as a tooltip for the spinner icon beside a list" + }, + "3pNetworkError": { + "message": "Памылка сеткі не дазволіла абнавіць рэсурс.", + "description": "used as a tooltip for error icon beside a list" + }, + "1pTrustWarning": { + "message": "Не дадавайце фільтры з крыніц, якім не давяраеце.", + "description": "Warning against copy-pasting filters from random sources" + }, + "1pEnableMyFiltersLabel": { + "message": "Уключыць мае карыстальніцкія фільтры", + "description": "Label for the checkbox use to enable/disable 'My filters' list" + }, + "1pTrustMyFiltersLabel": { + "message": "Дазволіць карыстальніцкія фільтры, якія патрабуюць даверу", + "description": "Label for the checkbox use to trust the content of 'My filters' list" + }, + "1pImport": { + "message": "Імпартаваць і дадаць", + "description": "Button in the 'My filters' pane" + }, + "1pExport": { + "message": "Экспартаваць", + "description": "Button in the 'My filters' pane" + }, + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" + }, + "1pApplyChanges": { + "message": "Ужыць змяненні", + "description": "English: Apply changes" + }, + "rulesPermanentHeader": { + "message": "Пастаянныя правілы", + "description": "header" + }, + "rulesTemporaryHeader": { + "message": "Часовыя правілы", + "description": "header" + }, + "rulesRevert": { + "message": "Вярнуць", + "description": "This will remove all temporary rules" + }, + "rulesCommit": { + "message": "Зацвердзіць", + "description": "This will persist temporary rules" + }, + "rulesEdit": { + "message": "Змяніць", + "description": "Will enable manual-edit mode (textarea)" + }, + "rulesEditSave": { + "message": "Захаваць", + "description": "Will save manually-edited content and exit manual-edit mode" + }, + "rulesEditDiscard": { + "message": "Адкінуць", + "description": "Will discard manually-edited content and exit manual-edit mode" + }, + "rulesImport": { + "message": "Імпартаваць з файла…", + "description": "" + }, + "rulesExport": { + "message": "Экспартаваць у файл", + "description": "Button in the 'My rules' pane" + }, + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" + }, + "rulesHint": { + "message": "Спіс вашых правіл дынамічнага фільтравання.", + "description": "English: List of your dynamic filtering rules." + }, + "rulesFormatHint": { + "message": "Сінтаксіс правіл: крыніца прызначэнне тып дзеянне (поўная дакументацыя).", + "description": "English: dynamic rule syntax and full documentation." + }, + "rulesSort": { + "message": "Сартаванне:", + "description": "English: label for sort option." + }, + "rulesSortByType": { + "message": "Тып правіла", + "description": "English: a sort option for list of rules." + }, + "rulesSortBySource": { + "message": "Крыніца", + "description": "English: a sort option for list of rules." + }, + "rulesSortByDestination": { + "message": "Прызначэнне", + "description": "English: a sort option for list of rules." + }, + "whitelistPrompt": { + "message": "Дырэктывы давераных сайтаў указваюць, на якіх вэб-старонках uBlock Origin павінен быць выключаны. Адзін запіс на радок.", + "description": "A concise description of the 'Trusted sites' pane." + }, + "whitelistImport": { + "message": "Імпартаваць і дадаць", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExport": { + "message": "Экспартаваць", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExportFilename": { + "message": "my-ublock-trusted-sites_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" + }, + "whitelistApply": { + "message": "Ужыць змяненні", + "description": "English: Apply changes" + }, + "logRequestsHeaderType": { + "message": "Тып", + "description": "English: Type" + }, + "logRequestsHeaderDomain": { + "message": "Дамен", + "description": "English: Domain" + }, + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" + }, + "logRequestsHeaderFilter": { + "message": "Фільтр", + "description": "English: Filter" + }, + "logAll": { + "message": "Усе", + "description": "Appears in the logger's tab selector" + }, + "logBehindTheScene": { + "message": "Па-за карткамі", + "description": "Pretty name for behind-the-scene network requests" + }, + "loggerCurrentTab": { + "message": "Дзейная картка", + "description": "Appears in the logger's tab selector" + }, + "loggerReloadTip": { + "message": "Перазагрузіць змесціва карткі", + "description": "Tooltip for the reload button in the logger page" + }, + "loggerDomInspectorTip": { + "message": "Пераключыць інспектар DOM", + "description": "Tooltip for the DOM inspector button in the logger page" + }, + "loggerPopupPanelTip": { + "message": "Пераключыць выплыўную панэль", + "description": "Tooltip for the popup panel button in the logger page" + }, + "loggerInfoTip": { + "message": "uBlock Origin вікі: Логер", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Ачысціць логер", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Паставіць логер на паўзу (адкідваць усе ўваходныя звесткі)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Зняць логер з паўзы", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Пераключыць фільтраванне логера", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "фільтраваць запісы логера", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Налады фільтравання логера", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Не", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "заблакаваны", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "дазволены", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "мадыфікаваны", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "асноўны", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "староннія", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Падрабязнасці", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Фільтр", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Спіс фільтраў", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Правіла", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Кантэкст", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Кантэкст кораня", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Старана", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Тып", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL-адрас", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL правіла", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Кантэкст:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Тып:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Статычны фільтр", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} сеткавыя запыты {{type}}, {{br}}URL-адрас якіх супадае з {{url}} {{br}}і якія паходзяць з {{origin}},{{br}}{{importance}} з'яўляюцца адпаведным фільтрам выключэння.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Блакаваць", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Дазволіць", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "тыпу “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "любы тып", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "з “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "з любога месца", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "акрамя выпадкаў, калі", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "нават калі", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Статычны фільтр {{filter}} знойдзены ў:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Статычны фільтр не знойдзены ні ў адным з уключаных зараз спісе фільтраў", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Запісы логера, якія не адпавядаюць усім тром дадзеным ніжэй умовам, будуць аўтаматычна адкінуты:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Захоўваць запісы за апошнія {{input}} хвілін", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Захоўваць не больш за {{input}} загрузак старонкі на картцы", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Захоўваць не больш за {{input}} запісаў на картку", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Выкарыстоўваць {{input}} радкоў на запіс пры вертыкальным пашырэнні", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Схаваць слупкі:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Час", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Фільтр/правіла", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Кантэкст", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Старана", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Спіс", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Табліца", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Просты", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Адкрыць", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Стварыць новую справаздачу", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Знайсці падобныя справаздачы", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Дакументацыя", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Прачытайце дакументацыю на uBlock/wiki, каб даведацца пра ўсе магчымасці uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Пытанні і падтрымка", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Адказы на пытанні і іншыя віды падтрымкі даступныя на сабрэддыце /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Праблемы з фільтрамі/няспраўны сайт", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Паведамляйце аб праблемах з фільтрамі на пэўных сайтах на трэкеры хібаў uBlockOrigin/uAssets. Патрабуе ўліковы запіс GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Важна: Пазбягайце выкарыстання іншых блакавальнікаў падобнага прызначэння разам з uBlock Origin, паколькі гэта можа прывесці да праблем з фільтрамі на пэўных сайтах.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Парада: Пераканайцеся, што вашы спісы фільтраў знаходзяцца ў актуальным стане. Рэгістратар — гэта галоўны інструмент для дыягностыкі праблем, якія звязаны з фільтрамі.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Справаздача пра хібу", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Паведамляйце пра праблемы самога uBlock Origin на трэкеры хібаў uBlockOrigin/uBlock-issue. Патрабуе ўліковы запіс GitHub.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Інфармацыя для выпраўлення непаладак", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Ніжэй - тэхнічная інфармацыя, што можа быць карысная добраахвотнікам, якія паспрабуюць дапамагчы вам вырашыць праблему.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Паведаміць аб праблеме з фільтрам", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Каб не абцяжарваць добраахвотнікаў дубляванымі справаздачамі, калі ласка, праверце, што пра гэтую праблему не паведамлялі раней.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Спісы фільтраў абнаўляюцца штодзённа. Упэўніцеся, што ваша праблема не была вырашана ў найноўшых спісах фільтраў.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Спраўдзіце, ці праблема ўсё яшчэ існуе пасля перазагрузкі праблемнай вэб-старонкі.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Адрас вэб-старонкі:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Вэб-старонка…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Выберыце праблему --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Паказвае рэкламу або яе астачу", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Мае накладанні або іншыя недарэчнасці", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Выяўляе uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Праблемы, звязаныя з прыватнасцю", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Няспраўная, калі ўключаны uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Адкрывае непажаданыя карткі або вокны", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Вядзе да шкодных праграм, фішынгу", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Пазначыць вэб-старонку як “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Палітыка прыватнасці", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Журнал змяненняў", + "description": "" + }, + "aboutCode": { + "message": "Зыходны код (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Удзельнікі", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Зыходны код", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Пераклады", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Спісы фільтраў", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Вонкавыя залежнасці (GPLv3-сумяшчальныя):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Уласныя спісы фільтраў uBO свабодна размяшчаюцца ў наступных сетках CDN:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Пры абнаўленні спіса фільтраў выкарыстоўваецца CDN, які выбіраецца выпадковым чынам", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Стварыць рэзервовую копію…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Аднавіць з файла…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Скінуць на пачатковыя налады…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Усе вашы налады будуць заменены звесткамі з рэзервовай копіі, створанай {{time}}, затым uBlock₀ будзе перазапушчаны.\n\nПеразапісаць усе налады, выкарыстаўшы рэзервовую копію?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Звесткі немагчыма прачытаць або яны нядзейсныя", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Усе вашы налады будуць выдаленыя, uBlock₀ будзе перазапушчаны.\n\nСкінуць uBlock₀ да прадвызначаных налад?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Памылка сеткі: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Падпісацца", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "хвіліну таму", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "Хвілін таму: {{value}}", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "гадзіну таму назад", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "Гадзін таму: {{value}}", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "дзень таму", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "Дзён таму: {{value}}", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Паказаць панэль кіравання", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Паказаць логер", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "выключаны", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Старонка заблакавана", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin папярэдзіў чытанне наступнай старонкі:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "З-за наступнага фільтра", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "без параметраў", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Знойдзены ў:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Вярнуцца", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Закрыць гэта акно", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Не папярэджваць больш пра гэты сайт", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Выключыць строгае блакаванне для {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Часова", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Назаўжды", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Працягнуць", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Заблакаваная старонка мае намер перанакіраваць на іншы сайт. Калі вырашыце працягнуць, вы пяройдзеце непасрэдна да: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Падстава:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Шкодная актыўнасць", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Трэкер", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Сумнеўны змест", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Экспартаваць у воблачнае сховішча", + "description": "tooltip" + }, + "cloudPull": { + "message": "Імпартаваць з воблачнага сховішча", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Імпартаваць з воблачнага сховішча і аб'яднаць з дзейнымі наладамі", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Назва гэтай прылады:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Увага! Змяняйце гэтыя пашыраныя налады на ўласную рызыку.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Пацвердзіць", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Ужыць змяненні", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Вярнуць", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "байтаў", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Заблакаваць элемент у рамцы…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Падпісацца на спіс фільтраў…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Тымчасова дазволіць вялікія медыя-элементы", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Паглядзець зыходны код…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Упішыце спалучэнне", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Пераключыць агульную пракрутку", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Капіяваць у буфер абмену", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Абраць усе", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Пераключыць касметычнае фільтраванне", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Уключыць/адключыць JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Паслаблены рэжым блакавання", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Памер сховішча: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "КБ", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "МБ", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "ГБ", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Націсніце, каб загрузіць", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Памылак: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Немагчыма фільтраваць належным чынам пры запуску браўзера.\nАбнавіце старонку, каб забяспечыць належнае фільтраванне.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" + } +} diff --git a/src/_locales/bg/messages.json b/src/_locales/bg/messages.json index 0e6fe12850c08..2ebcd88826236 100644 --- a/src/_locales/bg/messages.json +++ b/src/_locales/bg/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Най-накрая, ефективен рекламен блокер с малки изисквания за процесор и памет.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Най-накрая, ефективен блокер. Щадящ процесора и паметта.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Табло", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Табло", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Настройки", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Внимание! Има незапазени промени", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Филтри от 3-ти лица", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Оставане", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Мои филтри", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Игнориране", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Мои правила", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Настройки", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Изключения", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Филтри", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Дневник на мрежовите заявки", - "description":"Title for the logger window" + "1pPageName": { + "message": "Мои филтри", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Относно", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Мои правила", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Щракване: изключва\/включва uBlock₀ за този сайт.\n\nCtrl + щракване: изключва uBlock₀ само за тази страница.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Доверени сайтове", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"блокирани заявки", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Клавишни комбинации", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"на тази страница", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Дневник", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} или {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Относно", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"от инсталацията", - "description":"English: since install" + "supportPageName": { + "message": "Поддръжка", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"или", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Активи", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Щракнете, за да отворите таблото", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Разширени настройки", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Блокиране на отделен елемент", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Щракване: изключва/включва uBlock₀ за този сайт.\n\nCtrl + щракване: изключва uBlock₀ само за тази страница.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Преглед на дневника със заявки", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Щракване: изключва uBlock₀ за този сайт.\n\nCtrl + щракване: изключва uBlock₀ само за тази страница.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Превключване блокирането на всички изскачащи прозорци за този сайт", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Щракнете, за да включите uBlock₀ за този сайт.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Превключване блокирането на големи мултимедийни елементи за този сайт", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "блокирани заявки", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Превключване на козметичното филтриране за този сайт", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "на тази страница", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Превключване блокирането на външни шрифтове за този сайт", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} или {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Глобални правила: тази колона е за правила, прилагани за всички сайтове.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "общо досега", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Локални правила: тази колона е за правила, прилагани само за текущият сайт. Локалните правила заместват глобалните.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "или", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Щракнете, за да направите промените постоянни.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Блокирани на тази страница", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Щракнете, за да отмените вашите промени.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Блокирани общо досега", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"Всички", - "description":"" + "popupDomainsConnected_v2": { + "message": "Свързани домейни", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"Изображения", - "description":"" + "popupTipDashboard": { + "message": "Табло с настройки", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"3-ти лица", - "description":"" + "popupTipZapper": { + "message": "Временно блокиране на отделен елемент", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"CSS\/изображения от 3-ти лица", - "description":"" + "popupTipPicker": { + "message": "Блокиране на отделен елемент", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"Вградени скриптове", - "description":"" + "popupTipLog": { + "message": "Преглед на дневника със заявки", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"Скриптове от 1-ви лица", - "description":"" + "popupTipReport": { + "message": "Докладване на проблем с този уебсайт", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"Скриптове от 3-ти лица", - "description":"" + "popupTipNoPopups": { + "message": "Превключване блокирането на всички изскачащи прозорци за този сайт", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"Рамки от 3-ти лица", - "description":"" + "popupTipNoPopups1": { + "message": "Щракнете, за да блокирате всички изскачащи прозорци за този сайт", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"свързани домейни", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Щракнете, за да разрешите всички изскачащи прозорци за този сайт", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} от {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Превключване блокирането на големи мултимедийни елементи за този сайт", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Създаване", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Щракнете, за да блокирате големите мултимедийни елементи за този сайт", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Нов избор", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Щракнете, за да разрешите големите мултимедийни елементи за този сайт", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Отказ", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Превключване на козметичното филтриране за този сайт", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Преглед", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Щракнете, за да изключите козметичните филтри за този сайт", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Мрежови филтри", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Щракнете, за да включите козметичните филтри за този сайт", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Козметични филтри", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Превключване блокирането на външни шрифтове за този сайт", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Щракване, Ctrl + щракване", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Щракнете, за да блокирате външните шрифтове за този сайт", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Блокиране на елемент", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Щракнете, за да разрешите външните шрифтове за този сайт", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Скриване подсказващите текстове на блокираните елементи", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Щракнете, за да забраните JavaScript за този сайт", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Показване на брояч в иконката за блокираните заявки", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Щракнете, за да разрешите JavaScript за този сайт", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Изключване на поясненията", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Изкачащи прозорци", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Използване на контекстното меню, когато е възможно", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Големи мултимедийни елементи", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Достъпност за хора с цветна слепота", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Козметично филтриране", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Включване на поддръжка за съхранение в облак", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Външни шрифтове", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Аз съм опитен потребител (Допълнително четиво<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Изключване на предварителното извличане (за избягване на всяка връзка за блокираните мрежови заявки)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Още", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Изключване проверката на хипервръзки", - "description":"English: " + "popupLessButton_v2": { + "message": "По-малко", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Предотвратяване изтичането на локалния IP адрес през WebRTC", - "description":"English: " + "popupTipGlobalRules": { + "message": "Глобални правила: колона с правила, приложими към всички сайтове.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Поведение по подразбиране", - "description":"" + "popupTipLocalRules": { + "message": "Локални правила: колона с правила, приложими само към текущият сайт. Локалните правила заместват глобалните.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Тези поведения по подразбиране могат да бъдат отменени за отделни сайтове", - "description":"" + "popupTipSaveRules": { + "message": "Щракнете, за да направите промените постоянни.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Изключване на козметичното филтриране", - "description":"" + "popupTipRevertRules": { + "message": "Щракнете, за да отмените направените промени.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Блокиране на мултимедийни елементи, по-големи от {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "Всички", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Блокиране на външни шрифтове", - "description":"" + "popupImageRulePrompt": { + "message": "Изображения", + "description": "" }, - "settingsStorageUsed":{ - "message":"Използвана памет за съхранение: {{value}} байта", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "3-ти страни", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Последно възстановяване:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "CSS/изображения от 3-ти страни", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Последно резервно копие:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "Вградени скриптове", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} мрежови филтри + {{cosmeticFilterCount}} козметични филтри от:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "Скриптове от 1-ви страни", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"използвани {{used}} от общо {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "Скриптове от 3-ти страни", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Автоматично актуализиране на списъците с филтри.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "Рамки от 3-ти страни", + "description": "" }, - "3pUpdateNow":{ - "message":"Актуализиране", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "свързани домейни", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Изчистване на цялата кеш памет", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} от {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Анализиране и прилагане на козметичните филтри.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Версия", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Тази опция дава възможност за анализиране и прилагане на съвместими с Adblock  Plus филтри за “скриване на елементи”<\/a>. Тези филтри, по същество са козметични и служат за скриване на елементи в уеб страница, които се считат за визуално неприятни, и които не могат да бъдат блокирани от системата за филтриране на мрежовите заявки.<\/p>

      Активирането на тази опция увеличава паметта, която uBlock₀ използва.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "скрипт", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Игнориране на общите козметични филтри.", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "рамка", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Общите козметични филтри са тези филтри, които са предназначени за прилагане във всички уеб сайтове.

      Въпреки, че работят ефективно с uBlock₀, те могат да окажат влияние върху използването на паметта и процесора при някои уеб страници, особено големите такива.

      Активирането на тази опция ще премахне натоварването към тях, като резултат от обработката на общите козметични филтри, също така ще намали и използваната от uBlock₀ памет.

      Тази опция е препоръчително да се използва на по-слаби устройства.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Създаване", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Списъци на блокираните хостове", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Нов избор", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Прилагане на промените", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Отказ", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Реклами", - "description":"English: Ads" + "pickerPreview": { + "message": "Преглед", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Поверителност", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Мрежови филтри", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Вредоносни домейни", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Козметични филтри", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Социални мрежи", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Щракване, Ctrl + щракване", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Универсални", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Блокиране на елемент…", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Региони, езици", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Скриване подсказващите текстове на блокираните елементи", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Потребителски", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Показване на брояч в иконката за блокираните заявки", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Един адрес на ред. Редовете с представка ‘!’ ще бъдат игнорирани. Невалидните адреси също ще бъдат игнорирани.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Изключване на поясненията", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Анализиране", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Използване на контекстното меню, когато е възможно", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"Изчистване на кеш паметта", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Достъпност за хора с нарушено цветоусещане", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"Налична актуализация", - "description":"English: new version available" + "settingsAppearance": { + "message": "Външен вид", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"Остарял", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Тема", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Последна актуализация: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Потребителски цвят на акцента", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Един филтър на ред. Това може да бъде обикновен адрес или съвместим с Adblock Plus филтър. Редовете с представка ‘!’ ще бъдат игнорирани.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Включване на поддръжка за съхранение в облак", + "description": "" }, - "1pImport":{ - "message":"Внасяне от файл...", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Аз съм опитен потребител", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Изнасяне във файл", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Изключване на предварителното извличане (за избягване на всяка връзка за блокираните мрежови заявки)", + "description": "English: " }, - "1pExportFilename":{ - "message":"моите-ublock-статични-филтри_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Изключване на проверката за препратки", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Прилагане на промените", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Предотвратяване изтичането на локалния IP адрес през WebRTC", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Постоянни правила", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Поведение по подразбиране", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Временни правила", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Тези поведения по подразбиране могат да бъдат отменени за отделни сайтове", + "description": "" }, - "rulesRevert":{ - "message":"Връщане", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Изключване на козметичното филтриране", + "description": "" }, - "rulesCommit":{ - "message":"Приемане", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Блокиране на мултимедийни елементи, по-големи от {{input}} kB", + "description": "" }, - "rulesEdit":{ - "message":"Редактиране", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Блокиране на външни шрифтове", + "description": "" }, - "rulesEditSave":{ - "message":"Запазване", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Забраняване на JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Отказ на промените", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Блокиране на CSP отчетите", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Внасяне от файл...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Разкриване на каноничните имена", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Изнасяне във файл", - "description":"" + "settingsAdvanced": { + "message": "Разширени", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"моите-ublock-динамични-правила_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Функции, подходящи само за технически грамотни потребители", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Списък на вашите динамични правила за филтриране.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "разширени настройки", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Синтаксис на правилото: източник цел тип действие<\/code> (пълна документация<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Последно възстановяване:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Списък на вашите адреси, за които uBlock₀ ще бъде изключен. Един елемент на ред. Невалидните адреси ще бъдат игнорирани.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Последно резервно копие:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Внасяне от файл...", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} мрежови филтри + {{cosmeticFilterCount}} козметични филтри от:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Изнасяне във файл", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "ползвани {{used}} от общо {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"моите-ublock-изключения_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Автоматично обновяване на филтрите", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Прилагане на промените", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Обновяване", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Тип", - "description":"English: Type" + "3pPurgeAll": { + "message": "Изчистване на кеш паметта", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Домейн", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Анализиране и прилагане на козметичните филтри", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL адрес", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Козметичните филтри служат за скриване на елементи в уебстраницата, които се считат за визуално неприятни и които не могат да бъдат блокирани от механизмите за филтриране, базирани на мрежови заявки.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Филтър", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Игнориране на общите козметични филтри", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Всички", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Общокозметични са филтрите, предназначени за прилагане във всички сайтове. Разрешаването на тази опция ще премахне натоварването на паметта и процесора, добавено към уеб страниците в резултат на обработката на общите козметични филтри.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Скрити", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Преустановяване на мрежовата дейност, докато се заредят всички списъци с филтри", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"филтриране на записи", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Списъци на блокираните хостове", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Максимален брой записи в дневника", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Прилагане на промените", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Контекст:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Вградени", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Тип:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Реклами", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Динамично филтриране", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Поверителност", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Статично филтриране", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Защита от зловреден софтуер, сигурност", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} на мрежови заявки от {{type}} за адрес, съвпадащ с {{br}}{{url}}{{br}}и произлизащ от {{origin}},{{importance}} има филтър със съвпадащи изключения.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Социални джаджи", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Блокиране", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Известия за бисквитки", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Разрешаване", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Досадни неща", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"тип \"{{type}}\"", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Многоцелеви", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"всеки тип", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Региони, езици", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"\"{{origin}}\"", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Потребителски", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"където и да е", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Внасяне...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"с изключение, когато", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Един адрес на ред. Невалидните адреси ще бъдат игнорирани.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"дори ако", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Остарял", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Статичният филтър {{filter}} е намерен в:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "Преглед на съдържанието", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Списък с промени", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Последно обновяване: {{ago}}.\nЩракнете за принудително обновяване.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Обновяване...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Поддръжка", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Грешка в мрежата възпрепятства обновяването на ресурса.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Изходен код (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Не добавяйте филтри от ненадеждни източници.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Сътрудници", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Активиране на моите потребителски филтри", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Изнасяне във файл", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Разрешаване на потребителски филтри, изискващи доверие", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"моето-ublock-резервно-копие_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Внасяне и добавяне...", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Внасяне от файл...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Изнасяне...", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Възстановяване на настройките по подразбиране...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "ublock-мои-филтри_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Всички ваши настройки ще бъдат заместени с помощта на данни, архивирани на {{time}} и uBlock₀ ще се рестартира.\n\nПрезаписване на всички съществуващи настройки, използвайки архивираните данни?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Прилагане на промените", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Данните не могат да бъдат прочетени или са невалидни", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Постоянни правила", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Всички ваши настройки ще бъдат премахнати и uBlock₀ ще се рестартира.\n\nВръщане на uBlock₀ към стандартните настройки?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Временни правила", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Неуспешно свързване с {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Връщане", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Добавяне на следния адрес към вашият списък с потребителски филтри?\n\nИме: \"{{title}}\"\nURL адрес: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Приемане", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"преди минута", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Редактиране", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"преди {{value}} минути", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Запазване", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"преди час", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Отказ на промените", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"преди {{value}} часа", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Внасяне от файл...", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"преди ден", - "description":"English: a day ago" + "rulesExport": { + "message": "Изнасяне във файл...", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"преди {{value}} дни", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "ublock-мои-правила_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Показване на табло", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Списък на динамичните правила за филтриране.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Показване на дневник за мрежовите заявки", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Синтаксис на правилото: източник цел тип действие (пълна документация).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"изключване", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Сортиране:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin предотврати зареждането на страницата:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Тип правило", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Блокиращ филтър", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Източник", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"без параметри", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Дестинация", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Намерен в:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Указанията за доверени сайтове определят кои уеб страници трябва да бъдат изключени от uBlock Origin. По един запис на ред.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Назад", - "description":"English: Go back" + "whitelistImport": { + "message": "Внасяне и добавяне...", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Затваряне на прозореца", - "description":"English: Close this window" + "whitelistExport": { + "message": "Изнасяне...", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Изключване на строгото блокиране за {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "ublock-доверени_сайтове_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Временно", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Прилагане на промените", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Постоянно", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Тип", + "description": "English: Type" }, - "cloudPush":{ - "message":"Изнасяне в облачно хранилище", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Домейн", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Внасяне от облачно хранилище", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL адрес", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Внасяне на настройки от облачно хранилище и обединяване с текущите", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Филтър", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Всички", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Име на това устройство:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Скрити", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Изпращане", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Последно активен раздел", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Връщане", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Презареждане съдържанието на раздела", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"байта", - "description":"" + "loggerDomInspectorTip": { + "message": "Превключване на DOM инспектора", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Временно разрешаване на големи мултимедийни елементи", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Превключване на изскачащия панел", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"Това поле трябва да бъде последното", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: Дневникът със заявки", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Изчистване на заявките", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Пауза на заявките (отхвърляне на входящите данни)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Включване на заявките", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Превключване на филтрирането", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "филтриране на записи", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Опции за филтриране", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Изкл.", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "изпълнен със събития", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "блокирани", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "позволени", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "променен", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "1-ви страни", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "3-ти страни", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Детайли", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Филтър", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Списък с филтри", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Правило", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Контекст", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Основен контекст", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Страна", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Тип", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "Адрес", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Правило за адрес", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Контекст:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Тип:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Статично филтриране", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} на мрежови заявки от {{type}} за адрес, съвпадащ с {{br}}{{url}}{{br}}и произлизащ от {{origin}},{{importance}} има филтър със съвпадащи изключения.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Блокиране", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Разрешаване", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "тип \"{{type}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "всеки тип", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "\"{{origin}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "където и да е", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "с изключение, когато", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "дори ако", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Статичният филтър {{filter}} е намерен в:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Статичният филтър не е намерен в никой от активните списъци с филтри", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Записите в дневника, които не отговарят на трите условия по-долу ще бъдат автоматично отхвърлени:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Запазване на записите от последните {{input}} минути", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Запазване най-много на {{input}} зареждания на страница за раздел", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Запазване най-много на {{input}} записа за раздел", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Използване на {{input}} реда за записи в разширен вертикален режим", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Скриване на колони:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Време", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Филтър/правило", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Контекст", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Страна", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Списък", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Таблица", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Обикновен", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Отваряне", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Нов доклад", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Намиране на подобни доклади", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Документация", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Прочетете документацията в uBlock/wiki, за да научите повече за всички функции на uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Въпроси и поддръжка", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Отговори на въпроси и други видове помощ се предоставят в Reddit /r/uBlockOrigin", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Проблеми с филтъра/уебсайтът е счупен", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Докладвайте за проблеми с филтрирането на конкретни уебсайтове в uBlockOrigin/uAssets за проследяване на проблеми. Изисква се акаунт в GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Важно: Избягвайте да използвате други блокери с подобно предназначение заедно с uBlock Origin, тъй като това може да доведе до проблеми с филтрирането на определени уебсайтове.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Съвети: Уверете се, че списъците ви с филтри са актуални. Дневникът е основният инструмент за диагностициране на проблеми, свързани с филтрите.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Доклад за грешка", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Докладвайте за проблеми със самия uBlock Origin в uBlockOrigin/uBlock-issue за проследяване на проблеми. Изисква се акаунт в GitHub.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Информация за отстраняване на неизправности", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "По-долу е представена техническа информация, която може да е полезна, когато доброволците се опитват да ви помогнат да разрешите даден проблем.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Докладване на проблем с филтъра", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "За да се избегне натоварването на доброволците с дублиращи се доклади, моля, проверете дали проблемът все още не е докладван.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Списъците с филтри се актуализират ежедневно. Уверете се, че вашият проблем вече не е решен в най-новите списъци с филтри.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Проверете дали проблемът продължава да съществува след презареждане на проблемната уеб страница.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Адрес на уеб страницата:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Уеб страницата...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Изберете запис --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Показва реклами или остатъци от реклами", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Има наслагвания или други неудобства", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Открива uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Има проблеми, свързани с поверителността", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Функционира неправилно, когато uBlock Origin е активиран", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Отваря нежелани раздели или прозорци", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Води до зловреден софтуер, фишинг", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Маркиране на уеб страницата като “NSFW” (“не е безопасна за работа”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Политика за поверителност", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Списък с промени", + "description": "" + }, + "aboutCode": { + "message": "Изходен код (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Сътрудници", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Изходен код", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Преводи", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Списъци с филтри", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Външни зависимости (съвместими с GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Собствените списъци с филтри на uBO се хостват свободно на следните CDN-и:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Ще бъде използван случайно избран CDN, когато трябва да се обнови списък с филтри", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Изнасяне във файл...", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "ublock-всички-настройки_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Възстановяване от файл...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Възстановяване на първоначалните настройки...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Всички настройки ще бъдат презаписани с данни, архивирани на {{time}} и uBlock₀ ще се рестартира.\n\nПрезаписване на съществуващите настройки, използвайки архивираните данни?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Данните не могат да бъдат прочетени или са невалидни", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Всички настройки ще бъдат премахнати и uBlock₀ ще се рестартира.\n\nВръщане на uBlock₀ към стандартните настройки?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Грешка в мрежата: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Абониране", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "преди минута", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "преди {{value}} минути", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "преди час", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "преди {{value}} часа", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "преди ден", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "преди {{value}} дни", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Показване на табло", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Показване на дневник за мрежовите заявки", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "изключен", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Страницата е блокирана", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin предотврати зареждането на страницата:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Блокиращ филтър", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "без параметри", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Намерен в:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Назад", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Затваряне на прозореца", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Без повторно предупреждение за този сайт", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Изключване на строгото блокиране за {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Временно", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Постоянно", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Продължаване", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Блокираната страница иска да Ви пренасочи към друг сайт. Ако изберете да продължите, ще отидете директно на: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Причина:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Злонамерена", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Проследяване", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Неблагонадеждна", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Изнасяне в облачно хранилище", + "description": "tooltip" + }, + "cloudPull": { + "message": "Внасяне от облачно хранилище", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Внасяне на настройки от облачно хранилище и обединяване с текущите", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Име на устройството:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Внимание! Променяте настройките на свой собствен риск.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Изпращане", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Прилагане на промените", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Връщане", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "байта", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Блокиране на елемента в рамката...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Абониране за списъка с филтри...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Временно разрешаване на големи мултимедийни елементи", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Преглед на изходния код…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Натиснете клавиши", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Превключване на заключеното превъртане", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Копиране в клипборда", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Избиране на всичко", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Превключване на козметичното филтриране", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Превключване на JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Отпуснат режим на блокиране", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Използвано пространство: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "КБ", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "МБ", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "ГБ", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Щракнете, за да се зареди", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Грешки: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Не може да се филтрира правилно при стартиране на браузъра.\nПрезаредете страницата, за да се уверите, че филтрирането е правилно.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Това поле трябва да бъде последното", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/bn/messages.json b/src/_locales/bn/messages.json index 575fbf156309b..1e9c995815196 100644 --- a/src/_locales/bn/messages.json +++ b/src/_locales/bn/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"অবশেষে, একটি কার্যকর বিজ্ঞাপন প্রতিরোধক। সিপিইউ এবং মেমরি সহায়ক।", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "একটি শক্তিশালী বিজ্ঞাপন প্রতিরোধক, অবশেষে তৈরী হল। যা সিপিইউ এবং মেমরির জন্য সহনীয়।", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — ড্যাশবোর্ড", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — ড্যাশবোর্ড", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"সেটিংস", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "সতর্কীকরণ! আপনার পরিবর্তনগুলো সংরক্ষণ করা হয়নি।", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"তৃতীয় পক্ষের ফিল্টারস", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "এখানে থাকুন", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"আমার ফিল্টারস", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "বাদ দিন", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"আমার নিয়ম", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "সেটিংস", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"পরিচ্ছন্ন তালিকা", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "ছাঁকন তালিকা", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — ঘটনাবলী", - "description":"Title for the logger window" + "1pPageName": { + "message": "আমার ফিল্টার", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"সম্পর্কে", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "আমার নিয়ম", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"ক্লিক: এই সাইটের জন্য uBlock₀ নিষ্ক্রিয়\/সক্রিয় করবে।\n\nCtrl+ক্লিক: শুধু এই পাতার জন্য uBlock₀ নিষ্ক্রিয় করবে।", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "বিশ্বস্ত তালিকা", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"অবরোধের অনুরোধ", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "শর্টকাটগুলি", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"এই পাতায়", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — ঘটনাবলী", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}}টি বা {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "সম্পর্কে", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"ইনস্টলের পর থেকে", - "description":"English: since install" + "supportPageName": { + "message": "সাহায্য", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"বা", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — তথ্য নিরিক্ষক", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"ড্যাশবোর্ড খোলার জন্য ক্লিক করুন", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "অ্যাডভান্সড সেটিংস", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"উপাদান বাছাইকারী মোডে প্রবেশ করুন", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "ক্লিক: এই সাইটের জন্য uBlock₀ সক্রিয়/নিষ্ক্রিয় করুন\n\nCtrl+ক্লিক: শুধু এই পেজে uBlock₀ নিষ্ক্রিয় করুন", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"ঘটনাবলী খুলুন", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "এই সাইটে uBlock₀ নিষ্ক্রিয় করুন\n\nCtrl+ক্লিক: শুধু এই পেজে uBlock₀ নিষ্ক্রিয় করুন", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"এই সাইটের জন্য সব পপআপ প্রতিরোধ অদলবদল করুন", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "এই সাইটের জন্য ইউব্লক₀ সক্রিয় করতে ক্লিক করুন।", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"এই সাইটের জন্য বড় মিডিয়া উপাদান অবরোধ অদলবদল করুন", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "অবরোধের অনুরোধ", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"এই সাইটের জন্য বাহ্যিক ফিল্টারিং অদলবদল করুন", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "এই পাতায়", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"এই সাইটের রিমোট ফন্টের অবরোধ অদলবদল করুন", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}}টি বা {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"সার্বজনীন নিয়ম: এই কলামটি সেইসব নিয়মের জন্য যা সকল সাইটের উপর প্রযোজ্য।", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "ইনস্টলের পর থেকে", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"অভ্যন্তরীন নিয়ম: এই কলামটি সেইসব নিয়মের জন্য যা শুধু বর্তমান সাইটে প্রয়োগ করা হবে।\nঅভ্যন্তরীন নিয়ম সার্বজনীন নিয়মকে অগ্রাহ্য করবে।", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "বা", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"আপনার পরিবর্তনগুলি স্থায়ী করতে ক্লিক করুন।", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "এই পাতাটা অবরুদ্ধ হয়েছে", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"আপনার পরিবর্তনগুলি প্রত্যাবর্তন করতে ক্লিক করুন।", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "ইনস্টল করার পর থেকে অবরুদ্ধ হয়েছে", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"সব", - "description":"" + "popupDomainsConnected_v2": { + "message": "যুক্ত ডোমেন ", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"চিত্র", - "description":"" + "popupTipDashboard": { + "message": "ড্যাশবোর্ড খুলুন", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"৩য়-দল", - "description":"" + "popupTipZapper": { + "message": "উপাদান অপসারণ মোডে প্রবেশ করুন", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"৩য়-দলের css\/চিত্র", - "description":"" + "popupTipPicker": { + "message": "উপাদান বাছাইকারী মোডে প্রবেশ করুন", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"সারির স্ক্রিপ্ট", - "description":"" + "popupTipLog": { + "message": "ঘটনাবলী খুলুন", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"১ম-দলের স্ক্রিপ্ট", - "description":"" + "popupTipReport": { + "message": "এই ওয়েবসাইট এর একটি সমস্যার ব্যাপারা অভিযোগ যানান", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"৩য়-দলের স্ক্রিপ্ট", - "description":"" + "popupTipNoPopups": { + "message": "এই সাইটের সব পপআপ ব্লকিং চালু/বন্ধ করুন", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"৩য়-দলের ফ্রেম", - "description":"" + "popupTipNoPopups1": { + "message": "এই সাইটে সকল পপআপ বন্ধ করতে ক্লিক করুন", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"সংযুক্ত ডোমেইন", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "এই সাইটে আর কোনো পপআপ ব্লক না করতে ক্লিক করুন", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{total}}টির মধ্যে {{count}}টি", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "এই সাইটের বড় মিডিয়া উপাদানগুলো অবরোধ ব্লক করার জন্য অদলবদল করুন", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"তৈরি করুন", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "এই সাইটে বড় মিডিয়া এলিমেন্ট ব্লক করতে ক্লিক করুন", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"চয়ন করুন", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "এই সাইটের বর মিডিয়া এলিমেন্টগুলি ব্লক করা বন্ধ করতে ক্লিক করুন", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"প্রস্থান", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "এই সাইটের জন্য সৌন্দর্যবর্ধক ছাঁকন চালু/বন্ধ করুন", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"প্রাকদর্শন", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "এই সাইটে সৌন্দর্যবর্ধক ছাঁকন প্রক্রিয়া বন্ধ করতে ক্লিক করুন", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"নেট ফিল্টার", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "এই সাইটে সৌন্দর্যবর্ধক ছাঁকন প্রক্রিয়া চালু করতে ক্লিক করুন", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"প্রসাধনী ফিল্টার", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "এই সাইটের রিমোট ফন্ট বন্ধের প্রক্রিয়া অদলবদল করুন", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"ক্লিক, Ctrl-ক্লিক", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "এই সাইটে রিমোট ফন্ট ব্লক করতে ক্লিক করুন", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"উপাদান অবরুদ্ধ করুন", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "এই সাইটে রিমোট ফন্ট আর ব্লক না করতে ক্লিক করুন", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"অবরুদ্ধ উপাদানের স্থানধারক লুকান", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "এই সাইটের জাভাস্ক্রিপ্ট বন্ধ করতে ক্লিক করুণ", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"আইকনে অবরোধের অনুরোধ সংখ্যা দেখান", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "এই সাইটের জাভাস্ক্রিপ্ট চালু করতে ক্লিক করুন", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"টুলটিপ নিষ্ক্রিয় করুন", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "পপ-আপ উইন্ডোগুলি", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"উপযুক্ত স্থানে প্রাসঙ্গিক মেনু ব্যবহার করুন", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "বড় মিডিয়ার এলিমেন্টগুলো", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"বর্ণান্ধ বন্ধুত্বপূর্ণ", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "সৌন্দর্য্যবর্ধক ছাকন প্রক্রিয়া", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"ক্লাউড সঞ্চয়ের সমর্থন সক্রিয় করুন", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "রিমোট ফন্টগুলি", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"আমি একজন উন্নত ব্যবহারকারী (পড়া আবশ্যক<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "জাভাস্ক্রিপ্ট", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"অগ্রিম নিয়ে আসা নিষ্ক্রিয় করুন (অবরুদ্ধ নেটওয়ার্ক অনুরোধের জন্য যে কোনো সংযোগ প্রতিরোধ করতে)", - "description":"English: " + "popupMoreButton_v2": { + "message": "আরো", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"হাইপারলিঙ্ক নিরীক্ষণ\/বাতিঘর নিষ্ক্রিয় করুন", - "description":"English: " + "popupLessButton_v2": { + "message": "কম", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"স্থানীয় IP ঠিকানা ফাঁস থেকে WebRTC কে প্রতিরোধ করে", - "description":"English: " + "popupTipGlobalRules": { + "message": "সার্বজনীন নিয়ম: এই স্তম্ভ সেইসব নিয়মের জন্য যা সকল সাইটের উপর প্রযোজ্য।", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"পূর্বনির্ধারিত আচরণ", - "description":"" + "popupTipLocalRules": { + "message": "অভ্যন্তরীন নিয়ম: এই কলামটি সেইসব নিয়মের জন্য যা শুধু বর্তমান সাইটে প্রয়োগ করা হবে।\nঅভ্যন্তরীন নিয়ম সার্বজনীন নিয়মকে অগ্রাহ্য করবে।", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"এই পূর্বনির্ধারিত আচরণ প্রতি সাইট ভিত্তিতে ওভাররাইড করা যেতে পারে", - "description":"" + "popupTipSaveRules": { + "message": "আপনার পরিবর্তনগুলি স্থায়ী করতে ক্লিক করুন।", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"প্রসাধন ফিল্টারিং নিষ্ক্রিয় করুন", - "description":"" + "popupTipRevertRules": { + "message": "আপনার পরিবর্তনগুলি ফেরত নিতে ক্লিক করুন।", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"{{input:number}} কেবির থেকে বড় মিডিয়া উপাদান অবরুদ্ধ করুন", - "description":"" + "popupAnyRulePrompt": { + "message": "সব", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"রিমোট ফন্ট অবরুদ্ধ করুন", - "description":"" + "popupImageRulePrompt": { + "message": "চিত্র", + "description": "" }, - "settingsStorageUsed":{ - "message":"সংগ্রহস্থল ব্যবহার: {{value}} বাইট", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "৩য়-পক্ষ", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"সর্বশেষ পুনঃস্থাপন:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "৩য়-পক্ষের সিএসএস/চিত্র", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"সর্বশেষ ব্যাকআপ:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "সারির সাথে সঙ্গতিপূর্ণ স্ক্রিপ্ট", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"এ থেকে {{netFilterCount}}টি নেটওয়ার্ক ফিল্টার + {{cosmeticFilterCount}}টি প্রসাধনী ফিল্টার:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "১ম-পক্ষের স্ক্রিপ্ট", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{total}}টির মধ্যে {{used}}টি ব্যবহৃত", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "৩য়-পক্ষের স্ক্রিপ্ট", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"ফিল্টার তালিকা স্বয়ংক্রিয়-হালনাগাদ করুন।", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "৩য়-পক্ষের ফ্রেম", + "description": "" }, - "3pUpdateNow":{ - "message":"এখনই হালনাগাদ করুন", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "যুক্ত ডোমেন ", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"সব ক্যাশে শোধন করুন", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{total}}টির মধ্যে {{count}}টি", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"প্রসাধনী ফিল্টার পার্স ও কার্যকর করুন।", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "সংস্করণ", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      এই অপশনটি অ্যাডব্লক-প্লাসের সামঞ্জস্যপূর্ণ “উপাদান আড়াল করার” ফিল্টারকে<\/a> সক্রিয় করবে। এই ফিল্টারগুলি মূলত প্রসাধনী, তাদের একটি ওয়েব পাতায় উপাদান আড়াল করতে প্রয়োজন হয় যাকে চাক্ষুষ উত্পাত বলিয়া গণ্য করা হয়, এবং যাদের নেট অনুরোধ ভিত্তিক ফিল্টারিং ইঞ্জিন দ্বারা অবরুদ্ধ করা যায় না।<\/p>

      এই বৈশিষ্ট্য সক্রিয় করলে uBlock₀-এর মেমরির পদচিহ্ন বৃদ্ধি পাবে।<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "স্ক্রিপ্ট", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"জেরেরিক প্রসাধনী ছাঁকনি উপেক্ষা করুন।", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "কাঠামো", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      জেনেরিক প্রসাধনী ছাঁকনি হচ্ছে সেইসব প্রসাধনী ছাঁকনি যা সব ওয়েবসাইটে প্রয়োগের জন্য অভিপ্রেত।

      যদিও তা uBlock₀ দ্বারা দক্ষতার সঙ্গে পরিচালনা করে, কিন্তু জেনেরিক প্রসাধন ফিল্টার এখনও কিছু ওয়েব পাতার পরিমাপযোগ্য মেমরি ও CPU-র অত্যাধিক চাপ সৃষ্টিতে অবদান রাখতে পারে, বিশেষ করে বড় এবং দীর্ঘ একটিতে।

      এই অপশন সক্রিয় করলে জেনেরিক প্রসাধনী ছাঁকনি পরিচালিত হবে যা ওয়েব পাতার পরিমাপযোগ্য মেমরি ও CPU-র অত্যাধিক চাপ সৃষ্টি দূর করবে এবং uBlock₀ নিজেই মেমরি পদাঙ্ক অর্ধ করবে।

      এটা কম শক্তিশালী ডিভাইসে এই অপশনটি সক্রিয় করার জন্য সুপারিশ করা হচ্ছে।", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "তৈরি করুন", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"অবরুদ্ধ হোস্টের তালিকা", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "চয়ন করুন", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"পরিবর্তনগুলি প্রয়োগ", - "description":"English: Apply changes" + "pickerQuit": { + "message": "প্রস্থান", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"বিজ্ঞাপন", - "description":"English: Ads" + "pickerPreview": { + "message": "প্রাকদর্শন", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"গোপনীয়তা", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "নেটওয়ার্ক ফিল্টার", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"ম্যালওয়্যার ডোমেইন", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "প্রসাধনী ফিল্টার", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"সামাজিক", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "ক্লিক, Ctrl-ক্লিক", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"বহুমুখী", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "উপাদান রুদ্ধ করুন", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"অঞ্চল, ভাষা", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "অবরুদ্ধ উপাদানের স্থানধারক লুকান", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"স্বনির্ধারিত", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "আইকনে অবরোধের অনুরোধ সংখ্যা দেখান", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"লাইন প্রতি একটি URL। ‘!’ সহ উপসর্গ লাইন উপেক্ষা করা হবে। অকার্যকর URL গুলি নীরবে উপেক্ষা করা হবে।", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "টুলটিপ নিষ্ক্রিয় করুন", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"পার্স", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "উপযুক্ত স্থানে প্রাসঙ্গিক মেনু ব্যবহার করুন", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"ক্যাশে শোধন করুন", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "বর্ণান্ধ সহযোগী", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"নতুন সংস্করণ উপলব্ধ", - "description":"English: new version available" + "settingsAppearance": { + "message": "দৃষ্টি", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"পুরোনো", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "থিম", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"সর্বশেষ হালনাগাদ: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "কাস্টম অ্যাকসেন্ট রঙ", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"লাইন প্রতি একটি ফিল্টার। একটি ফিল্টার স্পষ্ট হোস্টনেম বা অ্যাডব্লক প্লাস-সামঞ্জস্যপূর্ণ ফিল্টার হতে পারে। ‘!’ সহ উপসর্গ লাইন উপেক্ষা করা হবে।", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "ক্লাউড সংরক্ষণ সক্রিয় করুন", + "description": "" }, - "1pImport":{ - "message":"আমদানি ও পরিশেষে যোগ করুন", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "আমি একজন উন্নত ব্যবহারকারী (পড়া আবশ্যক)", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"রপ্তানি করুন", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "প্রি-ফেচিং বন্ধ করুন (অবরুদ্ধ নেটওয়ার্ক থেকে যে কোনো সংযোগ প্রতিরোধ করতে)", + "description": "English: " }, - "1pExportFilename":{ - "message":"amar-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "হাইপারলিঙ্ক নিরীক্ষণ নিষ্ক্রিয় করুন", + "description": "English: " }, - "1pApplyChanges":{ - "message":"পরিবর্তনগুলি প্রয়োগ", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "স্থানীয় আইপি ঠিকানা ফাঁস থেকে ওয়েব আর.টি.সি.কে প্রতিরোধ করুন", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"স্থায়ী নিয়ম", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "পূর্বনির্ধারিত আচরণ", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"অস্থায়ী নিয়ম", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "এই পূর্বনির্ধারিত আচরণ প্রতি সাইট ভিত্তিতে ওভাররাইড করা যেতে পারে", + "description": "" }, - "rulesRevert":{ - "message":"প্রত্যাবর্তন", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "প্রসাধন ফিল্টারিং নিষ্ক্রিয় করুন", + "description": "" }, - "rulesCommit":{ - "message":"কমিট", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "{{input:number}} কেবির থেকে বড় মিডিয়া উপাদান অবরুদ্ধ করুন", + "description": "" }, - "rulesEdit":{ - "message":"সম্পাদনা", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "রিমোট ফন্ট অবরুদ্ধ করুন", + "description": "" }, - "rulesEditSave":{ - "message":"সংরক্ষণ", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "জাভা স্ক্রিপ্ট বন্ধ করা", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"বাতিল করুন", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "CSP প্রতিবেদন অবরুদ্ধ করুন", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"ফাইল থেকে আমদানি...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Canonical Name এর উন্মোচন", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"ফাইলে রপ্তানি", - "description":"" + "settingsAdvanced": { + "message": "অ্যাডভান্সড", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"amar-ublock-dynamic-niyom_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "শুধুমাত্র প্রযুক্তিগত ব্যবহারকারীদের জন্য উপযুক্ত ফিচারসমুহ", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"আপনার গতিশীল ফিল্টারের নিয়মের তালিকা।", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "উন্নত সেটিংস", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"শব্দবিন্যাসের নিয়ম: source destination type action<\/code> (সম্পূর্ণ নথিপত্র<\/a>)।", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "সর্বশেষ পুনঃস্থাপন:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"আপনার হোস্টের তালিকা যাদের জন্য uBlock₀ নিষ্ক্রিয় করা হবে। লাইন প্রতি একটি ভুক্তি। অবৈধ হোস্ট নাম নিশব্দে উপেক্ষা করা হবে।", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "সর্বশেষ ব্যাকআপ:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"আমদানি ও পরিশেষে যোগ করুন", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "এ থেকে {{netFilterCount}}টি নেটওয়ার্ক ফিল্টার + {{cosmeticFilterCount}}টি প্রসাধনী ফিল্টার:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"রপ্তানি করুন", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{total}}টির মধ্যে {{used}}টি ব্যবহৃত", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"amar-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "ফিল্টার তালিকা স্বয়ংক্রিয়-হালনাগাদ করুন।", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"পরিবর্তনগুলি প্রয়োগ", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "এখনই হালনাগাদ করুন", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"ধরন", - "description":"English: Type" + "3pPurgeAll": { + "message": "সব ক্যাশে শোধন করুন", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"ডোমেইন", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "প্রসাধনী ফিল্টার পার্স ও কার্যকর করুন।", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "

      এই অপশনটি অ্যাডব্লক-প্লাসের সামঞ্জস্যপূর্ণ “উপাদান আড়াল করার” ফিল্টারকে সক্রিয় করবে। এই ফিল্টারগুলি মূলত প্রসাধনী, তাদের একটি ওয়েব পাতায় উপাদান আড়াল করতে প্রয়োজন হয় যাকে চাক্ষুষ উত্পাত বলিয়া গণ্য করা হয়, এবং যাদের নেট অনুরোধ ভিত্তিক ফিল্টারিং ইঞ্জিন দ্বারা অবরুদ্ধ করা যায় না।

      এই বৈশিষ্ট্য সক্রিয় করলে uBlock₀-এর মেমরির পদচিহ্ন বৃদ্ধি পাবে।

      ", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"ফিল্টার", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "জেরেরিক প্রসাধনী ছাঁকনি উপেক্ষা করুন।", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"সব", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

      জেনেরিক প্রসাধনী ছাঁকনি হচ্ছে সেইসব প্রসাধনী ছাঁকনি যা সব ওয়েবসাইটে প্রয়োগের জন্য অভিপ্রেত।

      যদিও তা uBlock₀ দ্বারা দক্ষতার সঙ্গে পরিচালনা করে, কিন্তু জেনেরিক প্রসাধন ফিল্টার এখনও কিছু ওয়েব পাতার পরিমাপযোগ্য মেমরি ও CPU-র অত্যাধিক চাপ সৃষ্টিতে অবদান রাখতে পারে, বিশেষ করে বড় এবং দীর্ঘ একটিতে।

      এই অপশন সক্রিয় করলে জেনেরিক প্রসাধনী ছাঁকনি পরিচালিত হবে যা ওয়েব পাতার পরিমাপযোগ্য মেমরি ও CPU-র অত্যাধিক চাপ সৃষ্টি দূর করবে এবং uBlock₀ নিজেই মেমরি পদাঙ্ক অর্ধ করবে।

      এটা কম শক্তিশালী ডিভাইসে এই অপশনটি সক্রিয় করার জন্য সুপারিশ করা হচ্ছে।", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"পর্দার আড়ালে", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "সবগুলি ফিল্টার তালিকা লোড না হওয়া পর্যন্ত নেটওয়ার্ক কার্যকলাপ স্থগিত করুন", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"ফিল্টার লগের ভুক্তি", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "অবরুদ্ধ হোস্টের তালিকা", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"ভুক্তির সর্বাধিক সংখ্যা", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "পরিবর্তনগুলি প্রয়োগ", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"প্রসঙ্গ:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "বিল্ট-ইন", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"ধরন:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "বিজ্ঞাপন", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"ডায়নামিক URL ফিল্টারিং", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "গোপনীয়তা", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"স্থির ফিল্টারিং", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "ম্যালওয়্যার ডোমেইন", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{type}}-এর নেটওয়ার্ক অনুরোধ {{action}} {{br}}যার URL ঠিকানা {{url}}-এর সাথে মিলেছে {{br}}এবং যার মূলভিত্তি {{origin}},{{br}} {{importance}} এখানে একটি মেলানো ব্যতিক্রম ফিল্টার আছে।", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "সোশ্যাল উইজেট", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"অবরুদ্ধ করুন", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "কুকি নোটিশ", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"মঞ্জুর", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "বিরক্তিকর", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"ধরন “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "বহুমুখী", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"যে কোন ধরন", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "অঞ্চল, ভাষা", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"“{{origin}}” থেকে", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "স্বনির্ধারিত", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"যে কোন জায়গা থেকে", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "আমদানি করুন...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"এছাড়া যখন", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "লাইন প্রতি একটি URL। ‘!’ সহ উপসর্গ লাইন উপেক্ষা করা হবে। অকার্যকর URL গুলি নীরবে উপেক্ষা করা হবে।", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"এমনকি যদি", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "পুরোনো", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"স্থির ফিল্টার {{filter}} পাওয়া গেছে:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "কন্টেন্ট দেখুন", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"পরিবর্তন লগ", - "description":"English: Change log" + "3pLastUpdate": { + "message": "সর্বশেষ হালনাগাদ: {{ago}}", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"উইকি", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "হালনাগাদ করা হচ্ছে...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Support", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "একটি নেটওয়ার্ক ত্রুটি রিসোর্স বা তথ্য হালনাগাদ হওয়া রোধ করেছে।", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"উত্স কোড (GPLv৩)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "সন্দেহজনক উৎস থেকে ফিল্টারে কোন কিছু যোগ করবেন না।", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"অবদানকারী", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "আপনার কাস্টম ফিল্টারটি চালু করুন", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"ফাইলে ব্যাকআপ", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "কাস্টম ফিল্টারকে বিশ্বস্ততার অনুমতি দিন", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"amar-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "আমদানি করে পরিশেষে যোগ করুন", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"ফাইল থেকে পুনরুদ্ধার...", - "description":"English: Restore from file..." + "1pExport": { + "message": "রপ্তানি করুন", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"ডিফল্ট সেটিংসে পুন:স্থাপন করুন...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "amar-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"{{time}}-এর ডেটা ব্যাকআপ ব্যবহার করে আপনার সেটিংস পুনঃলিখিত হবে, এবং uBlock₀ পুনরায় চালু হবে।\n\nডেটা ব্যাকআপ ব্যবহার করে সমস্ত বিদ্যমান সেটিংস পুনঃলিখবেন?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "পরিবর্তনগুলি প্রয়োগ", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"উপাত্তটি পড়া যায়নি বা অকার্যকর", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "স্থায়ী নিয়ম", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"আপনার সব সেটিংস বাতিল করা হবে, এবং uBlock₀ পুনরায় চালু হবে।\n\nuBlock₀ সেটিংস পুনঃস্থাপন করবেন?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "অস্থায়ী নিয়ম", + "description": "header" }, - "errorCantConnectTo":{ - "message":"{{url}} -এ সংযোগ করতে অক্ষম", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "প্রত্যাবর্তন", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: আপনার নিজস্ব ফিল্টার তালিকায় নিম্নলিখিত URL যোগ করবেন?\n\nশিরোনাম: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "কমিট", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"এক মিনিট আগে", - "description":"English: a minute ago" + "rulesEdit": { + "message": "সম্পাদনা", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} মিনিট আগে", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "সংরক্ষণ", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"এক ঘণ্টা আগে", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "বাতিল করুন", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} ঘণ্টা আগে", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "ফাইল থেকে আমদানি...", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"এক দিন আগে", - "description":"English: a day ago" + "rulesExport": { + "message": "ফাইলে রপ্তানি", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} দিন আগে", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "amar-ublock-dynamic-niyom_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"ড্যাশবোর্ড দেখুন", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "আপনার গতিশীল ফিল্টারের নিয়মের তালিকা।", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"লগার দেখান", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "শব্দবিন্যাসের নিয়ম: source destination type action (সম্পূর্ণ নথিপত্র)।", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"বন্ধ", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "সাজাও:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uব্লক অরিজিন নিচের পৃষ্ঠা লোড করাকে প্রতিহত করেছে:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "নিয়মের ধরন", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"নিম্নলিখিত ফিল্টারের কারণে", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "উৎস", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"প্যারামিটার বিহীন", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "গন্তব্য", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"যা এতে পাওয়া গেছে:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "আপনার হোস্টের তালিকা যাদের জন্য uBlock₀ নিষ্ক্রিয় করা হবে। লাইন প্রতি একটি ভুক্তি। অবৈধ হোস্ট নাম নিশব্দে উপেক্ষা করা হবে।", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"ফিরে যান", - "description":"English: Go back" + "whitelistImport": { + "message": "আমদানি ও পরিশেষে যোগ করুন", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"এই উইন্ডোটি বন্ধ করুন", - "description":"English: Close this window" + "whitelistExport": { + "message": "রপ্তানি করুন", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"{{hostname}}-এর জন্য কঠোর অবরোধ নিষ্ক্রিয় করুন", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "amar-ublock-whitelist_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"সাময়িকভাবে", - "description":"English: Temporarily" + "whitelistApply": { + "message": "পরিবর্তনগুলি প্রয়োগ", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"স্থায়ীভাবে", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "ধরন", + "description": "English: Type" }, - "cloudPush":{ - "message":"ক্লাউড সঞ্চয়ে রপ্তানি করুন", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "ডোমেইন", + "description": "English: Domain" }, - "cloudPull":{ - "message":"ক্লাউড সঞ্চয় থেকে আমদানি করুন", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"ক্লাউড সংগ্রহস্থল থেকে আমদানি করে বর্তমানে সেটিংসের সঙ্গে একত্রীকরণ করুন", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "ফিল্টার", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "সব", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"এই ডিভাইসের নাম:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "পর্দার আড়ালে", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"জমা দিন", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "বর্তমান ট্যাব", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"প্রত্যাবর্তন", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "ট্যাবের বিষয় বস্তু রিলোড করুণ", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"বাইট", - "description":"" + "loggerDomInspectorTip": { + "message": "ড.অ.ম. পরিদর্শক বোতাম", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"সাময়িকভাবে বৃহৎ মিডিয়া উপাদান মঞ্জুরি দিন", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "পপআপ এলাকার বোতাম", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "ইউব্লক অরিজিন উইকি: লগার", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "লগার পরিষ্কার করুন", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "লগার থামান (আগত সকল তথ্য বাতিল করুন)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "লগার চালু করুন", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "লগার ছাকন বোতাম", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "ফিল্টার লগের ভুক্তি", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "লগার ছাকন বাছাইকরণ", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "না", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "অবরুদ্ধ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "অনুমোদিত", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "পাল্টানো", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "১ম-পক্ষ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "৩য়-পক্ষ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "বিস্তারিত", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "ছাকন", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "ছাঁকন তালিকা", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "নিয়ম", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "প্রসঙ্গ", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "রুট প্রসঙ্গ", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "দলমত", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "ধরন", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "ইউ.আর.এল.", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "ডায়নামিক URL ফিল্টারিং", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "প্রসঙ্গ:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "ধরন:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "স্থির ফিল্টারিং", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{type}}-এর নেটওয়ার্ক অনুরোধ {{action}} {{br}}যার URL ঠিকানা {{url}}-এর সাথে মিলেছে {{br}}এবং যার মূলভিত্তি {{origin}},{{br}} {{importance}} এখানে একটি মেলানো ব্যতিক্রম ফিল্টার আছে।", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "অবরুদ্ধ করুন", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "মঞ্জুর", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "ধরন “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "যে কোন ধরন", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "“{{origin}}” থেকে", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "যে কোন জায়গা থেকে", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "এছাড়া যখন", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "এমনকি যদি", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "স্থির ফিল্টার {{filter}} পাওয়া গেছে:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "স্থির ফিল্টার বর্তমানে সক্রিয় ফিল্টার তালিকার কোনটিতে পাওয়া যায় নি", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "নীচের যে লগার এন্ট্রিগুলি তিনটি শর্ত সম্পূর্ণ পূরণ করে না তাদেরকে স্বয়ংক্রিয়ভাবে বাতিল হবে:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "শেষ {{input}} মিনিটের এন্ত্রিগুলো সংরক্ষণ করা হবে", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "প্রত্যেক ট্যাবের সর্বোচ্চ {{input}} পেজ লোড সংরক্ষণ করা হবে", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "প্রত্যেক ট্যাবে সর্বোচ্চ {{input}} এন্ট্রি সংরক্ষণ করা হবে", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "প্রত্যেক এন্ট্রির জন্য খাড়াভাবে ছড়ানো মোডে {{input}}গুলো লাইন ব্যবহার করা হবে", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "কলাম লুকানো:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "সময় {{input}}", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "ছাকন/নিয়ম {{input}}", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "অনুবন্ধ {{input}}", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "দলের অন্তর্ভুক্ত", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "তালিকা", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "ছক", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "সমান্তরাল", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "মার্কডাউন", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "খুলুন", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "নতুন অভিযোগ", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "একই রকম অভিযোগ দেখুন", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "ডকুমেন্টেশন", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "uBlock Origin এর সমস্ত ফিচার সম্পর্কে জানতে uBlock/wiki এ ডকুমেন্টেশন পড়ুন।", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "যোগাযোগ এবং সহায়তা", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "প্রশ্নের উত্তর এবং অন্যান্য ধরনের সাহায্য ও সহায়তা /r/uBlockOrigin সাবরেডিট এ দেওয়া আছে।", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "ফিল্টার সমস্যা/ওয়েবসাইট ভেঙে গেছে", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "নির্দিষ্ট ওয়েবসাইটের ফিল্টার সমস্যাগুলি uBlockOrigin/uAssets ইস্যু ট্র্যাকারে রিপোর্ট করুন একটি GitHub অ্যাকাউন্ট প্রয়োজন৷", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "গুরুত্বপূর্ণ: uBlock Origin-এর সাথে একই রকম-উদ্দেশ্যযুক্ত ব্লকার ব্যবহার করা এড়িয়ে চলুন, কারণ এটি নির্দিষ্ট ওয়েবসাইটে ফিল্টার এর সমস্যা সৃষ্টি করতে পারে।", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "টিপস: আপনার ফিল্টার তালিকা আপ টু ডেট আছে তা নিশ্চিত করুন। লগার হল ফিল্টার-সম্পর্কিত সমস্যা নির্ণয়ের প্রাথমিক টুল।", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "বাগ রিপোর্ট", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "uBlockOrigin/uBlock-issue ইস্যু ট্র্যাকার এ uBlock অরিজিন সংক্রান্ত সমস্যাগুলি রিপোর্ট করুন। একটি GitHub অ্যাকাউন্ট প্রয়োজন৷৷", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "সমস্যা সমাধানের তথ্য", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "স্বেচ্ছাসেবকরা যখন কোনো সমস্যা সমাধানের জন্য আপনাকে সাহায্য করার চেষ্টা করছেন তখন প্রযুক্তিগত তথ্য নিচে দেওয়া হল যা কার্যকর হতে পারে।", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "একটি ফিল্টার সমস্যা রিপোর্ট করুন", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "ডুপ্লিকেট রিপোর্ট সহ স্বেচ্ছাসেবকদের বোঝা এড়াতে, অনুগ্রহ করে যাচাই করুন যে সমস্যাটি ইতিমধ্যে রিপোর্ট করা হয়নি।", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "ফিল্টারের লিস্ট প্রতিদিন আপডেট করা হয়। নতুন আপডেটে আপনার সমস্যার সমাধান করা হয়েছে কিনা তা লক্ষ্য করুন। ", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "অভিযোগ দিন যদি আপনার রিলোডের পরও ওয়েবপেজের সমস্যার সমাধান না হয়।", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "ওয়েব পেজের ঠিকানা:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "ওয়েব পেজটি…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- একটি এন্ট্রি চয়ন করুন --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "বিজ্ঞাপন বা বিজ্ঞাপনের অবশিষ্টাংশ দেখায়", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "ওভারলে বা অন্যান্য উপদ্রব আছে", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "uBlock Origin শনাক্ত করে", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "গোপনীয়তা-সম্পর্কিত সমস্যা আছে", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "যখন uBlock Origin চালু করা থাকে তখন সমস্যা দেখা দেয়", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "অবাঞ্ছিত ট্যাব বা উইন্ডো খোলে", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "ব্যাডওয়্যার, প্রতারণমূলক জায়গায় নেয়", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "ওয়েব পৃষ্ঠাটিকে “NSFW” হিসাবে লেবেল করুন (“কাজের জন্য নিরাপদ নয়”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "গোপনীয়তার নীতি", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "পরিবর্তন লগ", + "description": "" + }, + "aboutCode": { + "message": "উত্স কোড (GPLv৩)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "অবদানকারী", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "সোর্স কোড", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "অনুবাদ সমূহ", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "ফিল্টার লিস্ট", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "বাহ্যিকভাবে নির্ভশীলসমূহ (জিপিএল ভা.৩-সঙ্গতিপূর্ণ)", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO-এর নিজস্ব ফিল্টার তালিকাগুলি নিম্নলিখিত CDN এ অবাধে হোস্ট করা হয়েছে:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "একটি ফিল্টার তালিকা আপডেট করার প্রয়োজন হলে একটি এলোমেলোভাবে বাছাই করা CDN ব্যবহার করা হয়", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "ফাইলে ব্যাকআপ", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "amar-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "ফাইল থেকে পুনরুদ্ধার...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "ডিফল্ট সেটিংসে পুন:স্থাপন করুন...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "{{time}}-এর ডেটা ব্যাকআপ ব্যবহার করে আপনার সেটিংস পুনঃলিখিত হবে, এবং uBlock₀ পুনরায় চালু হবে।\n\nডেটা ব্যাকআপ ব্যবহার করে সমস্ত বিদ্যমান সেটিংস পুনঃলিখবেন?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "উপাত্তটি পড়া যায়নি বা অকার্যকর", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "আপনার সব সেটিংস বাতিল করা হবে, এবং uBlock₀ পুনরায় চালু হবে।\n\nইউব্লক₀ সেটিংস পুনঃস্থাপন করবেন?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "{{url}} -এ সংযোগ করতে অক্ষম", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "সদস্যতা নাও", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "এক মিনিট আগে", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} মিনিট আগে", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "এক ঘণ্টা আগে", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} ঘণ্টা আগে", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "এক দিন আগে", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} দিন আগে", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "ড্যাশবোর্ড দেখুন", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "লগার দেখান", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "বন্ধ", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "পেজটি ব্লক করা হয়েছে", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uব্লক অরিজিন নিচের পৃষ্ঠা লোড করাকে প্রতিহত করেছে:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "নিম্নলিখিত ফিল্টারের কারণে", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "প্যারামিটার বিহীন", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "যা এতে পাওয়া গেছে:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "ফিরে যান", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "এই উইন্ডোটি বন্ধ করুন", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "এই সাইটের ব্যাপারে আর সতর্ক করবেন না", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "{{hostname}}-এর জন্য কঠোর অবরোধ নিষ্ক্রিয় করুন", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "সাময়িকভাবে", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "স্থায়ীভাবে", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "এগিয়ে যান", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "ব্লককৃত পাতাটি আরেকটি ওয়েবসাইটে নেয়। এগিয়ে যেতে চাইলে, সরাসরি এই জায়গায় যাবে: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "কারণ:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "ক্ষতিকারক", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "ট্র্যাকার", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "অখ্যাতিপূর্ণ", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "ক্লাউড সঞ্চয়ে রপ্তানি করুন", + "description": "tooltip" + }, + "cloudPull": { + "message": "ক্লাউড সঞ্চয় থেকে আমদানি করুন", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "ক্লাউড সংগ্রহস্থল থেকে আমদানি করে বর্তমানে সেটিংসের সঙ্গে একত্রীকরণ করুন", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "এই ডিভাইসের নাম:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "সতর্কবাণী! আপনার নিজ ঝুঁকিতে এই উন্নত সেটিংগুলি পরিবর্তন করুন।", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "জমা দিন", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "পরিবর্তনগুলি প্রয়োগ", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "প্রত্যাবর্তন", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "বাইট", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "ফ্রেমের উপাদান রুদ্ধ করো...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "ফিল্টার তালিকায় সাবস্ক্রাইব করুন...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "সাময়িকভাবে বৃহৎ মিডিয়া উপাদান মঞ্জুরি দিন", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "সোর্স কোড দেখুন.... ", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "শর্টকাট লিখুন", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "স্ক্রলিং চালু/বন্ধ করুন", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "ক্লিপবোর্ডে প্রতিলিপি করুন", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "সবগুলো নির্বাচন করুন", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "সৌন্দর্য্যবর্ধক ফিল্টার চালু বা বন্ধ করুন", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Javascript টগল করুন", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "রোধক মোড শিথিল করুন", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "ব্যবহৃত স্টোরেজ: {{value}}{{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "কিলোবাইট", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "মেগাবাইট", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "গিগাবাইট", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "লোড করতে টিপ দাও", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "এরর: {{গণনা}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "ঠিকভাবে ফিল্টার চালু করা যায়নি। পুনরায় আবার পেজ রিলোড করুন ঠিকভাবে ফিল্টার চালু করার জন্য", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/br_FR/messages.json b/src/_locales/br_FR/messages.json new file mode 100644 index 0000000000000..a08dbb0a5c5f2 --- /dev/null +++ b/src/_locales/br_FR/messages.json @@ -0,0 +1,1314 @@ +{ + "extName": { + "message": "uBlock Origin", + "description": "extension name." + }, + "extShortDesc": { + "message": "Erfin, ur stanker saotradurioù efedus hag a zouj d'ho reizhiad korvoiñ ha d'ho memor.", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "dashboardName": { + "message": "uBlock₀ — Taolenn-vourzh", + "description": "English: uBlock₀ — Dashboard" + }, + "dashboardUnsavedWarning": { + "message": "Diwallit! Kemmoù zo ha n'ho peus ket enrollet", + "description": "A warning in the dashboard when navigating away from unsaved changes" + }, + "dashboardUnsavedWarningStay": { + "message": "Chom amañ", + "description": "Label for button to prevent navigating away from unsaved changes" + }, + "dashboardUnsavedWarningIgnore": { + "message": "Tremen e-bioù", + "description": "Label for button to ignore unsaved changes" + }, + "settingsPageName": { + "message": "Arventennoù", + "description": "appears as tab name in dashboard" + }, + "3pPageName": { + "message": "Roll ar siloù", + "description": "appears as tab name in dashboard" + }, + "1pPageName": { + "message": "Ma siloù", + "description": "appears as tab name in dashboard" + }, + "rulesPageName": { + "message": "Ma reolennoù", + "description": "appears as tab name in dashboard" + }, + "whitelistPageName": { + "message": "Lec'hiennoù sur", + "description": "appears as tab name in dashboard" + }, + "shortcutsPageName": { + "message": "Berradennoù", + "description": "appears as tab name in dashboard" + }, + "statsPageName": { + "message": "uBlock₀ — Deizlevr ar rekedoù", + "description": "Title for the logger window" + }, + "aboutPageName": { + "message": "Diwar-benn", + "description": "appears as tab name in dashboard" + }, + "supportPageName": { + "message": "Skoazell", + "description": "appears as tab name in dashboard" + }, + "assetViewerPageName": { + "message": "uBlock₀ — Enseller elfennoù", + "description": "Title for the asset viewer page" + }, + "advancedSettingsPageName": { + "message": "Arventennoù araokaet", + "description": "Title for the advanced settings page" + }, + "popupPowerSwitchInfo": { + "message": "Klik: lazhañ/enaouiñ uBlock₀ war al lec'hienn-mañ.\n\nReol+klik: lazhañ uBlock₀ war al lec'hienn-mañ nemetken.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + }, + "popupPowerSwitchInfo1": { + "message": "Klikit evit lazhañ uBlock₀ war al lec'hienn-mañ.\n\nReol+klik evit lazhañ uBlock₀ war al lec'hienn-mañ.", + "description": "Message to be read by screen readers" + }, + "popupPowerSwitchInfo2": { + "message": "Enaouiñ uBlock₀ war al lec'hienn-mañ.", + "description": "Message to be read by screen readers" + }, + "popupBlockedRequestPrompt": { + "message": "Rekedoù stanket", + "description": "English: requests blocked" + }, + "popupBlockedOnThisPagePrompt": { + "message": "er bajenn-mañ", + "description": "English: on this page" + }, + "popupBlockedStats": { + "message": "{{count}} pe {{percent}}%", + "description": "Example: 15 (13%)" + }, + "popupBlockedSinceInstallPrompt": { + "message": "abaoe ar staliadur", + "description": "English: since install" + }, + "popupOr": { + "message": "pe", + "description": "English: or" + }, + "popupBlockedOnThisPage_v2": { + "message": "Stanket er bajenn-mañ", + "description": "For the new mobile-friendly popup design" + }, + "popupBlockedSinceInstall_v2": { + "message": "Stanket abaoe ar staliadur", + "description": "For the new mobile-friendly popup design" + }, + "popupDomainsConnected_v2": { + "message": "Domanioù kennasket", + "description": "For the new mobile-friendly popup design" + }, + "popupTipDashboard": { + "message": "Digeriñ an daolenn-vourzh", + "description": "English: Click to open the dashboard" + }, + "popupTipZapper": { + "message": "Lemel elfennoù", + "description": "Tooltip for the element-zapper icon in the popup panel" + }, + "popupTipPicker": { + "message": "Diuzañ elfennoù", + "description": "English: Enter element picker mode" + }, + "popupTipLog": { + "message": "Digeriñ deizlevr ar rekedoù", + "description": "Tooltip used for the logger icon in the panel" + }, + "popupTipReport": { + "message": "Danevelliñ ur gudenn war al lec'hienn-mañ", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipNoPopups": { + "message": "Lazhañ/enaouiñ evit stankañ an holl brenestroù pop-up war al lec'hienn-mañ", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups1": { + "message": "Stankañ an holl brenestroù pop-up war al lec'hienn-mañ", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2": { + "message": "Aotren an holl brenestroù pop-up war al lec'hienn-mañ", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoLargeMedia": { + "message": "Stankañ/aotren kargadur an elfennoù media pounner war al lec'hienn-mañ", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia1": { + "message": "Stankañ an elfennoù media pounner war al lec'hienn-mañ", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2": { + "message": "Aotren an elfennoù media pounner en-dro war al lec'hienn-mañ", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoCosmeticFiltering": { + "message": "Lazhañ/enaouiñ ar siloù kenedel war al lec'hienn-mañ", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering1": { + "message": "Lazhañ ar siloù kenedel war al lec'hienn-mañ", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2": { + "message": "Enaouiñ ar siloù kenedel war al lec'hienn-mañ", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoRemoteFonts": { + "message": "Aotren/stankañ ar polisoù diavaez war al lec'hienn-mañ", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts1": { + "message": "Stankañ ar polisoù diavaez war al lec'hienn-mañ", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts2": { + "message": "Aotren ar polisoù diavaez war al lec'hienn-mañ", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoScripting1": { + "message": "Diweredekaat JavaScript war al lec'hienn-mañ", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupTipNoScripting2": { + "message": "Gweredekaat JavaScript war al lec'hienn-mañ en-dro", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupNoPopups_v2": { + "message": "Prenestroù pop-up", + "description": "Caption for the no-popups per-site switch" + }, + "popupNoLargeMedia_v2": { + "message": "Elfennoù media pounner", + "description": "Caption for the no-large-media per-site switch" + }, + "popupNoCosmeticFiltering_v2": { + "message": "Silañ kenedel", + "description": "Caption for the no-cosmetic-filtering per-site switch" + }, + "popupNoRemoteFonts_v2": { + "message": "Polisoù diavaez", + "description": "Caption for the no-remote-fonts per-site switch" + }, + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" + }, + "popupMoreButton_v2": { + "message": "Muioc'h", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton_v2": { + "message": "Nebeutoc'h", + "description": "Label to be used to hide popup panel sections" + }, + "popupTipGlobalRules": { + "message": "Reolennoù hollek: er bann-mañ e vez lakaet ar reolennoù a dalvez da gement lec'hienn.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." + }, + "popupTipLocalRules": { + "message": "Reolennoù lec'hel: er bann-mañ e vez lakaet ar reolennoù ne dalvezont nemet d'al lec'hienn m'emaoc'h.\nAr reolennoù lec'hel a ya a-raok ar reolennoù hollek.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." + }, + "popupTipSaveRules": { + "message": "Lakaat ho kemmoù da dalvezout.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." + }, + "popupTipRevertRules": { + "message": "Nullañ ar c'hemmoù ho peus graet.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + }, + "popupAnyRulePrompt": { + "message": "Pep tra", + "description": "" + }, + "popupImageRulePrompt": { + "message": "Skeudennoù", + "description": "" + }, + "popup3pAnyRulePrompt": { + "message": "Kevelerien diavaez", + "description": "" + }, + "popup3pPassiveRulePrompt": { + "message": "CSS/skeudennoù kevelerien diavaez", + "description": "" + }, + "popupInlineScriptRulePrompt": { + "message": "skriptoù enlakaet", + "description": "" + }, + "popup1pScriptRulePrompt": { + "message": "Skriptoù domani ar bajenn", + "description": "" + }, + "popup3pScriptRulePrompt": { + "message": "Skriptoù kevelerien diavaez", + "description": "" + }, + "popup3pFrameRulePrompt": { + "message": "Frammoù kevelerien diavaez", + "description": "" + }, + "popupHitDomainCountPrompt": { + "message": "domanioù kennasket", + "description": "appears in popup" + }, + "popupHitDomainCount": { + "message": "{{count}} diwar {{total}}", + "description": "appears in popup" + }, + "popupVersion": { + "message": "Handelv", + "description": "Example of use: Version 1.26.4" + }, + "popup3pScriptFilter": { + "message": "skript", + "description": "Appears as an option to filter out firewall rows" + }, + "popup3pFrameFilter": { + "message": "framm", + "description": "Appears as an option to filter out firewall rows" + }, + "pickerCreate": { + "message": "Krouiñ", + "description": "English: Create" + }, + "pickerPick": { + "message": "Dibab", + "description": "English: Pick" + }, + "pickerQuit": { + "message": "Kuitaat", + "description": "English: Quit" + }, + "pickerPreview": { + "message": "Rakwel", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + }, + "pickerNetFilters": { + "message": "Siloù rouedad", + "description": "English: header for a type of filter in the element picker dialog" + }, + "pickerCosmeticFilters": { + "message": "Siloù kenedel", + "description": "English: Cosmetic filters" + }, + "pickerCosmeticFiltersHint": { + "message": "Klik, Reol.-klik", + "description": "English: Click, Ctrl-click" + }, + "pickerContextMenuEntry": { + "message": "Stankañ an elfenn-mañ…", + "description": "An entry in the browser's contextual menu" + }, + "settingsCollapseBlockedPrompt": { + "message": "Kuzhat an esaouennoù lezet gant an elfennoù bet stanket", + "description": "English: Hide placeholders of blocked elements" + }, + "settingsIconBadgePrompt": { + "message": "Diskouez an niver a rekedoù bet stanket war an arouez", + "description": "English: Show the number of blocked requests on the icon" + }, + "settingsTooltipsPrompt": { + "message": "Diweredekaat an tunioù", + "description": "A checkbox in the Settings pane" + }, + "settingsContextMenuPrompt": { + "message": "Ober gant al lañser kendestenn pa vez ezhomm", + "description": "English: Make use of context menu where appropriate" + }, + "settingsColorBlindPrompt": { + "message": "Mod daltonek", + "description": "English: Color-blind friendly" + }, + "settingsAppearance": { + "message": "Neuz", + "description": "Section for controlling user interface appearance" + }, + "settingsThemeLabel": { + "message": "Tem", + "description": "Label for checkbox to enable a custom dark theme" + }, + "settingsThemeAccent0Label": { + "message": "Liv splannañ personelaet", + "description": "Label for checkbox to pick an accent color" + }, + "settingsCloudStorageEnabledPrompt": { + "message": "Gweredekaat ar stokañ e-barzh ar goumoulenn (cloud)", + "description": "" + }, + "settingsAdvancedUserPrompt": { + "message": "Me zo un implijer araokaet", + "description": "Checkbox to let user access advanced, technical features" + }, + "settingsPrefetchingDisabledPrompt": { + "message": "Diweredekaat ar \"rak-lenn\", pe diougan an oberoù war ar rouedad (evit ma ne gennaskfe ket rekedoù ar rouedadoù stanket)", + "description": "English: " + }, + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Diweredekaat evezhiañ ar gourliammoù", + "description": "English: " + }, + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Mirout ouzh WebRTC da ziskuilhañ chomlec'hioù IP lec'hel", + "description": "English: " + }, + "settingPerSiteSwitchGroup": { + "message": "Emzalc'h dre ziouer", + "description": "" + }, + "settingPerSiteSwitchGroupSynopsis": { + "message": "Gallout a reer erlec'hiañ an emzalc'hioù-se dre ziouer e lec'hiennoù resis", + "description": "" + }, + "settingsNoCosmeticFilteringPrompt": { + "message": "Lazhañ ar siloù kenedel", + "description": "" + }, + "settingsNoLargeMediaPrompt": { + "message": "Stankañ an elfennoù media a zo pounneroc'h evit {{input}} KB ", + "description": "" + }, + "settingsNoRemoteFontsPrompt": { + "message": "Stankañ ar polisoù diavaez", + "description": "" + }, + "settingsNoScriptingPrompt": { + "message": "Diweredekaat JavaScript", + "description": "The default state for the per-site no-scripting switch" + }, + "settingsNoCSPReportsPrompt": { + "message": "Stankañ an danevelloù CSP", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" + }, + "settingsUncloakCnamePrompt": { + "message": "Diskouez an anvioù gwir (CNAME)", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" + }, + "settingsAdvanced": { + "message": "Araokaet", + "description": "Section for controlling advanced-user settings" + }, + "settingsAdvancedSynopsis": { + "message": "Fonksionelezhioù azasaet d'an implijerien araokaet hepken", + "description": "Description of section controlling advanced-user settings" + }, + "settingsAdvancedUserSettings": { + "message": "arventennoù araokaet", + "description": "For the tooltip of a link which gives access to advanced settings" + }, + "settingsLastRestorePrompt": { + "message": "Adsavet da ziwezhañ:", + "description": "English: Last restore:" + }, + "settingsLastBackupPrompt": { + "message": "Gwaredet da ziwezhañ:", + "description": "English: Last backup:" + }, + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} sil rouedad + {{cosmeticFilterCount}} sil kenedel diouzh:", + "description": "Appears at the top of the _3rd-party filters_ pane" + }, + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} anezho implijet diwar {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "3pAutoUpdatePrompt1": { + "message": "Hizivaat ar rolloù siloù ent-emgefreek", + "description": "A checkbox in the _3rd-party filters_ pane" + }, + "3pUpdateNow": { + "message": "Hizivaat diouzhtu", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pPurgeAll": { + "message": "Riñsañ an holl grubuilhoù", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pParseAllABPHideFiltersPrompt1": { + "message": "Dielfennañ ha lakaat ar siloù kenedel da dalvezout", + "description": "English: Parse and enforce Adblock+ element hiding filters." + }, + "3pParseAllABPHideFiltersInfo": { + "message": "Ar siloù kenedel a servij da guzhat elfennoù ur bajenn web a c'hallfe saotrañ ar gweled ha ne c'hallont ket bezañ stanket gant ar siloù rouedad diazezet war ar rekedoù.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + }, + "3pIgnoreGenericCosmeticFilters": { + "message": "Ober fae ouzh ar siloù kenedel hollek", + "description": "This will cause uBO to ignore all generic cosmetic filters." + }, + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Ar siloù kenedel hollek a zo siloù kenedel bet savet evit bezañ implijet war an holl lec'hiennoù. Ma'z enaouit an dibarzh-mañ e vo implijer nebeutoc'h a vevor hag ar reizhiad korvoiñ (CPU) war al lec'hiennoù-se.\n\nErbedet eo deoc'h enaouiñ an dibarzh-mañ m'emaoc'h oc'h ober gant un ardivink re zic'halloudek.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." + }, + "3pSuspendUntilListsAreLoaded": { + "message": "Ehan oberoù ar rouedad betek ma kargo an holl rolloù siloù", + "description": "A checkbox in the 'Filter lists' pane" + }, + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" + }, + "3pApplyChanges": { + "message": "Lakaat da dalvezout", + "description": "English: Apply changes" + }, + "3pGroupDefault": { + "message": "Enframmet", + "description": "Filter lists section name" + }, + "3pGroupAds": { + "message": "Bruderezh", + "description": "Filter lists section name" + }, + "3pGroupPrivacy": { + "message": "Buhez prevez", + "description": "Filter lists section name" + }, + "3pGroupMalware": { + "message": "Gwarez a-enep ar malware ha surentez", + "description": "Filter lists section name" + }, + "3pGroupSocial": { + "message": "Widgetoù sokial", + "description": "Filter lists section name" + }, + "3pGroupCookies": { + "message": "Notennoù diwar-benn an toupinoù", + "description": "Filter lists section name" + }, + "3pGroupAnnoyances": { + "message": "Saotradurioù", + "description": "Filter lists section name" + }, + "3pGroupMultipurpose": { + "message": "Siloù lies-implij", + "description": "Filter lists section name" + }, + "3pGroupRegions": { + "message": "Rannvroioù, broioù", + "description": "Filter lists section name" + }, + "3pGroupCustom": { + "message": "Personelaet", + "description": "Filter lists section name" + }, + "3pImport": { + "message": "Enporzhiañ", + "description": "The label for the checkbox used to import external filter lists" + }, + "3pExternalListsHint": { + "message": "Un URL dre linenn. Graet e vo fae ouzh an URLoù direizh hep kemenn deoc'h.", + "description": "Short information about how to use the textarea to import external filter lists by URL" + }, + "3pExternalListObsolete": { + "message": "Diamzeriet.", + "description": "used as a tooltip for the out-of-date icon beside a list" + }, + "3pViewContent": { + "message": "gwelet an endalc'had", + "description": "used as a tooltip for eye icon beside a list" + }, + "3pLastUpdate": { + "message": "Hizivaet da ziwezhañ: {{ago}}.\nKlikit evit hizivaat.", + "description": "used as a tooltip for the clock icon beside a list" + }, + "3pUpdating": { + "message": "Oc'h hizivaat…", + "description": "used as a tooltip for the spinner icon beside a list" + }, + "3pNetworkError": { + "message": "Ur fazi rouedad en deus miret an danvez da vezañ hizivaet.", + "description": "used as a tooltip for error icon beside a list" + }, + "1pTrustWarning": { + "message": "Arabat ouzhpennañ siloù a zeu diouzh mammennoù douetus.", + "description": "Warning against copy-pasting filters from random sources" + }, + "1pEnableMyFiltersLabel": { + "message": "Gweredekaat ma siloù personelaet", + "description": "Label for the checkbox use to enable/disable 'My filters' list" + }, + "1pTrustMyFiltersLabel": { + "message": "Kaout fiziañs er siloù personelaet", + "description": "Label for the checkbox use to trust the content of 'My filters' list" + }, + "1pImport": { + "message": "Enporzhiañ hag ouzhpennañ", + "description": "Button in the 'My filters' pane" + }, + "1pExport": { + "message": "Ezporzhiañ", + "description": "Button in the 'My filters' pane" + }, + "1pExportFilename": { + "message": "ma-siloù-statek-ublock_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" + }, + "1pApplyChanges": { + "message": "Lakaat da dalvezout", + "description": "English: Apply changes" + }, + "rulesPermanentHeader": { + "message": "Reolennoù da badout", + "description": "header" + }, + "rulesTemporaryHeader": { + "message": "Reolennoù berrbad", + "description": "header" + }, + "rulesRevert": { + "message": "Nullañ", + "description": "This will remove all temporary rules" + }, + "rulesCommit": { + "message": "Lakaat da dalvezout", + "description": "This will persist temporary rules" + }, + "rulesEdit": { + "message": "Kemmañ", + "description": "Will enable manual-edit mode (textarea)" + }, + "rulesEditSave": { + "message": "Enrollañ", + "description": "Will save manually-edited content and exit manual-edit mode" + }, + "rulesEditDiscard": { + "message": "Nullañ", + "description": "Will discard manually-edited content and exit manual-edit mode" + }, + "rulesImport": { + "message": "Enporzhiañ diouzh ur restr…", + "description": "" + }, + "rulesExport": { + "message": "Ezporzhiañ etrezek ur restr", + "description": "Button in the 'My rules' pane" + }, + "rulesDefaultFileName": { + "message": "ma-reolennoù-silañ-dinamek-ublock_{{datetime}}.txt", + "description": "default file name to use" + }, + "rulesHint": { + "message": "Roll eus ho reolennoù silañ dinamek.", + "description": "English: List of your dynamic filtering rules." + }, + "rulesFormatHint": { + "message": "Reolenn ereadurezh: mammenn pal seurt ober (Teuliadur klok e saozneg).", + "description": "English: dynamic rule syntax and full documentation." + }, + "rulesSort": { + "message": "Rummañ:", + "description": "English: label for sort option." + }, + "rulesSortByType": { + "message": "Seurt reolenn", + "description": "English: a sort option for list of rules." + }, + "rulesSortBySource": { + "message": "Mammenn", + "description": "English: a sort option for list of rules." + }, + "rulesSortByDestination": { + "message": "Pal", + "description": "English: a sort option for list of rules." + }, + "whitelistPrompt": { + "message": "En ur dermeniñ peseurt lec'hiennoù a zo sur e lavarit da uBlock Origin e peseurt lec'hiennoù e rank bezañ diweredekaet. Un enmont dre linenn.", + "description": "A concise description of the 'Trusted sites' pane." + }, + "whitelistImport": { + "message": "Enporzhiañ hag ouzhpennañ", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExport": { + "message": "Ezporzhiañ", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExportFilename": { + "message": "ma-lec'hiennoù-fizius-ublock_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" + }, + "whitelistApply": { + "message": "Lakaat da dalvezout", + "description": "English: Apply changes" + }, + "logRequestsHeaderType": { + "message": "Seurt", + "description": "English: Type" + }, + "logRequestsHeaderDomain": { + "message": "Domani", + "description": "English: Domain" + }, + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" + }, + "logRequestsHeaderFilter": { + "message": "Sil", + "description": "English: Filter" + }, + "logAll": { + "message": "Pep tra", + "description": "Appears in the logger's tab selector" + }, + "logBehindTheScene": { + "message": "Rekedoù dre guzh", + "description": "Pretty name for behind-the-scene network requests" + }, + "loggerCurrentTab": { + "message": "Ivinell a-vremañ", + "description": "Appears in the logger's tab selector" + }, + "loggerReloadTip": { + "message": "Adkargañ endalc'had an ivinell", + "description": "Tooltip for the reload button in the logger page" + }, + "loggerDomInspectorTip": { + "message": "Enaouiñ/lazhañ an enseller DOM", + "description": "Tooltip for the DOM inspector button in the logger page" + }, + "loggerPopupPanelTip": { + "message": "Enaouiñ/lazhañ ar banell pop-up", + "description": "Tooltip for the popup panel button in the logger page" + }, + "loggerInfoTip": { + "message": "Pajenn wiki uBlock Origin: An Deizlevr", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Skarzhañ an deizlevr", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Ehan an deizlevr (ober fae ouzh an titouroù resevet)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Adstagañ gant an deizlevr", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Stagañ da silañ an deizlevr", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "Silañ endalc'had an deizlevr", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Arventennoù silañ an deizlevr", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Pas", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "stanket", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "aotreet", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "kemmet", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "Domani ar bajenn", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "Kevelerien diavaez", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Munudoù", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Sil", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Roll ar siloù", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Reolenn", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Kontekst", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Kontekst gwrizienn", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Seurt keveler", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Seurt", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Reolenn URL", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Kontekst:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Seurt:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Sil statek", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} ar rekedoù rouedad eus ar seurt {{type}} {{br}}da neuze an URL a glot gant {{url}} {{br}}hag a zeu eus {{origin}},{{br}}{{importance}} bout zo ur sil nemedennoù hag a glot gantañ.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Stankañ", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Aotren", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "seurt \"{{type}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "a bep seurt", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "\"{{origin}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "n'eus forzh pelec'h", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "nemet pa", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "zoken ma", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Kavet e vez ar sil statek {{filter}} e-barzh:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "N'haller ket kavout ar sil statek-mañ e-touez ar rolloù siloù oberiant", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Enmonedoù an deizlevr ha ne glot gant an tri diviz zo amañ dindan a vo skarzhet ent-emgefreek:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Mirout an enmonedoù eus ar/an {{input}} v/munutenn gent", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Mirout {{input}} g/kargadenn pajenn dre ivinell d'ar muiañ", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Mirout {{input}} enmont dre ivinell d'ar muiañ", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Ober gant {{input}} linenn dre enmont er mod dispaket a-blom", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Kuzhat ar bannoù:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Eur", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Sil/reolenn", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Kendestenn", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Seurt keveler", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Listenn", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Taolenn", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Plaen", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Digeriñ", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Sevel ur rentañ-kont nevez", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Klask danevelloù koulz ha homañ", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Teuliadur", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Lennit an teuliadur en uBlock/wiki evit gouzout hiroc'h diwar-benn uBlock Origin ha pep tra a c'hall ober.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Goulennoù ha skor", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Er subreddit /r/uBlockOrigin e c'hallit kavout respontoù d'ho koulennoù hag a bep seurt skoazelloù all.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Kudennoù silañ/lec'hienn sac'het", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Danevellit kudennoù ar siloù e lec'hiennoù resis e-barzh uBlockOrigin/uAssets roll evezhiañ kudennoù. Ur c'hont GitHub zo rekis.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "A-bouez: Chomit hep ober gant meur a stanker a zo heñvel ouzh uBlock Origin war un dro rak kement-se a c'hallfe degas kudennoù e lod lec'hiennoù zo.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tro-bleg: Gwiriit ma'z eo bet hizivaet ho rolloù siloù. An deizlevr eo an ostilh pennañ evit diagnostikañ kudennoù e-keñver ar silañ.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Danevelliñ un draen", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Danevellit kudennoù gant uBlock Origin e-unan e-barzh roll evezhiañ kudennoù uBlockOrigin/uBlock-issue. Ur c'hont GitHub zo rekis.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Titouroù diagnostikañ kudennoù", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Amañ dindan ez eus titouroù teknikel a c'hallfe sikour an dud a-youl vat a zo o klask diskoulmañ ur gudenn.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Danevelliñ ur gudenn gant ur sil", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Evit nompas sammañ ar genlabourerien a-youl vat gant meur a zanevell heñvel, gwiriit ma n'eo ket bet danevellet ho kudenn en a-raok mar plij.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Bemdez e vez hizivaet ar rolloù siloù. Gwiriit ma n'eo ket bet diskoulmet ho kudenn c'hoazh er rolloù siloù nevesañ.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Gwiriit ma chom ar gudenn goude bezañ adloc'het ar bajenn gudennek.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Chomlec'h ar bajenn web:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Ar bajenn web-mañ…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Dibab ur seurt --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Diskouez a ra bruderezh pa restachoù bruderezh", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Gwiskadoù pe saotradurioù all en deus", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Diskoachañ a ra uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Kudennoù a-fed ar vuhez prevez he deus", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Ne ya ket mat en-dro p'eo enaouet uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Digeriñ a ra ivinelloù pe prenestroù noazus", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Kas a ra da veziantoù droukyoulet pe d'an higennañ niverel", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Merkañ ar bejenn evel \"NSFW\" (“Not Safe For Work”) hag a dalv ez eus danvez noazus pe kizidik enni", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Politikerezh ar vuhez prevez", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Deizlevr ar cheñchamantoù", + "description": "" + }, + "aboutCode": { + "message": "Kod mammenn (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Kenlabourerien", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Kod mammenn", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Troidigezhioù", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Rolloù ar siloù", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Dalc'hioù diavaez (a glot gant GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Ar rolloù siloù a zo da uBO e-unan a zo herberc'hiet digoust war ar CDNoù-mañ:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Graet e vez gant ur CDN dre zegouezh pa vez ezhomm hizivaat ur roll siloù.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Ezporzhiañ war-zu ur restr…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "ma-roadennoù-ublock_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Adsevel diwar ur restr…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Adlakaat an arventennoù dre ziouer…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Hoc'h arventennoù a vo erlec'hiet gant ar roadennoù bet gwaredet d'an/ar {{time}}, goude-se ec'h adloc'ho uBlock₀.\n\nKenderc'hel gant an oberiadenn-se?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "N'haller ket lenn ar roadennoù pe direizh ez int", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Skarzhet e vo hoc'h arventennoù hag adloc'het uBlock₀.\n\nHa fellout a ra deoc'h adderaouekaat arventennoù uBlock₀?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Fazi rouedad: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Koumanantiñ", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "ur vunutenn zo", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} v/munutenn zo", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "un eurvezh zo", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} eur zo", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "un devezh zo", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} deiz zo", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Diskouez an daolenn-vourzh", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Gwelet deizlevr ar rekedoù", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "enaouet", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Pajenn stanket", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin en deus miret ar bajenn-mañ da gargañ:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Stanket eo bet abalamour d'ar sil-mañ:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "kuit a arventennoù", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Hag a zo kavet e-barzh:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Distreiñ", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Serriñ ar prenestr-mañ", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Arabat kemenn din diwar-benn al lec'hienn-mañ en-dro", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Lazhañ ar stankañ strizh evit {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "berrbad", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Da badout", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Kenderc'hel", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Ar bajenn stanket a fell dezhi adkas d'ul lec'hienn all. M'ho peus c'hoant da genderc'hel e vioc'h kaset d'ar chomlec'h-mañ: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Abeg:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malisius", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Heulier", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Douetus", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Ezporzhiañ etrezek stokañ ar goumoulenn (cloud)", + "description": "tooltip" + }, + "cloudPull": { + "message": "Enporzhiañ diouzh stokañ ar goumoulenn (cloud)", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Enporzhiañ adalek ar goumoulenn ha kendeuziñ gant an arventennoù a-vremañ", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Anv an ardivink-mañ:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Diwallit! Kemmit an arventennoù araokaet-mañ nemet ma ouifec'h petra emaoc'h oc'h ober.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Kas", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Lakaat da dalvezout", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Nullañ", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "eizhbitoù", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Stankañ an elfenn er framm…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Koumanantiñ d'ar roll siloù…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Aotren elfennoù media pounner evit ar mare", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Diskouez ar c'hod mammenn…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Enankit ur verradenn", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Prennañ/dibrennañ an dibunañ", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Eilañ er golver", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Diuzañ an holl", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Enaouiñ ar siloù kenedel", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Enaouiñ/lazhañ JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Distanañ ar mod stankañ", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Spas stokañ implijet: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Klikañ evit kargañ", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Fazioù: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Ur fazi silañ zo bet en ur lañsañ ar merdeer. Adkargit ar bajenn evit ma vo silet mat.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" + } +} diff --git a/src/_locales/bs/messages.json b/src/_locales/bs/messages.json new file mode 100644 index 0000000000000..d4303e9071fe7 --- /dev/null +++ b/src/_locales/bs/messages.json @@ -0,0 +1,1314 @@ +{ + "extName": { + "message": "uBlock Origin", + "description": "extension name." + }, + "extShortDesc": { + "message": "Konačno, efikasan bloker. Štedljiv na procesoru i memoriji.", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "dashboardName": { + "message": "uBlock₀ — Kontrolna ploča", + "description": "English: uBlock₀ — Dashboard" + }, + "dashboardUnsavedWarning": { + "message": "Upozorenje! Imate nesačuvane promjene", + "description": "A warning in the dashboard when navigating away from unsaved changes" + }, + "dashboardUnsavedWarningStay": { + "message": "Ostani", + "description": "Label for button to prevent navigating away from unsaved changes" + }, + "dashboardUnsavedWarningIgnore": { + "message": "Ignoriši", + "description": "Label for button to ignore unsaved changes" + }, + "settingsPageName": { + "message": "Postavke", + "description": "appears as tab name in dashboard" + }, + "3pPageName": { + "message": "Liste filtera", + "description": "appears as tab name in dashboard" + }, + "1pPageName": { + "message": "Moji filteri", + "description": "appears as tab name in dashboard" + }, + "rulesPageName": { + "message": "Moja pravila", + "description": "appears as tab name in dashboard" + }, + "whitelistPageName": { + "message": "Bijela lista", + "description": "appears as tab name in dashboard" + }, + "shortcutsPageName": { + "message": "Prečice", + "description": "appears as tab name in dashboard" + }, + "statsPageName": { + "message": "uBlock₀ — Logiranje", + "description": "Title for the logger window" + }, + "aboutPageName": { + "message": "O aplikaciji", + "description": "appears as tab name in dashboard" + }, + "supportPageName": { + "message": "Podrška", + "description": "appears as tab name in dashboard" + }, + "assetViewerPageName": { + "message": "uBlock₀ — Pregled sadržaja", + "description": "Title for the asset viewer page" + }, + "advancedSettingsPageName": { + "message": "Napredne postavke", + "description": "Title for the advanced settings page" + }, + "popupPowerSwitchInfo": { + "message": "Klik: onemogućite/omogućite uBlock₀ za ovaj sajt.\n\nCtrl+klik: onemogućite µBlock₀ samo za ovu stranicu.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + }, + "popupPowerSwitchInfo1": { + "message": "Kliknite da onemogućite uBlock₀ za ovaj sajt.\n\nCtrl+klik da onemogućite uBlock₀ samo za ovu stranicu.", + "description": "Message to be read by screen readers" + }, + "popupPowerSwitchInfo2": { + "message": "Kliknite da omogućite uBlock₀ za ovaj sajt.", + "description": "Message to be read by screen readers" + }, + "popupBlockedRequestPrompt": { + "message": "zahtjeva blokirano", + "description": "English: requests blocked" + }, + "popupBlockedOnThisPagePrompt": { + "message": "na ovoj stranici", + "description": "English: on this page" + }, + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 (13%)" + }, + "popupBlockedSinceInstallPrompt": { + "message": "od instalacije", + "description": "English: since install" + }, + "popupOr": { + "message": "ili", + "description": "English: or" + }, + "popupBlockedOnThisPage_v2": { + "message": "Blokirano na ovoj stranici", + "description": "For the new mobile-friendly popup design" + }, + "popupBlockedSinceInstall_v2": { + "message": "Blokirano od instalacije", + "description": "For the new mobile-friendly popup design" + }, + "popupDomainsConnected_v2": { + "message": "Domena povezano", + "description": "For the new mobile-friendly popup design" + }, + "popupTipDashboard": { + "message": "Otvori kontrolnu ploču", + "description": "English: Click to open the dashboard" + }, + "popupTipZapper": { + "message": "Pokrenite režim za odabiranje i uklanjanje elemenata", + "description": "Tooltip for the element-zapper icon in the popup panel" + }, + "popupTipPicker": { + "message": "Pokrenite režim za odabiranje elemenata", + "description": "English: Enter element picker mode" + }, + "popupTipLog": { + "message": "Otvorite zapisnik", + "description": "Tooltip used for the logger icon in the panel" + }, + "popupTipReport": { + "message": "Prijavite problem na ovoj web stranici", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipNoPopups": { + "message": "Uključite/isključite sve iskačujuće prozore na ovoj stranici", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups1": { + "message": "Kliknite da blokirate sve iskačujuće prozore na ovoj stranici", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2": { + "message": "Kliknite da više ne blokirate sve iskačujuće prozore na ovoj stranici", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoLargeMedia": { + "message": "Uključite/isključite blokiranje velikih medijskih elemenata za ovaj sajt", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia1": { + "message": "Kliknite da blokirate velike medijske elemente na ovom sajtu", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2": { + "message": "Kliknite da više ne blokirate velike medijske elemente na ovom sajtu", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoCosmeticFiltering": { + "message": "Uključite/isključite estetsko filtriranje za ovaj sajt", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering1": { + "message": "Kliknite da isključite estetsko filtriranje za ovaj sajt", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2": { + "message": "Kliknite da uključite estetsko filtriranje za ovaj sajt", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoRemoteFonts": { + "message": "Uključite/isključite blokiranje udaljenih fontova za ovaj sajt", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts1": { + "message": "Kliknite da blokirate udaljene fontove na ovom sajtu", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts2": { + "message": "Kliknite da više ne blokirate udaljene fontove na ovom sajtu", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoScripting1": { + "message": "Kliknite da isključite JavaScript na ovom sajtu", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupTipNoScripting2": { + "message": "Kliknite da uključite JavaScript na ovom sajtu", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupNoPopups_v2": { + "message": "Pop-Up prozor", + "description": "Caption for the no-popups per-site switch" + }, + "popupNoLargeMedia_v2": { + "message": "Veliki medijski elementi", + "description": "Caption for the no-large-media per-site switch" + }, + "popupNoCosmeticFiltering_v2": { + "message": "Estetsko filtriranje", + "description": "Caption for the no-cosmetic-filtering per-site switch" + }, + "popupNoRemoteFonts_v2": { + "message": "Udaljeni fontovi", + "description": "Caption for the no-remote-fonts per-site switch" + }, + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" + }, + "popupMoreButton_v2": { + "message": "Više", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton_v2": { + "message": "Manje", + "description": "Label to be used to hide popup panel sections" + }, + "popupTipGlobalRules": { + "message": "Globalna pravila: ovaj stupac je za pravila koja su primjenjena za sve sajtove.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." + }, + "popupTipLocalRules": { + "message": "Lokalna pravila: ovaj stupac je za pravila koja su primjenjena samo za ovaj sajt.\nLokalna pravila nadglasaju globalna pravila.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." + }, + "popupTipSaveRules": { + "message": "Kliknite da vaše promjene učinite trajnim.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." + }, + "popupTipRevertRules": { + "message": "Kliknite da biste vratili promjene.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + }, + "popupAnyRulePrompt": { + "message": "sve", + "description": "" + }, + "popupImageRulePrompt": { + "message": "slike", + "description": "" + }, + "popup3pAnyRulePrompt": { + "message": "Treće strane", + "description": "" + }, + "popup3pPassiveRulePrompt": { + "message": "CSS/slike trećih strana", + "description": "" + }, + "popupInlineScriptRulePrompt": { + "message": "umetnute skripte", + "description": "" + }, + "popup1pScriptRulePrompt": { + "message": "Korisničke skripte", + "description": "" + }, + "popup3pScriptRulePrompt": { + "message": "Skripte trećih strana", + "description": "" + }, + "popup3pFrameRulePrompt": { + "message": "Okviri trećih strana", + "description": "" + }, + "popupHitDomainCountPrompt": { + "message": "povezane domene", + "description": "appears in popup" + }, + "popupHitDomainCount": { + "message": "{{count}} od {{total}}", + "description": "appears in popup" + }, + "popupVersion": { + "message": "Verzija", + "description": "Example of use: Version 1.26.4" + }, + "popup3pScriptFilter": { + "message": "skripta", + "description": "Appears as an option to filter out firewall rows" + }, + "popup3pFrameFilter": { + "message": "okvir", + "description": "Appears as an option to filter out firewall rows" + }, + "pickerCreate": { + "message": "Kreiraj", + "description": "English: Create" + }, + "pickerPick": { + "message": "Odaberi", + "description": "English: Pick" + }, + "pickerQuit": { + "message": "Zatvori", + "description": "English: Quit" + }, + "pickerPreview": { + "message": "Pregled", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + }, + "pickerNetFilters": { + "message": "Mrežni filteri", + "description": "English: header for a type of filter in the element picker dialog" + }, + "pickerCosmeticFilters": { + "message": "Estetski filteri", + "description": "English: Cosmetic filters" + }, + "pickerCosmeticFiltersHint": { + "message": "Klik, Ctrl-klik", + "description": "English: Click, Ctrl-click" + }, + "pickerContextMenuEntry": { + "message": "Blokiraj elemenat…", + "description": "An entry in the browser's contextual menu" + }, + "settingsCollapseBlockedPrompt": { + "message": "Sakrij držače blokiranih elemenata", + "description": "English: Hide placeholders of blocked elements" + }, + "settingsIconBadgePrompt": { + "message": "Prikaži broj blokiranih zahtjeva na ikoni", + "description": "English: Show the number of blocked requests on the icon" + }, + "settingsTooltipsPrompt": { + "message": "Isključi savjete", + "description": "A checkbox in the Settings pane" + }, + "settingsContextMenuPrompt": { + "message": "Koristite kontekstni meni gdje je prikladno", + "description": "English: Make use of context menu where appropriate" + }, + "settingsColorBlindPrompt": { + "message": "Mod za daltoniste", + "description": "English: Color-blind friendly" + }, + "settingsAppearance": { + "message": "Izgled", + "description": "Section for controlling user interface appearance" + }, + "settingsThemeLabel": { + "message": "Tema", + "description": "Label for checkbox to enable a custom dark theme" + }, + "settingsThemeAccent0Label": { + "message": "Prilagođena prikazna boja", + "description": "Label for checkbox to pick an accent color" + }, + "settingsCloudStorageEnabledPrompt": { + "message": "Uključi podršku za pohranu u oblaku", + "description": "" + }, + "settingsAdvancedUserPrompt": { + "message": "Ja sam napredni korisnik (obavezna literatura)", + "description": "Checkbox to let user access advanced, technical features" + }, + "settingsPrefetchingDisabledPrompt": { + "message": "Onemogućite predučitavanje (da bi ste spriječili bilo koju vezu za blokirane mrežne zahtjeve)", + "description": "English: " + }, + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Onemogućite provjeravanje hiperlinkova", + "description": "English: " + }, + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Spriječite WebRTC da propušta lokalnu IP adresu", + "description": "English: " + }, + "settingPerSiteSwitchGroup": { + "message": "Podrazumijevano ponašanje", + "description": "" + }, + "settingPerSiteSwitchGroupSynopsis": { + "message": "Ova podrazumijevana ponašanja mogu biti poništena posebno po stranici", + "description": "" + }, + "settingsNoCosmeticFilteringPrompt": { + "message": "Onemogućite estesko filtriranje", + "description": "" + }, + "settingsNoLargeMediaPrompt": { + "message": "Blokirajte medijske elemente veće od {{input}} KB", + "description": "" + }, + "settingsNoRemoteFontsPrompt": { + "message": "Blokirajte udaljene fontove", + "description": "" + }, + "settingsNoScriptingPrompt": { + "message": "Islkjučite JavaScript", + "description": "The default state for the per-site no-scripting switch" + }, + "settingsNoCSPReportsPrompt": { + "message": "Blokirajte CSP izvještaje", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" + }, + "settingsUncloakCnamePrompt": { + "message": "Otkrijte kanonske nazive", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" + }, + "settingsAdvanced": { + "message": "Napredno", + "description": "Section for controlling advanced-user settings" + }, + "settingsAdvancedSynopsis": { + "message": "Funkcije prikladne samo za napredne korisnike", + "description": "Description of section controlling advanced-user settings" + }, + "settingsAdvancedUserSettings": { + "message": "napredne postavke", + "description": "For the tooltip of a link which gives access to advanced settings" + }, + "settingsLastRestorePrompt": { + "message": "Posljednji prijašnji povratak:", + "description": "English: Last restore:" + }, + "settingsLastBackupPrompt": { + "message": "Posljednja rezervna kopija:", + "description": "English: Last backup:" + }, + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} mrežni/ih filter/a + {{cosmeticFilterCount}} estetski/ih filter/a iz:", + "description": "Appears at the top of the _3rd-party filters_ pane" + }, + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} iskorišteno od {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "3pAutoUpdatePrompt1": { + "message": "Automatski ažuriraj popise filtera", + "description": "A checkbox in the _3rd-party filters_ pane" + }, + "3pUpdateNow": { + "message": "Ažuriraj sada", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pPurgeAll": { + "message": "Obriši svu predmemoriju", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pParseAllABPHideFiltersPrompt1": { + "message": "Raščlanite i primijenite estetske filtre.", + "description": "English: Parse and enforce Adblock+ element hiding filters." + }, + "3pParseAllABPHideFiltersInfo": { + "message": "Estetski filteri služe za sakrivanje elementa na web stranici koji se smatraju izglednim smjetnjama, i koji ne mogu biti blokirani filterima zasnovanih od mrežnih zahtjeva.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + }, + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignorišite opće estetske filtere.", + "description": "This will cause uBO to ignore all generic cosmetic filters." + }, + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Opći estetski filteri su onakvi estetski filteri koji su namijenjeni za primjenu na svim sajtovima. Uključivanjem ove postavke će se eliminirati dodatna upotreba memorije i procesora na sajtovima kao rezultat upravljanja općih estetskih filtera.\n\nPreporučeno je omogućiti ovu postavku na slabijim uređajima.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." + }, + "3pSuspendUntilListsAreLoaded": { + "message": "Obustavite mrežnu aktivnost dok se ne učitaju svi popisi filtera", + "description": "A checkbox in the 'Filter lists' pane" + }, + "3pListsOfBlockedHostsHeader": { + "message": "Lista blokiranih hostova", + "description": "English: Lists of blocked hosts" + }, + "3pApplyChanges": { + "message": "Primijenite promjene", + "description": "English: Apply changes" + }, + "3pGroupDefault": { + "message": "Ugrađeno", + "description": "Filter lists section name" + }, + "3pGroupAds": { + "message": "Reklame", + "description": "Filter lists section name" + }, + "3pGroupPrivacy": { + "message": "Privatnost", + "description": "Filter lists section name" + }, + "3pGroupMalware": { + "message": "Zlonamjerne domene", + "description": "Filter lists section name" + }, + "3pGroupSocial": { + "message": "Društveni widgeti", + "description": "Filter lists section name" + }, + "3pGroupCookies": { + "message": "Obavještenja o kolačićima", + "description": "Filter lists section name" + }, + "3pGroupAnnoyances": { + "message": "Smetnje", + "description": "Filter lists section name" + }, + "3pGroupMultipurpose": { + "message": "Višenamjenski", + "description": "Filter lists section name" + }, + "3pGroupRegions": { + "message": "Regije, jezici", + "description": "Filter lists section name" + }, + "3pGroupCustom": { + "message": "Prilagođeno", + "description": "Filter lists section name" + }, + "3pImport": { + "message": "Uvezi…", + "description": "The label for the checkbox used to import external filter lists" + }, + "3pExternalListsHint": { + "message": "Jedan URL po redu. Neispravni URL-ovi će biti tiho ignorisani.", + "description": "Short information about how to use the textarea to import external filter lists by URL" + }, + "3pExternalListObsolete": { + "message": "Zastarjelo.", + "description": "used as a tooltip for the out-of-date icon beside a list" + }, + "3pViewContent": { + "message": "prikaži sadržaj", + "description": "used as a tooltip for eye icon beside a list" + }, + "3pLastUpdate": { + "message": "Posljednje ažuriranje: {{ago}}.\nKliknite za biste prisilili ažuriranje.", + "description": "used as a tooltip for the clock icon beside a list" + }, + "3pUpdating": { + "message": "Ažuriranje u toku…", + "description": "used as a tooltip for the spinner icon beside a list" + }, + "3pNetworkError": { + "message": "Mrežna greška je spriječila ažuriranje resursa.", + "description": "used as a tooltip for error icon beside a list" + }, + "1pTrustWarning": { + "message": "Nemojte dodavati filtere iz nepouzdanih izvora.", + "description": "Warning against copy-pasting filters from random sources" + }, + "1pEnableMyFiltersLabel": { + "message": "Omogući moje prilagođene filtere", + "description": "Label for the checkbox use to enable/disable 'My filters' list" + }, + "1pTrustMyFiltersLabel": { + "message": "Dozvolite prilagođene filtere koji zahtijevaju povjerenje", + "description": "Label for the checkbox use to trust the content of 'My filters' list" + }, + "1pImport": { + "message": "Uvezi i dodaj…", + "description": "Button in the 'My filters' pane" + }, + "1pExport": { + "message": "Izvoz…", + "description": "Button in the 'My filters' pane" + }, + "1pExportFilename": { + "message": "moji-ublock-statični-filteri_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" + }, + "1pApplyChanges": { + "message": "Primijenite promjene", + "description": "English: Apply changes" + }, + "rulesPermanentHeader": { + "message": "Trajna/Stalna pravila", + "description": "header" + }, + "rulesTemporaryHeader": { + "message": "Privremena pravila", + "description": "header" + }, + "rulesRevert": { + "message": "Vrati", + "description": "This will remove all temporary rules" + }, + "rulesCommit": { + "message": "Potvrdi", + "description": "This will persist temporary rules" + }, + "rulesEdit": { + "message": "Uredi", + "description": "Will enable manual-edit mode (textarea)" + }, + "rulesEditSave": { + "message": "Spremi", + "description": "Will save manually-edited content and exit manual-edit mode" + }, + "rulesEditDiscard": { + "message": "Odbaci", + "description": "Will discard manually-edited content and exit manual-edit mode" + }, + "rulesImport": { + "message": "Uvezi iz datoteke…", + "description": "" + }, + "rulesExport": { + "message": "Izvoz u datoteku…", + "description": "Button in the 'My rules' pane" + }, + "rulesDefaultFileName": { + "message": "moja-ublock-dinamična-pravila_{{datetime}}.txt", + "description": "default file name to use" + }, + "rulesHint": { + "message": "Lista vaših dinamičkih pravila za filtriranje.", + "description": "English: List of your dynamic filtering rules." + }, + "rulesFormatHint": { + "message": "Pravila sintakse: izvor odredište tip akcija (sva dokumentacija).", + "description": "English: dynamic rule syntax and full documentation." + }, + "rulesSort": { + "message": "Sortiraj:", + "description": "English: label for sort option." + }, + "rulesSortByType": { + "message": "Vrsta/tip pravila", + "description": "English: a sort option for list of rules." + }, + "rulesSortBySource": { + "message": "Izvor", + "description": "English: a sort option for list of rules." + }, + "rulesSortByDestination": { + "message": "Destinacija/odredište", + "description": "English: a sort option for list of rules." + }, + "whitelistPrompt": { + "message": "Direktive pouzdanih sajtova kažu na kojim sajtovima bi uBlock Origin trebao biti isključen. Jedna stavka po redu.", + "description": "A concise description of the 'Trusted sites' pane." + }, + "whitelistImport": { + "message": "Uvezi i dodaj…", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExport": { + "message": "Izvoz…", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExportFilename": { + "message": "moji-ublock-pouzdani-sajtovi_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" + }, + "whitelistApply": { + "message": "Primijenite izmjene", + "description": "English: Apply changes" + }, + "logRequestsHeaderType": { + "message": "Vrsta", + "description": "English: Type" + }, + "logRequestsHeaderDomain": { + "message": "Domena", + "description": "English: Domain" + }, + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" + }, + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" + }, + "logAll": { + "message": "Sve", + "description": "Appears in the logger's tab selector" + }, + "logBehindTheScene": { + "message": "Bez tabova", + "description": "Pretty name for behind-the-scene network requests" + }, + "loggerCurrentTab": { + "message": "Trenutni tab", + "description": "Appears in the logger's tab selector" + }, + "loggerReloadTip": { + "message": "Ponovo učitaj sadržaj taba", + "description": "Tooltip for the reload button in the logger page" + }, + "loggerDomInspectorTip": { + "message": "Uključite/isključite DOM inspektor", + "description": "Tooltip for the DOM inspector button in the logger page" + }, + "loggerPopupPanelTip": { + "message": "Uključite/isključite okno za skočne prozore", + "description": "Tooltip for the popup panel button in the logger page" + }, + "loggerInfoTip": { + "message": "uBlock Origin wiki: zapisnik", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Očistite zapise", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Pauzirajte zapise (odbacite sve dolazne podatke)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Pokrenite zapise", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Uključite/isključite filtriranje zapisa", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filtrirajte sadržaj zapisa", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Postavke filtriranja zapisa", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Nije", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "puno događaja", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "blokirano", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "dozvoljeno", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "Izmjenjeno:", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "Prve strane", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "Treće strane", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Detalji", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filter", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Lista filtera", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Pravilo", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Kontekst", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Korijenski kontekst", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Pripadna informacija", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Vrsta", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL pravilo", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Kontekst:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Vrsta:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Statični filter", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} mrežni zahtjevi {{type}} {{br}} od čiji se URL adresa slaže sa {{url}} {{br}} i koji izvire od {{origin}},{{br}}{{importance}} postoji odgovarajući odstupni filter.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Blokiraj", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Dozvoli", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "vrsta “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "bilo koja vrsta", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "od “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "od bilo kuda", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "osim kada", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "čak iako", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Statični filter {{filter}} pronađen u:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Statični filter nije pronađen u nijednoj od trenutno uključenih filterskih listi", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Unosi u bilješku koji ne ispunjavaju sva tri navedena uvjeta/uslova ispod će biti automatski odbačeni:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Spremite unose iz zadnje/ih {{input}} minute/a", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Spremite najviše {{input}} učitavanja stranica po kartici", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Spremite najviše {{input}} unosa po kartici", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Koristi {{input}} linija po unosu u vertikalno proširenom režimu", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Sakrij stubove:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Vrijeme", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filter/pravilo", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Kontekst", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Strana/Pripadnost", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Popis/Lista", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tablica", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Obično", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Otvori", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Napravite novu prijavu", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Pronađite slične prijave", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Dokumentacija", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Pročitajte dokumentaciju na uBlock/wiki da bi ste naučili sve o uBlock Origin-ovim funkcijama.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Pitanja i podrška", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Odgovori na pitanja i druge vrste podrške nalaze se na podreditu r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Problemi sa filterom/website ne radi", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Prijavite probleme s filterima na određenim web stranicama uBlockOrigin/uAssets sistemu za praćenje problema . Potreban je GitHub račun.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Važno: Nemojte koristiti druge blokere slične namjene zajedno sa uBlock Origin-om, jer bi to moglo uzrokovati probleme s filtriranjem na određenim web stranicama.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Savjeti: Provjerite jesu li vaše liste filtera ažurirane. Zapisnik je primarni alat za dijagnosticiranje problema povezanim sa filterima.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Prijava greške", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Prijavite probleme sa samim uBlock Origin-om na uBlockOrigin/uBlock-problem stranici za praćenje problema. Potreban če vam biti GitHub račun.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Informacija o rješavanju problema", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Ispod se nalaze tehničke informacije koje bi vam mogle biti korisne kada vam dobrovoljci pokušavaju pomoći s rješenjem problema.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Prijavite problem sa filterom", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Da bi ste izbjegli opterećivanje dobrovoljaca sa dupliciranim prijavama, molimo vas da provjerite da li je vaš problem već prijavljen, ili nije.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Liste filtera se ažuriraju svakodnevno. Budite sigurni da vaš problem nije već riješen na najnovijim listama filtera.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Provjerite postoji li problem i nakon ponovnog učitavanja problematične web stranice.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Adresa web stranice:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Web stranica…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Odaberite unos --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Pokaže oglase ili ostatke oglasa", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Ima prekrive ili druge dosade", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Otkrije uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Ima probleme povezane za privatnost", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Kvari se kad je uBlock Origin uključen", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Otvara neželjene kartice ili prozore", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Vodi do zlonamjernog softvera i phishinga", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Označite web stranicu kao “NSZP” (“Ne-Sigurna-Za-Posao”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Pravila privatnosti", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Popis izmjena", + "description": "" + }, + "aboutCode": { + "message": "Izvorni kod (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Saradnici", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Izvorni kod", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Prijevodi", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Liste filtera", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Vanjske zavisnosti (GPLv3-kompatiblini):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Sopstveni zapisi filtera uBO-a su besplatno hostani na sljedećim CDN-ovima:\n", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Nasumično odabrana CDN mreža se koristi kada je potrebno ažurirati listu filtera.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Sačuvaj rezervnu kopiju u datoteku…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "moja-ublock-rez_kopija_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Vrati iz datoteke…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Vrati na izvorne postavke…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Sve vaše postavke će je biti prebrisane koristeći rezervnu kopiju sa postavkama sačuvanim {{time}}, i uBlock₀ će se ponovno pokrenuti. \n\nPrepisati sve postojeće postavke sa rezervnom kopijom postavki?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Podatke nije moguće učitati ili su neispravni", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Sve vaše postavke će je biti obrisane i µBlock₀ će se ponovo pokrenuti. \n\nVrati µBlock₀ na izvorne postavke?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Greška sa mrežom: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Pretplatite se", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "prije minutu", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "prije {{value}} minute/a", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "prije sat vremena", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "prije {{value}} sata/i", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "prije jedan dan", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "prije {{value}} dana", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Prikaži kontrolnu ploču", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Pokaži zapisnik", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "isključen", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Stranica je blokirana", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin je onemogućio učitavanje sljedeće stranice:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Zbog sljedećeg filtera", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "bez parametara", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Pronađeno u:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Nazad", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Zatvori ovaj prozor", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Ne upozoravaj me ponovo za ovu stranicu", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Isključi strogo blokiranje za {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Privremeno", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Trajno", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Nastavi", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Blokirana stranica želi preusmjeriti na drugu stranicu. Ako odlučite nastaviti, bit ćete direktno na: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Razlog:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Zlonamjerno", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Praćenje", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Neugledno", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Izvezi u cloud pohranu", + "description": "tooltip" + }, + "cloudPull": { + "message": "Uvezi iz cloud pohrane", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Uvezite iz cloud pohrane i spojite sa trenutnim postavkama", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Naziv ovog uređaja:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Upozorenje! Napredne postavke mijenjate na vlastitu odgovornost.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Pošalji", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Primijeni promjene", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Vrati", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bajta", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Blokiraj elemenat u okviru…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Pretplatite se na popis filtera…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Privremeno omogući velike medijske elemente", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Pogledaj izvorni kod…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Upišite prečicu", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "(De)aktivacija zaključanog pomicanja", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Kopiraj u međuspremnik", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Označi sve", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Uključi/isključi estetsko filtriranje", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Uključi JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Relaksiran mod blokiranja", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Iskorišten prostor: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Kliknite za učitavanje", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Greške: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Nije moguće ispravno filtrirati pri pokretanju preglednika. Ponovo učitajte stranicu kako biste osigurali pravilno filtriranje.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Ova stavka mora biti posljednja", + "description": "so we dont need to deal with comma for last entry" + } +} diff --git a/src/_locales/ca/messages.json b/src/_locales/ca/messages.json index 7718205dbf38c..f342572b35c96 100644 --- a/src/_locales/ca/messages.json +++ b/src/_locales/ca/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Finalment, un blocador eficient que utilitza pocs recursos de memòria i processador.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Finalment, un blocador eficient que utilitza pocs recursos de memòria i processador.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Tauler de control", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Tauler de control", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Configuració", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Atenció! Hi ha canvis sense desar", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Filtres de tercers", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Roman", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Els vostres filtres", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ignora", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Les meves regles", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Configuració", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Llista blanca", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filtres de tercers", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Registre de peticions de xarxa", - "description":"Title for the logger window" + "1pPageName": { + "message": "Filtres personalitzats", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Quant a", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Regles personalitzades", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Clic: habilita\/inhabilita l'µBlock per a aquest lloc.\n\nCtrl+clic: inhabilita l'µBlock només en aquesta pàgina.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Llista blanca", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"sol·licituds bloquejades", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Dreceres", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"en aquesta pàgina", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Registre de peticions de xarxa", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} o {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Quant a", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"des de la instal·lació", - "description":"English: since install" + "supportPageName": { + "message": "Ajuda", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"o", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Visor de recursos", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Clic per obrir el tauler de control", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Configuració avançada", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Entrar al mode de selecció d'elements", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Clic: habilita/inhabilita l'uBlock₀ per a aquest lloc.\n\nCtrl+clic: inhabilita l'uBlock₀ només en aquesta pàgina.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Registre de peticions", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Feu clic per inhabilitar l'uBlock₀ en aquest lloc.\n\nFeu Ctrl+clic per inhabilitar l'uBlock₀ només en aquesta pàgina.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"No permetis finestres emergents en aquest web", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Feu clic per habilitar l'uBlock₀ en aquest lloc.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Alterna el bloqueig de fitxers multimèdia grans en aquest web", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "sol·licituds bloquejades", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Habilita el filtre cosmètic en aquest web", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "en aquesta pàgina", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Alterna el blocatge de tipografies remotes per aquest lloc", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} o {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Regles globals: Aquesta columna s'apliquen a tots els webs.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "des de la instal·lació", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Regles locals: Aquesta columna s'aplica només a aquest web.\nLes regles locals prevaleixen sobre les globals.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "o", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Feu clic per fer els canvis permanents.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Blocat en aquesta pàgina", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Feu clic per desfer els canvis.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Blocat des de la instal·lació", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"tot", - "description":"" + "popupDomainsConnected_v2": { + "message": "Dominis connectats", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"imatges", - "description":"" + "popupTipDashboard": { + "message": "Clic per obrir el tauler de control", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"de tercers", - "description":"" + "popupTipZapper": { + "message": "Activa el mode d'eliminació d'elements", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"css\/imatges de tercers", - "description":"" + "popupTipPicker": { + "message": "Canvia al mode de selecció d'elements", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"scripts incrustats", - "description":"" + "popupTipLog": { + "message": "Obre el registre d'esdeveniments", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"scripts", - "description":"" + "popupTipReport": { + "message": "Informeu d'un problema en aquest lloc web", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"scripts de tercers", - "description":"" + "popupTipNoPopups": { + "message": "Commuta el bloqueig de totes les finestres emergents d'aquest lloc", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"marcs de tercers", - "description":"" + "popupTipNoPopups1": { + "message": "Feu clic per blocar totes les finestres emergents d'aquest lloc", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"dominis connectats", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Feu clic per desblocar les finestres emergents d'aquest lloc", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} de {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Commuta el bloqueig d'elements multimèdia grans per a aquest lloc", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Crear", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Feu clic per blocar elements multimèdia grans en aquest lloc", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Escollir", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Feu clic per desblocar elements multimèdia grans en aquest lloc", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Sortir", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Commuta els filtres cosmètics d'aquest lloc", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Vista prèvia", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Feu clic per inhabilitar els filtres cosmètics en aquest lloc", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Filtres de xarxa", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Feu clic per habilitar els filtres cosmètics en aquest lloc", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Filtres cosmètics", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Commuta el bloqueig de fonts remotes per a aquest lloc", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Clic, Ctrl+clic", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Feu clic per blocar les fonts remotes en aquest lloc", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Bloquejar element", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Feu clic per desblocar les fonts remotes en aquest lloc", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Amagar marcardors de posició dels elements bloquejats", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Feu clic per inhabilitar completament el JavaScript en aquest lloc", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Mostrar el número de peticions bloquejades a l'icona", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Feu clic per no inhabilitar el JavaScript en aquest lloc", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Inhabilita els suggeriments", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Finestres emergents", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Utilitzar el menú contextual quan sigui possible", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Elements multimèdia grans", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Configuració per a persones daltòniques", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Filtres cosmètics", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Habilita el suport d'emmagatzematge al núvol", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Fonts remotes", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Sóc un usuari avançat (Lectura necessària<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Inhabilita la cerca prèvia (per evitar qualsevol connexió de xarxa per a sol·licituds blocades)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Més", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Inhabilita l'auditoria de l'enllaç", - "description":"English: " + "popupLessButton_v2": { + "message": "Menys", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Evita que el protocol WebRTC divulgui la IP local", - "description":"English: " + "popupTipGlobalRules": { + "message": "Regles globals: les regles d'aquesta columna s'apliquen a tots els llocs.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Opció per defecte", - "description":"" + "popupTipLocalRules": { + "message": "Regles locals: les regles d'aquesta columna s'apliquen només al lloc actual.\nLes regles locals anul·len les regles globals.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Es pot anul·lar el comportament per defecte per a qualsevol web", - "description":"" + "popupTipSaveRules": { + "message": "Feu clic per fer els canvis permanents.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Inhabilita els filtres cosmètics", - "description":"" + "popupTipRevertRules": { + "message": "Feu clic per desfer els canvis.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Bloca els fitxers multimèdia més grans que {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "tot", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Bloca les fonts remotes", - "description":"" + "popupImageRulePrompt": { + "message": "imatges", + "description": "" }, - "settingsStorageUsed":{ - "message":"Emmagatzematge utilitzat: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "de tercers", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Darrera restauració:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "css/imatges de tercers", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Darrera còpia de seguretat:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "scripts incrustats", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} filtres de xarxa + {{cosmeticFilterCount}} filtres cosmètics de:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "scripts", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} utilitzats de {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "scripts de tercers", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Actualitzar automàticament la llista de filtres.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "marcs de tercers", + "description": "" }, - "3pUpdateNow":{ - "message":"Actualitza ara", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "dominis connectats", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Neteja la memòria caché", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} de {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Analitzar i aplicar filtres cosmètics.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Versió", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Aquesta opció permet l'anàlisi i l'aplicació dels filtres compatibles amb l'Adblock Plus “element hiding”<\/a>. Aquests filtres són principalment cosmètics, que serveixen per amagar elements d'una pàgina web molestos que per defecte no es poden amagar.<\/p>

      Habilitant aquesta opció augmentarà el consum de memòria de l'µBlock<\/i>.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignora els filtres cosmètics genèrics", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "marc", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Els Filtres cosmètics genèrics són filtres que no s'apliquen a tots els llocs web.

      Tot i que l'uBlock₀ els gestiona de manera eficient, aquests filtres encara poden contribuir a un augment d'ús de la memòria o sobrecàrrega de la CPU en algunes pàgines web, especialment si tenen molt contingut, elements d'animació o temps real.

      En habilitar aquesta opció s'elimina el risc de sobrecàrrega a la CPU i excés d'ús de la memòria com a resultat de la manipulació de filtres cosmètics genèrics i també es redueix el consum de memòria de l'uBlock₀.

      Es recomana habilitar aquesta opció en dispositius poc potents.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Crear", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Llistes de servidors bloquejats", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Escollir", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Aplicar canvis", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Sortir", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Anuncis", - "description":"English: Ads" + "pickerPreview": { + "message": "Vista prèvia", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Privacitat", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Filtres de xarxa", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Dominis de malware", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Filtres cosmètics", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Social", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Clic, Ctrl+clic", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Polivalent", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Bloca l'element", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Regions, llengües", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Amaga els marcadors de posició dels elements blocats", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Personalitzat", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Mostra el número de peticions blocades a l'icona", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Una URL per línia. Línies amb el símbol ‘!’ s'ignoraran. Adreces URL no vàlides s'ignoraran silenciosament.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Inhabilita els suggeriments", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Analitzar", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Utilitzar el menú contextual quan sigui possible", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"neteja la memòria", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Configuració per a persones daltòniques", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"nova versió disponible", - "description":"English: new version available" + "settingsAppearance": { + "message": "Aparença", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"antiquat", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Tema", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Darrera actualització: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Color d'accent personalitzat", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Un filtre per línia. Un filtre pot ser un domini, o un filtre compatible amb Adblock Plus. Línies amb el símbol ‘!’ s'ignoraran.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Habilita el suport d'emmagatzematge al núvol", + "description": "" }, - "1pImport":{ - "message":"Importar i annexar", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Sóc un usuari avançat (lectura necessària)", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Exportar", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Inhabilita la cerca prèvia (per evitar qualsevol connexió de xarxa per a sol·licituds blocades)", + "description": "English: " }, - "1pExportFilename":{ - "message":"ublock-custom-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Inhabilita l'auditoria de l'enllaç", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Aplicar canvis", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Evita que el protocol WebRTC divulgui la IP local", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Normes permanents", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Comportament per defecte", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Normes temporals", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Es pot anul·lar el comportament per defecte per a qualsevol web", + "description": "" }, - "rulesRevert":{ - "message":"Desfer", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Inhabilita els filtres cosmètics", + "description": "" }, - "rulesCommit":{ - "message":"Establir", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Bloca els fitxers multimèdia més grans que {{input:number}} kB", + "description": "" }, - "rulesEdit":{ - "message":"Editar", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Bloca les fonts remotes", + "description": "" }, - "rulesEditSave":{ - "message":"Desar", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Inhabilita el JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Descartar", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Bloca els informes CSP", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Importar des de fitxer...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Revela els noms canònics", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Exportar a fitxer...", - "description":"" + "settingsAdvanced": { + "message": "Avançat", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Característiques adequades només per a usuaris tècnics", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Llista de regles de filtrat dinàmic.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "configuració avançada", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Sintaxi de les regles: origen destinació tipus acció<\/code> (documentació<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Darrera restauració:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Llistat dels noms de servidor amb que s'inhabilitarà l'µBlock. Una entrada per línia. S'ignoraran els noms de servidor no vàlids.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Darrera còpia de seguretat:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Imporar i annexar", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} filtres de xarxa + {{cosmeticFilterCount}} filtres cosmètics de:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Exportar", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} utilitzats de {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Actualitzar automàticament la llista de filtres.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Aplicar canvis", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Actualitza ara", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Tipus", - "description":"English: Type" + "3pPurgeAll": { + "message": "Neteja la memòria caché", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Domini", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Analitzar i aplicar filtres cosmètics.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "

      Aquesta opció permet l'anàlisi i l'aplicació dels filtres compatibles amb l'Adblock Plus “element hiding”. Aquests filtres són principalment cosmètics, que serveixen per amagar elements d'una pàgina web molestos que per defecte no es poden amagar.

      Habilitant aquesta opció augmentarà el consum de memòria de l'µBlock.

      ", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filtre", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignora els filtres cosmètics genèrics", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Tot", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

      Els filtres cosmètics genèrics són filtres que no s'apliquen a tots els llocs web.

      Tot i que l'uBlock₀ els gestiona de manera eficient, aquests filtres encara poden contribuir a un augment d'ús de la memòria o sobrecàrrega de la CPU en algunes pàgines web, especialment si tenen molt contingut, elements d'animació o temps real.

      En habilitar aquesta opció s'elimina el risc de sobrecàrrega a la CPU i excés d'ús de la memòria com a resultat de la manipulació de filtres cosmètics genèrics i també es redueix el consum de memòria de l'uBlock₀.

      Es recomana habilitar aquesta opció en dispositius poc potents.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Peticions ocultes", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Suspèn l'activitat de la xarxa fins a carregar totes les llistes de filtres", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"filtrar entrades del registre", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Llistes de servidors bloquejats", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Nombre màxim d'entrades del registre", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Aplicar canvis", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Context:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Local", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tipus:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Anuncis", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Filtre dinàmic d'URL", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Privacitat", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Filtre estàtic", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Dominis perillosos", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} peticions de la xarxa {{type}} {{br}}amb l'URL coincidint {{url}} {{br}}originada des de {{origin}},{{br}}{{importance}} si és una concordança d'un filtre d'excepció.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Ginys socials", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Bloca", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Avís de galetes", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Permet", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Elements molestos", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tipus «{{type}}»", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Polivalent", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"de qualsevol tipus", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Regions, llengües", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"des de «{{origin}}»", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Personalitzat", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"des de qualsevol web", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Importa...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"excepte", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Una URL per línia. S'ignoraran les línies amb el símbol ‘!’. Les URL no vàlides s'ignoraran silenciosament.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"fins i tot", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Obsolet", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"S'ha trobat el filtre {{filter}}:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "mostra el contingut", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Registre de canvis", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Darrera actualització: {{ago}}", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "S'està actualitzant...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Suport", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Un error de xarxa va impedir que s'actualitzés el recurs.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Codi font (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "No afegiu filtres de fonts no confiables.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Col·laboradors", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Habilita els filtres personalitzats", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Còpia de seguretat a un fitxer", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Permet filtres personalitzats que requereixin confiança", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Importa i annexa", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Restaurar des d'un fitxer...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Exporta", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Restaurar als valors de fàbrica...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "ublock-custom-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"La configuració es sobreescriurà amb la còpia de seguretat del {{time}}, i es reiniciarà l'µBlock.\n\nVoleu restaurar la configuració amb la còpia de seguretat?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Aplicar canvis", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Les dades no es poden llegir o no son vàlides", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Normes permanents", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"La configuració serà suprimida i es reiniciarà l'µBlock.\n\nVoleu reiniciar l'µBlock als valors per defecte?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Normes temporals", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Impossible connectar a {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Desfer", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"µBlock: Voleu afegir aquest enllaç a la llista de filtres personalitzats?\n\nTítol: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Establir", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"fa un minut", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Editar", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"fa {{value}} minuts", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Desar", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"fa una hora", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Descartar", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"fa {{value}} hores", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Importa des del fitxer...", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"fa un dia", - "description":"English: a day ago" + "rulesExport": { + "message": "Exporta a...", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"fa {{value}} dies", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Mostrar Tauler de control", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Llista de regles de filtrat dinàmic.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Mostra el registre de peticions de la xarxa", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Sintaxi de les regles: origen destinació tipus acció (documentació).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"desactivat", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Ordena:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"L'ublock ha rebutjat contingut d'aquest web:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Tipus de regla", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Detectat per aquest filtre", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Origen", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"sense paràmetres", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Destinació", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Trobat a:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Llistat dels noms de servidor amb que s'inhabilitarà l'µBlock. Una entrada per línia. S'ignoraran els noms de servidor no vàlids.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Enrere", - "description":"English: Go back" + "whitelistImport": { + "message": "Importa i annexa", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Tanca aquesta finestra", - "description":"English: Close this window" + "whitelistExport": { + "message": "Exporta", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Inhabilita el blocatge estricte per {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "Llista-blanca-de-l'ublock_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Temporalment", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Aplicar canvis", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Permanentment", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Tipus", + "description": "English: Type" }, - "cloudPush":{ - "message":"Exporta a un servei al núvol", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Domini", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Importa des d'un servei al núvol", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Importa des del núvol i afegeix a la configuració actual", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filtre", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Tot", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Nom d'aquest dispositiu:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Peticions amagades", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Envia", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Pestanya actual", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Desfer", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Torna a carregar el contingut de la pestanya", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"bytes", - "description":"" + "loggerDomInspectorTip": { + "message": "Commuta l'inspector DOM", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Permet temporalment els fitxers multimèdia grans", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Commuta el menú emergent", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"Aquesta entrada ha de ser l'última", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "Wiki - uBlock Origin: L'informe", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Neteja l'informe", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Pausa el registre de l'informe (descarta qualsevol data entrant)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Continua creant el registre", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Commuta el filtratge del registre", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filtra entrades del registre", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Opcions de filtratge del registre", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Cap", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "important", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "blocat", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "permès", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "modificat", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "primari", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "de tercers", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Detalls", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filtre", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Llista de filtres", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Regla", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Context", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Context arrel", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Petició", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Tipus", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Filtre dinàmic d'URL", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Context:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Tipus:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Filtre estàtic", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} peticions de la xarxa {{type}} {{br}}amb l'URL coincidint {{url}} {{br}}originada des de {{origin}},{{br}}{{importance}} si és una concordança d'un filtre d'excepció.\nhttps://github.com/gorhill/uBlock/issues/235#issuecomment-109745745.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Bloca", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Permet", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "tipus «{{type}}»", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "de qualsevol tipus", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "des de «{{origin}}»", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "des de qualsevol web", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "excepte", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "fins i tot", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "S'ha trobat el filtre estàtic {{filter}} a:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "No s'ha trobat el filtre estàtic {{filter}} a cap de les llistes de filtres actualment habilitades", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Les entrades del registrador que no compleixin les tres condicions següents es rebutjaran automàticament:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Conserva les entrades dels darrers {{input}} minuts", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Conserva com a màxim {{input}} càrregues de pàgina per pestanya", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Conserva com a màxim {{input}} entrades per pestanya", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Utilitza {{input}} línies per entrada en mode expandit verticalment", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Amaga les columnes:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Temps", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filtre/regla", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Context", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "Petició de {{input}}", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Llista", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Taula", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Text pla", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Obre", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Crea un informe nou al GitHub", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Cerca informes similars al GitHub", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Documentació", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Llegiu la documentació a uBlock/wiki per obtenir informació sobre totes les funcions de l'uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Preguntes i suport", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Les respostes a preguntes i altres tipus d’ajuda es proporcionen al subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Problemes de filtre/lloc web trencat", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Informeu de problemes de filtres amb llocs web específics al uBlockOrigin/uAssets rastrejador de problemes. Requereix un compte de GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Important: eviteu utilitzar altres bloquejadors amb propòsits similars juntament amb l'uBlock Origin, ja que això pot causar problemes de filtratge en llocs web específics.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Consells: Assegureu-vos que les vostres llistes de filtres estiguin actualitzades. El registrador és l’eina principal per diagnosticar problemes relacionats amb els filtres.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Informe d'errors", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Informeu de problemes amb el propi uBlock Origin al uBlockOrigin/uBlock-issue rastrejador de problemes . Requereix un compte de GitHub.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Informació de resolució de problemes", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "A continuació es mostra informació tècnica que pot ser útil quan els voluntaris intenten ajudar-vos a resoldre un problema.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Informeu d'un problema de filtre", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Per a evitar la sobrecàrrega del nostre voluntariat amb informes duplicats, verifiqueu abans que el problema encara no s'ha notificat. Nota: en fer clic, enviareu la pàgina causant al nostre GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Les llistes de filtres s'actualitzen diàriament. Assegureu-vos que el vostre problema encara no s'hagi resolt amb les llistes de filtres més recents.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Comproveu que el problema encara existeix després de recarregar la pàgina web problemàtica.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Adreça de la pàgina web:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "La pàgina web...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Trieu una entrada --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Mostra anuncis o restes d'anuncis", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Té superposicions o altres errors", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detecta l'uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Té problemes relacionats amb la privadesa", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "No funciona amb l'uBlock Origin habilitat", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Obre pestanyes o finestres no desitjades", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Condueix a programari maliciós, pesca electrònica", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Marca aquesta pàgina com a “NSFW” (“No segur per al treball”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Política de privadesa", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Registre de canvis", + "description": "" + }, + "aboutCode": { + "message": "Codi font (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Col·laboradors", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Codi font", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Traduccions", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Llistat de filtres", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Dependències externes (compatibles amb GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Les llistes de filtres pròpies d'uBO s'allotgen lliurement als següents CDN:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "S'utilitzarà un CDN triat a l'atzar quan calgui actualitzar una llista de filtres", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Còpia de seguretat a un fitxer", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Restaura des d'un fitxer...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Restaura als valors per defecte...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "La configuració es sobreescriurà amb la còpia de seguretat del {{time}}, i l'uBlock₀ es reiniciarà.\n\nVoleu restaurar la configuració amb la còpia de seguretat?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Les dades no es poden llegir o no son vàlides", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "La configuració serà suprimida i es reiniciarà l'uBlock₀.\n\nVoleu reiniciar l'uBlock₀ als valors per defecte?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Error de xarxa: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Subscriu-me", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "fa un minut", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "fa {{value}} minuts", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "fa una hora", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "fa {{value}} hores", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "fa un dia", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "fa {{value}} dies", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Mostrar Tauler de control", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Mostra el registre d'esdeveniments", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "desactivat", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Pàgina blocada", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "L'uBlock Origin ha impedit que es carregui la pàgina:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Detectat per aquest filtre", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "sense paràmetres", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Trobat a:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Enrere", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Tanca aquesta finestra", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "No em tornis a avisar sobre aquest lloc", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Inhabilita el blocatge estricte per {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Temporalment", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Permanentment", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Procedeix", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "La pàgina blocada vol redirigir-vos a un altre web diferent. Si continueu, si us reenviarà a: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Motiu:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Perjudicial", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Seguidor", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Mala reputació", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Exporta a un servei al núvol", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importa des d'un servei al núvol", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importa des del núvol i afegeix a la configuració actual", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Nom d'aquest dispositiu:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Atenció! Canvieu aquestes configuracions avançades sota la vostra responsabilitat.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Envia", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Aplica els canvis", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Desfés", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Bloca l'element al marc...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Uniu-vos a la llista de filtres... ", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Permet temporalment els fitxers multimèdia grans", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Mostra el codi font…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Escriviu una drecera", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Commuta el desplaçament blocat", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Copia al porta-retalls", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Selecciona-ho tot", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Commuta els filtres cosmètics", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Commuta el JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Mode de bloqueig relaxat", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Emmagatzematge utilitzat: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Clic per carregar", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Errors: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "No s'ha pogut filtrar correctament en iniciar el navegador.\nTorneu a carregar la pàgina per garantir un filtratge correcte", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Aquesta entrada ha de ser l'última", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/cs/messages.json b/src/_locales/cs/messages.json index e7fe0b05dba84..536800bcc14c6 100644 --- a/src/_locales/cs/messages.json +++ b/src/_locales/cs/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Konečně efektivní blokovač, který nezatěžuje CPU a paměť.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Konečně efektivní blokovač. Nezatěžuje CPU a paměť.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Řídící panel", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ - Ovládací panel", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Nastavení", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Varování: Máte neuložené změny!", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Filtry třetích stran", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Zůstat zde", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Vaše filtry", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ignorovat", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Vaše pravidla", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Nastavení", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Povolené domény", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Seznamy filtrů", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Logger", - "description":"Title for the logger window" + "1pPageName": { + "message": "Moje filtry", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"O rozšíření", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Moje pravidla", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Kliknutí: trvale zakázat uBlock₀ pro celý tento web.\n\nCtrl+kliknutí: zakázat uBlock₀ pouze pro tuto stránku.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Povolené stránky", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"zablokované požadavky", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Zkratky", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"na této stránce", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ - Logger", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} neboli {{percent}} %", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "O rozšíření", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"od instalace", - "description":"English: since install" + "supportPageName": { + "message": "Podpora", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"neboli", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ - Prohlížeč zdrojů", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Kliknutím sem otevřete řídicí panel", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Pokročilá nastavení", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Režim výběru prvků", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Klepnutí: zakáže/povolí uBlock₀ pro tento web.\n\nCtrl+klepnutí: zakáže uBlock₀ jen pro tuto stránku.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Otevřít logger", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Klepněte pro zakázání uBlock₀ pro tento web.\n\nCtrl+klepněte pro zakázání uBlock₀ jen pro tuto stránku.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Přepnout blokování všech vyskakovacích oken pro tento web", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Klepněre pro povolení uBlock₀ pro tento web.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Přepnout blokování velkých multimediálních prvků na tomto webu", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "zablokované požadavky", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Přepnout kosmetické filtrování pro tento web", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "na této stránce", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Přepnout blokování vzdálených fontů pro tento web", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}}, což je {{percent}} %", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Globální pravidla: tento sloupec slouží pro pravidla, která platí pro všechny weby.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "od instalace", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Lokální pravidla: tento sloupec slouží pro pravidla, která platí pouze pro aktuální web.\nLokální pravidla přepisují globální pravidla.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "což je", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Kliknutím použijete změny.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Zablokováno na této stránce", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Kliknutím vrátíte změny.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Zablokováno od instalace", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"vše", - "description":"" + "popupDomainsConnected_v2": { + "message": "Počet připojených domén", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"obrázky", - "description":"" + "popupTipDashboard": { + "message": "Otevřít ovládací panel", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"z třetí strany", - "description":"" + "popupTipZapper": { + "message": "Zapnout režim likvidace prvků", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"obrázky\/css třetích stran", - "description":"" + "popupTipPicker": { + "message": "Zapnout režim výběru prvků", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"řádkové skripty", - "description":"" + "popupTipLog": { + "message": "Otevřít Logger", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"skripty první strany", - "description":"" + "popupTipReport": { + "message": "Nahlásit problém na tomto webu", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"skripty třetích stran", - "description":"" + "popupTipNoPopups": { + "message": "Přepnout blokování všech vyskakovacích oken na tomto webu", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"rámce třetích stran", - "description":"" + "popupTipNoPopups1": { + "message": "Klepnutím zablokujete všechna vyskakovací okna na tomto webu", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"domén připojeno", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Klepnutím vypnete blokování všech vyskakovacích oken na tomto webu", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} z {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Přepnout blokování velkých multimediálních prvků na tomto webu", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Vytvořit", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Klepnutím zablokujete velké multimediální prvky na tomto webu", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Vybrat", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Klepnutím vypnete blokování velkých multimediálních prvků na tomto webu", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Ukončit", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Přepnout kosmetické filtrování na tomto webu", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Náhled", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Klepnutím zakážete kosmetické filtrování na tomto webu", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Síťové filtry", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Klepnutím povolíte kosmetické filtrování na tomto webu", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Kosmetické filtry", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Přepnout blokování vzdálených písem na tomto webu", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Kliknutí, Ctrl+Kliknutí", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Klepnutím zablokujete vzdálená písma na tomto webu", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Blokovat prvek", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Klepnutím vypnete blokování vzdálených písem na tomto webu", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Skrýt zástupné objekty zablokovaných prvků", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Klepnutím zakážete JavaScript na tomto webu", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Zobrazit počet blokovaných požadavků u ikony", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Klepnutím znovu povolíte JavaScript na tomto webu", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Skrýt nápovědu při najetí", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Vyskakovací okna", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Využít kontextovou nabídku kde je to možné", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Velké multimediální prvky", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Styl pro barvoslepé", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Kosmetické filtrování", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Povolit podporu cloudového úložiště", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Vzdálená písma", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Jsem pokročilý uživatel (Nutno přečíst<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Zakázat přednačítání (zakáže jakékoliv spojení pro zablokované síťové požadavky)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Více", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Vypnout auditování hypertextových odkazů", - "description":"English: " + "popupLessButton_v2": { + "message": "Méně", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Předejít úniku lokálních IP adres přes WebRTC", - "description":"English: " + "popupTipGlobalRules": { + "message": "Globální pravidla: tento sloupec slouží pro pravidla, která platí pro všechny weby.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Výchozí chování", - "description":"" + "popupTipLocalRules": { + "message": "Lokální pravidla: tento sloupec slouží pro pravidla, která platí jen pro aktuální web.\nLokální pravidla přepisují globální pravidla.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Tato výchozí chování mohou být přepsána u jednotlivých webů", - "description":"" + "popupTipSaveRules": { + "message": "Klepnutím natrvalo uložíte provedené změny.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Zakázat kosmetické filtrování", - "description":"" + "popupTipRevertRules": { + "message": "Klepnutím zrušíte provedené změny.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Blokovat multimediální prvky větší než {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "vše", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blokovat externí fonty", - "description":"" + "popupImageRulePrompt": { + "message": "obrázky", + "description": "" }, - "settingsStorageUsed":{ - "message":"Prostoru využito: {{value}} bajtů", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "z třetí strany", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Poslední obnova:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "CSS/obrázky třetích stran", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Poslední záloha:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "vložené skripty", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} síťových filtrů + {{cosmeticFilterCount}} kosmetických filtrů z:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "skripty první strany", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} použito z celkových {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "skripty třetích stran", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Automaticky aktualizovat seznamy filtrů.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "rámce třetích stran", + "description": "" }, - "3pUpdateNow":{ - "message":"Aktualizovat nyní", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "připojené domény", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Vyčistit celou mezipaměť", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} z {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Zpracovat a použít kosmetické filtry.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Verze", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Tímto povolíte zpracovávání a používání “element hiding” filtrů kompatibilních s Adblockem Plus<\/a>. Tyto filtry jsou převážně kosmetické. Skrývají prvky webových stránek, které jsou vizuálně na obtíž a nemohou být zablokovány síťovým požadavkem.<\/p>

      Povolení této funkce zvětšuje stopy uBlocku₀ v paměti.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "skript", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignorovat obecné kosmetické filtry", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "rámec", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Obecné kosmetické filtry jsou kosmetické filtry vytvořené k použití se všemi webovými stránkami.

      Přestože je uBlock₀ používá velmi efektivně, kosmetické filtry mohou přispět ke zvýšenému využití operační paměti a procesoru na některých webech, zejména těch velkých a složitých.

      Zapnutím této volby se lze vyhnout nadbytečnému zatížení paměti i procesoru vyvolaném použitím obecných kosmetických filtrů a rovněž snížit využití paměti samotným uBlock₀ rozšířením.

      Na méně výkonných zařízeních je doporučeno tuto volbu povolit.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Vytvořit", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Seznamy blokovaných hostitelů", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Vybrat", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Použít změny", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Ukončit", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Reklamy", - "description":"English: Ads" + "pickerPreview": { + "message": "Náhled", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Soukromí", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Síťové filtry", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Malware domény", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Kosmetické filtry", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Sociální", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Klepnutí, Ctrl+klepnutí", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Víceúčelové", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Zablokovat prvek...", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Regionální, jazykové", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Skrýt zástupné objekty zablokovaných prvků", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Vlastní", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Zobrazit počet blokovaných požadavků u ikony", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Jedna adresa URL na řádek. Řádky začínající na ‘!’ budou ignorovány. Neplatné adresy URL budou tiše ignorovány.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Zakázat nápovědu při najetí", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Použít", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Využít kontextovou nabídku, kde je to možné", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"vyprázdnit cache", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Styl pro barvoslepé", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"nová verze je k dispozici", - "description":"English: new version available" + "settingsAppearance": { + "message": "Vzhled", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"zastaralé", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Motiv", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Poslední aktualizace: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Vlastní barva motivu", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Jeden filtr na řádek. Filtr může být prostý název hostitele nebo filtr kompatibilní s Adblock Plus. Řádky začínající na ‘!’ budou ignorovány.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Povolit podporu cloudového úložiště", + "description": "" }, - "1pImport":{ - "message":"Importovat a připojit", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Jsem pokročilý uživatel (nutno přečíst)", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Exportovat", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Zakázat přednačítání (zakáže jakékoli spojení pro zablokované síťové požadavky)", + "description": "English: " }, - "1pExportFilename":{ - "message":"ublock-me-vlastni-filtry_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Vypnout auditování hypertextových odkazů", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Použít změny", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Předejít úniku lokálních IP adres přes WebRTC", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Permanentní pravidla", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Výchozí chování", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Dočasná pravidla", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Tato výchozí chování mohou být přepsána u jednotlivých webů", + "description": "" }, - "rulesRevert":{ - "message":"Vrátit", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Zakázat kosmetické filtrování", + "description": "" }, - "rulesCommit":{ - "message":"Potvrdit", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Blokovat multimediální prvky větší než {{input}} kB", + "description": "" }, - "rulesEdit":{ - "message":"Upravit", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Blokovat externí písma", + "description": "" }, - "rulesEditSave":{ - "message":"Uložit", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Zakázat JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Zrušit", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Blokovat CSP reporty", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Načíst ze souboru…", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Odkrýt kanonické názvy", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Exportovat do souboru", - "description":"" + "settingsAdvanced": { + "message": "Pokročilé", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"ublock-ma-dynamicka-pravidla_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Funkce vhodné jen pro pokročilé uživatele", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Seznam vašich pravidel pro dynamické filtrování.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "pokročilá nastavení", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Syntaxe pravidel: zdroj destinace typ akce<\/code> (kompletní dokumentace<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Poslední obnova:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Váš seznam názvů hostitelů, pro které bude uBlock₀ zakázán. Jedna položka na řádek. Neplatné názvy hostitelů budou tiše ignorovány.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Poslední záloha:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Importovat a připojit", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} síťových filtrů + {{cosmeticFilterCount}} kosmetických filtrů z:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Exportovat", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} použito z celkových {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"ublock-muj-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Automaticky aktualizovat seznamy filtrů", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Použít změny", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Aktualizovat nyní", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Typ", - "description":"English: Type" + "3pPurgeAll": { + "message": "Vyčistit celou mezipaměť", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Doména", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Analyzovat a vynucovat kosmetické filtry", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "\nKosmetické filtry slouží ke skrytí prvků na webové stránce, které jsou považovány za vizuálně obtěžující a které nemohou být blokovány filtry na základě síťových volání.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filtr", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignorovat obecné kosmetické filtry", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Všechny stránky", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Obecné kosmetické filtry jsou takové kosmetické filtry, které jsou určeny k použití na všech webových stránkách. Povolení této volby eliminuje nadbytečnou režii paměti a procesoru, přidanou na webové stránky v důsledku manipulace s obecnými kosmetickými filtry.\n\nTuto volbu doporučujeme povolit na méně výkonných zařízeních.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Za oponou", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Pozastavit síťové aktivity, dokud se nenačtou všechny seznamy filtrů", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"filtrovat záznamy", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Seznamy blokovaných hostitelů", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Maximální počet záznamů", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Použít změny", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Kontext:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Zabudované", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Typ:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Reklamy", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Dynamické filtrování URL adres", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Soukromí", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Statické filtrování", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Ochrana před malwarem, bezpečnost", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} síťové požadavky {{type}} {{br}}jejichž URL adresa se shoduje s {{url}} {{br}}a pochází {{origin}},{{br}}{{importance}} shodný výjimkový filtr.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Widgety sociálních sítí", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blokovat", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Oznámení o používání souborů cookie", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Povolit", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Dotěrnosti", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"typu “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Víceúčelové", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"jakéhokoliv typu", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Regionální, jazykové", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"z “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Vlastní", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"odkudkoliv", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Importovat...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"pokud neexistuje", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Jedna URL adresa na řádek. Neplatné URL adresy budou tiše ignorovány.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"i když existuje", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Zastaralé.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statický filtr {{filter}} nalezen v seznamech:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "Zobrazit obsah", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Change log", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Poslední aktualizace: {{ago}}.\nKlepnutím vynutíte aktualizaci.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Aktualizování...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Podpora", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Chyba sítě znemožnila aktualizaci tohoto zdroje.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Zdrojový kód (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Nepřidávejte filtry z nedůvěryhodných zdrojů.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Přispěvatelé", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Povolit mé vlastní filtry", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Zálohovat do souboru...", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Povolit vlastní filtry vyžadující důvěryhodnost", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"ublock-moje-zaloha_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Importovat a připojit...", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Obnovit ze souboru...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Exportovat...", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Obnovit výchozí nastavení...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "moje-vlastni-filtry-ublock_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Všechna nastavení budou přepsána těmi zálohovanými {{time}} a uBlock₀ se restartuje.\n\nPřepsat všechna existující nastavení zálohovanými daty?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Použít změny", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Data nemohla být načtena nebo jsou neplatná", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Trvalá pravidla", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Všechna nastavení budou smazána a uBlock₀ se restaruje.\n\nObnovit uBlock₀ do továrního nastavení?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Dočasná pravidla", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Nelze se připojit k {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Vrátit", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Přidat následující URL adresu do seznamů vlastních filtrů?\n\nNázev: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Potvrdit", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"před minutou", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Upravit", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"před {{value}} minutami", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Uložit", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"před hodinou", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Zrušit", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"před {{value}} hodinami", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Importovat ze souboru...", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"včera", - "description":"English: a day ago" + "rulesExport": { + "message": "Exportovat do souboru...", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"před {{value}} dny", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "moje-dynamicka-pravidla-ublock_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Zobrazit řídící panel", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Seznam Vašich pravidel pro dynamické filtrování.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Zobrazit Zaznamenávač", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Syntaxe pravidla: zdroj cíl typ akce (kompletní dokumentace).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"vypnutý", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Třídit:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin zabránil následující stránce v načtení:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Typ pravidla", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Kvůli následujícímu filtru", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Zdroj", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"bez parametrů", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Cíl", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Nalezeno v:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Pravidla v seznamu povolených webů určují, pro které webové stránky bude uBlock Origin vypnutý. Jedna položka na řádek.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Jít zpět", - "description":"English: Go back" + "whitelistImport": { + "message": "Importovat a připojit...", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Zavřít toto okno", - "description":"English: Close this window" + "whitelistExport": { + "message": "Exportovat...", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Zakázat striktní blokování pro {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "muj-whitelist-ublock_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Dočasně", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Použít změny", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Trvale", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Typ", + "description": "English: Type" }, - "cloudPush":{ - "message":"Exportovat do cloudového úložiště", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Doména", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Importovat z cloudového úložiště", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Importovat z cloudového úložiště a sloučit se současným nastavením", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filtr", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Vše", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Název tohoto zařízení:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Za oponou", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Odeslat", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Aktivní list", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Vrátit", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Znovu načíst obsah listu", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"bajtů", - "description":"" + "loggerDomInspectorTip": { + "message": "Přepnout DOM inspektor", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Dočasně povolit velké multimediální prvky", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Přepnout vyskakovací panel", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: Logger", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Vyčistit Logger", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Zastavit logování (ignorovat všechny příchozí údaje)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Pokračovat v logování", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Přepnout filtrování Loggeru", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filtrovat obsah loggeru", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Volby filtrování Loggeru", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Není", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "cokoli", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "blokováno", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "povoleno", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "upraveno", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "vlastní doména", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "třetí strany", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Podrobnosti", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filtr", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Seznam filtrů", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Pravidlo", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Kontext", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Kořenový kontext", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Strana", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Typ", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Pravidlo URL", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Kontext:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Typ:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Statický filtr", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} síťové požadavky {{type}} {{br}}, jejichž URL adresa se shoduje s {{url}} {{br}}a pochází {{origin}},{{br}}{{importance}} shodný výjimkový filtr.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Blokovat", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Povolit", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "typu \"{{type}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "jakéhokoli typu", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "z \"{{origin}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "odkudkoli", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "pokud neexistuje", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "i když existuje", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Statický filtr {{filter}} byl nalezen v seznamech:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Statický filtr nebyl nalezen v žádném aktuálně povoleném seznamu filtrů", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Záznamy logu, které nesplní všechny uvedené podmínky, budou automaticky zahozeny:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Zachovat záznamy z posledních {{input}} minut", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Zachovat nejvýše {{input}} načtení stránky pro list", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Zachovat nejvýše {{input}} záznamů pro list", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Použít {{input}} řádků pro jeden záznam v režimu svislého rozbalení", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Skrýt sloupce:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Čas", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filtr/pravidlo", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Kontext", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} strana", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Seznam", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tabulka", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Prostý text", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Otevřít", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Vytvořit nové hlášení na GitHubu", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Vyhledat podobná hlášení na GitHubu", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Dokumentace", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Přečtěte si dokumentaci na uBlock/wiki, kde se dozvíte o všech funkcích uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Dotazy a podpora", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Odpovědi na otázky a další druhy podpory jsou poskytovány na subredditu /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Problémy s filtrem/web je nefunkční", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Nahlaste problémy s filtrem u učitých webových stránek do sledovače problémů uBlockOrigin/uAssets. Vyžaduje účet GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Důležité: Nepoužívejte podobně zaměřené blokátory s uBlock Origin, může to způsobit problémy s filtry na určitých webových stránkách.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tipy: Ověřte, že jsou seznamy filtrů aktuální. Logger je hlavní nástroj pro diagnózu problémů s filtry.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Hlášení chyb", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Nahlaste problémy se samotným uBlock Origin do uBlockOrigin/uBlock-issue sledovače problémů. Vyžaduje účet GitHub.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Informace o řešení problémů", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Níže jsou technické informace, které mohou být užitečné, když Vám dobrovolníci pomáhají vyřešit nějaký problém.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Nahlásit problém s filtrem", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Abyste dobrovolníky nezatěžovali duplicitními hlášeními, ověřte si, zda již problém nebyl nahlášen. Poznámka: Klepnutím na tlačítko bude originální stránka odeslána na GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Seznamy filtrů jsou aktualizovány denně. Ujistěte se, že Váš problém již nebyl vyřešen v nejnovějších seznamech filtrů.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Ověřte, že problém přetrvává i po opětovném načtení problematické webové stránky.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Adresa webové stránky:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Webová stránka...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Vyberte položku --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Zobrazuje reklamy nebo zbytky reklam", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Je překrytá nebo má jiné nedostatky", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detekuje uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Má problémy související se soukromím", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Je rozbitá, když je povolen uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Otevírá nechtěné karty nebo okna", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Vede k badwaru, phishingu", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Označit webovou stránku jako \"NSFW\" (“Není bezpečné pro práci”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Zásady ochrany osobních údajů", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Přehled změn", + "description": "" + }, + "aboutCode": { + "message": "Zdrojový kód (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Přispěvatelé", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Zdrojový kód", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Překlady", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Seznam filtrů", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Externí závislosti (kompatibilní s GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Vlastní seznamy filtrů uBO jsou volně hostovány na následujících CDN:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Při aktualizaci seznamu filtrů se použije náhodně vybraná síť CDN.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Zálohovat do souboru...", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "moje-zaloha-ublock_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Obnovit ze souboru...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Obnovit výchozí nastavení...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Všechna nastavení budou přepsána daty, zálohovanými {{time}} a uBlock₀ se restartuje.\n\nPřepsat všechna existující nastavení zálohovanými daty?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Data nemohla být načtena nebo jsou neplatná", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Všechna nastavení budou smazána a uBlock₀ se restartuje.\n\nObnovit uBlock₀ do továrního nastavení?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Chyba sítě: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Odebírat", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "před minutou", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "před {{value}} minutami", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "před hodinou", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "před {{value}} hodinami", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "včera", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "před {{value}} dny", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Zobrazit ovládací panel", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Zobrazit Logger", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "vypnuto", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Stránka byla zablokována", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin zabránil následující stránce v načtení:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Kvůli následujícímu filtru:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "bez parametrů", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Filtr byl nalezen v:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Jít zpět", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Zavřít toto okno", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Příště na tuto stránku neupozorňovat", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Zakázat striktní blokování pro {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Dočasně", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Trvale", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Pokračovat", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Zablokovaná stránka Vás chce přesměrovat na jiný web. Pokud se rozhodnete pokračovat, přejdete přímo na: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Důvod:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Škodlivá", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Sledovač", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Pochybná", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Exportovat do cloudového úložiště", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importovat z cloudového úložiště", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importovat z cloudového úložiště a sloučit se současným nastavením", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Název tohoto zařízení:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Pozor! Tato pokročilá nastavení měňte jen na vlastní nebezpečí.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Odeslat", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Použít změny", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Vrátit", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bajtů", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Zablokovat prvek v rámci...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Přihlásit se k odběru seznamu filtrů...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Dočasně povolit velké multimediální prvky", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Zobrazit zdrojový kód...", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Zapište zkratku", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Přepnout uzamčení posunu", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Kopírovat do schránky", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Označit vše", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Zapnout kosmetické filtrování", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Přepnout JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Uvolnit režim blokování", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Využití úložiště: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Klepněte pro načtení", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Chyby: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Nebylo možné správně filtrovat při spuštění prohlížeče. Načtěte stránku znovu, abyste zajistili správné filtrování.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Tento záznam musí být poslední", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/cv/messages.json b/src/_locales/cv/messages.json index 1c83563c1e4c6..1e03eca86b2a9 100644 --- a/src/_locales/cv/messages.json +++ b/src/_locales/cv/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Тинех Интернет тишкерӳҫӗ валли хӑвӑрт та витӗмлӗ чаркӑч пур.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Тинех Интернет тишкерӳҫӗ валли хӑвӑрт та витӗмлӗ чаркӑч пур.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"Йӗркелӳ ҫӳлӗкӗ", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "Йӗркелӳ ҫӳлӗкӗ", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Ӗнерлев", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Асӑрха! Санӑн упраман улшӑнусем пур", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Ют фильтрсем", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Stay here", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Манӑн фильтрсем", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ignore", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Манӑн йӗрке", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Ӗнерлев", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Whitelist", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Ют фильтрсем", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Logger", - "description":"Title for the logger window" + "1pPageName": { + "message": "Манӑн фильтрсем", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Сарӑм пирки", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Манӑн йӗрке", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Trusted sites", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"requests blocked", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Shortcuts", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"on this page", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Logger", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} е {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Сарӑм пирки", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"since install", - "description":"English: since install" + "supportPageName": { + "message": "Support", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"е", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Asset viewer", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Йӗркелӳ ҫӳлӗкне уҫма пус", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Advanced settings", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Enter element picker mode", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Open the logger", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Toggle the blocking of all popups for this site", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Click to enable uBlock₀ for this site.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Toggle the blocking of large media elements for this site", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "requests blocked", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Toggle cosmetic filtering for this site", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "on this page", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Toggle the blocking of remote fonts for this site", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} е {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Global rules: this column is for rules which apply to all sites.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "since install", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "е", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Click to make your changes permanent.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Blocked on this page", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Click to revert your changes.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Blocked since install", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"пурте", - "description":"" + "popupDomainsConnected_v2": { + "message": "Domains connected", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"ӳкерчӗксем", - "description":"" + "popupTipDashboard": { + "message": "Йӗркелӳ ҫӳлӗкне уҫма пус", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"ют ресурссем", - "description":"" + "popupTipZapper": { + "message": "Enter element zapper mode", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"ют css\/ӳкерчӗксем", - "description":"" + "popupTipPicker": { + "message": "Enter element picker mode", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"inline-скриптсем", - "description":"" + "popupTipLog": { + "message": "Open the logger", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"Харпӑр скриптсем", - "description":"" + "popupTipReport": { + "message": "Report an issue on this website", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"ют скриптсем", - "description":"" + "popupTipNoPopups": { + "message": "Toggle the blocking of all popups for this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"Ют фреймсем", - "description":"" + "popupTipNoPopups1": { + "message": "Click to block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"domains connected", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Click to no longer block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} out of {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Toggle the blocking of large media elements for this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Create", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Click to block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Суйласа ил", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Тух", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Toggle cosmetic filtering for this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Preview", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Click to disable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Network filters", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Click to enable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Cosmetic filters", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Toggle the blocking of remote fonts for this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Click, Ctrl-click", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Click to block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Block element", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Click to no longer block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Hide placeholders of blocked elements", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Click to disable JavaScript on this site", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Show the number of blocked requests on the icon", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Click to no longer disable JavaScript on this site", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Disable tooltips", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Pop-up windows", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Make use of context menu where appropriate", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Large media elements", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Color-blind friendly", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Cosmetic filtering", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Enable cloud storage support", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Remote fonts", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Эпӗ ӑста усӑҫ (Вуламасӑр иртме ҫук<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Disable pre-fetching (to prevent any connection for blocked network requests)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Тата", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Disable hyperlink auditing", - "description":"English: " + "popupLessButton_v2": { + "message": "Less", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Prevent WebRTC from leaking local IP addresses", - "description":"English: " + "popupTipGlobalRules": { + "message": "Global rules: this column is for rules which apply to all sites.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Default behavior", - "description":"" + "popupTipLocalRules": { + "message": "Local rules: this column is for rules which apply to the current site only.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Ку ӗнерлеве кашни сайт валли уйрӑм палӑртма май пур", - "description":"" + "popupTipSaveRules": { + "message": "Click to make your changes permanent.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Disable cosmetic filtering", - "description":"" + "popupTipRevertRules": { + "message": "Click to revert your changes.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"{{input:number}} КБ йывӑртарах медиа-элементсене чар", - "description":"" + "popupAnyRulePrompt": { + "message": "пурте", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Ют шрифтсене чар", - "description":"" + "popupImageRulePrompt": { + "message": "ӳкерчӗксем", + "description": "" }, - "settingsStorageUsed":{ - "message":"Storage used: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "ют ресурссем", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Юлашки тавӑру:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "ют css/ӳкерчӗксем", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Last backup:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "inline-скриптсем", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "Харпӑр скриптсем", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} used out of {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "ют скриптсем", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Auto-update filter lists", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "Ют фреймсем", + "description": "" }, - "3pUpdateNow":{ - "message":"Халех ҫӗнет", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "domains connected", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Purge all caches", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} out of {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Parse and enforce cosmetic filters", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Version", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      This option enables the parsing and enforcing of Adblock Plus-compatible “element hiding” filters<\/a>. These filters are essentially cosmetic, they serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the net request-based filtering engine.<\/p>

      Enabling this feature increases uBlock₀'s memory footprint.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignore generic cosmetic filters", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "frame", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites.

      Though handled efficiently by uBlock₀, generic cosmetic filters may still contribute measurable memory and CPU overhead on some web pages, especially for large and long-lived ones.

      Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters, and also lower the memory footprint of uBlock₀ itself.

      It is recommended to enable this option on less powerful devices.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Create", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Чарнӑ хостсен йышӗ", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Суйласа ил", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Улшӑнӑва ҫирӗплет", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Тух", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Реклама", - "description":"English: Ads" + "pickerPreview": { + "message": "Preview", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Вӑрттӑнлӑх", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Network filters", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Malware domains", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Cosmetic filters", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Social", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Click, Ctrl-click", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Нумай тӗллевлисем", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Block element…", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Регионсем, чӗлхесем", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Hide placeholders of blocked elements", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Custom", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Show the number of blocked requests on the icon", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Disable tooltips", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Parse", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Make use of context menu where appropriate", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"кэш тасат", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Color-blind friendly", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"çĕнĕ верси пур", - "description":"English: new version available" + "settingsAppearance": { + "message": "Appearance", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"Кивелнӗ", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Theme", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Юлашки ҫӗнетӳ: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Custom accent color", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Enable cloud storage support", + "description": "" }, - "1pImport":{ - "message":"Import and append", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Эпӗ ӑста усӑҫ (Вуламасӑр иртме ҫук)", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Export", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Disable pre-fetching (to prevent any connection for blocked network requests)", + "description": "English: " }, - "1pExportFilename":{ - "message":"ublock-custom-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Disable hyperlink auditing", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Улшӑнӑва ҫирӗплет", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Prevent WebRTC from leaking local IP addresses", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Яланлӑх йӗрке", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Default behavior", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Вӑхӑтлӑх йӗрке", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Ку ӗнерлеве кашни сайт валли уйрӑм палӑртма май пур", + "description": "" }, - "rulesRevert":{ - "message":"Тавӑр", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Disable cosmetic filtering", + "description": "" }, - "rulesCommit":{ - "message":"Ҫирӗплет", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "{{input:number}} КБ йывӑртарах медиа-элементсене чар", + "description": "" }, - "rulesEdit":{ - "message":"Улӑштар", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Ют шрифтсене чар", + "description": "" }, - "rulesEditSave":{ - "message":"Упра", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Disable JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Discard", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Import from file...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Uncloak canonical names", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Export to file", - "description":"" + "settingsAdvanced": { + "message": "Advanced", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Features suitable only for technical users", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"List of your dynamic filtering rules.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "advanced settings", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Rule syntax: source destination type action<\/code> (full documentation<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Юлашки тавӑру:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Your list of host names for which uBlock₀ will be disabled. One entry per line. Invalid host names will be silently ignored.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Last backup:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Import and append", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Export", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} used out of {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Auto-update filter lists", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Улшӑнӑва ҫирӗплет", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Халех ҫӗнет", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Тĕсĕ", - "description":"English: Type" + "3pPurgeAll": { + "message": "Purge all caches", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Домен", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Parse and enforce cosmetic filters", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Cosmetic filters serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the network request-based filtering engines.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Фильтр", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignore generic cosmetic filters", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Пурте", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Behind the scene", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Suspend network activity until all filter lists are loaded", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"filter log entries", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Чарнӑ хостсен йышӗ", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Maximum number of log entries", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Улшӑнӑва ҫирӗплет", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Контекст:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Built-in", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Тĕсĕ:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Реклама", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":" URL динамика фильтрацийӗ", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Вӑрттӑнлӑх", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Статика фильстрацийӗ", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Malware protection, security", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Social widgets", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Чар", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Cookie notices", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Ирӗк пар", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"тĕсĕ “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Нумай тӗллевлисем", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"any type", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Регионсем, чӗлхесем", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":" “{{origin}}” ран", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Custom", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"Кирек ӑҫтан та", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Import…", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"except when", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "One URL per line. Invalid URLs will be silently ignored.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"even if", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Кивелнӗ", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Static filter {{filter}} found in:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "view content", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Улшӑнусен йышӗ", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Юлашки ҫӗнетӳ: {{ago}}", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Вики", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Updating…", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Support", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "A network error prevented the resource from being updated.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Source code (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Do not add filters from untrusted sources.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Пайташсем", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Enable my custom filters", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Backup to file", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Allow custom filters requiring trust", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Import and append…", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Restore from file...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Куҫар", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Reset to default settings...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "ublock-custom-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Улшӑнӑва ҫирӗплет", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"The data could not be read or is invalid", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Яланлӑх йӗрке", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Вӑхӑтлӑх йӗрке", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Unable to connect to {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Тавӑр", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Ҫирӗплет", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"пӗр минут каялла", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Улӑштар", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} минут каялла", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Упра", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"пӗр сехет каялла", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Discard", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} сехет каялла", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Import from file…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"пӗр кун каялла", - "description":"English: a day ago" + "rulesExport": { + "message": "Export to file…", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} кун каялла", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Йӗркелӳ ҫӳлӗкне кӑтарт", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "List of your dynamic filtering rules.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Show Logger", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Rule syntax: source destination type action (full documentation).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"off", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Sort:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin has prevented the following page from loading:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Rule type", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Тепӗр фильтра пула", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Source", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"ӗнерлевсӗр", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Destination", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Тупӑннӑ:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Таврӑн", - "description":"English: Go back" + "whitelistImport": { + "message": "Import and append…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Close this window", - "description":"English: Close this window" + "whitelistExport": { + "message": "Export…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Disable strict blocking for {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "my-ublock-trusted-sites_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Вӑхӑтлӑха", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Улшӑнӑва ҫирӗплет", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Яланлăха", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Тĕсĕ", + "description": "English: Type" }, - "cloudPush":{ - "message":"Export to cloud storage", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Домен", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Import from cloud storage", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Import from cloud storage and merge with current settings", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Фильтр", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Пурте", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Ку хатӗрӗн ячӗ:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Tabless", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Йышӑн", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Current tab", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Тавӑр", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Reload the tab content", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"байт", - "description":"" + "loggerDomInspectorTip": { + "message": "Toggle the DOM inspector", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Пысӑк медиа-элементсене вӑхӑтлӑха уҫ", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Toggle the popup panel", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"Ку ҫыру юлашки пулмалла", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: The logger", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Clear logger", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Pause logger (discard all incoming data)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Unpause logger", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Toggle logger filtering", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filter logger content", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Logger filtering options", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Not", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "blocked", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "allowed", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "modified", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "1st-party", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "3rd-party", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Details", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filter", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Filter list", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Rule", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Context", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Root context", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Partyness", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Type", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "Тӗл", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": " URL динамика фильтрацийӗ", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Контекст:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Тĕсĕ:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Статика фильстрацийӗ", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Чар", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Ирӗк пар", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "тĕсĕ “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "any type", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": " “{{origin}}” ран", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "Кирек ӑҫтан та", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "except when", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "even if", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Static filter {{filter}} found in:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Static filter could not be found in any of the currently enabled filter lists", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Preserve entries from the last {{input}} minutes", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Preserve at most {{input}} page loads per tab", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Preserve at most {{input}} entries per tab", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Use {{input}} lines per entry in vertically expanded mode", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Hide columns:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Time", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filter/rule", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Context", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Partyness", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "List", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Table", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Plain", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Open", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Create new report on GitHub", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Find similar reports on GitHub", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Documentation", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Read the documentation at uBlock/wiki to learn about all of uBlock Origin's features.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Questions and support", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Answers to questions and other kinds of help support is provided on the subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filter issues/website is broken", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Important: Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tips: Be sure your filter lists are up to date. The logger is the primary tool to diagnose filter-related issues.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Bug report", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Report issues with uBlock Origin itself to the uBlockOrigin/uBlock-issue issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Troubleshooting Information", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported. Note: clicking the button will cause the page's origin to be sent to GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verify that the issue still exists after reloading the problematic web page.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the web page:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The web page…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBlock Origin is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the web page as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Privacy policy", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Улшӑнусен йышӗ", + "description": "" + }, + "aboutCode": { + "message": "Source code (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Пайташсем", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Source code", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Translations", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Filter lists", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "External dependencies (GPLv3-compatible):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO's own filter lists are freely hosted on the following CDNs:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "A randomly picked CDN is used when a filter list needs to be updated.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Back up to file…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Restore from file…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Reset to default settings…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "The data could not be read or is invalid", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Network error: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Subscribe", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "пӗр минут каялла", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} минут каялла", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "пӗр сехет каялла", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} сехет каялла", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "пӗр кун каялла", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} кун каялла", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Йӗркелӳ ҫӳлӗкне кӑтарт", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Show Logger", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "off", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Page blocked", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin has prevented the following page from loading:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Тепӗр фильтра пула", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "ӗнерлевсӗр", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Тупӑннӑ:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Таврӑн", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Close this window", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Disable strict blocking for {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Вӑхӑтлӑха", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Яланлăха", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Proceed", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Export to cloud storage", + "description": "tooltip" + }, + "cloudPull": { + "message": "Import from cloud storage", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Import from cloud storage and merge with current settings", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Ку хатӗрӗн ячӗ:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Warning! Change these advanced settings at your own risk.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Йышӑн", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Apply changes", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Тавӑр", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "байт", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Block element in frame…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Subscribe to filter list…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Пысӑк медиа-элементсене вӑхӑтлӑха уҫ", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "View source code…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Type a shortcut", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Toggle locked scrolling", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Copy to clipboard", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Select all", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Toggle cosmetic filtering", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Toggle JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Relax blocking mode", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Storage used: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Click to load", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Errors: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Ку ҫыру юлашки пулмалла", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/cy/messages.json b/src/_locales/cy/messages.json new file mode 100644 index 0000000000000..230eb174b0be7 --- /dev/null +++ b/src/_locales/cy/messages.json @@ -0,0 +1,1314 @@ +{ + "extName": { + "message": "uBlock Origin", + "description": "extension name." + }, + "extShortDesc": { + "message": "O'r diwedd, rhwystrydd effeithlon sy'n gwell ar y CPU a'r cof.", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "dashboardName": { + "message": "uBlock₀ — Dangosfwrdd", + "description": "English: uBlock₀ — Dashboard" + }, + "dashboardUnsavedWarning": { + "message": "Rhybudd! Mae gennych newidiadau heb eu cadw", + "description": "A warning in the dashboard when navigating away from unsaved changes" + }, + "dashboardUnsavedWarningStay": { + "message": "Aros yma", + "description": "Label for button to prevent navigating away from unsaved changes" + }, + "dashboardUnsavedWarningIgnore": { + "message": "Anwybyddu", + "description": "Label for button to ignore unsaved changes" + }, + "settingsPageName": { + "message": "Gosodiadau", + "description": "appears as tab name in dashboard" + }, + "3pPageName": { + "message": "Rhestri hidlo", + "description": "appears as tab name in dashboard" + }, + "1pPageName": { + "message": "Fy hidlyddion", + "description": "appears as tab name in dashboard" + }, + "rulesPageName": { + "message": "Fy rheolau", + "description": "appears as tab name in dashboard" + }, + "whitelistPageName": { + "message": "Gwefannau dibynadwy", + "description": "appears as tab name in dashboard" + }, + "shortcutsPageName": { + "message": "Llwybrau byr", + "description": "appears as tab name in dashboard" + }, + "statsPageName": { + "message": "uBlock₀ — Logiwr", + "description": "Title for the logger window" + }, + "aboutPageName": { + "message": "Ynghylch", + "description": "appears as tab name in dashboard" + }, + "supportPageName": { + "message": "Cymorth", + "description": "appears as tab name in dashboard" + }, + "assetViewerPageName": { + "message": "uBlock₀ — Asset viewer", + "description": "Title for the asset viewer page" + }, + "advancedSettingsPageName": { + "message": "Gosodiadau uwch", + "description": "Title for the advanced settings page" + }, + "popupPowerSwitchInfo": { + "message": "Clic: analluogi/galluogi uBlock₀ ar y wefan hon.\n\nCtrl+clic: analluogi uBlock₀ ar y dudalen hon yn unig.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + }, + "popupPowerSwitchInfo1": { + "message": "Cliciwch i analluogi uBlock₀ ar y wefan hon.\n\nDefnyddiwch ctrl+clic i analluogi uBlock₀ ar y dudalen hon yn unig.", + "description": "Message to be read by screen readers" + }, + "popupPowerSwitchInfo2": { + "message": "Cliciwch i alluogi uBlock₀ ar y wefan hon.", + "description": "Message to be read by screen readers" + }, + "popupBlockedRequestPrompt": { + "message": "requests blocked", + "description": "English: requests blocked" + }, + "popupBlockedOnThisPagePrompt": { + "message": "ar y dudalen hon", + "description": "English: on this page" + }, + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 (13%)" + }, + "popupBlockedSinceInstallPrompt": { + "message": "since install", + "description": "English: since install" + }, + "popupOr": { + "message": "neu", + "description": "English: or" + }, + "popupBlockedOnThisPage_v2": { + "message": "Wedi rhwystro ar y dudalen hon", + "description": "For the new mobile-friendly popup design" + }, + "popupBlockedSinceInstall_v2": { + "message": "Wedi rhwystro ers gosod", + "description": "For the new mobile-friendly popup design" + }, + "popupDomainsConnected_v2": { + "message": "Parthau wedi cysylltu", + "description": "For the new mobile-friendly popup design" + }, + "popupTipDashboard": { + "message": "Agor y dashfwrdd", + "description": "English: Click to open the dashboard" + }, + "popupTipZapper": { + "message": "Galluogi modd saethu elfen", + "description": "Tooltip for the element-zapper icon in the popup panel" + }, + "popupTipPicker": { + "message": "Galluogi modd dewis elfen", + "description": "English: Enter element picker mode" + }, + "popupTipLog": { + "message": "Agor y logiwr", + "description": "Tooltip used for the logger icon in the panel" + }, + "popupTipReport": { + "message": "Adrodd nam ar y wefan hon", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipNoPopups": { + "message": "Toggle the blocking of all popups for this site", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups1": { + "message": "Click to block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2": { + "message": "Click to no longer block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoLargeMedia": { + "message": "Toggle the blocking of large media elements for this site", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia1": { + "message": "Click to block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoCosmeticFiltering": { + "message": "Toglo hidlo arwynebol ar gyfer y wefan hon", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering1": { + "message": "Cliciwch i analluogi hidlo arwynebol ar y wefan hon", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2": { + "message": "Cliciwch i alluogi hidlo arwynebol ar y wefan hon", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoRemoteFonts": { + "message": "Toggle the blocking of remote fonts for this site", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts1": { + "message": "Cliciwch i rwystro ffontiau pell ar y wefan hon", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts2": { + "message": "Cliciwch i ganiatáu ffontiau pell ar y wefan hon", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoScripting1": { + "message": "Cliciwch i analluogi JavaScript ar y wefan hon", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupTipNoScripting2": { + "message": "Cliciwch i alluogi JavaScript ar y wefan hon", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupNoPopups_v2": { + "message": "Pop-up windows", + "description": "Caption for the no-popups per-site switch" + }, + "popupNoLargeMedia_v2": { + "message": "Large media elements", + "description": "Caption for the no-large-media per-site switch" + }, + "popupNoCosmeticFiltering_v2": { + "message": "Hidlo arwynebol", + "description": "Caption for the no-cosmetic-filtering per-site switch" + }, + "popupNoRemoteFonts_v2": { + "message": "Ffontiau pell", + "description": "Caption for the no-remote-fonts per-site switch" + }, + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" + }, + "popupMoreButton_v2": { + "message": "Rhagor", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton_v2": { + "message": "Llai", + "description": "Label to be used to hide popup panel sections" + }, + "popupTipGlobalRules": { + "message": "Global rules: this column is for rules which apply to all sites.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." + }, + "popupTipLocalRules": { + "message": "Local rules: this column is for rules which apply to the current site only.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." + }, + "popupTipSaveRules": { + "message": "Click to make your changes permanent.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." + }, + "popupTipRevertRules": { + "message": "Click to revert your changes.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + }, + "popupAnyRulePrompt": { + "message": "all", + "description": "" + }, + "popupImageRulePrompt": { + "message": "delweddau", + "description": "" + }, + "popup3pAnyRulePrompt": { + "message": "3ydd-parti", + "description": "" + }, + "popup3pPassiveRulePrompt": { + "message": "CSS/delweddau 3ydd-parti", + "description": "" + }, + "popupInlineScriptRulePrompt": { + "message": "inline scripts", + "description": "" + }, + "popup1pScriptRulePrompt": { + "message": "1st-party scripts", + "description": "" + }, + "popup3pScriptRulePrompt": { + "message": "3rd-party scripts", + "description": "" + }, + "popup3pFrameRulePrompt": { + "message": "3rd-party frames", + "description": "" + }, + "popupHitDomainCountPrompt": { + "message": "domains connected", + "description": "appears in popup" + }, + "popupHitDomainCount": { + "message": "{{count}} o {{total}}", + "description": "appears in popup" + }, + "popupVersion": { + "message": "Fersiwn", + "description": "Example of use: Version 1.26.4" + }, + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" + }, + "popup3pFrameFilter": { + "message": "frame", + "description": "Appears as an option to filter out firewall rows" + }, + "pickerCreate": { + "message": "Creu", + "description": "English: Create" + }, + "pickerPick": { + "message": "Pick", + "description": "English: Pick" + }, + "pickerQuit": { + "message": "Quit", + "description": "English: Quit" + }, + "pickerPreview": { + "message": "Preview", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + }, + "pickerNetFilters": { + "message": "Network filters", + "description": "English: header for a type of filter in the element picker dialog" + }, + "pickerCosmeticFilters": { + "message": "Hidlyddion arwynebol", + "description": "English: Cosmetic filters" + }, + "pickerCosmeticFiltersHint": { + "message": "Click, Ctrl-click", + "description": "English: Click, Ctrl-click" + }, + "pickerContextMenuEntry": { + "message": "Blocio elfen…", + "description": "An entry in the browser's contextual menu" + }, + "settingsCollapseBlockedPrompt": { + "message": "Hide placeholders of blocked elements", + "description": "English: Hide placeholders of blocked elements" + }, + "settingsIconBadgePrompt": { + "message": "Show the number of blocked requests on the icon", + "description": "English: Show the number of blocked requests on the icon" + }, + "settingsTooltipsPrompt": { + "message": "Disable tooltips", + "description": "A checkbox in the Settings pane" + }, + "settingsContextMenuPrompt": { + "message": "Make use of context menu where appropriate", + "description": "English: Make use of context menu where appropriate" + }, + "settingsColorBlindPrompt": { + "message": "Color-blind friendly", + "description": "English: Color-blind friendly" + }, + "settingsAppearance": { + "message": "Gwedd", + "description": "Section for controlling user interface appearance" + }, + "settingsThemeLabel": { + "message": "Thema", + "description": "Label for checkbox to enable a custom dark theme" + }, + "settingsThemeAccent0Label": { + "message": "Custom accent color", + "description": "Label for checkbox to pick an accent color" + }, + "settingsCloudStorageEnabledPrompt": { + "message": "Enable cloud storage support", + "description": "" + }, + "settingsAdvancedUserPrompt": { + "message": "Rwy'n ddefnyddiwr profiadol", + "description": "Checkbox to let user access advanced, technical features" + }, + "settingsPrefetchingDisabledPrompt": { + "message": "Disable pre-fetching (to prevent any connection for blocked network requests)", + "description": "English: " + }, + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Disable hyperlink auditing", + "description": "English: " + }, + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Rhwystro WebRTC rhag datgelu eich cyfeiriad IP mewnol", + "description": "English: " + }, + "settingPerSiteSwitchGroup": { + "message": "Default behavior", + "description": "" + }, + "settingPerSiteSwitchGroupSynopsis": { + "message": "These default behaviors can be overridden on a per-site basis", + "description": "" + }, + "settingsNoCosmeticFilteringPrompt": { + "message": "Analluogi hidlo arwynebol", + "description": "" + }, + "settingsNoLargeMediaPrompt": { + "message": "Block media elements larger than {{input}} KB", + "description": "" + }, + "settingsNoRemoteFontsPrompt": { + "message": "Rhwystro ffontiau pell", + "description": "" + }, + "settingsNoScriptingPrompt": { + "message": "Analluogi JavaScript", + "description": "The default state for the per-site no-scripting switch" + }, + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" + }, + "settingsUncloakCnamePrompt": { + "message": "Uncloak canonical names", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" + }, + "settingsAdvanced": { + "message": "Uwch", + "description": "Section for controlling advanced-user settings" + }, + "settingsAdvancedSynopsis": { + "message": "Features suitable only for technical users", + "description": "Description of section controlling advanced-user settings" + }, + "settingsAdvancedUserSettings": { + "message": "gosodiadau uwch", + "description": "For the tooltip of a link which gives access to advanced settings" + }, + "settingsLastRestorePrompt": { + "message": "Last restore:", + "description": "English: Last restore:" + }, + "settingsLastBackupPrompt": { + "message": "Last backup:", + "description": "English: Last backup:" + }, + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:", + "description": "Appears at the top of the _3rd-party filters_ pane" + }, + "3pListsOfBlockedHostsPerListStats": { + "message": "Defnyddir {{used}} o {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "3pAutoUpdatePrompt1": { + "message": "Auto-update filter lists", + "description": "A checkbox in the _3rd-party filters_ pane" + }, + "3pUpdateNow": { + "message": "Diweddaru nawr", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pPurgeAll": { + "message": "Purge all caches", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pParseAllABPHideFiltersPrompt1": { + "message": "Parse and enforce cosmetic filters", + "description": "English: Parse and enforce Adblock+ element hiding filters." + }, + "3pParseAllABPHideFiltersInfo": { + "message": "Cosmetic filters serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the network request-based filtering engines.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + }, + "3pIgnoreGenericCosmeticFilters": { + "message": "Anwybyddu hidlyddion arwynebol cyffredinol", + "description": "This will cause uBO to ignore all generic cosmetic filters." + }, + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Hidlyddion arwynebol cyffredinol yw'r hidlyddion arwynebol hynny sy'n gweithredu ar bob gwefan. Mae galluogi'r dewisiad hwn yn dileu'r pwysau a roddir ar y cof a'r CPU gan wefannau o ganlyniad i drin hidlyddion arwynebol cyffredinol.\n\nArgymhellir galluogi'r dewisiad hwn ar ddyfeisiau llai pwerus.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." + }, + "3pSuspendUntilListsAreLoaded": { + "message": "Suspend network activity until all filter lists are loaded", + "description": "A checkbox in the 'Filter lists' pane" + }, + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" + }, + "3pApplyChanges": { + "message": "Rhoi newidiadau ar waith", + "description": "English: Apply changes" + }, + "3pGroupDefault": { + "message": "Mewnol", + "description": "Filter lists section name" + }, + "3pGroupAds": { + "message": "Hysbysebion", + "description": "Filter lists section name" + }, + "3pGroupPrivacy": { + "message": "Preifatrwydd", + "description": "Filter lists section name" + }, + "3pGroupMalware": { + "message": "Diogelwch ac amddiffyn rhag maleiswedd", + "description": "Filter lists section name" + }, + "3pGroupSocial": { + "message": "Social widgets", + "description": "Filter lists section name" + }, + "3pGroupCookies": { + "message": "Hysbysiadau cwci", + "description": "Filter lists section name" + }, + "3pGroupAnnoyances": { + "message": "Pethau diflas", + "description": "Filter lists section name" + }, + "3pGroupMultipurpose": { + "message": "Amlbwrpas", + "description": "Filter lists section name" + }, + "3pGroupRegions": { + "message": "Rhanbarthau, ieithoedd", + "description": "Filter lists section name" + }, + "3pGroupCustom": { + "message": "Addasedig", + "description": "Filter lists section name" + }, + "3pImport": { + "message": "Mewnforio…", + "description": "The label for the checkbox used to import external filter lists" + }, + "3pExternalListsHint": { + "message": "One URL per line. Invalid URLs will be silently ignored.", + "description": "Short information about how to use the textarea to import external filter lists by URL" + }, + "3pExternalListObsolete": { + "message": "Out of date.", + "description": "used as a tooltip for the out-of-date icon beside a list" + }, + "3pViewContent": { + "message": "gweld cynnwys", + "description": "used as a tooltip for eye icon beside a list" + }, + "3pLastUpdate": { + "message": "Last update: {{ago}}.\nClick to force an update.", + "description": "used as a tooltip for the clock icon beside a list" + }, + "3pUpdating": { + "message": "Wrthi'n diweddaru…", + "description": "used as a tooltip for the spinner icon beside a list" + }, + "3pNetworkError": { + "message": "A network error prevented the resource from being updated.", + "description": "used as a tooltip for error icon beside a list" + }, + "1pTrustWarning": { + "message": "Do not add filters from untrusted sources.", + "description": "Warning against copy-pasting filters from random sources" + }, + "1pEnableMyFiltersLabel": { + "message": "Galluogi fy hidlyddion addasedig", + "description": "Label for the checkbox use to enable/disable 'My filters' list" + }, + "1pTrustMyFiltersLabel": { + "message": "Allow custom filters requiring trust", + "description": "Label for the checkbox use to trust the content of 'My filters' list" + }, + "1pImport": { + "message": "Mewnforio ac atodi...", + "description": "Button in the 'My filters' pane" + }, + "1pExport": { + "message": "Allforio…", + "description": "Button in the 'My filters' pane" + }, + "1pExportFilename": { + "message": "fy-hidlyddion-statig_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" + }, + "1pApplyChanges": { + "message": "Rhoi'r newidiadau ar waith", + "description": "English: Apply changes" + }, + "rulesPermanentHeader": { + "message": "Rheolau parhaol", + "description": "header" + }, + "rulesTemporaryHeader": { + "message": "Rheolau dros dro", + "description": "header" + }, + "rulesRevert": { + "message": "Gwrthdroi", + "description": "This will remove all temporary rules" + }, + "rulesCommit": { + "message": "Commit", + "description": "This will persist temporary rules" + }, + "rulesEdit": { + "message": "Golygu", + "description": "Will enable manual-edit mode (textarea)" + }, + "rulesEditSave": { + "message": "Cadw", + "description": "Will save manually-edited content and exit manual-edit mode" + }, + "rulesEditDiscard": { + "message": "Discard", + "description": "Will discard manually-edited content and exit manual-edit mode" + }, + "rulesImport": { + "message": "Mewnforio o ffeil...", + "description": "" + }, + "rulesExport": { + "message": "Export to file…", + "description": "Button in the 'My rules' pane" + }, + "rulesDefaultFileName": { + "message": "fy-hidlyddion-deinamig_{{datetime}}.txt", + "description": "default file name to use" + }, + "rulesHint": { + "message": "Rhestr o'ch rheolau hidlo deinamig. ", + "description": "English: List of your dynamic filtering rules." + }, + "rulesFormatHint": { + "message": "Rule syntax: source destination type action (full documentation).", + "description": "English: dynamic rule syntax and full documentation." + }, + "rulesSort": { + "message": "Trefnu:", + "description": "English: label for sort option." + }, + "rulesSortByType": { + "message": "Math o reol", + "description": "English: a sort option for list of rules." + }, + "rulesSortBySource": { + "message": "Ffynhonnell", + "description": "English: a sort option for list of rules." + }, + "rulesSortByDestination": { + "message": "Cyrchfan", + "description": "English: a sort option for list of rules." + }, + "whitelistPrompt": { + "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line.", + "description": "A concise description of the 'Trusted sites' pane." + }, + "whitelistImport": { + "message": "Mewnforio ac atodi...", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExport": { + "message": "Allforio…", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExportFilename": { + "message": "my-ublock-trusted-sites_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" + }, + "whitelistApply": { + "message": "Rhoi'r newidiadau ar waith", + "description": "English: Apply changes" + }, + "logRequestsHeaderType": { + "message": "Math", + "description": "English: Type" + }, + "logRequestsHeaderDomain": { + "message": "Parth", + "description": "English: Domain" + }, + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" + }, + "logRequestsHeaderFilter": { + "message": "Hidlydd", + "description": "English: Filter" + }, + "logAll": { + "message": "Y cyfan", + "description": "Appears in the logger's tab selector" + }, + "logBehindTheScene": { + "message": "Tabless", + "description": "Pretty name for behind-the-scene network requests" + }, + "loggerCurrentTab": { + "message": "Y tab presennol", + "description": "Appears in the logger's tab selector" + }, + "loggerReloadTip": { + "message": "Reload the tab content", + "description": "Tooltip for the reload button in the logger page" + }, + "loggerDomInspectorTip": { + "message": "Toggle the DOM inspector", + "description": "Tooltip for the DOM inspector button in the logger page" + }, + "loggerPopupPanelTip": { + "message": "Toggle the popup panel", + "description": "Tooltip for the popup panel button in the logger page" + }, + "loggerInfoTip": { + "message": "uBlock Origin wiki: The logger", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Clirio'r logiwr", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Oedi'r logiwr (diystyru data sy'n cyrraedd)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Dad-oedi'r logiwr", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Toglo hidlo'r logiwr", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "hidlo cynnwys yr hidlydd", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Dewisiadau hidlo'r logiwr", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Nid", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "wedi rhwystro", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "wedi caniatáu", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "wedi addasu", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "1st-party", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "3rd-party", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Manylion", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Hidlydd", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Filter list", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Rheol", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Cyd-destun", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Root context", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Partyness", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Math", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Rheol URL", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Cyd-destun:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Math:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Hidlydd statig", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Rhwystro", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Caniatáu", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "math \"{{type}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "any type", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "o \"{{origin}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "o unrhyw le", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "ac eithrio pan", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "hyd yn oed os", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Static filter {{filter}} found in:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Static filter could not be found in any of the currently enabled filter lists", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Preserve entries from the last {{input}} minutes", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Preserve at most {{input}} page loads per tab", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Preserve at most {{input}} entries per tab", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Use {{input}} lines per entry in vertically expanded mode", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Cuddio colofnau:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Amser", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Hidlydd/rheol", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Cyd-destun", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Partyness", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Rhestr", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tabl", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Plaen", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Agor", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Creu adroddiad newydd", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Canfod adroddiadau tebyg", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Dogfennaeth", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Read the documentation at uBlock/wiki to learn about all of uBlock Origin's features.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Cwestiynau a chymorth", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Answers to questions and other kinds of help support is provided on the subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filter issues/website is broken", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Important: Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tips: Be sure your filter lists are up to date. The logger is the primary tool to diagnose filter-related issues.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Adroddiad nam", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Report issues with uBlock Origin itself to the uBlockOrigin/uBlock-issue issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Gwybodaeth datrys problemau", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Adrodd nam ar hidlydd", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported. Note: clicking the button will cause the page's origin to be sent to GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verify that the issue still exists after reloading the problematic web page.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Cyfeiriad y dudalen we:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Y dudalen we…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBlock Origin is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Rhoi label “NSFW” (“Not Safe For Work”) ar y dudalen we", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Polisi preifatrwydd", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Cofnod newidiadau", + "description": "" + }, + "aboutCode": { + "message": "Cod ffynhonnell (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Cyfranwyr", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Cod ffynhonnell", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Cyfieithiadau", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Rhestri hidlo", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Gofynion allanol (cydnaws â GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO's own filter lists are freely hosted on the following CDNs:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "A randomly picked CDN is used when a filter list needs to be updated.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Copïo wrth gefn i ffeil...", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Adfer o ffeil...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Ailosod y gosodiadau i'r rhagosodiad...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "The data could not be read or is invalid", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Gwall rhwydwaith: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Tanysgrifio", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "funud yn ôl", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} o funudau yn ôl", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "awr yn ôl", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} awr yn ôl", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "ddiwrnod yn ôl", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} o ddiwrnodau yn ôl", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Dangos y dashfwrdd", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Dangos y logiwr", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "na", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Page blocked", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "Mae uBlock Origin wedi atal y dudalen ganlynol rhag llwytho:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "This happened because of the following filter:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "heb baramedrau", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "The filter has been found in:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Yn ôl", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Cau'r ffenestr hon", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Peidio â'm rhybuddio eto am y wefan hon", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Disable strict blocking for {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Dros dro", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Yn barhaol", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Parhau", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Export to cloud storage", + "description": "tooltip" + }, + "cloudPull": { + "message": "Import from cloud storage", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Import from cloud storage and merge with current settings", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Enw'r ddyfais hon:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Warning! Change these advanced settings at your own risk.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Cyflwyno", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Rhoi newidiadau ar waith", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Gwrthdroi", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "beit", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Block element in frame…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Subscribe to filter list…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Temporarily allow large media elements", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Gweld y cod ffynhonnell…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Type a shortcut", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Toggle locked scrolling", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Copïo i'r clipfwrdd", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Dewis y cyfan", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Toglo hidlo arwynebol", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Toglo JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Relax blocking mode", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Storfa: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Clicio i lwytho", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Gwallau: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" + } +} diff --git a/src/_locales/da/messages.json b/src/_locales/da/messages.json index d774a722322dc..11ea7bd5271d4 100644 --- a/src/_locales/da/messages.json +++ b/src/_locales/da/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Endelig en effektiv blocker til Chromium-baserede browsere. Lavt CPU- og hukommelsesbrug.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Endelig en effektiv blocker. Lavt CPU- og hukommelsesforbrug.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Dashboard", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Kontrolpanel", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Indstillinger", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Advarsel! Du har ændringer, der ikke er gemt", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Tredjeparts filtre", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Bliv her", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Mine filtre", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ignorér", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Mine regler", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Indstillinger", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Whitelist", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filterlister", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Netværkslog", - "description":"Title for the logger window" + "1pPageName": { + "message": "Mine filtre", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Om", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Mine regler", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Klik: Aktiver\/deaktiver uBlock₀ på dette websted.\n\nCtrl+Klik: Slå uBlock₀ fra kun på den nuværende side.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Betroede websteder", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"forespørgsler blokeret", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Genveje", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"på denne side", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Logger", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} eller {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Om", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"siden installation", - "description":"English: since install" + "supportPageName": { + "message": "Support", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"eller", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Visning af aktiver", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Klik for at åbne dashboardet", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Avancerede indstillinger", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Start element-udvælger", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Klik: Deaktivér/aktivér uBlock₀ på dette websted.\n\nCtrl+klik: Deaktivér kun uBlock₀ på denne side.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Gå til forespørgselslog", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Klik for at deaktivere uBlock₀ på dette websted.\n\nCtrl+klik for kun at deaktivere uBlock₀ på denne side.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Aktiver\/Deaktiver blokering af alle popups på denne side", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Klik for at aktivere uBlock₀ på dette websted.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Aktiver\/Deaktiver blokering af store medie-elementer på denne side", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "blokerede forespørgsler", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Aktiver\/Deaktiver kosmetiske filtre på denne side", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "på denne side", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Aktiver\/deaktiver blokering af fjerntliggende 3. parts skrifttyper på denne side", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} eller {{percent}} %", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Globale regler: denne søjle viser de regler der gælder på alle sider.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "siden installation", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Lokale regler: denne søjle viser de regler der gælder kun på denne side.\nLokale regler overskriver globale regler.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "eller", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Klik her for at anvende dine ændringer.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Blokeret på denne side", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Klik her for at fortryde dine ændringer.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Blokeret siden installation", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"alle", - "description":"" + "popupDomainsConnected_v2": { + "message": "Tilknyttede domæner", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"billeder", - "description":"" + "popupTipDashboard": { + "message": "Åbn kontrolpanelet", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"Tredjeparts", - "description":"" + "popupTipZapper": { + "message": "Gå til elementdræber­tilstand", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"Tredjeparts css\/billeder", - "description":"" + "popupTipPicker": { + "message": "Gå til elementvælger­tilstand", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"inline scripts", - "description":"" + "popupTipLog": { + "message": "Åbn loggeren", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"Førsteparts scripts", - "description":"" + "popupTipReport": { + "message": "Anmeld et problem med dette websted", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"Tredjeparts scripts", - "description":"" + "popupTipNoPopups": { + "message": "Aktivér/deaktivér blokering af alle popups på dette websted", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"Tredjeparts frames", - "description":"" + "popupTipNoPopups1": { + "message": "Klik for at blokere alle popups på dette websted", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"Forbundne domæner", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Klik for ikke længere at blokere alle popups på dette websted", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} ud af {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Aktivér/deaktivér blokering af store medieelementer på dette websted", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Opret", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Klik for at blokere store medieelementer på dette websted", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Vælg", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Klik for ikke længere at blokere store medieelementer på dette websted", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Afslut", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Slå kosmetisk filtrering til/fra for dette websted", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Forhåndsvisning", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Klik for at slå kosmetisk filtrering fra på dette websted", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Netfiltre", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Klik for at slå kosmetisk filtrering til på dette websted", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Kosmetiske filtre", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Slå blokeringen af fjernskrifttyper til/fra for dette websted", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Klik. Ctrl-klik", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Klik for at blokere fjernskrifttyper på dette websted", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Blokér element", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Klik for ikke længere at blokere fjernskrifttyper på dette websted", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Skjul blokerede elementers placeholdere", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Klik for at deaktivere JavaScript på dette websted", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Vis antallet af blokerede forespørgsler på ikonet", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Klik for ikke længere at deaktivere JavaScript på dette websted", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Deaktiver forklaring af knappers funktioner", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Popup-vinduer", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Brug kontekstmenuen når det er passende", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Store medieelementer", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Optimeret til farveblindhed", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Kosmetisk filtrering", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Aktiver støtte for sky-lagring", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Fjernskrifttyper", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Jeg er en erfaren bruger (Krævet læsning<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Deaktiver forudindlæsning (for at sikre at alle sortlistede netværksanmodninger bliver blokeret)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Mere", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Deaktiver hyperlink overvågning", - "description":"English: " + "popupLessButton_v2": { + "message": "Skjul", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Forhindre WebRTC i at lække lokale IP-adresser", - "description":"English: " + "popupTipGlobalRules": { + "message": "Globale regler: Denne kolonne er til regler gældende alle websteder.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Standard opførsel", - "description":"" + "popupTipLocalRules": { + "message": "Lokale regler: denne søjle viser de regler der gælder kun på denne side.\nLokale regler overskriver globale regler.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Disse standardindstillinger kan overskrives på en per-side basis", - "description":"" + "popupTipSaveRules": { + "message": "Klik for at gøre dine ændringer permanente.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Deaktiver kosmetisk filtrering", - "description":"" + "popupTipRevertRules": { + "message": "Klik for at fortryde dine ændringer.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Bloker medieelementer større end {{input: nummer}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "alle", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Bloker fjerntliggende skrifttyper", - "description":"" + "popupImageRulePrompt": { + "message": "billeder", + "description": "" }, - "settingsStorageUsed":{ - "message":"Brugt plads: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "Tredjeparts", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Sidste gendannelse:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "Tredjeparts CSS/billeder", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Sidste sikkerhedskopi:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "indlejrede scripts", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} netværksfiltre + {{cosmeticFilterCount}} kosmetiske filtre fra:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "Førsteparts-scripts", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} brugt af {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "Tredjeparts-scripts", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Opdater filterlister automatisk.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "Tredjeparts-rammer", + "description": "" }, - "3pUpdateNow":{ - "message":"Opdatér nu", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "forbundne domæner", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Tøm alle caches", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} af {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Analyser og benyt kosmetiske filtre.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Version", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Denne indstilling gør det muligt at analysere og anvende Ablock Plus kompatible “element skjuldende” filtre<\/a>. Disse filtre er essentielt set kosmetiske og har til formål at skjule irriterende visuelle elementer på diverse websider, som det ikke er muligt at blokere på andre måder. <\/p>

      Denne indstilling øger uBlock₀'s hukommelsesforbrug.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignorer fælles kosmetiske filtre", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "frame", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Fælles kosmetiske filtre er de kosmetiske filtre der er ment til anvendelse på alle websider. \n

      Selvom uBlock₀ behandler dem effektivt, kan de fælles kosmetiske filtre medføre forøget brug af hukommelse og CPU på nogle websider, specielt de store og længe-åbnede websider.\n

      Aktiveres denne funktion vil uBlock₀ ikke længere benytte de fælles kosmetiske filtre, hvilket medfører lavere hukommelses- og CPU-forbrug på hver side, samt mindre overordnet hukommelsesforbrug.\n

      Det anbefales at aktivere denne funktion på mindre kraftfulde enheder.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Opret", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Liste over blokerede værter", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Vælg", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Anvend ændringer", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Afslut", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Reklamer", - "description":"English: Ads" + "pickerPreview": { + "message": "Forhåndsvisning", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Privatliv", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Netværksfiltre", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Malware domæner", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Kosmetiske filtre", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Social", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Klik, Ctrl-klik", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Universalfilter", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Blokér element...", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Regioner, sprog", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Skjul blokerede elementers pladsholdere", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Brugerdefineret", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Vis antallet af blokerede forespørgsler på ikonet", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"En URL pr. linje. Linjer der starter med ‘!’ bliver ignoreret. Ugyldige URL'er bliver lydløst ignoreret.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Deaktivér værktøjstips", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Anvend", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Benyt kontekstmenuen, hvor det er relevant", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"tøm cache", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Optimeret til farveblinde", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"new version tilgængelig", - "description":"English: new version available" + "settingsAppearance": { + "message": "Udseende", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"kan være forældet", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Tema", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Sidste opdatering: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Tilpasset fremhævningsfarve", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Ét filter pr. linje. Et filter kan være et almindeligt værtsnavn, eller et Adblock Plus-kompatibelt filter. Linjer der starter med ‘!’ vil blive ignoreret.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Aktivér understøttelse for Skylagring", + "description": "" }, - "1pImport":{ - "message":"Importer og tilføj", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Jeg er en erfaren bruger", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Eksportér", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Deaktivér præindlæsning (for at hindre enhver forbindelse for blokerede netværksanmodninger)", + "description": "English: " }, - "1pExportFilename":{ - "message":"mine-ublock-statiske-filtre_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Deaktivér hyperlinkrevision", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Anvend ændringer", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Forhindr WebRTC i at lække lokale IP-adresser", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Permanente regler", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Standardadfærd", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Midlertidige regler", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Standardadfærd som disse kan tilsidesættes pr. websted", + "description": "" }, - "rulesRevert":{ - "message":"Gendan", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Deaktivér kosmetisk filtrering", + "description": "" }, - "rulesCommit":{ - "message":"Gør permanent", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Blokér medieelementer større end {{input:number}} kB", + "description": "" }, - "rulesEdit":{ - "message":"Rediger", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Blokér fjernskrifttyper", + "description": "" }, - "rulesEditSave":{ - "message":"Gem", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Deaktivér JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Kassér", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Blokér CSP-rapporter", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Importer fra fil...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Vis kanoniske navne", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Eksporter til fil", - "description":"" + "settingsAdvanced": { + "message": "Avanceret", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"mine-ublock-dynamiske-regler_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Funktioner kun egnet til tekniske brugere.", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Liste over dine dynamiske filtreringsregler.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "avancerede indstillinger", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Regelsyntaks: kilde destination type handling<\/code> (Fuld dokumentation<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Seneste gendannelse:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Brugerdefineret liste over værtsnavne hvor uBlock₀ vil være deaktiveret. Kun et værtsnavn pr. linje. Ugyldige værtsnavne ignoreres.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Seneste sikkerhedskopi:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Importer og tilføj", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} netværksfiltre + {{cosmeticFilterCount}} kosmetiske filtre fra:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Eksportér", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} af {{total}} brugt", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"min-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Auto-opdatér filterlister", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Anvend ændringer", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Opdatér nu", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Type", - "description":"English: Type" + "3pPurgeAll": { + "message": "Ryd alle caches", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Domæne", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Fortolk og benyt kosmetiske filtre", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Kosmetiske filtre tjener til at skjule elementer på en webside, der anses for at være visuel generende, og som ikke kan blokeres af den netværksanmodningsbaserede filtreringsmotor.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignorér generiske kosmetiske filtre", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Alle", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Generiske kosmetiske filtre er de kosmetiske filtre, der er beregnet til at gælde på alle websteder. Aktivering af denne indstilling vil eliminere hukommelse- og CPU-forbrug, der tilføjes til websider som et resultat af håndtering af generiske kosmetiske filtre.\n\nDet anbefales at aktivere denne indstilling på mindre kraftfulde enheder.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Bag kulisserne", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Suspendér netværksaktivitet, indtil alle filterlister er indlæst", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"Filtrér elementer i log", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Liste over blokerede værter", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Maksimalt antal elementer i log", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Effektuér ændringer", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Kontekst:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Integreret", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Type:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Annoncer", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Dynamisk URL filtrering", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Privatliv", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Statisk filtrering", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Malware-beskyttelse, sikkerhed", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} netværksanmodninger af {{type}} {{br}}som matcher følgende URL {{url}} {{br}}og som stammer fra {{origin}},{{br}}{{importance}} der er et matchende undtagelses-filter.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Sociale widgets", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Bloker", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Cookie-meddelelser", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Tillad", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Gener", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"type \"{{type}}\"", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Universalfiltre", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"enhver type", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Regioner, sprog", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"fra \"{{origin}}\"", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Tilpasset", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"fra hvor som helst", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Importér...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"undtagen når", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Én URL pr. linje. Ugyldige URL'er ignoreres uden notificering.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"selvom", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Forældet.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statisk filter {{filter}} findes i:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "vis indhold", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Changelog", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Seneste opdatering: {{ago}}.\nKlik for at gennemtvinge en opdatering.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Opdaterer...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Support", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "En netværksfejl forhindrede opdatering af ressourcen.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Kildekode (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Tilføj ikke filtre fra ikke-betroede kilder.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Bidragydere", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Aktivér mine tilpassede filtre", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Backup til fil", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Tillad tilpassede filtre som kræver tillid", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"min-ublock-sikkerhedskopi_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Importér og tilføj…", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Gendan fra fil...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Eksportér…", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Nulstil til standardindstillinger...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "mine-ublock-statiske-filtre_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Alle indstillinger vil blive erstattet af sikkerhedskopien fra {{time}}, hvorefter uBlock₀ vil genstarte.\n\nErstat alle indstillinger med indstillingerne fra sikkerhedskopien?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Effektuér ændringer", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Data kunne ikke læses eller er ugyldig", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Permanente regler", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Alle dine indstillinger vil blive nulstillet, hvorefter uBlock₀ vil genstarte.\n\nGendan alle indstillinger i uBlock₀ til standard?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Midlertidige regler", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Kan ikke forbinde til {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Gendan", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Tilføj det følgende URL til din personlige filterliste?\n\nTitel: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Gør permanent", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"et minut siden", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Redigér", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minutter siden", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Gem", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"en time siden", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Kassér", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} timer siden", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Importér fra fil...", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"en dag siden", - "description":"English: a day ago" + "rulesExport": { + "message": "Eksportér til fil…", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} dage siden", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "mine-ublock-dynamiske-regler_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Vis Instrumentpanel", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Liste over dine dynamiske filtreringsregler.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Vis netværkslog", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Regelsyntaks: kilde destination type handling (fuld dokumentation).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"Slået fra", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Sortering:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock₀ har blokeret den følgende hjemmeside:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Regeltype", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"På grund af det følgende filter", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Kilde", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"uden parametre", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Destination", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Fundet i:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "De betroede webstedsdirektiver dikterer, på hvilke websider uBlock Origin skal deaktiveres. En post pr. linje.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Gå tilbage", - "description":"English: Go back" + "whitelistImport": { + "message": "Importér og tilføj…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Luk vinduet", - "description":"English: Close this window" + "whitelistExport": { + "message": "Eksportér…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Deaktiver streng blokering af {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "mine-ublock-betroede-websteder_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Midlertidig", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Effektuér ændringer", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Permanent", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Type", + "description": "English: Type" }, - "cloudPush":{ - "message":"Eksporter til skylagring", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Domæne", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Importer fra skylagring", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Importer fra skyopbevaring og sammenflet med de aktuelle indstillinger", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Alle", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Denne enheds navn:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Bag kulisserne", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Indsend", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Aktuel fane", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Gendan", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Genindlæs faneindholdet", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"bytes", - "description":"" + "loggerDomInspectorTip": { + "message": "Slå DOM-inspektøren til/fra", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Tillad store medie-elementer midlertidigt", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Slå popup-panelet til/fra", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"Denne indskrivning må være den sidste", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin-wiki: Loggeren", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Ryd logger", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Sæt logger på pause (ignorér alle indgående data)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Fortsæt logger", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Slå logger-filtrering til/fra", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filtrér logindhold", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Logger-filtreringsindstillinger", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Ikke", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "begivenhedsrig", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "blokerede", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "tilladte", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "ændret", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "førsteparts", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "tredjeparts", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Detaljer", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filter", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Filterliste", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Regel", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Kontekst", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Root-kontekst", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Partsrelation", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Type", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL-regel", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Kontekst:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Type:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Statisk filtrering", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} netværksanmodninger af {{type}} {{br}}, hvis URL matcher {{url}} {{br}}, og som stammer fra {{origin}},{{br}}{{importance}} når der er et matchende undtagelsesfilter.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Blokér", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Tillad", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "type \"{{type}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "enhver type", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "fra \"{{origin}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "fra hvor som helst", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "undtagen når", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "selvom", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Statisk filter {{filter}} fundet i:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Statisk filter kunne ikke findes i nogen af de aktuelt aktiverede filterlister", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Loggerposter, som ikke opfylder alle tre betingelser nedenfor, kasseres automatisk:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Bevar poster fra de seneste {{input}} minutter", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Bevar maks. {{input}} sideindlæsninger pr. fane", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Bevar maks. {{input}} poster pr. fane", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Benyt {{input}} linjer pr. post i lodret udvidet tilstand", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Skjul kolonner:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} tid", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filter/regel", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Kontekst", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Partsrelation", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Liste", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tabel", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Enkel", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Åbn", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Opret ny anmeldelse på GitHub", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Find lign. anmeldelser på GitHub", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Dokumentation", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Læs dokumentationen på uBlock/wiki for at få mere at vide om alle uBlock Origin-funktionerne.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Spørgsmål og Support", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Svar på spørgsmål samt andre former for hjælp/support er tilgængelig via subreddit/r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filterproblemer/websted er ødelagt", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Rapportér filterproblemer med bestemte websteder via uBlockOrigin/uAssets-problemsporing. Kræver en GitHub-konto.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Vigtigt: Undgå brug af andre blockere med lign. formål sammen med uBlock Origin, da dette kan medføre filterproblemer på visse websteder.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tip: Sørg for, at dine filterlister er opdaterede. Loggeren er det primære værktøj til diagnosticering af filterrelaterede problemer.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Fejlrapport", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Rapportér problemer med selve uBlock Origin via uBlockOrigin/uBlock-issue problemsporingen. Kræver en GitHub-konto.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Fejlfindingsinformation", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Nedenfor findes tekniske oplysninger, som kan være nyttige, når frivillige forsøger at hjælpe dig med at løse et problem.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Anmeld et filterproblem", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "For at undgå at bebyrde frivillige med dubletanmeldelser, så tjek venligst, at problematikken ikke allerede er anmeldt. Bemærk: Ved at klikke på knappen, sendes sidens oprindelse til GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filterlister opdateres dagligt. Sørg for, at problematikken ikke allerede er blevet behandlet i de seneste filterlister.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Bekræft problematikkens fortsatte eksistens efter genindlæsning af den problematiske webside.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Websideadressen", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Websiden...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Vælg problemtype --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Viser annoncer eller annoncerester", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Indeholder overlejringer eller andre gener", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detekterer uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Indeholder fortrolighedsrelaterede problemer", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Ødelægges, når uBlock Origin er aktiveret", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Åbner uønskede faner eller vinduer", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Fører til badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Markér websiden som “NSFW” (“Ikke sikker til arbejdsbrug”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Fortrolighedspolitik", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Ændringslog", + "description": "" + }, + "aboutCode": { + "message": "Kildekode (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Bidragsydere", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Kildekode", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Oversættelser", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Filterlister", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Eksterne afhængigheder (GPLv3-kompatible):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBOs egne filterlister hostes frit på flg. CDN'er:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "En tilfældigt valgt CDN anvendes, når en filterliste kræver opdatering.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Sikkerhedskopiér til fil...", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "min-ublock-sikkerhedskopi_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Gendan fra fil...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Nulstil til standardindstillinger...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Alle dine indstillinger overskreves med data sikkerhedskopieret d. {{time}}, hvorefter uBlock₀ genstarter.\n\nOverskriv aktuelle indstillinger med data fra sikkerhedskopien?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Dataene kunne ikke læses eller er ugyldige", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Alle dine indstillinger fjernes, hvorefter uBlock₀ genstarter.\n\nNulstil uBlock₀ til standardindstillingerne?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Netværksfejl: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Abonnér", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "et minut siden", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} minutter siden", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "en time siden", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} timer siden", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "en dag siden", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} dage siden", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Vis Kontrolpanel", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Vis Logger", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "Slået fra", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Side blokeret", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origins har blokeret flg. side fra at hente:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Grundet flg. filter", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "uden parametre", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Fundet i:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Gå tilbage", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Luk dette vindue", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Advar ikke igen om dette websted", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Deaktivér stringent blokering for {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Midlertidig", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Permanent", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Fortsæt", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Den blokerede side ønsker at omdirigere til et andet websted. Vælger man at fortsætte, navigeres direkte til: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Årsag:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Ondsindet", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Ikke-velrenommeret", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Eksportér til Skylager", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importér fra Skylager", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importér fra Skylager og sammenflet med de aktuelle indstillinger", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Denne enheds navn:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Advarsel! Ændring af disse avancerede indstillinger sker på eget ansvar.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Indsend", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Effektuér ændringer", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Gendan", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Blokér element i ramme...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Abonnér på filterliste...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Tillad midlertidigt store medieelementer", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Vis kildekode…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Angiv en genvej", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Slå rullelåsning til/fra", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Kopiér til Udklipsholder", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Vælg alt", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Kosmetisk filtrering til/fra", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "JavaScript til/fra", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Lemp blokeringstilstand", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Lagerplads brugt: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Klik for at indlæse", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Fejl: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Kunne ikke filtrere korrekt ved webbrowserstart. Genindlæs siden for at sikre korrekt filtrering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Denne post skal være den sidste", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/de/messages.json b/src/_locales/de/messages.json index a56562f17b84b..a6531b7e7458a 100644 --- a/src/_locales/de/messages.json +++ b/src/_locales/de/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Endlich ein effizienter Blocker. Prozessor-freundlich und bescheiden beim Speicherbedarf.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Ein effizienter Blocker mit geringer CPU- und Speicherauslastung.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Dashboard", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Dashboard", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Einstellungen", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Warnung! Nicht gespeicherte Änderungen", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Vorgegebene Filter", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Bleiben", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Meine Filter", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ignorieren", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Meine Regeln", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Einstellungen", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Whitelist", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filterlisten", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Protokoll der Netzwerkanfragen", - "description":"Title for the logger window" + "1pPageName": { + "message": "Meine Filter", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Über", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Meine Regeln", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Klick: uBlock₀ für alle Seiten dieser Domain aktivieren\/deaktivieren.\n\nStrg+Klick: uBlock₀ nur für die aktuelle Webseite deaktivieren.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Ausnahmeregeln", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"blockierte Anfragen", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Tastenkombinationen", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"auf dieser Seite", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Protokoll der Netzwerkanfragen", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} oder {{percent}} %", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Über", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"seit Installation", - "description":"English: since install" + "supportPageName": { + "message": "Unterstützung", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"oder", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Ressourcenbetrachter", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Klicke um das Dashboard zu öffnen", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Erweiterte Einstellungen", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Öffne den Element-Picker-Modus", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Klick: uBlock₀ für diese Website ein-/ausschalten.\n\nStrg+Klick: uBlock₀ nur für die aktuelle Seite ausschalten.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Protokoll der Netzwerkanfragen öffnen", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Hier klicken, um uBlock₀ für diese Website auszuschalten. \n\nStrg+Klick, um uBlock₀ nur auf dieser Seite auszuschalten.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Blockieren von Popups für diese Seite an-\/ausschalten", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Hier klicken, um uBlock₀ für diese Website einzuschalten.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Das Blockieren großer Medienelemente auf dieser Seite an-\/ausschalten", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "Blockierte Anfragen", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Kosmetische Filter für diese Seite an-\/ausschalten", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "auf dieser Seite", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Remote-Schriftarten für diese Seite an-\/ausschalten", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} ({{percent}} %)", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Globale Regeln: Diese Spalte ist für Regeln, die bei allen Seiten angewendet werden.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "seit Installation", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Lokale Regeln: Diese Spalte ist für Regeln, die nur bei dieser Seite angewendet werden.\nLokale Regeln überschreiben globale Regeln.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "oder", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Klick, um deine Änderungen permanent zu übernehmen.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Auf dieser Seite blockiert", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Klick, um deine Änderungen rückgängig zu machen.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Seit der Installation blockiert", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"Alle Ressourcen", - "description":"" + "popupDomainsConnected_v2": { + "message": "Verbundene Domains", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"Bilder", - "description":"" + "popupTipDashboard": { + "message": "Dashboard öffnen", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"Ressourcen von Drittseiten", - "description":"" + "popupTipZapper": { + "message": "Element temporär entfernen", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"CSS\/Bilder von Drittseiten", - "description":"" + "popupTipPicker": { + "message": "Element dauerhaft entfernen", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"Inline-Skripte", - "description":"" + "popupTipLog": { + "message": "Protokoll der Netzwerkanfragen öffnen", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"Skripte der aktuellen Seite", - "description":"" + "popupTipReport": { + "message": "Ein Problem mit dieser Website melden", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"Skripte von Drittseiten", - "description":"" + "popupTipNoPopups": { + "message": "Pop-ups auf dieser Website blockieren/zulassen", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"Frames von Drittseiten", - "description":"" + "popupTipNoPopups1": { + "message": "Hier klicken, um alle Pop-ups auf dieser Website zu blockieren", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"verbundene Domains", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Hier klicken, um Pop-ups auf dieser Website wieder zuzulassen", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} von insgesamt {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Große Medienelemente auf dieser Website anzeigen/blockieren", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Erzeugen", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Hier klicken, um große Medienelemente auf dieser Website zu blockieren", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Auswählen", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Hier klicken, um große Medienelemente auf dieser Website wieder zuzulassen", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Beenden", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Kosmetisches Filtern für diese Website ein-/ausschalten", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Vorschau", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Hier klicken, um kosmetisches Filtern auf dieser Website zu deaktivieren", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Netzwerkfilter", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Hier klicken, um kosmetisches Filtern auf dieser Website zu aktivieren", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Kosmetische Filter", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Externe Schriftarten für diese Website blockieren/zulassen", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Klick, Strg-Klick", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Hier klicken, um externe Schriftarten auf dieser Website zu blockieren", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Element blockieren", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Hier klicken, um externe Schriftarten auf dieser Website wieder zuzulassen", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Verstecke die Platzhalter für blockierte Elemente", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Hier klicken, um JavaScript auf dieser Website zu deaktivieren", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Zeige die Zahl der blockierten Anfragen auf dem Symbol", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Hier klicken, um JavaScript auf dieser Website wieder zuzulassen", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Tooltips deaktivieren", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Pop-up-Fenster", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Verwende das Kontextmenü, falls möglich", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Große Medienelemente", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Anzeige für farbenblinde Benutzer", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Kosmetisches Filtern", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Aktiviere die Unterstützung der Speicherung in der Cloud", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Externe Schriftarten", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Ich bin ein erfahrener Benutzer (Pflichtlektüre<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Deaktiviere Prefetching (um jede Verbindung für blockierte Netzwerkanfragen zu verhindern)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Mehr", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Hyperlink-Überwachung deaktivieren", - "description":"English: " + "popupLessButton_v2": { + "message": "Weniger", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Verhindere die Freigabe der lokalen IP-Adresse via WebRTC", - "description":"English: " + "popupTipGlobalRules": { + "message": "Globale Regeln: Die Regeln in dieser Spalte gelten für alle Websites.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Standardverhalten", - "description":"" + "popupTipLocalRules": { + "message": "Lokale Regeln: Die Regeln in dieser Spalte gelten nur für diese Website.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Dieses Standardverhalten kann für jede Seite angepasst werden", - "description":"" + "popupTipSaveRules": { + "message": "Hier klicken, um die Änderungen dauerhaft zu übernehmen.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Kosmetische Filter deaktivieren", - "description":"" + "popupTipRevertRules": { + "message": "Hier klicken, um die Änderungen rückgängig zu machen.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Medienelemente größer als {{input:number}} kB blocken", - "description":"" + "popupAnyRulePrompt": { + "message": "Alle Ressourcen", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Externe Schriftarten blocken", - "description":"" + "popupImageRulePrompt": { + "message": "Bilder", + "description": "" }, - "settingsStorageUsed":{ - "message":"Verwendeter Speicherplatz: {{value}} Bytes", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "Ressourcen aus Drittquellen", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Letzte Wiederherstellung:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "CSS/Bilder aus Drittquellen", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Letztes Backup:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "Inline-Skripte", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} Netzwerkfilter + {{cosmeticFilterCount}} kosmetische Filter von:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "Skripte dieser Domain", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} benutzt aus {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "Skripte aus Drittquellen", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Automatische Aktualisierung der Filterlisten", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "Frames aus Drittquellen", + "description": "" }, - "3pUpdateNow":{ - "message":"Jetzt aktualisieren", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "Verbundene Domains", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Leere alle Cache-Speicher", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} von {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Kosmetische Filter zum Verstecken von Elementen analysieren und anwenden.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Version", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Diese Option ermöglicht die Analyse und Anwendung von Adblock-Plus-kompatiblen Filtern zum “Verstecken von Elementen”<\/a>. Diese Filter sind grundsätzlich kosmetischer Natur und dienen zum Verstecken von Elementen auf einer Webseite, die als optische Belästigung wahrgenommen werden und nicht von den vorhandenen Filtern geblockt werden können.<\/p>

      Das Aktivieren dieser Option erhöht den Speicherbedarf von uBlock₀<\/i>.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "Skript", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Generische kosmetische Filter ignorieren", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "Frame", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Generische kosmetische Filter sind diejenigen kosmetischen Filter, die für die Anwendung auf allen Webseiten bestimmt sind.

      Obwohl sie von uBlock₀ effizient verarbeitet werden, können sie dennoch auf einigen Webseiten - insbesondere auf den großen und langlebigen - eine messbare Belastung für Arbeitsspeicher und Prozessor bewirken.

      Die Aktivierung dieser Option wird diese Mehrbelastung für Speicher und Prozessor auf bestimmten Webseiten durch die Verarbeitung generischer kosmetischer Filter verhindern und auch den von uBlock₀ in Anspruch genommenen Arbeitsspeicher verringern.

      Es wird empfohlen, diese Option auf weniger leistungsstarken Geräten zu aktivieren.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Erstellen", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Listen blockierter Hostnamen", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Auswählen", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Änderungen anwenden", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Beenden", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Werbung", - "description":"English: Ads" + "pickerPreview": { + "message": "Vorschau", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Privatsphäre", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Netzwerkfilter", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Domains mit Schadsoftware", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Kosmetische Filter", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Soziale Netzwerke", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Klick, Strg+Klick", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Verschiedene Zwecke", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Element blockieren …", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Regionen, Sprachen", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Platzhalter für blockierte Elemente ausblenden", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Benutzerdefiniert", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Anzahl der blockierten Anfragen auf dem Symbol in der Symbolleiste anzeigen", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Eine URL pro Zeile. Zeilen mit vorangestelltem ‘!’ werden ignoriert. Ungültige URLs werden stillschweigend ignoriert.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Tooltips deaktivieren", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Anwenden", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Kontextmenü verwenden, falls verfügbar", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"Leere den Cache", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Modus für Farbenblinde", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"Neue Version verfügbar", - "description":"English: new version available" + "settingsAppearance": { + "message": "Erscheinungsbild", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"veraltet", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Farbschema", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Letzte Aktualisierung: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Personalisierte Akzentfarbe", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Eine Regel pro Zeile. Eine Regel kann ein einfacher Hostname sein oder ein Adblock Plus-kompatibler Filter. Zeilen mit vorangestelltem ‘!’ werden ignoriert.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Unterstützung für Cloud-Speicher aktivieren", + "description": "" }, - "1pImport":{ - "message":"Importieren und anfügen", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Ich bin technisch versiert", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Exportieren", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Vorabruf von Webseiten deaktivieren (um jede Verbindung für blockierte Netzwerkanfragen zu verhindern)", + "description": "English: " }, - "1pExportFilename":{ - "message":"my-ublock-custom-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Hyperlink-Überwachung deaktivieren", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Änderungen anwenden", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Freigabe der lokalen IP-Adresse via WebRTC verhindern", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Permanente Regeln", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Standardverhalten", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Temporäre Regeln", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Dieses Standardverhalten kann für jede Website angepasst werden", + "description": "" }, - "rulesRevert":{ - "message":"Rückgängig machen", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Kosmetisches Filtern deaktivieren", + "description": "" }, - "rulesCommit":{ - "message":"Dauerhaft speichern", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Medienelemente größer als {{input}} KB blockieren", + "description": "" }, - "rulesEdit":{ - "message":"Bearbeiten", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Externe Schriftarten blockieren", + "description": "" }, - "rulesEditSave":{ - "message":"Speichern", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "JavaScript deaktivieren", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Verwerfen", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "CSP-Berichte blockieren", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Aus Datei importieren …", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Kanonische Namen auflösen", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"In eine Datei exportieren ...", - "description":"" + "settingsAdvanced": { + "message": "Erweitert", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Funktionen, die nur für technisch Versierte bestimmt sind", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Liste deiner dynamischen Filterregeln.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "Erweiterte Einstellungen", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Regel-Syntax: Quelle Ziel Typ Action<\/code> ( vollständige Dokumentation<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Letzte Wiederherstellung:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Deine Liste von Hostnamen, für die uBlock₀ deaktiviert ist. Ein Eintrag pro Zeile. Ungültige Hostnamen werden stillschweigend ignoriert.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Letztes Backup:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Importieren und anfügen", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} Netzwerkfilter + {{cosmeticFilterCount}} kosmetische Filter von:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Exportieren", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}}/{{total}} verwendet", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"meine-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Filterlisten automatisch aktualisieren", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Änderungen anwenden", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Jetzt aktualisieren", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Typ", - "description":"English: Type" + "3pPurgeAll": { + "message": "Alle Caches leeren", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Domain", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Kosmetische Filter auswerten und anwenden", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Kosmetische Filter dienen dazu, Elemente in einer Webseite auszublenden, die als visuell störend empfunden werden und die von den auf Netzwerkanfragen basierenden Filter-Engines nicht blockiert werden können.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Allgemeine kosmetische Filter ignorieren", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Alle", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Allgemeine kosmetische Filter können auf alle Websites angewendet werden. Diese Option reduziert die CPU- und Speicherauslastung, die durch das Verarbeiten allgemeiner kosmetischer Filter auf Websites entsteht.\n\nEs wird empfohlen, diese Option auf weniger leistungsfähigen Geräten zu aktivieren.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Hintergrundanfragen", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Netzwerkaktivität unterbrechen, bis alle Filterlisten geladen sind", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"Protokoll-Einträge filtern", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Listen blockierter Hostnamen", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Maximale Anzahl an Protokoll-Einträgen", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Änderungen übernehmen", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Kontext:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "uBlock-eigene Filterlisten", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Typ:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Werbung", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Dynamische URL Filter", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Datenschutz", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Statische Filter", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Schutz vor Schadsoftware, Sicherheit", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} Netzwerkanfragen {{type}} {{br}}deren URL-Adresse mit {{url}} übereinstimmt{{br}} und von {{origin}} stammen,{{br}}{{importance}} ein übereinstimmender Ausnahme-Filter existiert.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Soziale Widgets", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blockiere", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Cookie-Hinweise", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Erlaube", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Belästigungen", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"vom Typ \"{{type}}\"", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Verschiedene Zwecke", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"aller Typen", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Regionen, Sprachen", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"{{origin}}", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Eigene Filterlisten", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"überall", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Importieren …", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"außer wenn", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Eine URL pro Zeile. Ungültige URLs werden stillschweigend ignoriert.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"selbst wenn", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "veraltet", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statischer Filter {{filter}} gefunden in:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "Inhalt anzeigen", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Änderungsprotokoll", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Letzte Aktualisierung: {{ago}}.\nAktualisierung durch Anklicken erzwingen.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Wird aktualisiert …", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Unterstützung", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Ein Netzwerkfehler verhinderte die Aktualisierung der Ressource.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Quellcode (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Verwenden Sie keine Filter aus unseriösen Quellen.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Mitwirkende", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Eigene Filter aktivieren", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Backup in eine Datei", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Eigene Filter zulassen, die Vertrauen erfordern", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Importieren und ergänzen …", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Aus einer Datei wiederherstellen ...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Exportieren …", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Auf Vorgaben zurücksetzen …", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "ublock-statische-filter_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Alle Einstellungen werden überschrieben und auf den Stand von {{time}} gebracht. Anschließend wird uBlock neu gestartet.\n\nSollen die aktuellen Einstellungen durch das Backup ersetzt werden?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Änderungen übernehmen", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Die Daten konnten nicht gelesen werden oder waren ungültig", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Dauerhafte Regeln", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Alle Einstellungen werden gelöscht und uBlock₀ wird neu gestartet.\n\nSoll uBlock₀ auf Werkseinstellungen zurückgesetzt werden?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Temporäre Regeln", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Netzwerkfehler: Verbindung zu {{url}} nicht möglich", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Rückgängig machen", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Die folgende URL deiner Auswahl an Filterlisten hinzufügen?\n\nTitel: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Dauerhaft speichern", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"vor einer Minute", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Bearbeiten", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"vor {{value}} Minuten", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Speichern", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"vor einer Stunde", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Verwerfen", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"vor {{value}} Stunden", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Aus Datei importieren …", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"vor einem Tag", - "description":"English: a day ago" + "rulesExport": { + "message": "In Datei exportieren …", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"vor {{value}} Tagen", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "ublock-dynamische-regeln_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Dashboard anzeigen", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Liste eigener dynamischer Filterregeln.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Protokoll der Netzwerkanfragen anzeigen", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Regelsyntax: Quelle Ziel Typ Aktion (Ausführliche Dokumentation).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"aus", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Sortieren:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin hat das Laden der folgenden Seite verhindert:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Regeltyp", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Aufgrund des folgenden Filters", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Quelle", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"ohne Parameter", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Ziel", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Gefunden in:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Ausnahmeregeln bestimmen, auf welchen Webseiten uBlock Origin deaktiviert werden soll. Ein Eintrag pro Zeile.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Gehe zurück", - "description":"English: Go back" + "whitelistImport": { + "message": "Importieren und ergänzen …", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Schließe dieses Fenster", - "description":"English: Close this window" + "whitelistExport": { + "message": "Exportieren …", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Deaktiviere striktes Blockieren für {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "ublock-ausnahmeregeln_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Temporär", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Änderungen übernehmen", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Permanent", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Typ", + "description": "English: Type" }, - "cloudPush":{ - "message":"Export in den Cloud-Speicher", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Domain", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Import aus dem Cloud-Speicher", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Backup aus der Cloud importieren und mit den aktuellen Einstellungen zusammenführen", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Alle", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Dieser Gerätename:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Hintergrund-Netzwerkanfragen", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Absenden", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Aktueller Tab", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Rückgängig machen", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Inhalt des Tabs neu laden", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"Bytes", - "description":"" + "loggerDomInspectorTip": { + "message": "DOM-Inspektor ein-/ausschalten", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Vorübergehend große Medienelemente erlauben", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Pop-up-Fenster ein-/ausblenden", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"Dieser Eintrag muss der letzte sein", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin-Wiki: Protokoll der Netzwerkanfragen", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Protokoll leeren", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Protokollierung anhalten (alle eingehenden Daten verwerfen)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Protokollierung fortsetzen", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Protokollfilter ein-/ausschalten", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "Protokolleinträge filtern", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Protokollfilteroptionen", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Nicht", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "Ereignisreich", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "blockiert", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "zugelassen", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "geändert", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "Aktuelle Domain", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "Ressourcen aus Drittquellen", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Details", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filter", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Filterliste", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Regel", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Kontext", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Wurzelkontext", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Zugehörigkeit", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Typ", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL-Regel", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Kontext:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Typ:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Statischer Filter", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "Netzwerkanfragen {{type}} {{action}},{{br}}deren URL-Adresse mit {{url}} übereinstimmt{{br}}und von {{origin}} stammen,{{br}}{{importance}} ein übereinstimmender Ausnahmefilter existiert.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "blockieren", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "zulassen", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "vom Typ »{{type}}«", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "aller Typen", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "{{origin}}", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "überall", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "außer wenn", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "selbst wenn", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Statischer Filter {{filter}} gefunden in:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Statischer Filter konnte in keiner der derzeit aktivierten Filterlisten gefunden werden", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Protokolleinträge werden automatisch verworfen, wenn sie nicht alle der drei folgenden Bedingungen erfüllen:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Einträge der letzten {{input}} Minuten beibehalten", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Höchstens {{input}} Seitenladevorgänge pro Tab beibehalten", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Höchstens {{input}} Einträge pro Tab beibehalten", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "{{input}} Zeilen pro Eintrag im vertikal erweiterten Modus verwenden", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Spalten ausblenden:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Uhrzeit", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filter/Regel", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Kontext", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Zugehörigkeit", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Liste", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tabelle", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Reiner Text", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Öffnen", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Neue Meldung auf GitHub erstellen", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Ähnliche Meldungen auf GitHub finden", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Dokumentation", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Lesen Sie die Dokumentation auf uBlock/wiki, um mehr über alle Funktionen von uBlock Origin zu erfahren.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Fragen und Unterstützung", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Antworten auf Fragen und andere Arten der Hilfe werden im Subreddit /r/uBlockOrigin gegeben.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filterprobleme / Website funktioniert nicht", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Bitte melden Sie Filterprobleme mit bestimmten Websites an den uBlockOrigin/uAssets Issue Tracker. Erfordert ein GitHub-Konto.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Wichtig: Vermeiden Sie es, andere ähnliche Blocker zusammen mit uBlock Origin zu verwenden, da dies bei einigen Websites zu Filterproblemen führen kann.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tipp: Vergewissern Sie sich, dass die Filterlisten auf dem aktuellen Stand sind. Protokoll der Netzwerkanfragen ist das primäre Werkzeug, um filterbezogene Fehler zu diagnostizieren.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Fehlerbericht", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Bitte melden Sie Probleme mit uBlock Origin an den uBlockOrigin/uBlock-issue Issue Tracker. Erfordert ein GitHub-Konto.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Informationen zur Fehlerbehebung", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Im Folgenden sind einige technische Informationen aufgeführt, die nützlich sein können, wenn Freiwillige versuchen, bei der Lösung eines Problems zu helfen.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Ein Filterproblem melden", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Um die Freiwilligen nicht mit doppelten Meldungen zu überlasten, vergewissern Sie sich bitte, dass das Problem noch nicht gemeldet wurde. Hinweis: Das Anklicken der Schaltfläche übermittelt die Internetadresse an GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filterlisten werden täglich aktualisiert. Bitte vergewissern Sie sich, dass Ihr Problem nicht durch aktuelle Filterlisten behoben wurde.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Bitte überprüfen Sie, ob das Problem nach dem Neuladen der Webseite weiterhin besteht.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Adresse der Webseite:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Die Webseite …", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Einen Eintrag auswählen --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Zeigt Werbung oder deren Überreste", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Enthält überdeckende oder belästigende Elemente", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Erkennt uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Weist Datenschutzprobleme auf", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Funktioniert nicht richtig, wenn uBlock Origin aktiviert ist", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Öffnet unerwünschte Tabs oder Fenster", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Führt zu Schadsoftware, Phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Webseite als »NSFW« kennzeichnen (»Unpassend für den Arbeitsplatz«)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Datenschutzhinweise", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Änderungsprotokoll", + "description": "" + }, + "aboutCode": { + "message": "Quellcode (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Mitwirkende", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Quellcode", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Übersetzungen", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Filterlisten", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Externe Abhängigkeiten (GPLv3-kompatibel):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Die uBO-eigenen Filterlisten werden auf den folgenden CDNs frei zur Verfügung gestellt:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Es wird ein zufällig ausgewähltes CDN verwendet, wenn eine Filterliste aktualisiert werden muss.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "In Datei sichern …", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Aus Datei wiederherstellen …", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Auf Werkseinstellungen zurücksetzen …", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Alle Einstellungen werden überschrieben und auf den Stand vom {{time}} gebracht. Anschließend wird uBlock₀ neu gestartet.\n\nSollen die aktuellen Einstellungen durch das Backup ersetzt werden?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Die Daten konnten nicht gelesen werden oder sind ungültig", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Alle Einstellungen werden gelöscht und uBlock₀ wird neu gestartet.\n\nSoll uBlock₀ auf Werkseinstellungen zurückgesetzt werden?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Netzwerkfehler: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Abonnieren", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "vor einer Minute", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "vor {{value}} Minuten", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "vor einer Stunde", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "vor {{value}} Stunden", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "vor einem Tag", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "vor {{value}} Tagen", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Dashboard anzeigen", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Protokoll der Netzwerkanfragen anzeigen", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "aus", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Seite blockiert", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin hat das Laden der folgenden Seite verhindert:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Aufgrund des folgenden Filters:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "ohne Parameter", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Gefunden in:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Zurück", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Dieses Fenster schließen", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Nicht erneut vor dieser Seite warnen", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Striktes Blockieren für {{hostname}} deaktivieren", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Temporär", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Dauerhaft", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Fortfahren", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Die blockierte Seite möchte zu einer anderen Website weiterleiten. Beim Fortfahren wird folgende Seite aufgerufen: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Grund:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Schädlich", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Unseriös", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "In den Cloud-Speicher exportieren", + "description": "tooltip" + }, + "cloudPull": { + "message": "Aus dem Cloud-Speicher importieren", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Aus dem Cloud-Speicher importieren und mit den aktuellen Einstellungen zusammenführen", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Name dieses Gerätes:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Warnung! Das Ändern der erweiterten Einstellungen erfolgt auf eigenes Risiko.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Absenden", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Änderungen übernehmen", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Rückgängig machen", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "Bytes", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Element im Frame blockieren …", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Filterliste abonnieren …", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Große Medienelemente temporär zulassen", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Quellcode anzeigen …", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Tastenkombination drücken", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Synchrones Scrollen ein-/ausschalten", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "In die Zwischenablage kopieren", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Alles auswählen", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Kosmetisches Filtern ein-/ausschalten", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "JavaScript aktivieren/deaktivieren", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Blockiermodus lockern", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Genutzter Speicherplatz: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Zum Laden anklicken", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Fehler: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Beim Start des Browsers konnte nicht richtig gefiltert werden. Bitte die Seite neu laden, um ein korrektes Filtern zu gewährleisten.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Dieser Eintrag muss der letzte sein", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/el/messages.json b/src/_locales/el/messages.json index 44b7952ee7eee..b4623718730b4 100644 --- a/src/_locales/el/messages.json +++ b/src/_locales/el/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Επιτέλους, ένας αποτελεσματικός blocker. Ελαφρύς για τον επεξεργαστή και τη μνήμη.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Επιτέλους, ένας αποτελεσματικός blocker. Ελαφρύς για τον επεξεργαστή και τη μνήμη.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ - Πίνακας ελέγχου", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Πίνακας ελέγχου", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Ρυθμίσεις", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Προειδοποίηση! Έχετε μη αποθηκευμένες αλλαγές", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Φίλτρα τρίτων", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Παραμονή", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Τα φίλτρα μου", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Παράβλεψη", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Οι κανόνες μου", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Ρυθμίσεις", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Λίστα επιτρεπόμενων", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Λίστες φίλτρων", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ - Καταγραφή αιτημάτων δικτύου", - "description":"Title for the logger window" + "1pPageName": { + "message": "Τα φίλτρα μου", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Σχετικά", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Οι κανόνες μου", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Κλικ: απενεργοποίηση\/ενεργοποίηση του uBlock για αυτόν τον ιστότοπο.\n\nCtrl+κλικ: απενεργοποίηση του µBlock μόνο για αυτήν την σελίδα.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Αξιόπιστες τοποθεσίες", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"αποκλεισμένα αιτήματα", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Συντομεύσεις", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"σε αυτήν τη σελίδα", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ - Καταγραφή αιτημάτων δικτύου", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} ή {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Σχετικά", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"από την εγκατάσταση", - "description":"English: since install" + "supportPageName": { + "message": "Υποστήριξη", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"ή", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Προβολή πόρων", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Κάντε κλικ για να ανοίξετε τον πίνακα εργαλείων", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Ρυθμίσεις για προχωρημένους", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Είσοδος στη λειτουργία επιλογής στοιχείων", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Κλικ: απενεργοποίηση/ενεργοποίηση του uBlock₀ για αυτόν τον ιστότοπο.\n\nCtrl+κλικ: απενεργοποίηση του uBlock₀ μόνο για αυτήν την σελίδα.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Πηγαίνετε στο αρχείο καταγραφής αιτημάτων", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Κάντε κλικ για απενεργοποίηση του uBlock₀ για αυτήν την ιστοσελίδα.\n\nCtrl+κλικ για απενεργοποίηση του uBlock₀ μόνο σε αυτήν τη σελίδα.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Παρεμπόδιση αναδυόμενων παραθύρων για αυτόν τον ιστότοπο", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Κάντε κλικ για ενεργοποίηση του uBlock₀ για αυτή την ιστοσελίδα.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Εναλλαγή της φραγής των μεγάλων στοιχείων πολυμέσων για αυτήν την τοποθεσία", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "αποκλεισμένα αιτήματα", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Ενεργοποιήστε διακοσμητικό φιλτράρισμα για αυτήν τη σελίδα", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "σε αυτήν τη σελίδα", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Ενεργοποιήστε το μπλοκάρισμα απομακρυσμένων γραμματοσειρών για αυτήν την ιστοσελίδα", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} ή {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Καθολικοί κανόνες: αυτή η στήλη είναι για κανόνες με εφαρμογή σε όλες τις τοποθεσίες.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "από την εγκατάσταση", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Τοπικοί κανόνες: αυτή η στήλη είναι για κανόνες με εφαρμογή στην τρέχουσα τοποθεσία μόνον.\nΟι τοπικοί κανόνες παραμερίζουν τους καθολικούς κανόνες.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "ή", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Πατήστε για να κάνετε τις αλλαγές σας μόνιμες.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Αποκλεισμένα σε αυτή τη σελίδα", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Πατήστε για να αντιστρέψετε τις αλλαγές σας.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Φραγμένο από εγκατάσταση", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"όλα", - "description":"" + "popupDomainsConnected_v2": { + "message": "Συνδεδεμένοι τομείς", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"Εικόνες", - "description":"" + "popupTipDashboard": { + "message": "Κάντε κλικ για να ανοίξετε τον πίνακα εργαλείων", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"πόροι ιστότοπων τρίτων", - "description":"" + "popupTipZapper": { + "message": "Είσοδος σε λειτουργία αφαίρεσης στοιχείων", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"Css\/Εικόνες τρίτου μέρους", - "description":"" + "popupTipPicker": { + "message": "Είσοδος στη λειτουργία επιλογής στοιχείων", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"inline scripts", - "description":"" + "popupTipLog": { + "message": "Πηγαίνετε στο αρχείο καταγραφής αιτημάτων", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"scripts τρέχοντος ιστότοπου", - "description":"" + "popupTipReport": { + "message": "Αναφέρετε ένα πρόβλημα σε αυτόν τον ιστότοπο", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"scripts ιστότοπων τρίτων", - "description":"" + "popupTipNoPopups": { + "message": "Παρεμπόδιση αναδυόμενων παραθύρων για αυτόν τον ιστότοπο", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"frames ιστότοπων τρίτων", - "description":"" + "popupTipNoPopups1": { + "message": "Κάντε κλικ για φραγή όλων των αναδυόμενων σε αυτή την ιστοσελίδα", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"συνδεδεμένοι τομείς", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Κάντε κλικ για φραγή όλων των αναδυόμενων σε αυτή την ιστοσελίδα", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} από {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Εναλλαγή της φραγής των μεγάλων στοιχείων πολυμέσων για αυτήν την τοποθεσία", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Δημιουργία", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Κάντε κλικ για αποκλεισμό μεγάλων στοιχείων πολυμέσων σε αυτή την ιστοσελίδα", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Επιλογή", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Κάντε κλικ για αναίρεση φραγής των μεγάλων στοιχείων πολυμέσων σε αυτή την τοποθεσία", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Κλείσιμο", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Ενεργοποιήστε διακοσμητικό φιλτράρισμα για αυτήν τη σελίδα", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Προεπισκόπηση", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Κάντε κλικ για να απενεργοποιήσετε το καλλωπιστικό φιλτράρισμα σε αυτή την τοποθεσία", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Φίλτρα δικτύου", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Κάντε κλικ για να ενεργοποιήσετε το καλλωπιστικό φιλτράρισμα σε αυτή την τοποθεσία", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Κοσμητικά φίλτρα", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Ενεργοποιήστε το μπλοκάρισμα απομακρυσμένων γραμματοσειρών για αυτήν την ιστοσελίδα", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Κλικ, Ctrl-κλικ", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Κάντε κλικ για φραγή απομακρυσμένων γραμματοσειρών σε αυτή την ιστοσελίδα", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Αποκλεισμός στοιχείου", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Κάντε κλικ για να μην μπλοκάρετε πλέον απομακρυσμένες γραμματοσειρές σε αυτήν την ιστοσελίδα", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Απόκρυψη κρατημένων πεδίων από αποκλεισμένα στοιχεία", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Κάντε κλικ για να απενεργοποιήσετε το JavaScript σε αυτήν την ιστοσελίδα", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Εμφάνιση του αριθμού αποκλεισμένων αιτημάτων στο εικονίδιο", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Κάντε κλικ για να μην απενεργοποιήσετε πλέον τη JavaScript σε αυτόν τον ιστότοπο", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Απενεργοποιήστε τις αιωρούμενες επεξηγήσεις", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Αναδυόμενα παράθυρα", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Να γίνεται χρήση του αναδυόμενου μενού, όπου ενδείκνυται", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Στοιχεία μεγάλων πολυμέσων", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Λειτουργία φιλική πρως χρήστες με αχρωματοψία", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Κοσμητικά φίλτρα", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Ενεργοποίηση υποστήριξης cloud storage", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Απομακρυσμένες γραμματοσειρές", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Είμαι προχωρημένος χρήστης (Aπαραίτητη ανάγνωση<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Απενεργοποίηση πρόωρης φόρτωσης (για να αποτραπεί κάθε σύνδεση σε μπλοκαρισμένες αιτήσεις δικτύου)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Περισσότερα", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Απενεργοποίηση ελέγχου\/διόπτευσης υπερσυνδέσμων", - "description":"English: " + "popupLessButton_v2": { + "message": "Λιγότερα", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Αποτρέψτε το WebRTC από το να διαρρέει την τοπική διεύθυνση IP", - "description":"English: " + "popupTipGlobalRules": { + "message": "Καθολικοί κανόνες: αυτή η στήλη είναι για κανόνες με εφαρμογή σε όλες τις τοποθεσίες.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Προεπιλεγμένη συμπεριφορά", - "description":"" + "popupTipLocalRules": { + "message": "Τοπικοί κανόνες: αυτή η στήλη είναι για κανόνες με εφαρμογή στην τρέχουσα τοποθεσία μόνο.\nΟι τοπικοί κανόνες παραμερίζουν τους καθολικούς κανόνες.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Αυτές οι προεπιλεγμένες συμπεριφορές μπορούν να παρακαμφθούν ανα-τοποθεσία", - "description":"" + "popupTipSaveRules": { + "message": "Κάντε κλικ για να μονιμοποιήσετε τις αλλαγές σας.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Απενεργοποίηση διακοσμητικού φιλτραρίσματος", - "description":"" + "popupTipRevertRules": { + "message": "Πατήστε για να αντιστρέψετε τις αλλαγές σας.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Φραγή στοιχείων πολυμέσων μεγαλύτερων από {{εισαγωγή:αριθμός}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "όλα", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Φραγή απομακρυσμένων γραμματοσειρών", - "description":"" + "popupImageRulePrompt": { + "message": "Εικόνες", + "description": "" }, - "settingsStorageUsed":{ - "message":"Αποθηκευτικός χώρος σε χρήση: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "πόροι ιστότοπων τρίτων", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Τελευταία ανάκτηση:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "CSS/Εικόνες τρίτων", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Τελευταίο αντίγραφο ασφαλείας:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "inline scripts", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} φίλτρα δικτύου+ {{cosmeticFilterCount}} κοσμητικά φίλτρα από:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "scripts τρέχοντος ιστότοπου", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} σε χρήση από {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "scripts ιστότοπων τρίτων", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Αυτόματη ενημέρωση λιστών φίλτρων.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "frames ιστότοπων τρίτων", + "description": "" }, - "3pUpdateNow":{ - "message":"Ενημέρωση τώρα", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "συνδεδεμένοι τομείς", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Εκκαθάριση προσωρινής μνήμης κάθε λίστας", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} από {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Ανάλυση και επιβολή κοσμητικών φίλτρων.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Έκδοση", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Η επιλογή αυτή επιτρέπει την ανάλυση και επιβολή των συμβατών με τα “κρυμμένα στοιχεία” του Adblock Plus φίλτρων<\/a>. Τα φίλτρα αυτά είναι ουσιαστικά κοσμητικά, χρησιμεύουν στην απόκρυψη στοιχείων από μια σελίδα στην οποία θεωρούνται οπτική όχληση και δεν μπορούν να αποκλειστούν με την, βασισμένη σε αιτήματα δικτύου, μηχανή φιλτραρίσματος.<\/p>

      Η ενεργοποίηση αυτής της λειτουργίας αυξάνει το αποτύπωμα μνήμης του µBlock<\/i>.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "δέσμη ενεργειών", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignore generic cosmetic filters", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "πλαίσιο", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites.

      Though handled efficiently by uBlock₀, generic cosmetic filters may still contribute measurable memory and CPU overhead on some web pages, especially for large and long-lived ones.

      Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters, and also lower the memory footprint of uBlock₀ itself.

      It is recommended to enable this option on less powerful devices.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Δημιουργία", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Λίστες αποκλεισμένων hosts", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Επιλογή", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Εφαρμογή αλλαγών", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Κλείσιμο", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Διαφημίσεις", - "description":"English: Ads" + "pickerPreview": { + "message": "Προεπισκόπηση", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Ιδιωτικό απόρρητο", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Φίλτρα δικτύου", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Τομείς κακόβουλου λογισμικού", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Κοσμητικά φίλτρα", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Κοινωνικά δίκτυα", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Κλικ, Ctrl-κλικ", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Πολλαπλών χρήσεων", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Φραγή στοιχείου...", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Περιοχές, γλώσσες", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Απόκρυψη κρατημένων πεδίων από αποκλεισμένα στοιχεία", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Προσαρμοσμένη", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Εμφάνιση του αριθμού αποκλεισμένων αιτημάτων στο εικονίδιο", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Ένα URL ανά γραμμή. Γραμμές με το πρόθεμα ‘!’ θα παραβλέπονται. Άκυρα URL θα παρακάμπτονται σιωπηλά.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Απενεργοποίηση υποδείξεων", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Ανάλυση", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Να γίνεται χρήση του αναδυόμενου μενού, όπου ενδείκνυται", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"Εκκαθάριση προσωρινής μνήμης", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Λειτουργία φιλική προς χρήστες με αχρωματοψία", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"νέα έκδοση διαθέσιμη", - "description":"English: new version available" + "settingsAppearance": { + "message": "Εμφάνιση", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"ξεπερασμένη", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Θέμα", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Τελευταία ενημέρωση: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Προσαρμοσμένο χρώμα έμφασης", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Ένα φίλτρο ανά γραμμή. Φίλτρο μπορεί να είναι ένα απλό όνομα κεντρικού υπολογιστή (hostname) ή ένα, συμβατό με το Adblock Plus, φίλτρο. Γραμμές με το πρόθεμα ‘!’ θα παραβλέπονται.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Ενεργοποίηση υποστήριξης cloud storage", + "description": "" }, - "1pImport":{ - "message":"Εισαγωγή και προσάρτηση", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Είμαι προχωρημένος χρήστης (Aπαραίτητη ανάγνωση)", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Εξαγωγή", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Απενεργοποίηση προ-φόρτωσης (για να αποτραπεί κάθε σύνδεση σε αποκλεισμένες αιτήσεις δικτύου)", + "description": "English: " }, - "1pExportFilename":{ - "message":"τα-στατικά-ublock-φίλτρα-μου_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Απενεργοποίηση ελέγχου/διόπτευσης υπερσυνδέσμων", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Εφαρμογή αλλαγών", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Αποτρέψτε το WebRTC από το να διαρρέει την τοπική διεύθυνση IP", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Μόνιμοι κανόνες", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Προεπιλεγμένη συμπεριφορά", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Προσωρινοί κανόνες", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Αυτές οι προεπιλεγμένες συμπεριφορές μπορούν να παρακαμφθούν ανά τοποθεσία", + "description": "" }, - "rulesRevert":{ - "message":"Επαναφορά", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Απενεργοποίηση διακοσμητικού φιλτραρίσματος", + "description": "" }, - "rulesCommit":{ - "message":"Επικύρωση", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Φραγή στοιχείων πολυμέσων μεγαλύτερων από {{input:number}} kB", + "description": "" }, - "rulesEdit":{ - "message":"Επεξεργασία", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Φραγή απομακρυσμένων γραμματοσειρών", + "description": "" }, - "rulesEditSave":{ - "message":"Αποθήκευση", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Απενεργοποίηση JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Απόρριψη", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Φραγή αναφορών CSP", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Εισαγωγή από αρχείο...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Ξεσκέπασμα/εμφάνιση κανονικών ονομάτων CNAME", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Εξαγωγή σε αρχείο", - "description":"" + "settingsAdvanced": { + "message": "Για προχωρημένους", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"οι-δυναμικοί-ublock-κανόνες-μου_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Χαρακτηριστικά κατάλληλα μόνο για τεχνικούς χρήστες.", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Λίστα δυναμικών κανόνων φιλτραρίσματος.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "ρυθμίσεις για προχωρημένους", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Συντακτικό κανόνων: προέλευση προορισμός τύπος ενέργεια<\/code> (πλήρης τεκμηρίωση<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Τελευταία ανάκτηση:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Η λίστα σας με τα ονόματα κόμβων (host names) στα οποία το uBlock θα είναι απενεργοποιημένο. Μια καταχώρηση ανά γραμμή. Άκυρα ονόματα κόμβων θα παρακάμπτονται σιωπηλά.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Τελευταίο αντίγραφο ασφαλείας:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Εισαγωγή και προσάρτηση", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} φίλτρα δικτύου+ {{cosmeticFilterCount}} κοσμητικά φίλτρα από:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Εξαγωγή", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} σε χρήση από {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"λίστα-ublock-επιτρεπόμενων_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Αυτόματη ενημέρωση λιστών φίλτρων.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Εφαρμογή αλλαγών", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Ενημέρωση τώρα", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Τύπος", - "description":"English: Type" + "3pPurgeAll": { + "message": "Εκκαθάριση προσωρινής μνήμης κάθε λίστας", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Τομέας", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Ανάλυση και επιβολή κοσμητικών φίλτρων.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Τα καλλωπιστικά φίλτρα χρησιμεύουν για να κρύβουν εκείνα τα στοιχεία σε μια ιστοσελίδα που οπτικά θεωρούνται ενοχλητικά, και τα οποία δεν μπορούν να αποκλειστούν με τις μηχανές φιλτραρίσματος που βασίζονται σε αιτήματα δικτύου.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Φίλτρο", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Παράβλεψη γενικών κοσμητικών φίλτρων", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Όλα", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

      Τα γενικά κοσμητικά φίλτρα είναι εκείνα τα κοσμητικά φίλτρα που εφαρμόζονται σε όλες τις ιστοσελίδες.

      Αν και γίνεται αποτελεσματική διαχείρισή τους από το uBlock₀, τα γενικά κοσμητικά φίλτρα ενδέχεται να καταναλώσουν σημαντική μνήμη και να υπερφορτώσουν τη CPU σε μερικές ιστοσελίδες, ειδικά για μεγάλες μακροχρόνιες.

      Η ενεργοποίηση αυτής της επιλογής θα εξαλείψει την υπερφόρτωση μνήμης και CPU στις ιστοσελίδες ως αποτέλεσμα της διαχείρισης γενικών κοσμητικών φίλτρων, ενώ ενδέχεται να μειώσει την κατανάλωση μνήμης του ίδιου του uBlock₀.

      Προτείνεται η ενεργοποίηση αυτής της επιλογής στις λιγότερο ισχυρές συσκευές.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Παρασκήνιο", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Αναστολή της δραστηριότητας δικτύου μέχρι να φορτωθούν όλες οι λίστες φίλτρων", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"φιλτράρισμα των καταχωρήσεων", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Λίστες αποκλεισμένων hosts", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Μέγιστος αριθμός καταχωρήσεων στο αρχείο καταγραφών", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Εφαρμογή αλλαγών", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Περιεχόμενο:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Ενσωματωμένο", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Τύπος:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Διαφημίσεις", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Φιλτράρισμα δυναμικών συνδέσμων", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Ιδιωτικό απόρρητο", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Στατικό φιλτράρισμα", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Τομείς κακόβουλου λογισμικού", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} το δήκτυο αιτεί {{type}} {{br}} του οποίου η διεύθηνση ταιριάζει {{url}} {{br}} και το οποίο προέρχεται {{origin}},{{br}}{{importance}} υπάρχει ένα ταιριαστό φίλτρο εξαίρεση.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Γραφικά στοιχεία κοινωνικής δικτύωσης", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Φραγή", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Ειδοποιήσεις για cookies", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Αποδοχή", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Ενοχλήσεις", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"τύπος “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Πολλαπλών χρήσεων", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"οποιοσδήποτε τύπος", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Περιοχές, γλώσσες", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"από “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Προσαρμοσμένη", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"από οπουδήποτε", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Εισαγωγή...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"εκτός εάν", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Ένα URL ανά γραμμή. Γραμμές με το πρόθεμα ‘!’ θα παραβλέπονται. Άκυρα URL θα παρακάμπτονται σιωπηλά.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"ακόμη και αν", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "απαρχαιωμένη.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Στατικό φίλτρο {{filter}} βρέθηκε σε:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "εμφάνιση περιεχομένου", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Αρχείο καταγραφής αλλαγών", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Τελευταία ενημέρωση: {{ago}}.\nΚάντε κλικ για επιβολή ενημέρωσης.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Ενημέρωση...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Υποστήριξη", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Ένα σφάλμα δικτύου εμπόδισε την ενημέρωση του πόρου.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Πηγαίος κώδικας (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Να μην προστίθενται φίλτρα από μη αξιόπιστες πηγές.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Συνεισφέροντες", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Ενεργοποίηση των προσαρμοσμένων φίλτρων μου", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Δημιουργία αντιγράφου ασφαλείας", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Επιτρέψτε προσαρμοσμένα φίλτρα που απαιτούν εμπιστοσύνη", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"το-ublock-αντίγραφο-ασφαλείας-μου_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Εισαγωγή και προσάρτηση", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Επαναφορά από αρχείο...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Εξαγωγή", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Επαναφορά στις προεπιλεγμένες ρυθμίσεις...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "τα-στατικά-ublock-φίλτρα-μου_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Όλες οι ρυθμίσεις σας θα αντικατασταθούν χρησιμοποιώντας τα δεδομένα του αντιγράφου ασφαλείας που δημιουργήθηκε κατά ημ\/νία και ώρα: {{time}} και θα ακολουθήσει επανεκκίνηση του uBlock.", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Εφαρμογή αλλαγών", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Τα δεδομένα ήταν αδύνατο να αναγνωστούν ή είναι άκυρα", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Μόνιμοι κανόνες", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Όλες οι ρυθμίσεις σας θα καταργηθούν και θα γίνει επανεκκίνηση του uBlock.\n\nΕπαναφορά του uBlock στις εργοστασιακές ρυθμίσεις;", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Προσωρινοί κανόνες", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Αδυναμία σύνδεσης με {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Επαναφορά", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Προσθήκη του παρακάτω URL στις προσαρμοσμένες λίστες φίλτρων σας;\n\nΤίτλος: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Επικύρωση", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"πριν από ένα λεπτό", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Επεξεργασία", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"πριν από {{value}} λεπτά", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Αποθήκευση", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"πριν από μια ώρα", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Απόρριψη", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"πριν από {{value}} ώρες", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Εισαγωγή από αρχείο…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"πριν από μια ημέρα", - "description":"English: a day ago" + "rulesExport": { + "message": "Εξαγωγή σε αρχείο…", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"πριν από {{value}} ημέρες", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "οι-δυναμικοί-ublock-κανόνες-μου_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Προβολή Πίνακα Εργαλείων", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Λίστα δυναμικών κανόνων φιλτραρίσματος.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Προβολή Αρχείου Καταγραφών Αιτημάτων Δικτύου", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Συντακτικό κανόνων: προέλευση προορισμός τύπος ενέργεια (πλήρης τεκμηρίωση).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"απενεργοποιημένο", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Ταξινόμηση:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"Το uBlock₀ έχει αποτρέψει τη φόρτωση της παρακάτω σελίδας:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Τύπος κανόνα", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Εξαιτίας του ακόλουθου φίλτρου", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Προέλευση", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"χωρίς παραμέτρους", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Προορισμός", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Βρέθηκε σε:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Η λίστα σας με τα ονόματα κόμβων (host names) στα οποία το uBlock θα είναι απενεργοποιημένο. Μια καταχώρηση ανά γραμμή. Άκυρα ονόματα κόμβων θα παρακάμπτονται σιωπηλά.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Επιστροφή", - "description":"English: Go back" + "whitelistImport": { + "message": "Εισαγωγή και προσθήκη…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Κλείσιμο του παραθύρου", - "description":"English: Close this window" + "whitelistExport": { + "message": "Εξαγωγή…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Απενεργοποιήστε αυστηρό μπλοκάρισμα για {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "ublock-έμπιστες-τοποθεσίες_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Προσωρινά", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Εφαρμογή αλλαγών", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Μόνιμα", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Τύπος", + "description": "English: Type" }, - "cloudPush":{ - "message":"Εξαγωγή στο cloud storage", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Τομέας", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Εισαγωγή από cloud storage", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Εισαγωγή αποθηκευμένων στο νέφος ρυθμίσεων και συγχώνευση στις τρέχουσες ρυθμίσεις", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Φίλτρο", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Όλα", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Το όνομα της συσκευής:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Παρασκήνιο", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Υποβολή", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Τρέχουσα καρτέλα", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Επαναφορά", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Επαναφόρτωση του περιεχόμενου της καρτέλας", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"bytes", - "description":"" + "loggerDomInspectorTip": { + "message": "Εναλλαγή του επιθεωρητή DOM", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Να επιτρέπονται προσωρινά μεγάλα στοιχεία πολυμέσων", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Εναλλαγή του αναδυόμενου πίνακα", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"Αυτή η καταχώρηση θα πρέπει να είναι τελευταία", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: Ο καταγραφέας", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Καθαρισμός καταγραφέα", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Παύση καταγραφέα (απόρριψη όλων των εισερχόμενων δεδομένων)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Κατάργηση παύσης καταγραφέα", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Εναλλαγή φίλτρου καταγραφέα", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "φιλτράρισμα των καταχωρήσεων", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Ρυθμίσης φιλτραρίσματος καταγραφέα", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Δεν", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "μπλοκαρισμένο", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "επιτρέπεται", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "επεξεργασμένο", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "Πρωτομερής", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "Τριτομερής", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Λεπτομέρειες", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Φίλτρο", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Λίστα φίλτρων", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Κανόνας", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Συμφραζόμενα", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Πλαίσιο ρίζας", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Μέρος αιτήματος", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Τύπος", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Κανόνας διεύθυνσης URL", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Περιεχόμενο:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Τύπος:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Στατικό φιλτράρισμα", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} τα δικτυακά αιτήματα {{type}} {{br}} των οποίων η διεύθυνση ταιριάζει με {{url}} {{br}} και προέρχεται από {{origin}},{{br}}{{importance}} υπάρχει ένα ταιριαστό φίλτρο για εξαίρεση.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Φραγή", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Αποδοχή", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "τύπος “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "οποιοσδήποτε τύπος", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "από “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "από οπουδήποτε", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "εκτός όταν", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "ακόμη και αν", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Στατικό φίλτρο {{filter}} βρέθηκε σε:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Το στατικό φίλτρο δεν βρέθηκε σε καμία από τις λίστες φίλτρων που έχουν ενεργοποιηθεί αυτήν τη στιγμή", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Οι καταχωρίσεις στον καταγραφέα που δεν εκπληρούν και τις τρεις συνθήκες θα απορρίπτονται αυτόματα:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Διατηρήσε καταχωρήσεις από τα {{input}} τελευταία λεπτά", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Διατηρήσε το πολύ {{input}} page loads ανά καρτέλα", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Διατηρήσε το πολύ {{input}} καταχωρήσεις ανά καρτέλα", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Χρησιμοποιήστε {{input}} γραμμές ανά καταχώριση σε κατακόρυφη λειτουργία", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Απόκρυψη στηλών:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Ώρα", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Φίλτρο/κανόνας", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Περιεχόμενο", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} μέρος αιτήματος", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Λίστα", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Πίνακας", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Απλό", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Άνοιγμα", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Δημιουργία νέας αναφοράς στο Github", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Εύρεση παρόμοιων αναφορών στο GitHub", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Οδηγίες", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Διαβάστε τις οδηγίες στο uBlock/wiki για να μάθετε για όλες τις δυνατότητες του uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Ερωτήσεις και υποστήριξη", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Απαντήσεις σε ερωτήσεις και άλλα είδη υποστήριξης βοήθειας παρέχονται στο subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Προβλήματα φίλτρου/ιστότοπος είναι κατεστραμμένος", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Αναφέρετε προβλήματα φίλτρου με συγκεκριμένους ιστότοπους στο uBlockOrigin/uAssets issue tracker. Απαιτείται λογαριασμός GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Σημαντικό: Αποφύγετε τη χρήση άλλων blocker με παρόμοιο σκοπό μαζί με το uBlock Origin, καθώς αυτό μπορεί να προκαλέσει προβλήματα φιλτραρίσματος σε συγκεκριμένους ιστότοπους.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Συμβουλές: Βεβαιωθείτε ότι οι λίστες φίλτρων σας είναι ενημερωμένες. Ο καταγραφέας είναι το κύριο εργαλείο για τη διάγνωση προβλημάτων που σχετίζονται με το φίλτρο.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Αναφορά σφάλματος", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Αναφέρετε προβλήματα με το ίδιο το uBlock Origin στο uBlockOrigin/uBlock-issue issue tracker. Απαιτείται λογαριασμός GitHub.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Πληροφορίες για αντιμετώπιση προβλημάτων", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Παρακάτω υπάρχουν τεχνικές πληροφορίες που μπορεί να είναι χρήσιμες όταν εθελοντές προσπαθούν να σας βοηθήσουν να λύσετε ένα πρόβλημα.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Αναφέρετε πρόβλημα φίλτρου", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Για να αποφύγετε την επιβάρυνση των εθελοντών με διπλές αναφορές, βεβαιωθείτε ότι το ζήτημα δεν έχει ήδη αναφερθεί.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Οι λίστες φίλτρων ενημερώνονται καθημερινά. Βεβαιωθείτε ότι το πρόβλημά σας δεν έχει ήδη αντιμετωπιστεί στις πιο πρόσφατες λίστες φίλτρων.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Βεβαιωθείτε ότι το πρόβλημα εξακολουθεί να υπάρχει μετά τη φόρτωση εκ νέου της προβληματικής ιστοσελίδας.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Διεύθυνση της ιστοσελίδας:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Η ιστοσελίδα…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Επιλέξτε μια καταχώρηση --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Εμφανίζει διαφημίσεις ή υπολείμματα διαφημίσεων", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Έχει επικαλύψεις ή άλλες ενοχλήσεις", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Ανιχνεύει το uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Έχει ζητήματα που σχετίζονται με το απόρρητο", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Μη λειτουργικό όταν το uBlock Origin είναι ενεργοποιημένο", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Ανοίγει ανεπιθύμητες καρτέλες ή παράθυρα", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Οδηγεί σε κακόβουλο λογισμικό, ηλεκτρονικό «ψάρεμα»", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Επισημάνετε την ιστοσελίδα ως “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Πολιτική απορρήτου", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Αρχείο αλλαγών", + "description": "" + }, + "aboutCode": { + "message": "Πηγαίος κώδικας (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Συνεισφέροντες", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Πηγαίος κώδικας", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Μεταφράσεις", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Λίστες φίλτρων", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Εξωτερικές εξαρτήσεις (συμβατές με GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Οι λίστες φίλτρων του uBO φιλοξενούνται ελεύθερα στα ακόλουθα CDNs:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Χρησιμοποιείται τυχαία-επιλεγμένο CDN όταν πρέπει να ενημερωθεί μια λίστα φίλτρων", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Δημιουργία αντιγράφου ασφαλείας σε αρχείο...", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "το-ublock-αντίγραφο-ασφαλείας-μου_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Επαναφορά από αρχείο…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Επαναφορά στις προεπιλεγμένες ρυθμίσεις…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Όλες οι ρυθμίσεις σας θα αντικατασταθούν χρησιμοποιώντας τα δεδομένα του αντιγράφου ασφαλείας που δημιουργήθηκε κατά ημ/νία και ώρα: {{time}} και θα ακολουθήσει επανεκκίνηση του uBlock.", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Τα δεδομένα ήταν αδύνατο να αναγνωστούν ή είναι άκυρα", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Όλες οι ρυθμίσεις σας θα καταργηθούν και θα γίνει επανεκκίνηση του uBlock₀.\n\nΕπαναφορά του uBlock₀ στις αρχικές ρυθμίσεις;", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Σφάλμα δικτύου: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Εγγραφή", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "πριν από ένα λεπτό", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "πριν από {{value}} λεπτά", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "πριν από μια ώρα", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "πριν από {{value}} ώρες", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "πριν από μια ημέρα", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "πριν από {{value}} ημέρες", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Προβολή Πίνακα Εργαλείων", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Προβολή Αρχείου Καταγραφών Αιτημάτων Δικτύου", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "απενεργοποιημένο", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Η σελίδα αποκλείστηκε", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "Το uBlock₀ έχει αποτρέψει τη φόρτωση της παρακάτω σελίδας:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Εξαιτίας του ακόλουθου φίλτρου", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "χωρίς παραμέτρους", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Βρέθηκε σε:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Επιστροφή", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Κλείσιμο του παραθύρου", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Να μην προειδοποιηθώ ξανά για αυτόν τον ιστότοπο", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Απενεργοποίηση αυστηρής φραγής για το {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Προσωρινά", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Μόνιμα", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Συνέχεια", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Η αποκλεισμένη σελίδα θέλει να κάνει ανακατεύθυνση σε άλλο ιστότοπο. Αν επιλέξετε να συνεχίσετε, θα μεταβείτε απευθείας στο: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Αιτία:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Κακόβουλος ιστότοπος", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Ιχνηλάτης", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Κακόφημος ιστότοπος", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Εξαγωγή στο cloud storage", + "description": "tooltip" + }, + "cloudPull": { + "message": "Εισαγωγή από cloud storage", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Εισαγωγή αποθηκευμένων στο νέφος ρυθμίσεων και συγχώνευση στις τρέχουσες ρυθμίσεις", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Όνομα αυτής της συσκευής:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Προειδοποίηση! Αλλάξτε αυτές τις ρυθμίσεις για προχωρημένους με δική σας ευθύνη.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Υποβολή", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Εφαρμογή αλλαγών", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Επαναφορά", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Αποκλεισμός στοιχείου σε frame…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Εγγραφή σε λιστα φιλτρων", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Να επιτρέπονται προσωρινά μεγάλα στοιχεία πολυμέσων", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Προβολή πηγαίου κώδικα…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Πληκτρολογήστε μια συντόμευση", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Εναλλαγή κλειδώματος ολίσθησης", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Αντιγραφή στο πρόχειρο", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Επιλογή όλων", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Εναλλαγή διακοσμητικού φιλτραρίσματος", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Εναλλαγή JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Χαλάρωση κατάστασης φραγής", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Χώρος σε χρήση: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Κάντε κλικ για φόρτωση", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Σφάλματα: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Δεν ήταν δυνατό το σωστό φιλτράρισμα κατά την εκκίνηση του προγράμματος περιήγησης.\nΦορτώστε ξανά τη σελίδα για να διασφαλίσετε το σωστό φιλτράρισμα", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Αυτή η καταχώρηση θα πρέπει να είναι τελευταία", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json index 561c0f08a9ff3..350b9288f35f2 100644 --- a/src/_locales/en/messages.json +++ b/src/_locales/en/messages.json @@ -1,371 +1,567 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Finally, an efficient blocker. Easy on CPU and memory.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Finally, an efficient blocker. Easy on CPU and memory.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Dashboard", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Dashboard", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Settings", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Warning: you have unsaved changes!", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"3rd-party filters", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Stay here", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"My filters", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ignore", + "description": "Label for button to ignore unsaved changes" + }, + "settingsPageName": { + "message": "Settings", + "description": "appears as tab name in dashboard" + }, + "3pPageName": { + "message": "Filter lists", + "description": "appears as tab name in dashboard" + }, + "1pPageName": { + "message": "My filters", + "description": "appears as tab name in dashboard" }, "rulesPageName": { "message": "My rules", "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Whitelist", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Trusted sites", + "description": "appears as tab name in dashboard" + }, + "shortcutsPageName": { + "message": "Shortcuts", + "description": "appears as tab name in dashboard" + }, + "statsPageName": { + "message": "uBlock₀ — Logger", + "description": "Title for the logger window" + }, + "aboutPageName": { + "message": "About", + "description": "appears as tab name in dashboard" + }, + "supportPageName": { + "message": "Support", + "description": "appears as tab name in dashboard" + }, + "assetViewerPageName": { + "message": "uBlock₀ — Asset viewer", + "description": "Title for the asset viewer page" + }, + "advancedSettingsPageName": { + "message": "Advanced settings", + "description": "Title for the advanced settings page" + }, + "popupPowerSwitchInfo": { + "message": "Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + }, + "popupPowerSwitchInfo1": { + "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "description": "Message to be read by screen readers" + }, + "popupPowerSwitchInfo2": { + "message": "Click to enable uBlock₀ for this site.", + "description": "Message to be read by screen readers" + }, + "popupBlockedRequestPrompt": { + "message": "requests blocked", + "description": "English: requests blocked" + }, + "popupBlockedOnThisPagePrompt": { + "message": "on this page", + "description": "English: on this page" + }, + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 (13%)" + }, + "popupBlockedSinceInstallPrompt": { + "message": "since install", + "description": "English: since install" + }, + "popupOr": { + "message": "or", + "description": "English: or" + }, + "popupBlockedOnThisPage_v2": { + "message": "Blocked on this page", + "description": "For the new mobile-friendly popup design" + }, + "popupBlockedSinceInstall_v2": { + "message": "Blocked since install", + "description": "For the new mobile-friendly popup design" + }, + "popupDomainsConnected_v2": { + "message": "Domains connected", + "description": "For the new mobile-friendly popup design" + }, + "popupTipDashboard": { + "message": "Open the dashboard", + "description": "English: Click to open the dashboard" + }, + "popupTipZapper": { + "message": "Enter element zapper mode", + "description": "Tooltip for the element-zapper icon in the popup panel" + }, + "popupTipPicker": { + "message": "Enter element picker mode", + "description": "English: Enter element picker mode" + }, + "popupTipLog": { + "message": "Open the logger", + "description": "Tooltip used for the logger icon in the panel" + }, + "popupTipReport": { + "message": "Report an issue on this website", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipNoPopups": { + "message": "Toggle the blocking of all popups for this site", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups1": { + "message": "Click to block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2": { + "message": "Click to no longer block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoLargeMedia": { + "message": "Toggle the blocking of large media elements for this site", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia1": { + "message": "Click to block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoCosmeticFiltering": { + "message": "Toggle cosmetic filtering for this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering1": { + "message": "Click to disable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2": { + "message": "Click to enable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoRemoteFonts": { + "message": "Toggle the blocking of remote fonts for this site", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts1": { + "message": "Click to block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "statsPageName":{ - "message":"uBlock₀ — Logger", - "description":"Title for the logger window" + "popupTipNoRemoteFonts2": { + "message": "Click to no longer block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "aboutPageName":{ - "message":"About", - "description":"appears as tab name in dashboard" + "popupTipNoScripting1": { + "message": "Click to disable JavaScript on this site", + "description": "Tooltip for the no-scripting per-site switch" }, - "popupPowerSwitchInfo":{ - "message":"Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupTipNoScripting2": { + "message": "Click to no longer disable JavaScript on this site", + "description": "Tooltip for the no-scripting per-site switch" }, - "popupBlockedRequestPrompt":{ - "message":"requests blocked", - "description":"English: requests blocked" + "popupNoPopups_v2": { + "message": "Pop-up windows", + "description": "Caption for the no-popups per-site switch" }, - "popupBlockedOnThisPagePrompt":{ - "message":"on this page", - "description":"English: on this page" + "popupNoLargeMedia_v2": { + "message": "Large media elements", + "description": "Caption for the no-large-media per-site switch" }, - "popupBlockedStats":{ - "message":"{{count}} or {{percent}}%", - "description":"Example: 15 or 13%" + "popupNoCosmeticFiltering_v2": { + "message": "Cosmetic filtering", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "popupBlockedSinceInstallPrompt":{ - "message":"since install", - "description":"English: since install" + "popupNoRemoteFonts_v2": { + "message": "Remote fonts", + "description": "Caption for the no-remote-fonts per-site switch" }, - "popupOr":{ - "message":"or", - "description":"English: or" + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "popupTipDashboard":{ - "message":"Click to open the dashboard", - "description":"English: Click to open the dashboard" + "popupMoreButton_v2": { + "message": "More", + "description": "Label to be used to show popup panel sections" }, - "popupTipPicker":{ - "message":"Enter element picker mode", - "description":"English: Enter element picker mode" + "popupLessButton_v2": { + "message": "Less", + "description": "Label to be used to hide popup panel sections" }, - "popupTipLog":{ - "message":"Open the logger", - "description":"Tooltip used for the logger icon in the panel" + "popupTipGlobalRules": { + "message": "Global rules: this column is for rules which apply to all sites.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popupTipNoPopups":{ - "message":"Toggle the blocking of all popups for this site", - "description":"Tooltip for the no-popups per-site switch" + "popupTipLocalRules": { + "message": "Local rules: this column is for rules which apply to the current site only.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupTipNoLargeMedia":{ - "message":"Toggle the blocking of large media elements for this site", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipSaveRules": { + "message": "Click to make your changes permanent.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupTipNoCosmeticFiltering":{ - "message":"Toggle cosmetic filtering for this site", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipRevertRules": { + "message": "Click to revert your changes.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "popupTipNoRemoteFonts":{ - "message":"Toggle the blocking of remote fonts for this site", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupAnyRulePrompt": { + "message": "all", + "description": "" }, - "popupTipGlobalRules":{ - "message":"Global rules: this column is for rules which apply to all sites.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupImageRulePrompt": { + "message": "images", + "description": "" }, - "popupTipLocalRules":{ - "message":"Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popup3pAnyRulePrompt": { + "message": "3rd-party", + "description": "" }, - "popupTipSaveRules":{ - "message":"Click to make your changes permanent.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popup3pPassiveRulePrompt": { + "message": "3rd-party CSS/images", + "description": "" }, - "popupTipRevertRules":{ - "message":"Click to revert your changes.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupInlineScriptRulePrompt": { + "message": "inline scripts", + "description": "" }, - "popupAnyRulePrompt":{ - "message":"all", - "description":"" + "popup1pScriptRulePrompt": { + "message": "1st-party scripts", + "description": "" }, - "popupImageRulePrompt":{ - "message":"images", - "description":"" + "popup3pScriptRulePrompt": { + "message": "3rd-party scripts", + "description": "" + }, + "popup3pFrameRulePrompt": { + "message": "3rd-party frames", + "description": "" }, - "popup3pAnyRulePrompt":{ - "message":"3rd-party", - "description":"" + "popupHitDomainCountPrompt": { + "message": "domains connected", + "description": "appears in popup" }, - "popup3pPassiveRulePrompt":{ - "message":"3rd-party css/images", - "description":"" + "popupHitDomainCount": { + "message": "{{count}} out of {{total}}", + "description": "appears in popup" }, - "popupInlineScriptRulePrompt":{ - "message":"inline scripts", - "description":"" + "popupVersion": { + "message": "Version", + "description": "Example of use: Version 1.26.4" }, - "popup1pScriptRulePrompt":{ - "message":"1st-party scripts", - "description":"" + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" }, - "popup3pScriptRulePrompt":{ - "message":"3rd-party scripts", - "description":"" + "popup3pFrameFilter": { + "message": "frame", + "description": "Appears as an option to filter out firewall rows" }, - "popup3pFrameRulePrompt":{ - "message":"3rd-party frames", - "description":"" + "pickerCreate": { + "message": "Create", + "description": "English: Create" }, - "popupHitDomainCountPrompt":{ - "message":"domains connected", - "description":"appears in popup" + "pickerPick": { + "message": "Pick", + "description": "English: Pick" }, - "popupHitDomainCount":{ - "message":"{{count}} out of {{total}}", - "description":"appears in popup" + "pickerQuit": { + "message": "Quit", + "description": "English: Quit" }, - "pickerCreate":{ - "message":"Create", - "description":"English: Create" + "pickerPreview": { + "message": "Preview", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "pickerPick":{ - "message":"Pick", - "description":"English: Pick" + "pickerNetFilters": { + "message": "Network filters", + "description": "English: header for a type of filter in the element picker dialog" }, - "pickerQuit":{ - "message":"Quit", - "description":"English: Quit" + "pickerCosmeticFilters": { + "message": "Cosmetic filters", + "description": "English: Cosmetic filters" }, - "pickerPreview":{ - "message":"Preview", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "pickerCosmeticFiltersHint": { + "message": "Click, Ctrl-click", + "description": "English: Click, Ctrl-click" }, - "pickerNetFilters":{ - "message":"Network filters", - "description":"English: header for a type of filter in the element picker dialog" + "pickerContextMenuEntry": { + "message": "Block element…", + "description": "An entry in the browser's contextual menu" }, - "pickerCosmeticFilters":{ - "message":"Cosmetic filters", - "description":"English: Cosmetic filters" + "settingsCollapseBlockedPrompt": { + "message": "Hide placeholders of blocked elements", + "description": "English: Hide placeholders of blocked elements" }, - "pickerCosmeticFiltersHint":{ - "message":"Click, Ctrl-click", - "description":"English: Click, Ctrl-click" + "settingsIconBadgePrompt": { + "message": "Show the number of blocked requests on the icon", + "description": "English: Show the number of blocked requests on the icon" }, - "pickerContextMenuEntry":{ - "message":"Block element", - "description":"English: Block element" + "settingsTooltipsPrompt": { + "message": "Disable tooltips", + "description": "A checkbox in the Settings pane" }, - "settingsCollapseBlockedPrompt":{ - "message":"Hide placeholders of blocked elements", - "description":"English: Hide placeholders of blocked elements" + "settingsContextMenuPrompt": { + "message": "Make use of context menu where appropriate", + "description": "English: Make use of context menu where appropriate" }, - "settingsIconBadgePrompt":{ - "message":"Show the number of blocked requests on the icon", - "description":"English: Show the number of blocked requests on the icon" + "settingsColorBlindPrompt": { + "message": "Color-blind friendly", + "description": "English: Color-blind friendly" }, - "settingsTooltipsPrompt":{ - "message":"Disable tooltips", - "description":"A checkbox in the Settings pane" + "settingsAppearance": { + "message": "Appearance", + "description": "Section for controlling user interface appearance" }, - "settingsContextMenuPrompt":{ - "message":"Make use of context menu where appropriate", - "description":"English: Make use of context menu where appropriate" + "settingsThemeLabel": { + "message": "Theme", + "description": "Label for checkbox to enable a custom dark theme" }, - "settingsColorBlindPrompt":{ - "message":"Color-blind friendly", - "description":"English: Color-blind friendly" + "settingsThemeAccent0Label": { + "message": "Custom accent color", + "description": "Label for checkbox to pick an accent color" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Enable cloud storage support", + "settingsCloudStorageEnabledPrompt": { + "message": "Enable cloud storage support", "description": "" }, - "settingsAdvancedUserPrompt":{ - "message":"I am an advanced user (Required reading<\/a>)", - "description":"English: " + "settingsAdvancedUserPrompt": { + "message": "I am an advanced user", + "description": "Checkbox to let user access advanced, technical features" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Disable pre-fetching (to prevent any connection for blocked network requests)", - "description":"English: " + "settingsPrefetchingDisabledPrompt": { + "message": "Disable pre-fetching (to prevent any connection for blocked network requests)", + "description": "English: " }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Disable hyperlink auditing", - "description":"English: " + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Disable hyperlink auditing", + "description": "English: " }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Prevent WebRTC from leaking local IP addresses", - "description":"English: " + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Prevent WebRTC from leaking local IP addresses", + "description": "English: " }, - "settingPerSiteSwitchGroup":{ - "message":"Default behavior", + "settingPerSiteSwitchGroup": { + "message": "Default behavior", "description": "" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"These default behaviors can be overridden on a per-site basis", + "settingPerSiteSwitchGroupSynopsis": { + "message": "These default behaviors can be overridden on a per-site basis", "description": "" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Disable cosmetic filtering", + "settingsNoCosmeticFilteringPrompt": { + "message": "Disable cosmetic filtering", "description": "" }, - "settingsNoLargeMediaPrompt":{ - "message":"Block media elements larger than {{input:number}} kB", + "settingsNoLargeMediaPrompt": { + "message": "Block media elements larger than {{input}} KB", "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Block remote fonts", + "settingsNoRemoteFontsPrompt": { + "message": "Block remote fonts", "description": "" }, - "settingsStorageUsed":{ - "message":"Storage used: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "settingsNoScriptingPrompt": { + "message": "Disable JavaScript", + "description": "The default state for the per-site no-scripting switch" + }, + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" + }, + "settingsUncloakCnamePrompt": { + "message": "Uncloak canonical names", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "settingsLastRestorePrompt":{ - "message":"Last restore:", - "description":"English: Last restore:" + "settingsAdvanced": { + "message": "Advanced", + "description": "Section for controlling advanced-user settings" }, - "settingsLastBackupPrompt":{ - "message":"Last backup:", - "description":"English: Last backup:" + "settingsAdvancedSynopsis": { + "message": "Features suitable only for technical users", + "description": "Description of section controlling advanced-user settings" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsAdvancedUserSettings": { + "message": "advanced settings", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} used out of {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsLastRestorePrompt": { + "message": "Last restore:", + "description": "English: Last restore:" }, - "3pAutoUpdatePrompt1":{ - "message":"Auto-update filter lists", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingsLastBackupPrompt": { + "message": "Last backup:", + "description": "English: Last backup:" }, - "3pUpdateNow":{ - "message":"Update now", - "description":"A button in the in the _3rd-party filters_ pane" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pPurgeAll":{ - "message":"Purge all caches", - "description":"A button in the in the _3rd-party filters_ pane" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} used out of {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Parse and enforce cosmetic filters", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "3pAutoUpdatePrompt1": { + "message": "Auto-update filter lists", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      This option enables the parsing and enforcing of Adblock Plus-compatible “element hiding” filters<\/a>. These filters are essentially cosmetic, they serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the net request-based filtering engine.<\/p>

      Enabling this feature increases uBlock₀'s memory footprint.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "3pUpdateNow": { + "message": "Update now", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignore generic cosmetic filters", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "3pPurgeAll": { + "message": "Purge all caches", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites.

      Though handled efficiently by uBlock₀, generic cosmetic filters may still contribute measurable memory and CPU overhead on some web pages, especially for large and long-lived ones.

      Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters, and also lower the memory footprint of uBlock₀ itself.

      It is recommended to enable this option on less powerful devices.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "3pParseAllABPHideFiltersPrompt1": { + "message": "Parse and enforce cosmetic filters", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lists of blocked hosts", - "description":"English: Lists of blocked hosts" + "3pParseAllABPHideFiltersInfo": { + "message": "Cosmetic filters serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the network request-based filtering engines.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pApplyChanges":{ - "message":"Apply changes", - "description":"English: Apply changes" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignore generic cosmetic filters", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pGroupAds":{ - "message":"Ads", - "description":"English: Ads" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pGroupPrivacy":{ - "message":"Privacy", - "description":"English: Privacy" + "3pSuspendUntilListsAreLoaded": { + "message": "Suspend network activity until all filter lists are loaded", + "description": "A checkbox in the 'Filter lists' pane" }, - "3pGroupMalware":{ - "message":"Malware domains", - "description":"English: Malware domains" + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" }, - "3pGroupSocial":{ - "message":"Social", - "description":"English: Social" + "3pApplyChanges": { + "message": "Apply changes", + "description": "English: Apply changes" }, - "3pGroupMultipurpose":{ - "message":"Multipurpose", - "description":"English: Multipurpose" + "3pGroupDefault": { + "message": "Built-in", + "description": "Filter lists section name" }, - "3pGroupRegions":{ - "message":"Regions, languages", - "description":"English: Regions, languages" + "3pGroupAds": { + "message": "Ads", + "description": "Filter lists section name" }, - "3pGroupCustom":{ - "message":"Custom", - "description":"English: Custom" + "3pGroupPrivacy": { + "message": "Privacy", + "description": "Filter lists section name" }, - "3pExternalListsHint":{ - "message":"One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pGroupMalware": { + "message": "Malware protection, security", + "description": "Filter lists section name" }, - "3pExternalListsApply":{ - "message":"Parse", - "description":"English: Parse" + "3pGroupSocial": { + "message": "Social widgets", + "description": "Filter lists section name" }, - "3pExternalListPurge":{ - "message":"purge cache", - "description":"English: purge cache" + "3pGroupCookies": { + "message": "Cookie notices", + "description": "Filter lists section name" }, - "3pExternalListNew":{ - "message":"new version available", - "description":"English: new version available" + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "Filter lists section name" }, - "3pExternalListObsolete":{ - "message":"out of date", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "3pGroupMultipurpose": { + "message": "Multipurpose", + "description": "Filter lists section name" }, - "3pLastUpdate":{ - "message":"Last update: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "3pGroupRegions": { + "message": "Regions, languages", + "description": "Filter lists section name" }, - "1pFormatHint":{ - "message":"One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupCustom": { + "message": "Custom", + "description": "Filter lists section name" }, - "1pImport":{ - "message":"Import and append", - "description":"English: Import and append" + "3pImport": { + "message": "Import…", + "description": "The label for the checkbox used to import external filter lists" }, - "1pExport":{ - "message":"Export", - "description":"English: Export" + "3pExternalListsHint": { + "message": "One URL per line. Invalid URLs will be silently ignored.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "1pExportFilename" : { + "3pExternalListObsolete": { + "message": "Out of date.", + "description": "used as a tooltip for the out-of-date icon beside a list" + }, + "3pViewContent": { + "message": "view content", + "description": "used as a tooltip for eye icon beside a list" + }, + "3pLastUpdate": { + "message": "Last update: {{ago}}.\nClick to force an update.", + "description": "used as a tooltip for the clock icon beside a list" + }, + "3pUpdating": { + "message": "Updating…", + "description": "used as a tooltip for the spinner icon beside a list" + }, + "3pNetworkError": { + "message": "A network error prevented the resource from being updated.", + "description": "used as a tooltip for error icon beside a list" + }, + "1pTrustWarning": { + "message": "Do not add filters from untrusted sources.", + "description": "Warning against copy-pasting filters from random sources" + }, + "1pEnableMyFiltersLabel": { + "message": "Enable my custom filters", + "description": "Label for the checkbox use to enable/disable 'My filters' list" + }, + "1pTrustMyFiltersLabel": { + "message": "Allow custom filters requiring trust", + "description": "Label for the checkbox use to trust the content of 'My filters' list" + }, + "1pImport": { + "message": "Import and append…", + "description": "Button in the 'My filters' pane" + }, + "1pExport": { + "message": "Export…", + "description": "Button in the 'My filters' pane" + }, + "1pExportFilename": { "message": "my-ublock-static-filters_{{datetime}}.txt", "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "1pApplyChanges":{ - "message":"Apply changes", - "description":"English: Apply changes" + "1pApplyChanges": { + "message": "Apply changes", + "description": "English: Apply changes" }, "rulesPermanentHeader": { "message": "Permanent rules", @@ -396,12 +592,12 @@ "description": "Will discard manually-edited content and exit manual-edit mode" }, "rulesImport": { - "message": "Import from file...", + "message": "Import from file…", "description": "" }, "rulesExport": { - "message": "Export to file", - "description": "" + "message": "Export to file…", + "description": "Button in the 'My rules' pane" }, "rulesDefaultFileName": { "message": "my-ublock-dynamic-rules_{{datetime}}.txt", @@ -412,223 +608,544 @@ "description": "English: List of your dynamic filtering rules." }, "rulesFormatHint": { - "message": "Rule syntax: source destination type action<\/code> (full documentation<\/a>).", + "message": "Rule syntax: source destination type action (full documentation).", "description": "English: dynamic rule syntax and full documentation." }, - "whitelistPrompt":{ - "message":"Your list of host names for which uBlock₀ will be disabled. One entry per line. Invalid host names will be silently ignored.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "rulesSort": { + "message": "Sort:", + "description": "English: label for sort option." + }, + "rulesSortByType": { + "message": "Rule type", + "description": "English: a sort option for list of rules." + }, + "rulesSortBySource": { + "message": "Source", + "description": "English: a sort option for list of rules." + }, + "rulesSortByDestination": { + "message": "Destination", + "description": "English: a sort option for list of rules." + }, + "whitelistPrompt": { + "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line.", + "description": "A concise description of the 'Trusted sites' pane." + }, + "whitelistImport": { + "message": "Import and append…", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExport": { + "message": "Export…", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExportFilename": { + "message": "my-ublock-trusted-sites_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" + }, + "whitelistApply": { + "message": "Apply changes", + "description": "English: Apply changes" + }, + "logRequestsHeaderType": { + "message": "Type", + "description": "English: Type" + }, + "logRequestsHeaderDomain": { + "message": "Domain", + "description": "English: Domain" + }, + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" + }, + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" + }, + "logAll": { + "message": "All", + "description": "Appears in the logger's tab selector" + }, + "logBehindTheScene": { + "message": "Tabless", + "description": "Pretty name for behind-the-scene network requests" + }, + "loggerCurrentTab": { + "message": "Current tab", + "description": "Appears in the logger's tab selector" + }, + "loggerReloadTip": { + "message": "Reload the tab content", + "description": "Tooltip for the reload button in the logger page" + }, + "loggerDomInspectorTip": { + "message": "Toggle the DOM inspector", + "description": "Tooltip for the DOM inspector button in the logger page" + }, + "loggerPopupPanelTip": { + "message": "Toggle the popup panel", + "description": "Tooltip for the popup panel button in the logger page" + }, + "loggerInfoTip": { + "message": "uBlock Origin wiki: The logger", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Clear logger", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Pause logger (discard all incoming data)", + "description": "Tooltip for the pause button in the logger page" }, - "whitelistImport":{ - "message":"Import and append", - "description":"English: Import and append" + "loggerUnpauseTip": { + "message": "Unpause logger", + "description": "Tooltip for the play button in the logger page" }, - "whitelistExport":{ - "message":"Export", - "description":"English: Export" + "loggerRowFiltererButtonTip": { + "message": "Toggle logger filtering", + "description": "Tooltip for the row filterer button in the logger page" }, - "whitelistExportFilename" : { - "message": "my-ublock-whitelist_{{datetime}}.txt", - "description": "English: my-ublock-whitelist_{{datetime}}.txt" + "logFilterPrompt": { + "message": "filter logger content", + "description": "Placeholder string for logger output filtering input field" }, - "whitelistApply":{ - "message":"Apply changes", - "description":"English: Apply changes" + "loggerRowFiltererBuiltinTip": { + "message": "Logger filtering options", + "description": "Tooltip for the button to bring up logger output filtering options" }, - "logRequestsHeaderType":{ - "message":"Type", - "description":"English: Type" + "loggerRowFiltererBuiltinNot": { + "message": "Not", + "description": "A keyword in the built-in row filtering expression" }, - "logRequestsHeaderDomain":{ - "message":"Domain", - "description":"English: Domain" + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "loggerRowFiltererBuiltinBlocked": { + "message": "blocked", + "description": "A keyword in the built-in row filtering expression" }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "loggerRowFiltererBuiltinAllowed": { + "message": "allowed", + "description": "A keyword in the built-in row filtering expression" }, - "logAll":{ - "message":"All", - "description":"Appears in the logger's tab selector" + "loggerRowFiltererBuiltinModified": { + "message": "modified", + "description": "A keyword in the built-in row filtering expression" }, - "logBehindTheScene":{ - "message":"Behind the scene", - "description":"Pretty name for behind-the-scene network requests" + "loggerRowFiltererBuiltin1p": { + "message": "1st-party", + "description": "A keyword in the built-in row filtering expression" }, - "logFilterPrompt":{ - "message":"filter log entries", - "description": "English: filter log entries" + "loggerRowFiltererBuiltin3p": { + "message": "3rd-party", + "description": "A keyword in the built-in row filtering expression" }, - "logMaxEntriesTip":{ - "message":"Maximum number of log entries", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "loggerEntryDetailsHeader": { + "message": "Details", + "description": "Small header to identify the 'Details' pane for a specific logger entry" }, - "loggerURLFilteringContextLabel":{ - "message":"Context:", - "description":"Label for the context selector" + "loggerEntryDetailsFilter": { + "message": "Filter", + "description": "Label to identify a filter field" }, - "loggerURLFilteringTypeLabel":{ - "message":"Type:", - "description":"Label for the type selector" + "loggerEntryDetailsFilterList": { + "message": "Filter list", + "description": "Label to identify a filter list field" }, - "loggerURLFilteringHeader":{ - "message":"Dynamic URL filtering", - "description":"Small header to identify the dynamic URL filtering section" + "loggerEntryDetailsRule": { + "message": "Rule", + "description": "Label to identify a rule field" }, - "loggerStaticFilteringHeader":{ - "message":"Static filtering", - "description":"Small header to identify the static filtering section" + "loggerEntryDetailsContext": { + "message": "Context", + "description": "Label to identify a context field (typically a hostname)" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", - "description":"Used in the static filtering wizard" + "loggerEntryDetailsRootContext": { + "message": "Root context", + "description": "Label to identify a root context field (typically a hostname)" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Block", - "description":"Used in the static filtering wizard" + "loggerEntryDetailsPartyness": { + "message": "Partyness", + "description": "Label to identify a field providing partyness information" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Allow", - "description":"Used in the static filtering wizard" + "loggerEntryDetailsType": { + "message": "Type", + "description": "Label to identify the type of an entry" }, - "loggerStaticFilteringSentencePartType":{ - "message":"type “{{type}}”", - "description":"Used in the static filtering wizard" + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"any type", - "description":"Used in the static filtering wizard" + "loggerURLFilteringHeader": { + "message": "URL rule", + "description": "Small header to identify the dynamic URL filtering section" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"from “{{origin}}”", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Context:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"from anywhere", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Type:", + "description": "Label for the type selector" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"except when", - "description":"Used in the static filtering wizard" + "loggerStaticFilteringHeader": { + "message": "Static filter", + "description": "Small header to identify the static filtering section" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"even if", - "description":"Used in the static filtering wizard" + "loggerStaticFilteringSentence": { + "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", + "description": "Used in the static filtering wizard" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Static filter {{filter}} found in:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerStaticFilteringSentencePartBlock": { + "message": "Block", + "description": "Used in the static filtering wizard" }, - "aboutChangelog":{ - "message":"Change log", - "description":"English: Change log" + "loggerStaticFilteringSentencePartAllow": { + "message": "Allow", + "description": "Used in the static filtering wizard" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentencePartType": { + "message": "type “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Support", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartAnyType": { + "message": "any type", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Source code (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartOrigin": { + "message": "from “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Contributors", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "from anywhere", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton" : { - "message": "Backup to file", - "description": "English: Backup to file" + "loggerStaticFilteringSentencePartNotImportant": { + "message": "except when", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename" : { + "loggerStaticFilteringSentencePartImportant": { + "message": "even if", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Static filter {{filter}} found in:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Static filter could not be found in any of the currently enabled filter lists", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Preserve entries from the last {{input}} minutes", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Preserve at most {{input}} page loads per tab", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Preserve at most {{input}} entries per tab", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Use {{input}} lines per entry in vertically expanded mode", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Hide columns:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Time", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filter/rule", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Context", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Partyness", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "List", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Table", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Plain", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + + "supportOpenButton": { + "message": "Open", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Create new report on GitHub", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Find similar reports on GitHub", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Documentation", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Read the documentation at uBlock/wiki to learn about all of uBlock Origin's features.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Questions and support", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Answers to questions and other kinds of help support is provided on the subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filter issues/website is broken", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Important: Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tips: Be sure your filter lists are up to date. The logger is the primary tool to diagnose filter-related issues.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Bug report", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Report issues with uBlock Origin itself to the uBlockOrigin/uBlock-issue issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Troubleshooting Information", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported. Note: clicking the button will cause the page's origin to be sent to GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verify that the issue still exists after reloading the problematic web page.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the web page:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The web page…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBlock Origin is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the web page as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Privacy policy", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Changelog", + "description": "" + }, + "aboutCode": { + "message": "Source code (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Contributors", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Source code", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Translations", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Filter lists", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "External dependencies (GPLv3-compatible):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO's own filter lists are freely hosted on the following CDNs:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "A randomly picked CDN is used when a filter list needs to be updated.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Back up to file…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { "message": "my-ublock-backup_{{datetime}}.txt", "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "aboutRestoreDataButton" : { - "message": "Restore from file...", + "aboutRestoreDataButton": { + "message": "Restore from file…", "description": "English: Restore from file..." }, - "aboutResetDataButton" : { - "message": "Reset to default settings...", + "aboutResetDataButton": { + "message": "Reset to default settings…", "description": "English: Reset to default settings..." }, - "aboutRestoreDataConfirm" : { + "aboutRestoreDataConfirm": { "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", "description": "Message asking user to confirm restore" }, - "aboutRestoreDataError" : { + "aboutRestoreDataError": { "message": "The data could not be read or is invalid", "description": "Message to display when an error occurred during restore" }, - "aboutResetDataConfirm" : { + "aboutResetDataConfirm": { "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", "description": "Message asking user to confirm reset" }, - "errorCantConnectTo":{ - "message":"Unable to connect to {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "errorCantConnectTo": { + "message": "Network error: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "subscriberConfirm":{ - "message":"uBlock₀: Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "subscribeButton": { + "message": "Subscribe", + "description": "For the button used to subscribe to a filter list" }, - "elapsedOneMinuteAgo":{ - "message":"a minute ago", - "description":"English: a minute ago" + "elapsedOneMinuteAgo": { + "message": "a minute ago", + "description": "English: a minute ago" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minutes ago", - "description":"English: {{value}} minutes ago" + "elapsedManyMinutesAgo": { + "message": "{{value}} minutes ago", + "description": "English: {{value}} minutes ago" }, - "elapsedOneHourAgo":{ - "message":"an hour ago", - "description":"English: an hour ago" + "elapsedOneHourAgo": { + "message": "an hour ago", + "description": "English: an hour ago" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} hours ago", - "description":"English: {{value}} hours ago" + "elapsedManyHoursAgo": { + "message": "{{value}} hours ago", + "description": "English: {{value}} hours ago" }, - "elapsedOneDayAgo":{ - "message":"a day ago", - "description":"English: a day ago" + "elapsedOneDayAgo": { + "message": "a day ago", + "description": "English: a day ago" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} days ago", - "description":"English: {{value}} days ago" + "elapsedManyDaysAgo": { + "message": "{{value}} days ago", + "description": "English: {{value}} days ago" }, - "showDashboardButton":{ - "message":"Show Dashboard", - "description":"Firefox/Fennec-specific: Show Dashboard" + "showDashboardButton": { + "message": "Show Dashboard", + "description": "Firefox/Fennec-specific: Show Dashboard" }, - "showNetworkLogButton":{ - "message":"Show Logger", - "description":"Firefox/Fennec-specific: Show Logger" + "showNetworkLogButton": { + "message": "Show Logger", + "description": "Firefox/Fennec-specific: Show Logger" }, "fennecMenuItemBlockingOff": { "message": "off", "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, + "docblockedTitle": { + "message": "Page blocked", + "description": "Used as a title for the document-blocked page" + }, "docblockedPrompt1": { "message": "uBlock Origin has prevented the following page from loading:", - "description": "English: uBlock₀ has prevented the following page from loading:" + "description": "Used in the strict-blocking page" }, "docblockedPrompt2": { - "message": "Because of the following filter", - "description": "English: Because of the following filter" + "message": "This happened because of the following filter:", + "description": "Used in the strict-blocking page" }, "docblockedNoParamsPrompt": { "message": "without parameters", "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, "docblockedFoundIn": { - "message": "Found in:", + "message": "The filter has been found in:", "description": "English: List of filter list names follows" }, "docblockedBack": { @@ -639,6 +1156,10 @@ "message": "Close this window", "description": "English: Close this window" }, + "docblockedDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, "docblockedProceed": { "message": "Disable strict blocking for {{hostname}}", "description": "English: Disable strict blocking for {{hostname}} ..." @@ -651,6 +1172,30 @@ "message": "Permanently", "description": "English: Permanently" }, + "docblockedDisable": { + "message": "Proceed", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, "cloudPush": { "message": "Export to cloud storage", "description": "tooltip" @@ -664,31 +1209,107 @@ "description": "tooltip" }, "cloudNoData": { - "message": "...\n...", + "message": "…\n…", "description": "" }, "cloudDeviceNamePrompt": { "message": "This device name:", "description": "used as a prompt for the user to provide a custom device name" }, + "advancedSettingsWarning": { + "message": "Warning! Change these advanced settings at your own risk.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, "genericSubmit": { "message": "Submit", - "description": "for generic 'submit' buttons" + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Apply changes", + "description": "for generic 'Apply changes' buttons" }, "genericRevert": { "message": "Revert", - "description": "for generic 'revert' buttons" + "description": "for generic 'Revert' buttons" }, "genericBytes": { "message": "bytes", "description": "" }, + "contextMenuBlockElementInFrame": { + "message": "Block element in frame…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Subscribe to filter list…", + "description": "An entry in the browser's contextual menu" + }, "contextMenuTemporarilyAllowLargeMediaElements": { "message": "Temporarily allow large media elements", "description": "A context menu entry, present when large media elements have been blocked on the current site" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "contextMenuViewSource": { + "message": "View source code…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Type a shortcut", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Toggle locked scrolling", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Copy to clipboard", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Select all", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Toggle cosmetic filtering", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Toggle JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Relax blocking mode", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Storage used: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Click to load", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Errors: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } diff --git a/src/_locales/en_GB/messages.json b/src/_locales/en_GB/messages.json new file mode 100644 index 0000000000000..a211abc6b50e9 --- /dev/null +++ b/src/_locales/en_GB/messages.json @@ -0,0 +1,1314 @@ +{ + "extName": { + "message": "uBlock Origin", + "description": "extension name." + }, + "extShortDesc": { + "message": "Finally, an efficient blocker. Easy on CPU and memory.", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "dashboardName": { + "message": "uBlock₀ — Dashboard", + "description": "English: uBlock₀ — Dashboard" + }, + "dashboardUnsavedWarning": { + "message": "Warning! You have unsaved changes", + "description": "A warning in the dashboard when navigating away from unsaved changes" + }, + "dashboardUnsavedWarningStay": { + "message": "Stay", + "description": "Label for button to prevent navigating away from unsaved changes" + }, + "dashboardUnsavedWarningIgnore": { + "message": "Ignore", + "description": "Label for button to ignore unsaved changes" + }, + "settingsPageName": { + "message": "Settings", + "description": "appears as tab name in dashboard" + }, + "3pPageName": { + "message": "Filter lists", + "description": "appears as tab name in dashboard" + }, + "1pPageName": { + "message": "My filters", + "description": "appears as tab name in dashboard" + }, + "rulesPageName": { + "message": "My rules", + "description": "appears as tab name in dashboard" + }, + "whitelistPageName": { + "message": "Trusted sites", + "description": "appears as tab name in dashboard" + }, + "shortcutsPageName": { + "message": "Shortcuts", + "description": "appears as tab name in dashboard" + }, + "statsPageName": { + "message": "uBlock₀ — Logger", + "description": "Title for the logger window" + }, + "aboutPageName": { + "message": "About", + "description": "appears as tab name in dashboard" + }, + "supportPageName": { + "message": "Support", + "description": "appears as tab name in dashboard" + }, + "assetViewerPageName": { + "message": "uBlock₀ — Asset viewer", + "description": "Title for the asset viewer page" + }, + "advancedSettingsPageName": { + "message": "Advanced settings", + "description": "Title for the advanced settings page" + }, + "popupPowerSwitchInfo": { + "message": "Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + }, + "popupPowerSwitchInfo1": { + "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "description": "Message to be read by screen readers" + }, + "popupPowerSwitchInfo2": { + "message": "Click to enable uBlock₀ for this site.", + "description": "Message to be read by screen readers" + }, + "popupBlockedRequestPrompt": { + "message": "requests blocked", + "description": "English: requests blocked" + }, + "popupBlockedOnThisPagePrompt": { + "message": "on this page", + "description": "English: on this page" + }, + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 (13%)" + }, + "popupBlockedSinceInstallPrompt": { + "message": "since install", + "description": "English: since install" + }, + "popupOr": { + "message": "or", + "description": "English: or" + }, + "popupBlockedOnThisPage_v2": { + "message": "Blocked on this page", + "description": "For the new mobile-friendly popup design" + }, + "popupBlockedSinceInstall_v2": { + "message": "Blocked since install", + "description": "For the new mobile-friendly popup design" + }, + "popupDomainsConnected_v2": { + "message": "Domains connected", + "description": "For the new mobile-friendly popup design" + }, + "popupTipDashboard": { + "message": "Open the dashboard", + "description": "English: Click to open the dashboard" + }, + "popupTipZapper": { + "message": "Enter element zapper mode", + "description": "Tooltip for the element-zapper icon in the popup panel" + }, + "popupTipPicker": { + "message": "Enter element picker mode", + "description": "English: Enter element picker mode" + }, + "popupTipLog": { + "message": "Open the logger", + "description": "Tooltip used for the logger icon in the panel" + }, + "popupTipReport": { + "message": "Report an issue on this website", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipNoPopups": { + "message": "Toggle the blocking of all pop-ups for this site", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups1": { + "message": "Click to block all pop-ups on this site", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2": { + "message": "Click to no longer block all pop-ups on this site", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoLargeMedia": { + "message": "Toggle the blocking of large media elements for this site", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia1": { + "message": "Click to block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoCosmeticFiltering": { + "message": "Toggle cosmetic filtering for this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering1": { + "message": "Click to disable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2": { + "message": "Click to enable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoRemoteFonts": { + "message": "Toggle the blocking of remote fonts for this site", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts1": { + "message": "Click to block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts2": { + "message": "Click to no longer block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoScripting1": { + "message": "Click to disable JavaScript on this site", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupTipNoScripting2": { + "message": "Click to no longer disable JavaScript on this site", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupNoPopups_v2": { + "message": "Pop-up windows", + "description": "Caption for the no-popups per-site switch" + }, + "popupNoLargeMedia_v2": { + "message": "Large media elements", + "description": "Caption for the no-large-media per-site switch" + }, + "popupNoCosmeticFiltering_v2": { + "message": "Cosmetic filtering", + "description": "Caption for the no-cosmetic-filtering per-site switch" + }, + "popupNoRemoteFonts_v2": { + "message": "Remote fonts", + "description": "Caption for the no-remote-fonts per-site switch" + }, + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" + }, + "popupMoreButton_v2": { + "message": "More", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton_v2": { + "message": "Less", + "description": "Label to be used to hide popup panel sections" + }, + "popupTipGlobalRules": { + "message": "Global rules: this column is for rules which apply to all sites.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." + }, + "popupTipLocalRules": { + "message": "Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." + }, + "popupTipSaveRules": { + "message": "Click to make your changes permanent.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." + }, + "popupTipRevertRules": { + "message": "Click to revert your changes.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + }, + "popupAnyRulePrompt": { + "message": "all", + "description": "" + }, + "popupImageRulePrompt": { + "message": "images", + "description": "" + }, + "popup3pAnyRulePrompt": { + "message": "3rd-party", + "description": "" + }, + "popup3pPassiveRulePrompt": { + "message": "3rd-party CSS/images", + "description": "" + }, + "popupInlineScriptRulePrompt": { + "message": "inline scripts", + "description": "" + }, + "popup1pScriptRulePrompt": { + "message": "1st-party scripts", + "description": "" + }, + "popup3pScriptRulePrompt": { + "message": "3rd-party scripts", + "description": "" + }, + "popup3pFrameRulePrompt": { + "message": "3rd-party frames", + "description": "" + }, + "popupHitDomainCountPrompt": { + "message": "domains connected", + "description": "appears in popup" + }, + "popupHitDomainCount": { + "message": "{{count}} out of {{total}}", + "description": "appears in popup" + }, + "popupVersion": { + "message": "Version", + "description": "Example of use: Version 1.26.4" + }, + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" + }, + "popup3pFrameFilter": { + "message": "frame", + "description": "Appears as an option to filter out firewall rows" + }, + "pickerCreate": { + "message": "Create", + "description": "English: Create" + }, + "pickerPick": { + "message": "Pick", + "description": "English: Pick" + }, + "pickerQuit": { + "message": "Quit", + "description": "English: Quit" + }, + "pickerPreview": { + "message": "Preview", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + }, + "pickerNetFilters": { + "message": "Network filters", + "description": "English: header for a type of filter in the element picker dialog" + }, + "pickerCosmeticFilters": { + "message": "Cosmetic filters", + "description": "English: Cosmetic filters" + }, + "pickerCosmeticFiltersHint": { + "message": "Click, Ctrl-click", + "description": "English: Click, Ctrl-click" + }, + "pickerContextMenuEntry": { + "message": "Block element…", + "description": "An entry in the browser's contextual menu" + }, + "settingsCollapseBlockedPrompt": { + "message": "Hide placeholders of blocked elements", + "description": "English: Hide placeholders of blocked elements" + }, + "settingsIconBadgePrompt": { + "message": "Show the number of blocked requests on the icon", + "description": "English: Show the number of blocked requests on the icon" + }, + "settingsTooltipsPrompt": { + "message": "Disable tooltips", + "description": "A checkbox in the Settings pane" + }, + "settingsContextMenuPrompt": { + "message": "Make use of context menu where appropriate", + "description": "English: Make use of context menu where appropriate" + }, + "settingsColorBlindPrompt": { + "message": "Colour-blind friendly", + "description": "English: Color-blind friendly" + }, + "settingsAppearance": { + "message": "Appearance", + "description": "Section for controlling user interface appearance" + }, + "settingsThemeLabel": { + "message": "Theme", + "description": "Label for checkbox to enable a custom dark theme" + }, + "settingsThemeAccent0Label": { + "message": "Custom accent colour", + "description": "Label for checkbox to pick an accent color" + }, + "settingsCloudStorageEnabledPrompt": { + "message": "Enable cloud storage support", + "description": "" + }, + "settingsAdvancedUserPrompt": { + "message": "I am an advanced user", + "description": "Checkbox to let user access advanced, technical features" + }, + "settingsPrefetchingDisabledPrompt": { + "message": "Disable pre-fetching (to prevent any connection for blocked network requests)", + "description": "English: " + }, + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Disable hyperlink auditing", + "description": "English: " + }, + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Prevent WebRTC from leaking local IP addresses", + "description": "English: " + }, + "settingPerSiteSwitchGroup": { + "message": "Default behaviour", + "description": "" + }, + "settingPerSiteSwitchGroupSynopsis": { + "message": "These default behaviours can be overridden on a per-site basis", + "description": "" + }, + "settingsNoCosmeticFilteringPrompt": { + "message": "Disable cosmetic filtering", + "description": "" + }, + "settingsNoLargeMediaPrompt": { + "message": "Block media elements larger than {{input}} KB", + "description": "" + }, + "settingsNoRemoteFontsPrompt": { + "message": "Block remote fonts", + "description": "" + }, + "settingsNoScriptingPrompt": { + "message": "Disable JavaScript", + "description": "The default state for the per-site no-scripting switch" + }, + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" + }, + "settingsUncloakCnamePrompt": { + "message": "Uncloak canonical names", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" + }, + "settingsAdvanced": { + "message": "Advanced", + "description": "Section for controlling advanced-user settings" + }, + "settingsAdvancedSynopsis": { + "message": "Features suitable only for technical users", + "description": "Description of section controlling advanced-user settings" + }, + "settingsAdvancedUserSettings": { + "message": "advanced settings", + "description": "For the tooltip of a link which gives access to advanced settings" + }, + "settingsLastRestorePrompt": { + "message": "Last restore:", + "description": "English: Last restore:" + }, + "settingsLastBackupPrompt": { + "message": "Last backup:", + "description": "English: Last backup:" + }, + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:", + "description": "Appears at the top of the _3rd-party filters_ pane" + }, + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} used out of {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "3pAutoUpdatePrompt1": { + "message": "Auto-update filter lists", + "description": "A checkbox in the _3rd-party filters_ pane" + }, + "3pUpdateNow": { + "message": "Update now", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pPurgeAll": { + "message": "Purge all caches", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pParseAllABPHideFiltersPrompt1": { + "message": "Parse and enforce cosmetic filters", + "description": "English: Parse and enforce Adblock+ element hiding filters." + }, + "3pParseAllABPHideFiltersInfo": { + "message": "Cosmetic filters serve to hide elements in a web page which are deemed to be a visual nuisance, and which cannot be blocked by the network request-based filtering engines.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + }, + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignore generic cosmetic filters", + "description": "This will cause uBO to ignore all generic cosmetic filters." + }, + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." + }, + "3pSuspendUntilListsAreLoaded": { + "message": "Suspend network activity until all filter lists are loaded", + "description": "A checkbox in the 'Filter lists' pane" + }, + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" + }, + "3pApplyChanges": { + "message": "Apply changes", + "description": "English: Apply changes" + }, + "3pGroupDefault": { + "message": "Built-in", + "description": "Filter lists section name" + }, + "3pGroupAds": { + "message": "Ads", + "description": "Filter lists section name" + }, + "3pGroupPrivacy": { + "message": "Privacy", + "description": "Filter lists section name" + }, + "3pGroupMalware": { + "message": "Malware domains", + "description": "Filter lists section name" + }, + "3pGroupSocial": { + "message": "Social widgets", + "description": "Filter lists section name" + }, + "3pGroupCookies": { + "message": "Cookie notices", + "description": "Filter lists section name" + }, + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "Filter lists section name" + }, + "3pGroupMultipurpose": { + "message": "Multi-purpose", + "description": "Filter lists section name" + }, + "3pGroupRegions": { + "message": "Regions, languages", + "description": "Filter lists section name" + }, + "3pGroupCustom": { + "message": "Custom", + "description": "Filter lists section name" + }, + "3pImport": { + "message": "Import…", + "description": "The label for the checkbox used to import external filter lists" + }, + "3pExternalListsHint": { + "message": "One URL per line. Invalid URLs will be silently ignored.", + "description": "Short information about how to use the textarea to import external filter lists by URL" + }, + "3pExternalListObsolete": { + "message": "Out of date.", + "description": "used as a tooltip for the out-of-date icon beside a list" + }, + "3pViewContent": { + "message": "view content", + "description": "used as a tooltip for eye icon beside a list" + }, + "3pLastUpdate": { + "message": "Last update: {{ago}}.\nClick to force an update.", + "description": "used as a tooltip for the clock icon beside a list" + }, + "3pUpdating": { + "message": "Updating…", + "description": "used as a tooltip for the spinner icon beside a list" + }, + "3pNetworkError": { + "message": "A network error prevented the resource from being updated.", + "description": "used as a tooltip for error icon beside a list" + }, + "1pTrustWarning": { + "message": "Do not add filters from untrusted sources.", + "description": "Warning against copy-pasting filters from random sources" + }, + "1pEnableMyFiltersLabel": { + "message": "Enable my custom filters", + "description": "Label for the checkbox use to enable/disable 'My filters' list" + }, + "1pTrustMyFiltersLabel": { + "message": "Allow custom filters requiring trust", + "description": "Label for the checkbox use to trust the content of 'My filters' list" + }, + "1pImport": { + "message": "Import and append", + "description": "Button in the 'My filters' pane" + }, + "1pExport": { + "message": "Export", + "description": "Button in the 'My filters' pane" + }, + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" + }, + "1pApplyChanges": { + "message": "Apply changes", + "description": "English: Apply changes" + }, + "rulesPermanentHeader": { + "message": "Permanent rules", + "description": "header" + }, + "rulesTemporaryHeader": { + "message": "Temporary rules", + "description": "header" + }, + "rulesRevert": { + "message": "Revert", + "description": "This will remove all temporary rules" + }, + "rulesCommit": { + "message": "Commit", + "description": "This will persist temporary rules" + }, + "rulesEdit": { + "message": "Edit", + "description": "Will enable manual-edit mode (textarea)" + }, + "rulesEditSave": { + "message": "Save", + "description": "Will save manually-edited content and exit manual-edit mode" + }, + "rulesEditDiscard": { + "message": "Discard", + "description": "Will discard manually-edited content and exit manual-edit mode" + }, + "rulesImport": { + "message": "Import from file…", + "description": "" + }, + "rulesExport": { + "message": "Export to file", + "description": "Button in the 'My rules' pane" + }, + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" + }, + "rulesHint": { + "message": "List of your dynamic filtering rules.", + "description": "English: List of your dynamic filtering rules." + }, + "rulesFormatHint": { + "message": "Rule syntax: source destination type action (full documentation).", + "description": "English: dynamic rule syntax and full documentation." + }, + "rulesSort": { + "message": "Sort:", + "description": "English: label for sort option." + }, + "rulesSortByType": { + "message": "Rule type", + "description": "English: a sort option for list of rules." + }, + "rulesSortBySource": { + "message": "Source", + "description": "English: a sort option for list of rules." + }, + "rulesSortByDestination": { + "message": "Destination", + "description": "English: a sort option for list of rules." + }, + "whitelistPrompt": { + "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line.", + "description": "A concise description of the 'Trusted sites' pane." + }, + "whitelistImport": { + "message": "Import and append", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExport": { + "message": "Export", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExportFilename": { + "message": "my-ublock-trusted-sites_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" + }, + "whitelistApply": { + "message": "Apply changes", + "description": "English: Apply changes" + }, + "logRequestsHeaderType": { + "message": "Type", + "description": "English: Type" + }, + "logRequestsHeaderDomain": { + "message": "Domain", + "description": "English: Domain" + }, + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" + }, + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" + }, + "logAll": { + "message": "All", + "description": "Appears in the logger's tab selector" + }, + "logBehindTheScene": { + "message": "Tabless", + "description": "Pretty name for behind-the-scene network requests" + }, + "loggerCurrentTab": { + "message": "Current tab", + "description": "Appears in the logger's tab selector" + }, + "loggerReloadTip": { + "message": "Reload the tab content", + "description": "Tooltip for the reload button in the logger page" + }, + "loggerDomInspectorTip": { + "message": "Toggle the DOM inspector", + "description": "Tooltip for the DOM inspector button in the logger page" + }, + "loggerPopupPanelTip": { + "message": "Toggle the pop-up panel", + "description": "Tooltip for the popup panel button in the logger page" + }, + "loggerInfoTip": { + "message": "uBlock Origin wiki: The logger", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Clear logger", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Pause logger (discard all incoming data)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Unpause logger", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Toggle logger filtering", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filter logger content", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Logger filtering options", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Not", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "blocked", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "allowed", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "modified", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "1st-party", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "3rd-party", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Details", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filter", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Filter list", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Rule", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Context", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Root context", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Partyness", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Type", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL rule", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Context:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Type:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Static filter", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Block", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Allow", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "type “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "any type", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "from “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "from anywhere", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "except when", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "even if", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Static filter {{filter}} found in:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Static filter could not be found in any of the currently enabled filter lists", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Logger entries which do not fulfil all three conditions below will be automatically discarded:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Preserve entries from the last {{input}} minutes", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Preserve at most {{input}} page loads per tab", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Preserve at most {{input}} entries per tab", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Use {{input}} lines per entry in vertically expanded mode", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Hide columns:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Time", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filter/rule", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Context", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Partyness", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "List", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Table", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Plain", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Open", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Documentation", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Read the documentation at uBlock/wiki to learn about all of uBlock Origin's features.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Questions and support", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Answers to questions and other kinds of help support is provided on the subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filter issues/website is broken", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Important: Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tips: Be sure your filter lists are up to date. The logger is the primary tool to diagnose filter-related issues.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Bug report", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Report issues with uBlock Origin itself to the uBlockOrigin/uBlock-issue issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Troubleshooting Information", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verify that the issue still exists after reloading the problematic webpage.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the web page:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The web page…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBlock Origin is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the web page as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Privacy policy", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Changelog", + "description": "" + }, + "aboutCode": { + "message": "Source code (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Contributors", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Source code", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Translations", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Filter lists", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "External dependencies (GPLv3-compatible):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO's own filter lists are freely hosted on the following CDNs:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "A randomly picked CDN is used when a filter list needs to be updated", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Back up to file", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Restore from file…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Reset to default settings…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "The data could not be read or is invalid", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Network error: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Subscribe", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "a minute ago", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} minutes ago", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "an hour ago", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} hours ago", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "a day ago", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} days ago", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Show Dashboard", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Show Logger", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "off", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Page blocked", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin has prevented the following page from loading:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Because of the following filter:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "without parameters", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Found in:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Go back", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Close this window", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Disable strict blocking for {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Temporarily", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Permanently", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Proceed", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Export to cloud storage", + "description": "tooltip" + }, + "cloudPull": { + "message": "Import from cloud storage", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Import from cloud storage and merge with current settings", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "This device name:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Warning! Change these advanced settings at your own risk.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Submit", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Apply changes", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Revert", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Block element in frame…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Subscribe to filter list…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Temporarily allow large media elements", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "View source code…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Type a shortcut", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Toggle locked scrolling", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Copy to clipboard", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Select all", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Toggle cosmetic filtering", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Toggle JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Relax blocking mode", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Storage used: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Click to load", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Errors: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" + } +} diff --git a/src/_locales/eo/messages.json b/src/_locales/eo/messages.json index 424806c12b24c..7e0f5538bf336 100644 --- a/src/_locales/eo/messages.json +++ b/src/_locales/eo/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Finfine rendimenta reklamoblokilo. Afabla por ĉefprocesoro kaj memoro.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Finfine rendimenta reklamoblokilo. Afabla por ĉefprocesoro kaj memoro.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Panelo", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Panelo", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Agordoj", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Averto! Vi havas nekonservitajn ŝanĝojn", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Filtriloj de eksteraj liverantoj", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Resti", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Miaj filtriloj", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ignori", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Miaj reguloj", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Agordoj", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Blanklisto", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Listoj de filtriloj", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Protokolilo", - "description":"Title for the logger window" + "1pPageName": { + "message": "Miaj filtriloj", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Pri", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Miaj reguloj", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Klako: malŝalti\/ŝalti uBlock₀ por ĉi tiu retejo.\n\nStir+klako: malŝalti uBlock₀ nur en ĉi tiu paĝo.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Permeslisto", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"blokitaj petoj", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Alirklavoj", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"en ĉi tiu paĝo", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Protokolilo", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} aŭ {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Pri", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"ekde instalado", - "description":"English: since install" + "supportPageName": { + "message": "Subteno", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"aŭ", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Montrilo de rimedoj", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Klaku por malfermi la panelon", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Altgradaj agordoj", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Malfermi reĝimon de elementoselektilo", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Klako: malŝalti/ŝalti uBlock₀ por ĉi tiu retejo.\n\nCtrl+klako: malŝalti uBlock₀ nur en ĉi tiu paĝo.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Malfermi la protokolilon", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Alklaku premante la stirklavo por malŝalti uBlock₀ nur en tiu ĉi retejo.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Baskuligi la blokadon de ŝprucfenestroj por ĉi tiu retejo", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Alklaku por aktivigi uBlock₀ en tiu ĉi retejo.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Baskuligi la blokadon de grandaj aŭdvideaj elementoj por ĉi tiu retejo", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "blokitaj petoj", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Baskuligi ornaman filtradon por ĉi tiu retejo", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "en ĉi tiu paĝo", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Baskuligi la blokadon de foraj tiparoj por ĉi tiu retejo", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} aŭ {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Ĝeneralaj reguloj: ĉi tiu kolumno estas por reguloj, kiuj aplikas al ĉiuj retejoj.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "ekde instalado", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Lokaj reguloj: ĉi tiu kolumno estas por reguloj, kiuj aplikas nur al la nuna retejo.\nLokaj reguloj transpasas ĝeneralajn regulojn.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "aŭ", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Klaku por fari viajn ŝanĝojn konstante.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Blokita ĉe ĉi tiu paĝo", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Klaku por malfari viajn ŝanĝojn.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Blokita ekde instalo", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"ĉio", - "description":"" + "popupDomainsConnected_v2": { + "message": "Konektitaj domajnoj", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"bildoj", - "description":"" + "popupTipDashboard": { + "message": "Klaku por malfermi la panelon", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"De eksteraj liverantoj", - "description":"" + "popupTipZapper": { + "message": "Eniri la reĝimon de forigo de elementoj", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"CSS\/bildoj de eksteraj liverantoj", - "description":"" + "popupTipPicker": { + "message": "Malfermi reĝimon de elementoselektilo", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"entekstaj skriptoj", - "description":"" + "popupTipLog": { + "message": "Malfermi la protokolilon", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"Skriptoj de propraj liverantoj", - "description":"" + "popupTipReport": { + "message": "Raporti problemon ĉe ĉi tiu retejo", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"Skriptoj de eksteraj liverantoj", - "description":"" + "popupTipNoPopups": { + "message": "Baskuligi la blokadon de ŝprucfenestroj por ĉi tiu retejo", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"Kadroj de eksteraj liverantoj", - "description":"" + "popupTipNoPopups1": { + "message": "Alklaku por bloki ĉiujn ŝprucfenestrojn en tiu ĉi retejo", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"konektitaj domajnoj", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Alklaku por ne plu bloki ĉiujn ŝprucfenestrojn en tiu ĉi retejo", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} de {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Baskuligi la blokadon de grandaj aŭdvideaj elementoj por ĉi tiu retejo", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Krei", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Alklaku por bloki grandajn aŭdvidajn elementojn en tiu ĉi retejo", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Elekti", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Alklaku por ne plu bloki grandajn aŭdvidajn elementojn en tiu ĉi retejo", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Forlasi", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Baskuligi ornaman filtradon por ĉi tiu retejo", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Antaŭrigardo", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Alklaku por malaktivigi kosmetikan filtradon en tiu ĉi retejo", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Retaj filtriloj", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Alklaku por aktivigi kosmetikan filtradon en tiu ĉi retejo", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Ornamaj filtriloj", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Baskuligi la blokadon de foraj tiparoj por ĉi tiu retejo", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Klako, Stir-klako", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Alklaku por bloki forajn tiparojn en tiu ĉi retejo", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Bloki elementon", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Alklaku por ne plu bloki forajn tiparojn en tiu ĉi retejo", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Kaŝi lokokupilojn de blokitaj elementoj", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Alklaku por malaktivigi JavaScript en tiu ĉi retejo", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Montri la nombron de la blokitaj petoj sur la bildsimbolo", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Alklaku por ne plu malaktivigi JavaScript en tiu ĉi retejo", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Malŝalti butonajn informojn", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Ŝprucfenestroj", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Uzi kuntekstan menuon laŭeble", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Grandaj aŭdvidaj elementoj", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Afabla por kolorblinduloj", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Ornama filtrado", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Ŝalti subtenon por nelokdependa konservado", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Foraj tiparoj", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Mi estas sperta uzanto (Nepra legaĵo<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Malŝalti antaŭvenigadon (por preventi ajnan konekton de blokitaj retaj petoj)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Pli", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Malŝalti ekzamenadon de ligiloj", - "description":"English: " + "popupLessButton_v2": { + "message": "Malpli", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Preventi likado de WebRTC de lokaj IP-adresoj", - "description":"English: " + "popupTipGlobalRules": { + "message": "Ĝeneralaj reguloj: ĉi tiu kolumno estas por reguloj, kiuj aplikas al ĉiuj retejoj.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Defaŭlta konduto", - "description":"" + "popupTipLocalRules": { + "message": "Lokaj reguloj: ĉi tiu kolumno estas por reguloj, kiuj aplikas nur al la nuna retejo.\nLokaj reguloj transpasas ĝeneralajn regulojn.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Tiuj defaŭltaj kondutoj povas esti transpasitaj por ĉiuj retejoj", - "description":"" + "popupTipSaveRules": { + "message": "Klaku por fari viajn ŝanĝojn konstante.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Malŝalti ornaman filtradon", - "description":"" + "popupTipRevertRules": { + "message": "Klaku por malfari viajn ŝanĝojn.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Bloki aŭdvideajn elementojn pli granda ol {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "ĉio", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Bloki forajn tiparojn", - "description":"" + "popupImageRulePrompt": { + "message": "bildoj", + "description": "" }, - "settingsStorageUsed":{ - "message":"Uzata konservado: {{value}} bitokoj", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "De eksteraj liverantoj", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Lasta restaŭro:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "CSS/bildoj de eksteraj liverantoj", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Lasta savkopio:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "entekstaj skriptoj", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} retaj filtriloj kaj {{cosmeticFilterCount}} ornamaj filtriloj de:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "Skriptoj de propraj liverantoj", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} estas uzita de {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "Skriptoj de eksteraj liverantoj", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Ĝisdatigi listojn de filtriloj aŭtomate.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "Kadroj de eksteraj liverantoj", + "description": "" }, - "3pUpdateNow":{ - "message":"Ĝisdatigi nun", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "konektitaj domajnoj", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Malplenigi ĉiujn kaŝmemorojn", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} de {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Analizi kaj eltrudi ornamajn filtrilojn.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Versio", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Ĉi tiu opcio ŝaltas la analizadon kaj eltrudadon de la Adblock Plus-kongruaj “elementokaŝadaj” filtriloj<\/a>. Ĉi tiuj filtriloj estas nur ornama kaj servas por kaŝi elementojn en retpaĝoj kiuj estas opiniite vidaj ĝenaĵoj kaj ne blokeblaj de la reta peta filtrado.<\/p>

      Ŝalti ĉi tiun trajton pligrandigas la memoruzadon de uBlock₀.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "skripto", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignori ĝeneralajn ornamajn filtrilojn", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "kadro", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites.

      Though handled efficiently by uBlock₀, generic cosmetic filters may still contribute measurable memory and CPU overhead on some web pages, especially for large and long-lived ones.

      Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters, and also lower the memory footprint of uBlock₀ itself.

      It is recommended to enable this option on less powerful devices.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Krei", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lists of blocked hosts", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Elekti", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Apliki ŝanĝojn", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Forlasi", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Reklamoj", - "description":"English: Ads" + "pickerPreview": { + "message": "Antaŭrigardo", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Privateco", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Retaj filtriloj", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Domajno kun fiprogramaro", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Ornamaj filtriloj", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Interkona retejo", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Klako, Stir-klako", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Plurcela", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Bloki elementon", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Regionoj, lingvoj", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Kaŝi lokokupilojn de blokitaj elementoj", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Tajlorita", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Montri la nombron de la blokitaj petoj sur la bildsimbolo", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Unu regulo por ĉiu linio. Prefiksitaj linioj kun ‘!’ estos ignorataj. Nevalidaj ligiloj estos ignorataj silente.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Malŝalti butonajn informojn", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Analizi", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Uzi kuntekstan menuon laŭeble", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"malplenigi kaŝmemoron", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Afabla por kolorblinduloj", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"nova versio estas disponebla", - "description":"English: new version available" + "settingsAppearance": { + "message": "Aspekto", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"malaktuala", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Etoso", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Lasta ĝisdatigo: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Propra akcenta koloro", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Unu filtrilo por ĉiu linio. Filtrilo povas esti ordinara gastignomo aŭ Adblock Plus-kongrua filtrilo. Prefiksitaj linioj kun ‘!’ estos ignorataj.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Ŝalti subtenon por nelokdependa konservado", + "description": "" }, - "1pImport":{ - "message":"Importi kaj postaldoni", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Mi estas sperta uzanto", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Eksporti", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Malŝalti antaŭvenigadon (por preventi ajnan konekton de blokitaj retaj petoj)", + "description": "English: " }, - "1pExportFilename":{ - "message":"miaj-statikaj-ublock-filtriloj_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Malŝalti ekzamenadon de ligiloj", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Apliki ŝanĝojn", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Preventi likado de WebRTC de lokaj IP-adresoj", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Daŭraj reguloj", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Norma konduto", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Nedaŭraj reguloj", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Oni povas superregi la normajn kondutojn depende de la retejo", + "description": "" }, - "rulesRevert":{ - "message":"Malfari", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Malŝalti ornaman filtradon", + "description": "" }, - "rulesCommit":{ - "message":"Apliki", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Bloki aŭdvideajn elementojn pli granda ol {{input:number}} kB", + "description": "" }, - "rulesEdit":{ - "message":"Redakti", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Bloki forajn tiparojn", + "description": "" }, - "rulesEditSave":{ - "message":"Konservi", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Malŝalti JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Nuligi", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Bloki CSP-raportojn", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Importi el dosiero...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Malkaŝi ĉefnomojn", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Eksporti al dosiero", - "description":"" + "settingsAdvanced": { + "message": "Altnivelaĵoj", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"miaj-dinamikaj-ublock-reguloj_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Funkcioj taŭgaj nur por spertuloj", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Listo de viaj dinamikaj filtradaj reguloj.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "altgradaj agordoj", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Sintakso de reguloj: fonto celo tipo ago<\/code> (kompleta dokumentado<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Lasta restaŭro:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Via listo de gastignomoj por kiuj uBlock₀ estos malŝaltata. Unu gastignomo por ĉiu linio. Nevalidaj gastignomoj estos ignorataj silente.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Lasta savkopio:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Importi kaj postaldoni", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} retaj filtriloj kaj {{cosmeticFilterCount}} ornamaj filtriloj de:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Eksporti", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} estas uzita de {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"mia-ublock-blanklisto_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Ĝisdatigi listojn de filtriloj aŭtomate.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Apliki ŝanĝojn", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Ĝisdatigi nun", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Tipo", - "description":"English: Type" + "3pPurgeAll": { + "message": "Malplenigi ĉiujn kaŝmemorojn", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Domajno", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Analizi kaj eltrudi ornamajn filtrilojn.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"Ligilo", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "

      Ĉi tiu opcio ŝaltas la analizadon kaj eltrudadon de la Adblock Plus-kongruaj “elementokaŝadaj” filtriloj. Ĉi tiuj filtriloj estas nur ornama kaj servas por kaŝi elementojn en retpaĝoj kiuj estas opiniite vidaj ĝenaĵoj kaj ne blokeblaj de la reta peta filtrado.

      Ŝalti ĉi tiun trajton pligrandigas la memoruzadon de uBlock₀.

      ", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filtrilo", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignori ĝeneralajn ornamajn filtrilojn", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Ĉio", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Ĝenerikaj kozmetikaj filtriloj estas tiuj kozmetikaj filtriloj, kiuj estas intencitaj esti aplikitaj sur ĉiuj retejoj. Aktivigante tiun opcion, oni eliminigos la memoran kaj procesorecan ŝarĝon, kiu estas aldonita al retpaĝoj pro la pritraktado de ĝenerikaj kozmetikaj filtriloj.\n\nEstas rekomendite aktivigi tiun opcion sur aparatoj ne estas potencaj.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Fonaj petoj", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Suspendu retan aktivecon ĝis ĉiuj filtraj listoj estas ŝargitaj.", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"filtri protokolerojn", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Maksimuma nombro de protokoleroj", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Apliki ŝanĝojn", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Kunteksto:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Interna", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tipo:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Reklamoj", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Dinamika filtrado de ligiloj", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Privateco", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Statika filtrado", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Domajno kun fiprogramaro", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} retaj petoj de {{type}} {{br}}kiu ligilo estas la sama kiel {{url}} {{br}}kaj kiu devenas el {{origin}},{{br}}{{importance}} estas kongrua escepta filtrilo.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Socialaj fenestraĵoj", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Bloki", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Avizoj de kuketoj", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Permesi", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Ĝenoj", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tipo “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Plurcela", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"ajna tipo", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Regionoj, lingvoj", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"de “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Tajlorita", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"de ie ajn", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Importi...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"krom se", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Unu regulo por ĉiu linio. Prefiksitaj linioj kun ‘!’ estos ignorataj. Nevalidaj ligiloj estos ignorataj silente.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"eĉ se", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "malaktuala", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statika filtrilo {{filter}} estas trovita en:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "vidi enhavon", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Ŝanĝoprotokolo", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Lasta ĝisdatigo: {{ago}}", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Vikio", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Ĝisdatigo...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Support", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Reta eraro malhelpis ĝisdatigon de la resurso.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Fontkodo (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Ne aldonu filtrilojn el ne fidindaj fontoj.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Kontribuantoj", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Ŝalti miajn proprajn filtrilojn", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Savkopii al dosiero", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Permesi proprajn filtrilojn, kiuj postulas fidon", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"mia-ublock-savkopio_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Importi kaj postaldoni", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Restaŭri el dosiero...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Eksporti", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Rekomencigi al defaŭltaj agordoj...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "miaj-statikaj-ublock-filtriloj_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Ĉiuj viaj agordoj estos anstataŭigitaj per via savkopio kreita je {{time}} kaj uBlock₀ restartigos.\n\nĈu vi volas anstataŭigi ĉiujn de viaj ekzistantaj agordoj uzita la savkopio?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Apliki ŝanĝojn", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"La datumoj ne legeblas aŭ ĝi estas nevalida", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Daŭraj reguloj", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Ĉiuj viaj agordoj estos forigita kaj uBlock₀ restartigos.\n\nĈu vi volas reagordi uBlock₀ al la defaŭltaj agordoj?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Nedaŭraj reguloj", + "description": "header" }, - "errorCantConnectTo":{ - "message":"{{url}} ne konekteblas", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Malfari", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Ĉu vi volas aldoni la sekvan ligilon al viaj tajloritaj listoj de filtriloj?\n\nTitolo: \"{{title}}\"\nLigilo: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Apliki", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"antaŭ 1 minuto", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Redakti", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"antaŭ {{value}} minutoj", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Konservi", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"antaŭ 1 horo", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Nuligi", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"antaŭ {{value}} horoj", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Importi el dosiero...", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"antaŭ 1 tago", - "description":"English: a day ago" + "rulesExport": { + "message": "Eksporti al dosiero", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"antaŭ {{value}} tagoj", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "miaj-dinamikaj-ublock-reguloj_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Montri panelon", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Listo de viaj dinamikaj filtradaj reguloj.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Montri protokolilon", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Sintakso de reguloj: fonto celo tipo ago (kompleta dokumentado).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"ne aktiva", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Ordigi:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock₀ preventis la ŝarĝadon de la sekva paĝo:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Speco de regulo", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Pro la sekva filtrilo", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Fonto", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"sen parametroj", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Celo", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Trovita en:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Via listo de gastignomoj por kiuj uBlock₀ estos malŝaltata. Unu gastignomo por ĉiu linio. Nevalidaj gastignomoj estos ignorataj silente.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Reen", - "description":"English: Go back" + "whitelistImport": { + "message": "Importi kaj postaldoni", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Fermi ĉi tiun fenestron", - "description":"English: Close this window" + "whitelistExport": { + "message": "Eksporti", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Malŝalti striktan blokadon por {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "mia-ublock-blanklisto_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Nedaŭra", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Apliki ŝanĝojn", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Daŭra", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Tipo", + "description": "English: Type" }, - "cloudPush":{ - "message":"Eksporti al nuba konservado", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Domajno", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Importi el nuba konservado", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "Ligilo", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Importi el nuba konservado kaj kunfandi kun nunaj agordoj", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filtrilo", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Ĉio", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Nomo de ĉi tiu aparato:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Fonaj petoj", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Sendi", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Nuna langeto", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Malfari", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Reŝargi la langetan enhavon", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"bitokoj", - "description":"" + "loggerDomInspectorTip": { + "message": "Baskuligi la DOM-inspektilon", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Permesi grandajn aŭdvideajn elementojn nedaŭre", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Baskuligi la ŝprucpanelon", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "Dokumentaro de uBlock Origin: la protokolilo", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Klariĝi protokolilon", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Paŭzigi protokolilon (forĵeti ĉiujn envenantajn datenojn)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Malpaŭzigi protokolilon", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Baskuligi filtradon de protokolilo", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filtri protokolerojn", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Opcioj pri filtrado de protokolilo", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Ne", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "blokita", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "permesata", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "modifita", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "rekta", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "nerekta", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Detaloj", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filtrilo", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Listo de filtriloj", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Regulo", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Kunteksto", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Ĉefa kunteksto", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Nivelo de rekteco", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Tipo", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "Retadreso", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Dinamika filtrado de ligiloj", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Kunteksto:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Tipo:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Statika filtrado", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} retaj petoj de {{type}} {{br}}kiu ligilo estas la sama kiel {{url}} {{br}}kaj kiu devenas el {{origin}},{{br}}{{importance}} estas kongrua escepta filtrilo.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Bloki", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Permesi", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "tipo “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "ajna tipo", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "de “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "de ie ajn", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "krom se", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "eĉ se", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Statika filtrilo {{filter}} estas trovita en:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Stata filtro ne povis esti trovita en iu ajn el la nuntempe aktivigitaj filtro-listoj.", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Logeto-enskriboj, kiuj ne plenumas ĉiujn tri kondiĉojn sube, estos aŭtomate forĵetitaj:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Konservi enigojn ekde la lastaj {{input}} minutoj", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Preserve at most {{input}} page loads per tab", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Preserve at most {{input}} entries per tab", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Use {{input}} lines per entry in vertically expanded mode", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Kaŝi kolumnojn:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} tempo", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} filtrilo/regulo", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} kunteksto", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} rekteco", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Listo", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tabulo", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Simpla", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Malfermi", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Krei novan raporton", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Serĉi similajn raportojn", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Dokumentaro", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Legu la dokumentaron ĉe uBlock/wiki por lerni ĉiujn funkciojn de uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Demandoj kaj subtenado", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Answers to questions and other kinds of help support is provided on the subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Problemoj pri filtrilo / la retejo misfunkcias", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Raportu problemojn pri specifaj retejoj ĉe la cimspurilo uBlockOrigin/uAssets. Tio postulas konton ĉe GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Important: Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tips: Be sure your filter lists are up to date. The logger is the primary tool to diagnose filter-related issues.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Raporto pri cimo", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Raportu problemojn pri uBlock Origin mem ĉe la cimspurilo uBlockOrigin/uBlock-issue. Tio postulas konton ĉe GitHub.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Informoj pri problemsolvado", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Jen teknikaj informoj eble utilaj al tiuj volontuloj, kiuj helpas vin solvi problemon.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Raporti problemon pri filtrado", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported. Note: clicking the button will cause the page's origin to be sent to GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verify that the issue still exists after reloading the problematic web page.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Adreso de la retpaĝo:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "La retpaĝo…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Elektu ion --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Montras reklamojn aŭ restaĵojn de reklamoj", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Havas plustavolojn aŭ aliajn ĝenaĵojn", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detektas uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Havas problemojn pri privateco", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Misfunkcias, se uBlock Origin estas ŝaltita ", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Malfermas nedeziratajn langetojn aŭ fenestrojn", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Marki la paĝon kiel «nelabortaŭgan»", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Reguloj pri privateco", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Ŝanĝoprotokolo", + "description": "" + }, + "aboutCode": { + "message": "Fontkodo (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Kontribuantoj", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Fontkodo", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Tradukoj", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Listoj de filtriloj", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Eksteraj dependaĵoj (kongruaj kun GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "La proprajn filtrilojn de uBO gastigas la jenaj enhavo-liverantaj retoj:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Kiam filtrilo postulas ĝisdatigon, hazarde elektita enhavo-liveranta reto estas uzata.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Savkopii al dosiero", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "mia-ublock-savkopio_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Restaŭri el dosiero...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Remeti normajn agordojn...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Ĉiuj viaj agordoj estos anstataŭigitaj per via savkopio kreita je {{time}} kaj uBlock₀ restartigos.\n\nĈu vi volas anstataŭigi ĉiujn de viaj ekzistantaj agordoj uzita la savkopio?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "La datumoj ne legeblas aŭ ĝi estas nevalida", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Ĉiuj viaj agordoj estos forigita kaj uBlock₀ restartigos.\n\nĈu vi volas reagordi uBlock₀ al la defaŭltaj agordoj?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "{{url}} ne konekteblas", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Sekvi", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "antaŭ 1 minuto", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "antaŭ {{value}} minutoj", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "antaŭ 1 horo", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "antaŭ {{value}} horoj", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "antaŭ 1 tago", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "antaŭ {{value}} tagoj", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Montri panelon", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Montri protokolilon", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "ne aktiva", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Paĝo blokita", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock₀ preventis la ŝarĝadon de la sekva paĝo:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Pro la sekva filtrilo", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "sen parametroj", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Trovita en:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Reen", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Fermi ĉi tiun fenestron", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Malŝalti striktan blokadon por {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Nedaŭra", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Daŭra", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Procedi", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Eksporti al nuba konservado", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importi el nuba konservado", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importi el nuba konservado kaj kunfandi kun nunaj agordoj", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Nomo de ĉi tiu aparato:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Averto! Tiuj altnivelaj opcioj esta eble danĝeraj.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Sendi", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Apliki ŝanĝojn", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Malfari", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bajtoj", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Bloki elementon en kadro…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Aboni filtrilon…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Permesi grandajn aŭdvideajn elementojn nedaŭre", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Vidi fontkodon...", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Tajpu alirklavon", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Baskuligi ŝlositan rulumadon", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Kopii al tondujo", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Elekti ĉiujn", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Baskuligi ornaman filtradon", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Baskuli Javascript-kodoj", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Malstriktigi blokadan reĝimon", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Uzata memoro: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "kB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Alklaku por ŝarĝi", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Eraroj: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/es/messages.json b/src/_locales/es/messages.json index 048092e3613c3..56f4d164cb3c7 100644 --- a/src/_locales/es/messages.json +++ b/src/_locales/es/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Por fin, un bloqueador eficiente con uso mínimo de procesador y memoria.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Por fin, un bloqueador eficiente con uso mínimo de procesador y memoria.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Panel de control", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Panel de control", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Configuración", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "¡Atención! Tienes cambios sin guardar", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Filtros de terceros", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Conservar", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Mis filtros", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ignorar", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Mis reglas", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Configuración", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Lista blanca", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Listas de filtros", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Registro de peticiones de red", - "description":"Title for the logger window" + "1pPageName": { + "message": "Mis filtros", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Acerca de", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Mis reglas", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Clic: desactivar\/activar uBlock₀ para este sitio.\n\nCtrl + clic: deshabilitar uBlock₀ sólo en esta página.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Sitios de confianza", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"peticiones bloqueadas", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Atajos", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"en esta página", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Registro de peticiones", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} o {{percent}} %", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Acerca de", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"desde que se instaló", - "description":"English: since install" + "supportPageName": { + "message": "Soporte", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"o", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Visor de recursos", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Clic para abrir el panel de control", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Configuración avanzada", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Entrar al modo de selección de elementos", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Clic: deshabilitar/habilitar uBlock₀ en este sitio.\n\nCtrl+clic: deshabilitar uBlock₀ solo en esta página.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Ir al registro de peticiones", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Clic para deshabilitar uBlock₀ en este sitio.\n\nCtrl+clic para deshabilitar uBlock₀ solo en esta página.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Alternar bloqueo de todos los pop-ups para este sitio", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Clic para habilitar uBlock₀ en este sitio.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Alternar bloqueo de elementos multimedia grandes para este sitio", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "peticiones bloqueadas", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Alternar filtros cosméticos para este sitio", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "en esta página", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Alternar bloqueo de fuentes remotas para este sitio", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} o {{percent}} %", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Reglas globales: las reglas en esta columna se aplican a todos los sitios.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "desde que se instaló", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Reglas locales: las reglas en esta columna aplican solo al sitio actual.\nLas reglas locales tienen preferencia sobre las reglas globales.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "o", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Haga clic para hacer sus cambios permanentes.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Bloqueado en esta página", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Haga clic para revertir sus cambios.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Bloqueado desde que se instaló", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"todo", - "description":"" + "popupDomainsConnected_v2": { + "message": "Dominios conectados", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"Imágenes", - "description":"" + "popupTipDashboard": { + "message": "Abrir panel de control", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"De terceros", - "description":"" + "popupTipZapper": { + "message": "Entrar al modo eliminación de elementos", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"css\/imágenes de terceros", - "description":"" + "popupTipPicker": { + "message": "Entrar al modo selección de elementos", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"Scripts embebidos", - "description":"" + "popupTipLog": { + "message": "Ir al registro de peticiones", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"Scripts del dominio", - "description":"" + "popupTipReport": { + "message": "Reportar un problema en este sitio web", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"Scripts de terceros", - "description":"" + "popupTipNoPopups": { + "message": "Alternar bloqueo de todas las ventanas emergentes en este sitio", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"Frames de terceros", - "description":"" + "popupTipNoPopups1": { + "message": "Clic para bloquear todas las ventanas emergentes en este sitio", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"dominios conectados", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Clic para no bloquear más todas las ventanas emergentes en este sitio", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} de {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Alternar bloqueo de elementos multimedia grandes en este sitio", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Crear", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Clic para bloquear elementos multimedia grandes en este sitio", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Elegir", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Clic para no bloquear más elementos multimedia grandes en este sitio", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Salir", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Alternar el filtrado cosmético en este sitio", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Vista previa", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Clic para deshabilitar el filtrado cosmético en este sitio", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Filtros de red", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Clic para habilitar el filtrado cosmético en este sitio", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Filtros cosméticos", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Alternar bloqueo de fuentes remotas en este sitio", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Clic, Ctrl-clic", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Clic para bloquear fuentes remotas en este sitio", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Bloquear elemento", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Clic para no bloquear más fuentes remotas en este sitio", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Ocultar marcadores de posición de los elementos bloqueados", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Clic para deshabilitar JavaScript en este sitio", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Mostrar el número de peticiones bloqueadas en el icono", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Clic para no deshabilitar más JavaScript en este sitio", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Deshabilitar las descripciones emergentes", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Ventanas emergentes", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Hacer uso del menú contextual cuando sea posible", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Elementos multimedia grandes", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Accesible para daltónicos", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Filtrado cosmético", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Habilitar almacenamiento en la nube", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Fuentes remotas", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Soy usuario avanzado ( Lectura obligatoria<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Deshabilitar pre-carga de sitios (previene cualquier conexión para peticiones de red bloqueadas)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Más", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Deshabilitar auditoría de hipervínculos", - "description":"English: " + "popupLessButton_v2": { + "message": "Menos", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Impedir que WebRTC divulgue la dirección IP local", - "description":"English: " + "popupTipGlobalRules": { + "message": "Reglas globales: las reglas en esta columna se aplican a todos los sitios.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Comportamiento predeterminado", - "description":"" + "popupTipLocalRules": { + "message": "Reglas locales: las reglas en esta columna se aplican solo al sitio actual.\nLas reglas locales anulan las reglas globales.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Es posible anular el comportamiento predeterminado para cada sitio", - "description":"" + "popupTipSaveRules": { + "message": "Haz clic para hacer tus cambios permanentes.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Deshabilitar filtros cosméticos", - "description":"" + "popupTipRevertRules": { + "message": "Haz clic para revertir tus cambios.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Bloquear elementos multimedia mayores que {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "todo", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Bloquear fuentes remotas", - "description":"" + "popupImageRulePrompt": { + "message": "imágenes", + "description": "" }, - "settingsStorageUsed":{ - "message":"Almacenamiento usado: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "peticiones de terceros", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Última restauración:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "CSS/imágenes de terceros", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Último respaldo:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "scripts integrados", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} filtros de red y {{cosmeticFilterCount}} filtros cosméticos de:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "scripts del dominio", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} de {{total}} utilizados", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "scripts de terceros", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Actualizar automáticamente la lista de filtros.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "frames de terceros", + "description": "" }, - "3pUpdateNow":{ - "message":"Actualizar ahora", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "dominios conectados", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Vaciar todas las memorias caché", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} de {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Analizar y aplicar filtros cosméticos.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Versión", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Esta opción permite el análisis y aplicación de “filtros de ocultación de elementos” compatibles con Adblock Plus\"<\/a>. Estos filtros son esencialmente cosméticos, sirven para ocultar elementos que se consideran una molestia visual en una página web, no siendo posible su eliminación con el motor de bloqueo basado en peticiones.<\/p>

      Habilitar esta opción aumenta el consumo de memoria de uBlock₀<\/i>.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignorar los filtros cosméticos genéricos", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "frame", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Los filtros cosméticos genéricos son aquellos filtros cosméticos que aplican a todas las páginas.

      Aunque Block₀ los gestiona de forma eficiente, estos filtros pueden contribuir a un aumento del uso de la memoria y la CPU en algunas páginas web, especialmente si contienen gran cantidad de contenido.

      Al habilitar esta opción se disminuirá el uso de la CPU y exceso de uso de la memoria que resulta del procesamiento de los filtros cosméticos genéricos, así como el consumo de memoria de uBlock₀.

      Se recomienda habilitar esta opción para dispositivos poco potentes.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Crear", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lista de servidores bloqueados", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Elegir", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Aplicar cambios", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Salir", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Anuncios", - "description":"English: Ads" + "pickerPreview": { + "message": "Vista previa", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Privacidad", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Filtros de red", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Dominios de malware", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Filtros cosméticos", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Social", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Clic, Ctrl-clic", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Multiusos", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Bloquear elemento…", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Regiones, idiomas", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Ocultar marcadores de posición de los elementos bloqueados", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Personalizada", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Mostrar el número de peticiones bloqueadas en el icono", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Una URL por línea. Las líneas que empiezan con ‘!’ serán ignoradas. Se omitirán las URL no válidas.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Deshabilitar las descripciones emergentes", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Aplicar", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Hacer uso del menú contextual cuando sea posible", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"vaciar caché", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Accesible para daltónicos", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"nueva versión disponible", - "description":"English: new version available" + "settingsAppearance": { + "message": "Apariencia", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"desactualizado", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Tema", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Última actualización: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Tono de color personalizado", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Un filtro por línea. Los filtros pueden ser un nombre de servidor, o un filtro compatible con Adblock Plus. Las líneas que comiencen con ‘!’ serán ignoradas.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Habilitar almacenamiento en la nube", + "description": "" }, - "1pImport":{ - "message":"Importar y anexar", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Soy usuario avanzado", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Exportar", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Deshabilitar pre-carga de sitios (previene cualquier conexión para peticiones de red bloqueadas)", + "description": "English: " }, - "1pExportFilename":{ - "message":"ublock-mis-filtros-estaticos_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Deshabilitar auditoría de hipervínculos", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Aplicar cambios", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Impedir que WebRTC divulgue la dirección IP local", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Reglas permanentes", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Comportamiento predeterminado", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Reglas temporales", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Es posible anular el comportamiento predeterminado para cada sitio", + "description": "" }, - "rulesRevert":{ - "message":"Revertir", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Deshabilitar el filtrado cosmético", + "description": "" }, - "rulesCommit":{ - "message":"Establecer", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Bloquear elementos multimedia mayores que {{input}} KB", + "description": "" }, - "rulesEdit":{ - "message":"Editar", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Bloquear fuentes remotas", + "description": "" }, - "rulesEditSave":{ - "message":"Guardar", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Deshabilitar JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Descartar", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Bloquear reportes CSP", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Importar desde archivo...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Desvelar nombres canónicos", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Exportar a archivo", - "description":"" + "settingsAdvanced": { + "message": "Avanzado", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"ublock-mis-reglas-dinamicas_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Características aptas solo para usuarios técnicos", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Listado de sus reglas de filtrado dinámico.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "configuración avanzada", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Sintaxis de las reglas: origen destino tipo acción<\/code> ( documentación completa<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Última restauración:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Lista de nombres de servidores para los cuales se deshabilitará uBlock₀. Una entrada por línea. Se omitirán nombres de servidores no válidos.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Último respaldo:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Importar y anexar", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} filtros de red y {{cosmeticFilterCount}} filtros cosméticos de:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Exportar", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} utilizados de {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"ublock-mi-lista-de-permitidos_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Actualizar automáticamente las listas de filtros", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Aplicar cambios", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Actualizar ahora", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Tipo", - "description":"English: Type" + "3pPurgeAll": { + "message": "Vaciar todas las memorias caché", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Dominio", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Analizar y aplicar filtros cosméticos", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Los filtros cosméticos sirven para ocultar elementos que se consideran una molestia visual en una página web, y que no pueden ser bloqueados por los motores de filtrado basados ​​en peticiones de red.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filtro", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignorar los filtros cosméticos genéricos", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Todas", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Los filtros cosméticos genéricos son aquellos filtros cosméticos que se aplican a todos los sitios web. Al habilitar esta opción se elimina el riesgo de sobrecarga a la CPU y exceso de uso de la memoria que resulta del procesamiento de los filtros cosméticos genéricos.\n\nSe recomienda habilitar esta opción en dispositivos poco potentes.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Peticiones ocultas", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Suspender actividad de la red hasta que todas las listas de filtros estén cargadas", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"filtrar entradas del registro", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Lista de dominios bloqueados", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Cantidad máxima de entradas del registro", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Aplicar cambios", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Contexto:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Incluidos", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tipo:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Anuncios", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Filtrado dinámico de URL", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Privacidad", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Filtrado estático", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Protección de malware, seguridad", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} peticiones de red tipo {{type}} {{br}}cuya dirección URL contenga {{url}} {{br}}y que se originen desde {{origin}},{{br}}{{importance}} exista una regla de excepción aplicable.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Widgets sociales", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Bloquear", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Avisos de cookies", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Permitir", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Elementos molestos", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tipo “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Multiusos", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"cualquier tipo", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Regiones, idiomas", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"desde “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Personalizado", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"desde cualquier lugar", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Importar…", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"excepto cuando", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Una URL por línea. Las URL no válidas serán ignoradas.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"incluso cuando", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Desactualizado.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Filtro estático {{filter}} encontrado en:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "ver contenido", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Registro de cambios", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Última actualización: {{ago}}.\nHaz clic para actualizar ahora.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Actualizando…", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Soporte", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Un error de red impide que se actualicen los recursos.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Código fuente (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "No añadas filtros de fuentes no confiables.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Colaboradores", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Habilitar mis filtros personalizados", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Respaldar en archivo...", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Permitir filtros personalizados que requieran confianza", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"ublock-respaldo_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Importar y anexar…", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Restaurar desde archivo...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Exportar…", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Restablecer ajustes predeterminados...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "ublock-mis-filtros-estaticos_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Toda la configuración se sobrescribirá utilizando datos respaldados en {{time}} y uBlock₀ se reiniciará. \n\n¿Sobrescribir toda la configuración existente utilizando datos de la copia de seguridad?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Aplicar cambios", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Los datos no se pueden leer o son inválidos", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Reglas permanentes", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Se borrará toda la configuración y uBlock₀ se reiniciará.\n\n¿Restaurar uBlock₀ a la configuración por defecto?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Reglas temporales", + "description": "header" }, - "errorCantConnectTo":{ - "message":"No se puede conectar a {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Revertir", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: ¿Desea añadir la siguiente dirección a su lista de filtros personalizados?\n\nTítulo: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Establecer", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"hace un minuto", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Editar", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"hace {{value}} minutos", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Guardar", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"hace 1 hora", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Descartar", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"hace {{value}} horas", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Importar desde archivo…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"hace un día", - "description":"English: a day ago" + "rulesExport": { + "message": "Exportar a archivo…", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"hace {{value}} días", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "ublock-mis-reglas-dinamicas_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Mostrar Panel de Control", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Lista de tus reglas de filtrado dinámico.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Mostrar Registro", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Sintaxis de las reglas: origen destino tipo acción (documentación completa).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"desactivado", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Ordenar:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin impidió la carga de la página:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Tipo de regla", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Como resultado del siguiente filtro:", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Fuente", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"sin parámetros", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Destino", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Encontrado en:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Sitios de confianza para los cuales se deshabilitará uBlock Origin. Una entrada por línea.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Regresar", - "description":"English: Go back" + "whitelistImport": { + "message": "Importar y anexar…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Cerrar esta ventana", - "description":"English: Close this window" + "whitelistExport": { + "message": "Exportar…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Deshabilitar bloqueo estricto para {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "ublock-mis-sitios-de-confianza_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Temporalmente", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Aplicar cambios", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Permanentemente", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Tipo", + "description": "English: Type" }, - "cloudPush":{ - "message":"Exportar datos a la nube", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Dominio", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Importar datos de la nube", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Importar desde la nube y anexar a la configuración actual", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filtro", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Todo", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Nombre de este dispositivo:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Sin pestaña", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Enviar", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Pestaña actual", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Revertir", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Recargar contenido de la pestaña", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"bytes", - "description":"" + "loggerDomInspectorTip": { + "message": "Alternar el inspector DOM", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Permitir temporalmente elementos multimedia grandes", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Alternar el panel emergente", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"Esta entrada debe ser la última", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: Registro de peticiones", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Borrar el registro de peticiones", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Pausar registro de peticiones (descarta todos los datos entrantes)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Continuar con el registro de peticiones", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Alternar el filtrado del registro de peticiones", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filtrar contenido", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Opciones de filtrado del registro de peticiones", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "No", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "destacado", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "bloqueado", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "permitido", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "modificado", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "petición del dominio", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "petición de tercero", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Detalles", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filtro", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Lista de filtros", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Regla", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Contexto", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Contexto raíz", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Tipo de petición", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Tipo", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Regla de URL", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Contexto:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Tipo:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Filtro estático", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} peticiones de red de {{type}} {{br}}cuya dirección URL contenga {{url}} {{br}}y que se origine {{origin}},{{br}}{{importance}} exista una regla de excepción aplicable.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Bloquear", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Permitir", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "tipo “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "cualquier tipo", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "desde “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "desde cualquier lugar", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "excepto cuando", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "incluso cuando", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Filtro estático {{filter}} encontrado en:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "No se pudo encontrar el filtro estático en ninguna de las listas de filtros actualmente habilitadas", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Las entradas del registro de peticiones que no cumplan las tres condiciones a continuación se descartarán automáticamente:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Conservar entradas de los últimos {{input}} minutos", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Conservar como máximo {{input}} cargas de página por pestaña", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Conservar como máximo {{input}} entradas por pestaña", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Usar {{input}} líneas por entrada en modo expandido verticalmente", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Ocultar columnas:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Hora", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filtro/regla", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Contexto", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Tipo de petición", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Lista", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tabla", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Sin formato", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Formato markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Abrir", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Crear nuevo reporte en GitHub", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Encontrar reportes similares en GitHub", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Documentación", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Lee la documentación en uBlock/wiki para aprender sobre todas las características de uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Preguntas y soporte", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Respuestas a preguntas y otros tipos de ayuda se proporcionan en el sub-reddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Problemas de filtros/sitio web roto", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Reportar problemas de filtros con sitios web específicos en el registro de problemas uBlockOrigin/uAssets. Requiere una cuenta en GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Importante: evita utilizar otros bloqueadores con propósito similar junto con uBlock Origin, ya que esto puede causar problemas de filtros en sitios web específicos.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Consejos: asegúrate de que tus listas de filtros estén actualizadas. El registro de peticiones es la principal herramienta para diagnosticar problemas relacionados con los filtros.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Reportar error", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Reportar problemas con uBlock Origin en el registro de problemas uBlockOrigin/uBlock-issue. Requiere una cuenta en GitHub.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Información para solucionar problemas", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "A continuación encontrarás información técnica que puede ser útil cuando los voluntarios intenten ayudarte a resolver un problema.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Reportar un problema de filtro", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Para evitar sobrecargar a voluntarios con reportes duplicados, verifica que el problema no haya sido reportado. Nota: al hacer clic en el botón, hará que el origen de la página se envíe a GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Las listas de filtros se actualizan diariamente. Asegúrate de que tu problema no haya sido abordado en las listas de filtros más recientes.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verifica que el problema aún exista después de recargar la página web problemática.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Dirección de la página web:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "La página web…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Elige una entrada --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Muestra anuncios o restos de anuncios", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Tiene superposiciones u otras molestias", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detecta uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Tiene problemas relacionados con la privacidad", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Funciona mal cuando uBlock Origin está habilitado", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Abre pestañas o ventanas no deseadas", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Conduce a malware y phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Etiquetar la página web como “NSFW” (“no es seguro/apropiado para el trabajo”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Política de privacidad", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Registro de cambios", + "description": "" + }, + "aboutCode": { + "message": "Código fuente (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Colaboradores", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Código fuente", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Traducciones", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Listas de filtros", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Dependencias externas (compatibles con GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Las listas de filtros propias de uBO se alojan de forma gratuita en las siguientes CDN:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Se utilizará una CDN elegida al azar cuando sea necesario actualizar una lista de filtros.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Respaldar en archivo…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "ublock-mi-respaldo_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Restaurar desde archivo…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Restablecer ajustes predeterminados…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Toda la configuración se sobrescribirá utilizando datos respaldados en {{time}} y uBlock₀ se reiniciará.\n\n¿Sobrescribir toda la configuración existente utilizando los datos de respaldo?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Los datos no se pueden leer o no son válidos", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Se borrará todas tus configuraciones y uBlock₀ se reiniciará.\n\n¿Restablecer uBlock₀ a la configuración predeterminada?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Error de red: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Suscribirse", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "hace un minuto", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "hace {{value}} minutos", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "hace 1 hora", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "hace {{value}} horas", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "hace un día", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "hace {{value}} días", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Mostrar panel de control", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Mostrar registro de peticiones", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "deshabilitado", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Página bloqueada", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin impidió la carga de la página:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Como resultado del siguiente filtro:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "sin parámetros", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Encontrado en:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Regresar", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Cerrar esta ventana", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "No me adviertas de nuevo sobre este sitio", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Deshabilitar bloqueo estricto para {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Temporalmente", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Permanentemente", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Continuar", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "La página bloqueada quiere redirigir a otro sitio. Si eliges continuar, navegarás directamente a: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Razón:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicioso", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Rastreador", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Mala reputación", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Exportar datos a la nube", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importar datos de la nube", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importar desde la nube y anexar a la configuración actual", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Nombre de este dispositivo:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "¡Atención! Cambia estas configuraciones avanzadas bajo tu propio riesgo.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Enviar", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Aplicar cambios", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Revertir", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Bloquear elemento en frame…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Suscribirse a lista de filtros…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Permitir temporalmente elementos multimedia grandes", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Ver código fuente…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Escribe un atajo", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Alternar bloqueo de desplazamiento", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Copiar al portapapeles", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Seleccionar todo", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Alternar filtrado cosmético", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Alternar JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Modo de bloqueo relajado", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Almacenamiento usado: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Clic para cargar", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Errores: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "No se puede filtrar correctamente al iniciar el navegador. Recarga la página para garantizar el filtrado correcto.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Esta entrada debe ser la última", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/et/messages.json b/src/_locales/et/messages.json index e8dfff2c8725d..74a4a61d32d83 100644 --- a/src/_locales/et/messages.json +++ b/src/_locales/et/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Lõpuks on valminud tõhus blokeerija. Protsessori- ja mälusõbralik.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Lõpuks on valminud tõhus blokeerija. Protsessori- ja mälusõbralik.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Töölaud", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Töölaud", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Seaded", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Hoiatus! Sul on salvestamata muutusi", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Kolmanda osapoole filtrid", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Jää lehele", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Minu filtrid", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Eira", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Minu reeglid", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Seaded", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Valge loend", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filtriloendid", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock — Võrgutaotluste logi", - "description":"Title for the logger window" + "1pPageName": { + "message": "Minu filtrid", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Teave", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Minu reeglid", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Klõps: keela\/luba uBlock₀ sellel saidil.\n\nCtrl+klõps: keela uBlock₀ ainult sellel lehel.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Usaldatud saidid", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"blokeeritud taotlusi", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Kiirklahvid", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"sellel lehel", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Logija", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} või {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Teave", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"paigaldamise algusest", - "description":"English: since install" + "supportPageName": { + "message": "Tugi", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"või", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — vara vaatur", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Klõpsa, et avada töölaud", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Täpsemad seaded", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Sisene elemendi valikuolekusse", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Klõps: keela/luba uBlock₀ sellel saidil.\n\nCtrl+klõps: keela uBlock₀ ainult sellel lehel.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Avage logija", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Klõpsa, et keelata uBlock₀ sellel saidil.\n\nCtrl+klõps, et keelata uBlock₀ ainult sellel lehel.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Keela hüpikaknad sellel saidil", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Klõpsa, et lubada uBlock₀ sellel saidil.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Lülita mahukate meediaelementide blokeerimine siin saidil sisse\/välja", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "blokeeritud taotlusi", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Keela ilufiltrid sellel saidil", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "sellel lehel", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Luba väliste fontide blokeerimine sellel saidil", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} või {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Üldised reeglid: selle veeru reeglid kehtivad kõikidele saitidele.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "paigaldamise algusest", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Kohalikud reeglid: selle veeru reeglid kehtivad ainult praegusele saidile.\nKohalikud reeglid kirjutavad üldised reeglid üle.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "või", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Vajuta, et teha oma muudatused püsivaks.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Sellel lehel blokeeritud", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Vajuta, et võtta muudatused tagasi.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Paigaldamise algusest blokeeritud", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"kõik", - "description":"" + "popupDomainsConnected_v2": { + "message": "Domeene ühendatud", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"pildid", - "description":"" + "popupTipDashboard": { + "message": "Ava töölaud", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"3. osapool", - "description":"" + "popupTipZapper": { + "message": "Sisene elemendi hävitusrežiimi", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"3. osapoole CSS\/pildid", - "description":"" + "popupTipPicker": { + "message": "Sisene elemendi valikuolekusse", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"tekstisisesed skriptid", - "description":"" + "popupTipLog": { + "message": "Ava logija", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"1. osapoole skriptid", - "description":"" + "popupTipReport": { + "message": "Teavita selle veebilehe probleemist", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"3. osapoole skriptid", - "description":"" + "popupTipNoPopups": { + "message": "Keela hüpikaknad sellel saidil", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"3. osapoole raamid", - "description":"" + "popupTipNoPopups1": { + "message": "Klõpsa, et keelata kõik hüpikaknad sellel saidil", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"domeene ühendatud", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Klõpsa, et lõpetada hüpikakende keelamine sellel saidil", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}}\/{{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Lülita mahukate meediaelementide blokeerimine siin saidil sisse/välja", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Loo", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Klõpsa, et keelata mahukad meediaelemendid sellel saidil", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Vali", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Klõpsa, et lõpetada mahukate meediaelementide keelamine sellel saidil", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Välju", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Keela ilufiltrid sellel saidil", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Eelvaade", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Klõpsa, et keelata ilufiltrid sellel saidil", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Võrgufiltrid", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Klõpsa, et lubada ilufiltrid sellel saidil", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Ilufiltrid", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Luba väliste fontide blokeerimine sellel saidil", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Klõps, Ctrl-klõps", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Klõpsa, et keelata välisfondid sellel saidil", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Blokeeri element", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Klõpsa, et lõpetada välisfontide keelamine sellel saidil", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Peida blokeeritud elementide asukohad", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Klõpsa, et keelata JavaScript sellel saidil", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Kuva ikoonil blokeeritud elementide arv", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Klõpsa, et lõpetada sellel saidil JavaScripti keelamine", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Keela näpunäited", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Hüpikaknad", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Kasuta sobivusel kontekstmenüüd", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Suured meediaelemendid", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Värvipimeduse-sõbralik", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Ilufiltrid", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Luba pilves hoiustamise tugi", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Välised fondid", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Olen kogenud kasutaja (Vajalik lugemus<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Keela eellaadimine (et vältida ühendusi blokeeritud võrgutaotlustele)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Rohkem", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Keela hüperlingi auditeerimine", - "description":"English: " + "popupLessButton_v2": { + "message": "Vähem", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Tõkesta WebRTC'l IP-aadressi nägemist", - "description":"English: " + "popupTipGlobalRules": { + "message": "Üldised reeglid: selle veeru reeglid kehtivad kõikidele saitidele.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Vaikeväärtused", - "description":"" + "popupTipLocalRules": { + "message": "Kohalikud reeglid: selle veeru reeglid kehtivad ainult praegusele saidile.\nKohalikud reeglid kirjutavad üldised reeglid üle.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Neid vaikeväärtusi saab saitide põhiselt eraldi määrata", - "description":"" + "popupTipSaveRules": { + "message": "Klõpsa, et teha oma muudatused püsivaks.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Keela ilufiltrid", - "description":"" + "popupTipRevertRules": { + "message": "Klõpsa, et võtta muudatused tagasi.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Blokeeri meediaelemendid, mis on suuremad kui {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "kõik", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Keela välised fondid", - "description":"" + "popupImageRulePrompt": { + "message": "pildid", + "description": "" }, - "settingsStorageUsed":{ - "message":"Mahtu kasutatud: {{value}} baiti", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "3. osapool", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Viimane taastus:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "3. osapoole CSS/pildid", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Viimane varundus:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "tekstisisesed skriptid", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} võrgufiltrit + {{cosmeticFilterCount}} ilufiltrit:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "1. osapoole skriptid", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"kasutusel {{used}}\/{{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "3. osapoole skriptid", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Uuenda filtrite loendeid automaatselt.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "3. osapoole raamid", + "description": "" }, - "3pUpdateNow":{ - "message":"Uuenda kohe", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "ühendatud domeene", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Tühjenda kõik vahemälud", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}}/{{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Tuvasta ja rakenda ilufiltrid.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Versioon", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      See valik lubab Adblock Plusiga ühilduvate “elemente peitvate” filtrite<\/a> lubamist. Need filtrid parandavad lehtede välimust, peites elemente, mida ei blokeerita võrgupäringutel põhinevate filtritega.<\/p>

      Selle valiku lubamine suurendab uBlock₀<\/i>'i mälu kasutavust.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "skript", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Eira üldiseid ilufiltreid.", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "raam", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Üldised ilufiltrid on need ilufiltrid, mis töötavad kõikidel veebisaitidel.

      Kuigi uBlock₀ käsitleb neid tõhusalt, võivad üldised ilufiltrid siiski tarbida küllaltki palju mälu ja protsessori ressursse teatud veebisaitidel, eriti suurte ja kaua eksisteerivate puhul.

      Selle valiku lubamine vähendab üldiste ilufiltrite kasutamisest tulenevat mälu ja protsessori koormust ning vähendab ka uBlock₀i mälu tarbimist.

      Selle valiku lubamine on soovitatav vähem võimekates seadmetes.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Loo", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Blokeeritud domeenide loendid", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Vali", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Kinnita muudatused", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Välju", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Reklaamid", - "description":"English: Ads" + "pickerPreview": { + "message": "Eelvaade", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Privaatsus", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Võrgufiltrid", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Pahavara domeenid", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Ilufiltrid", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Sotsiaalsed", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Klõps, Ctrl-klõps", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Mitmeotstarbelised", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Blokeeri element...", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Regioonid, keeled", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Peida blokeeritud elementide asukohad", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Kohandatud", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Kuva ikoonil blokeeritud elementide arv", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Üks URL rea kohta, märgiga ‘!’ algavaid ridu eiratakse. Vigased URLid jäetakse vahele.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Keela näpunäited", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Rakenda", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Kasuta sobivusel kontekstmenüüd", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"tühjenda vahemälu", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Värvipimeduse-sõbralik", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"uus versioon on saadaval", - "description":"English: new version available" + "settingsAppearance": { + "message": "Välimus", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"vananenud", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Teema", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Viimane uuendus: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Kohandatud rõhuvärv", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Üks filter rea kohta, filtriks võib olla tavaline domeenilist või Adblock Plusiga-ühilduv filter. Märgiga ‘!’ algavaid ridu eiratakse.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Luba pilves hoiustamise tugi", + "description": "" }, - "1pImport":{ - "message":"Impordi ja lisa", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Olen kogenud kasutaja", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Ekspordi", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Keela eellaadimine (et vältida ühendusi blokeeritud võrgutaotlustele)", + "description": "English: " }, - "1pExportFilename":{ - "message":"minu-ublocki-staatilised-filtrid_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Keela hüperlingi auditeerimine", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Kinnita muudatused", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Tõkesta WebRTC'l kohalike IP-aadresside lekitamist", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Igavesed reeglid", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Vaikeväärtused", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Ajutised reeglid", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Neid vaikeväärtusi saab saitide põhiselt eraldi määrata", + "description": "" }, - "rulesRevert":{ - "message":"Ennista", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Keela ilufiltrid", + "description": "" }, - "rulesCommit":{ - "message":"Rakenda", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Blokeeri meediaelemendid, mis on suuremad kui {{input}} kB", + "description": "" }, - "rulesEdit":{ - "message":"Muuda", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Keela välised fondid", + "description": "" }, - "rulesEditSave":{ - "message":"Salvesta", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Keela JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Tühista", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Keela lehe turvareeglite (CSP-de) aruanded", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Impordi failist...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Kanooniliste nimede tuvastamine", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Ekspordi faili", - "description":"" + "settingsAdvanced": { + "message": "Täpsemad", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"minu-ublocki-dünaamilised-reeglid_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Funktsioonid, mis on sobilikud vaid tehnikas pädevatele kasutajatele.", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Sinu dünaamiliste filtrite reeglide nimekiri.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "täpsemad seaded", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Reegli süntaks: allikas sihtkoht tüüp tegevus<\/code> (kogu dokumentatsioon<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Viimane taastus:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Nimekiri domeenidest, millel uBlock₀ keelatakse. Üks domeen rea kohta, vigaseid domeeninimesid eiratakse.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Viimane varundus:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Impordi ja lisa", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} võrgufiltrit + {{cosmeticFilterCount}} ilufiltrit:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Ekspordi", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "kasutusel {{used}}/{{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"minu-ublocki-valge-loend_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Uuenda filtriloendeid automaatselt.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Kinnita muudatused", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Uuenda kohe", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Tüüp", - "description":"English: Type" + "3pPurgeAll": { + "message": "Tühjenda kõik vahemälud", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Domeen", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Tuvasta ja rakenda ilufiltrid.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Ilufiltrid peidavad veebilehe elemente, mis häirivad visuaalselt ning mida ei saa blokeerida võrgutaotlustel põhinevate filtreerimismootoritega.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Eira üldiseid ilufiltreid.", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Kõik", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Üldised ilufiltrid on need ilufiltrid, mis töötavad kõikidel veebisaitidel. Selle valiku lubamine vähendab veebisaitidel üldiste ilufiltrite kasutamisest tulenevat mälu ja protsessori koormust.\n\nSelle valiku lubamine on soovitatav vähem võimekates seadmetes.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Telgitagus", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Peata võrguliiklus kõikide filtriloendite laadimiseni", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"filtreeri logikirjeid", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Blokeeritud domeenide loendid", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Maksimaalne logikirjete arv", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Kinnita muudatused", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Kontekst:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Sisseehitatud", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tüüp:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Reklaamid", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Dünaamiline URL'i filter", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Privaatsus", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Staatiline filtreerimine", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Pahavara kaitse, turvalisus", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} võrgupäringud {{type}} {{br}}mille URL-aadress vastab väärtusele {{url}} {{br}}ja mis pärineb {{origin}},{{br}}{{importance}} on olemas vastav erandfilter.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Sotsiaalvõrgustike vidinad", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blokeeri", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Küpsise teatised", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Luba", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Tüütused", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tüübiga “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Mitmeotstarbelised", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"mistahes tüübiga", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Regioonid, keeled", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"domeenilt “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Kohandatud", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"mistahes domeenilt", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Impordi...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"välja arvatud, kui", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Üks URL rea kohta. Vigaseid URLe eiratakse hoiatuseta.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"isegi, kui", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "vananenud", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Staatiline filter {{filter}} asub:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "vaata sisu", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Muudatuste logi", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Viimane uuendus: {{ago}}.\nUuendamiseks vajutage.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Viki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Uuendamine...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Tugi", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Ressursi uuendamist takistas võrgu viga.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Lähtekood (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Ära lisa filtreid tundmatutest allikatest.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Toetajad", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Luba enda loodud filtrid", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Varunda faili", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Luba usaldusväärsust tõestama peavad enda loodud filtrid", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"minu-ublocki-varundus_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Impordi ja lisa…", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Taasta failist...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Ekspordi…", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Taasta vaikeseadetele...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "minu-ublocki-staatilised-filtrid_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Kõik seaded kirjutatakse üle, kasutades varundust kuupäevast {{time}} ning uBlock₀ taaskäivitatakse.\n\nKirjutan üle kõik praegused seaded varundusandmetega?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Kinnita muudatused", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Andmeid ei suudetud lugeda või on vigased", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Igavesed reeglid", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Kõik seaded kustutatakse ning uBlock₀ taaskäivitatakse.\n\nTaastan uBlock₀'i algseadetele?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Ajutised reeglid", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Ei suudetud ühenduda aadressiga {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Ennista", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Lisan järgneva URLi sinu kohandatud filtrite nimekirja?\n\nPealkiri: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Rakenda", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"minuti eest", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Muuda", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minuti eest", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Salvesta", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"tunni eest", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Tühista", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} tunni eest", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Impordi failist...", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"eile", - "description":"English: a day ago" + "rulesExport": { + "message": "Ekspordi faili…", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} päeva tagasi", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "minu-ublocki-dünaamilised-reeglid_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Kuva töölaud", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Sinu dünaamiliste filtrite reeglide nimekiri.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Kuva logija", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Reegli süntaks: allikas sihtkoht tüüp tegevus (kogu dokumentatsioon).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"väljas", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Sorteeri:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin on keelanud järgneva lehe laadimise:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Reegli tüüp", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Järgneva filtri tõttu", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Allikas", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"parameetriteta", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Sihtkoht", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Asub filtrites:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Usaldatud saitide direktiivid määravad, millistel veebilehtedel peaks uBlock Origin keelatud olema. Üks kirje rea kohta.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Mine tagasi", - "description":"English: Go back" + "whitelistImport": { + "message": "Impordi ja lisa…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Sulge see aken", - "description":"English: Close this window" + "whitelistExport": { + "message": "Ekspordi…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Keela karm blokeerimine {{hostname}} jaoks", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "minu-ublocki-usaldatud-saidid_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Ajutiselt", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Kinnita muudatused", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Püsivalt", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Tüüp", + "description": "English: Type" }, - "cloudPush":{ - "message":"Ekspordi pilvehoidlasse", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Domeen", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Impordi pilvehoidlast", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Impordi pilvekettalt ja ühilda praeguste seadetega", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Kõik", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Selle seadme nimi:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Kaardivaba", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Saada", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Praegune kaart", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Ennista", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Laadi kaardi sisu uuesti", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"baiti", - "description":"" + "loggerDomInspectorTip": { + "message": "Lülita sisse DOM-inspektor", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Luba ajutiselt mahukad meediaelemendid", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Lülita sisse hüpikpaneel", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"See sisestus peab olema viimane", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin'i viki: Logija", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Tühjenda logija", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Peata logija (ignoreeri sissetulevaid andmeid)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Jätka logimist", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Lülita sisse logija filtreerimine", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filtreeri logija sisu", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Logija filtreerimise valikud", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Mitte", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "oluline", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "blokeeritud", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "lubatud", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "muudetud", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "1. osapool", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "3. osapool", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Andmed", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filter", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Filtriloend", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Reegel", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Kontekst", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Juurkontekst", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Osapool", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Tüüp", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL'i reegel", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Kontekst:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Tüüp:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Staatiline filtreerimine", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} võrgupäringud {{type}} {{br}}mille URL-aadress vastab väärtusele {{url}} {{br}}ja mis pärineb {{origin}},{{br}}{{importance}} on olemas vastav erandfilter.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Blokeeri", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Luba", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "tüübiga “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "mistahes tüübiga", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "domeenilt “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "mistahes domeenilt", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "välja arvatud, kui", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "isegi, kui", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Staatiline filter {{filter}} asub:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Staatilist filtrit ei leitud ühegi hetkel lubatud filtrite loendist", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Logija kirjeid, mis ei vasta kõigile kolmele alumisele tingimusele, eiratakse automaatselt:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Säilita viimase {{input}} minuti kirjed", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Säilita kuni {{input}} lehe laadimist vahekaardi kohta", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Säilita kuni {{input}} kirjet vahekaardi kohta", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Kasuta {{input}} rida kirje kohta vertikaalses laiendatud režiimis", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Peida veerud:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} aeg", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} filter/reegel", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} kontekst", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} osapool", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Loend", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tabel", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Lihttekst", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Ava", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Loo GitHubis uus aruanne", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Leia GitHubist sarnaseid aruandeid", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Dokumendid", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Loe dokumente kohas uBlock/wiki, et avastada kõik uBlock Origini võimalusi.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Küsimused ja tugi", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Vastused küsimustele ja muud sorti kliendituge pakutakse subredditis /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filtrivead/veebileht on katki", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Teata kindlate veebilehtede filtrivigadest uBlockOrigin/uAssets veahalduris. Nõuab GitHubi kontot.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Oluline: väldi teiste sarnaselt toimivate blokeerijate kasutamist koos uBlock Originiga, see võib põhjustada teatud lehtedel filtrivigu.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Nõuanne: veendu, et filtrinimekirjad on ajakohased. Logija on peamine tööriist filtritega seotud vigade diagnoosimiseks.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Veast teatamine", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Teata uBlock Origini vigadest uBlockOrigin/uBlock-issue veahalduris. Nõuab GitHubi kontot.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Tõrkeotsingu teave", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Allpool on tehniline info, mis võib olla kasulik, kui vabatahtlikud aitavad sul probleemi lahendada.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Teavita filtri veast", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Vabatahtlike koormuse vähendamiseks palun veendu, et probleemi ei ole juba teatatud. Märkus: nupu klõpsamine saadab lehe aadressi GitHubi.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filtriloendeid uuendatakse iga päev. Kindlasti veenduge, kas probleem on juba lahendatud uusimates filtriloendites.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Kontrollige probleemi olemasolu veel kord, laadides muret tekitav veebileht uuesti.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Veebilehe aadress:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Veebileht...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Vali kirje --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Kuvab reklaame või reklaami kohatäitjaid", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Omab ülekatteid või teisi nuhtlusi", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Tuvastab uBlock Origini", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Omab privaatsusega seonduvaid probleeme", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Läheb uBlock Origini olemasolul katki", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Avab soovimatuid kaarte või aknaid", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Põhjustab pahavara, õngitsuskirju", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Sildista veebileht kui „NSFW“ (“tööks sobimatu”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Privaatsusteatis", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Muudatuste logi", + "description": "" + }, + "aboutCode": { + "message": "Lähtekood (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Toetajad", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Lähtekood", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Tõlked", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Filtriloendid", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Välised sõltuvused (ühilduvad GPLv3-ga):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO enda filtriloendid on vabalt hostitud järgnevates sisuedastusvõrkudes:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Filtriloendi uuendamiseks kasutatakse juhuslikult valitud sisuedastusvõrku.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Varunda faili…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "minu-ublocki-varundus_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Taasta failist...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Alusta nullist...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Kõik seaded kirjutatakse üle, kasutades varundust kuupäevast {{time}} ning uBlock₀ taaskäivitatakse.\n\nKirjutan üle kõik praegused seaded varundusandmetega?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Andmeid ei suudetud lugeda või on vigased", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Kõik seaded kustutatakse ning uBlock₀ taaskäivitatakse.\n\nTaastan uBlock₀'i algseadetele?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Võrgu viga: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Telli", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "minuti eest", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} minuti eest", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "tunni eest", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} tunni eest", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "eile", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} päeva tagasi", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Kuva töölaud", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Kuva logija", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "väljas", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Leht blokeeritud", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin on keelanud järgneva lehe laadimise:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Järgneva filtri tõttu", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "parameetriteta", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Asub filtrites:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Mine tagasi", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Sulge see aken", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Ära selle saidi puhul enam hoiata", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Keela karm blokeerimine {{hostname}} jaoks", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Ajutiselt", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Püsivalt", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Jätka", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Tõkestatud veebileht üritab suunata muule veebilehele. Jätkates suunatakse teid veebilehele {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Põhjus:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Kahtlane", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Jälgija", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Kaak", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Ekspordi pilvehoidlasse", + "description": "tooltip" + }, + "cloudPull": { + "message": "Impordi pilvehoidlast", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Impordi pilvekettalt ja ühilda praeguste seadetega", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Selle seadme nimi:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Hoiatus! Muuda täpsemaid seadeid oma vastutusel.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Saada", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Kinnita muudatused", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Ennista", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "baiti", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Blokeeri raamis olev element...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Telli filtriloend...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Luba ajutiselt mahukad meediaelemendid", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Vaata lähtekoodi…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Kirjuta kiirklahv", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Lülita sisse lukustatud kerimine", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Kopeeri lõikelauale", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Vali kõik", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Lülita kosmeetilist filtreerimist", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Lülita JavaScripti", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Rahulik blokeerimisrežiim", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Mahtu kasutatud: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Klõpsa laadimiseks", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Vigu: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Brauseri avamisel korralikult filtreerimine ebaõnnestus. Selle parandamiseks laadi leht uuesti.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "See sisestus peab olema viimane", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/eu/messages.json b/src/_locales/eu/messages.json index 676e6cf826651..1a097a0f133bb 100644 --- a/src/_locales/eu/messages.json +++ b/src/_locales/eu/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Behingoz, blokeatzaile eraginkor bat. PUZ eta memorian arina.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Behingoz, blokeatzaile eraginkor bat. PUZ eta memorian arina.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Kontrol panela", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Kontrol panela", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Ezarpenak", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Abisua! Gorde gabeko aldaketak dituzu", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Hirugarrengoen iragazkiak", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Geratu", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Nire iragazkiak", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ezikusi", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Nire arauak", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Ezarpenak", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Zerrenda zuria", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Iragazki-zerrendak", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Egunkaria", - "description":"Title for the logger window" + "1pPageName": { + "message": "Nire iragazkiak", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Honi buruz", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Nire arauak", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Klik: gaitu\/ezgaitu uBlock₀ gune honetan.\n\nKtrl+klik: ezgaitu uBlock₀ orri honetan soilik.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Konfidantzazko webguneak", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"blokeatutako eskariak", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Lasterbideak", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"orri honetan", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Egunkaria", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} edo %{{percent}}", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Honi buruz", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"instalaziotik", - "description":"English: since install" + "supportPageName": { + "message": "Soportea", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"edo", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Aktibo-ikuslea", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Klik kontrol panela irekitzeko", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Ezarpen aurreratuak", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Elementuak hautatzeko modua", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Klik: gaitu/ezgaitu uBlock₀ gune honetan.\n\nKtrl+klik: ezgaitu uBlock₀ orri honetan soilik.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Ireki egunkaria", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Klik: Gaitu/ezgaitu uBlock₀ gune honetan.\n\nKtrl+klik: Desgaitu uBlock₀ orri honetan soilik.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Txandakatu laster-leihoen blokeoa gune honetan", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Klik: Gaitu uBlock₀ gune honetan.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Txandakatu multimedia elementu handiak blokeatzea gune honetan", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "blokeatutako eskariak", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Txandakatu iragazki kosmetikoa gune honetan", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "orri honetan", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Txandakatu urruneko letra tipoen blokeoa gune honetan", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} edo %{{percent}}", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Arau orokorrak: Zutabe hau gune guztietan aplikatzen diren arauentzat da.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "instalaziotik", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Tokiko arauak: Zutabe hau soilik uneko gunean aplikatuko diren arauentzat da. Tokiko arauek arau orokorrak gainidazten dituzte.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "edo", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Sakatu aldaketak gordetzeko.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Blokeatuta orri honetan", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Sakatu aldaketak desegiteko.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Blokeatuta instalaziotik", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"guztiak", - "description":"" + "popupDomainsConnected_v2": { + "message": "Konektatutako domeinuak", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"irudiak", - "description":"" + "popupTipDashboard": { + "message": "Ireki kontrol panela", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"Hirugarrengoak", - "description":"" + "popupTipZapper": { + "message": "Elementuak lekuz aldatzeko modua", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"Hirugarrengoen css\/irudiak", - "description":"" + "popupTipPicker": { + "message": "Elementuak hautatzeko modua", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"barne scriptak", - "description":"" + "popupTipLog": { + "message": "Ireki egunkaria", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"bertako scriptak", - "description":"" + "popupTipReport": { + "message": "Webgune honetan arazo baten berri eman", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"hirugarrengoen scriptak", - "description":"" + "popupTipNoPopups": { + "message": "Txandakatu laster-leihoen blokeoa gune honetan", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"hirugarrengoen markoak", - "description":"" + "popupTipNoPopups1": { + "message": "Klik: Blokeatu gune honetako laster leiho guztiak", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"konektatutako domeinuak", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Klik: Utzi gune honetako laster-leihoak blokeatzeari", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} \/ {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Txandakatu multimedia elementu handiak blokeatzea gune honetan", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Sortu", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Klik: Blokeatu gune honetako tamaina handiko elementuak", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Hautatu", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Klik: Utzi gune honetako tamaina handiko elementuak blokeatzeari", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Irten", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Txandakatu iragazki kosmetikoa gune honetan", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Aurreikusi", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Klik: Desgaitu iragazki kosmetikoak gune honetan", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Sare iragazkiak", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Klik: Gaitu iragazki kosmetikoak gune honetan", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Iragazki kosmetikoak", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Txandakatu urruneko letra tipoen blokeoa gune honetan", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Klik, Ktrl-klik", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Klik: Blokeatu urruneko letra-tipoak gune honetan", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Blokeatu elementua", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Klik: Utzi urruneko letra-tipoak gune honetan blokeatzeari", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Ezkutatu blokeatutako elementuen hutsuneak", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Egin klik gune honetan JavaScript desgaitzeko", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Bistaratu blokeatutako eskari kopurua ikonoan", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Egin klik gune honetan JavaScript desgaitzeari uzteko", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Desgaitu argibideak", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Laster-leihoak", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Erabili laster-menua egokia denean", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Multimedia elementu handiak", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Kolore-itsuentzat egokia", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Iragazki kosmetikoak", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Gaitu hodei biltegiratzearen euskarria", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Urruneko tipografiak", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Erabiltzaile aurreratua naiz (Irakurri beharrekoa<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Desgaitu aurrez-kargatzea (blokeatutako sare eskaeretako edozein konexio galarazteko)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Gehiago", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Desgaitu loturen auditoretza", - "description":"English: " + "popupLessButton_v2": { + "message": "Gutxiago", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Galarazi WebRTCk tokiko IP helbidea iragartzea", - "description":"English: " + "popupTipGlobalRules": { + "message": "Arau orokorrak: Zutabe hau gune guztietan aplikatzen diren arauentzat da.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Lehenetsitako portaera", - "description":"" + "popupTipLocalRules": { + "message": "Tokiko arauak: Zutabe hau soilik uneko gunean aplikatuko diren arauentzat da. Tokiko arauek arau orokorrak gainidazten dituzte.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Lehenetsitako portaera hauek gunez gune gainidatzi daitezke", - "description":"" + "popupTipSaveRules": { + "message": "Sakatu aldaketak gordetzeko.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Desgaitu iragazki kosmetikoa", - "description":"" + "popupTipRevertRules": { + "message": "Sakatu aldaketak desegiteko.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Blokeatu {{input:number}} kB baino handiagoak diren multimedia elementuak", - "description":"" + "popupAnyRulePrompt": { + "message": "guztiak", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blokeatu urruneko letra-tipoak", - "description":"" + "popupImageRulePrompt": { + "message": "irudiak", + "description": "" }, - "settingsStorageUsed":{ - "message":"Erabilitako biltegiratzea: {{value}} byte", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "Hirugarrengoak", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Azken berreskuratzea:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "Hirugarrengoen CSS/Irudiak", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Azken babeskopia:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "barne scriptak", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} sare iragazki + {{cosmeticFilterCount}} iragazki kosmetiko hemendik:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "bertako scriptak", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} erabilita, guztira {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "hirugarrengoen scriptak", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Automatikoki eguneratu iragazkien zerrenda.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "hirugarrengoen markoak", + "description": "" }, - "3pUpdateNow":{ - "message":"Eguneratu orain", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "konektatutako domeinuak", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Garbitu cache guztiak", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} / {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Prozesatu eta ezarri iragazki kosmetikoak.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Bertsioa", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Aukera honek Adblock Plusekin bateragarriak diren “elementuak ezkutatzeko” iragazkiak<\/a> prozesatzea eta ezartzea gaitzen du. Iragazki hauek nagusiki kosmetikoak dira, web orri batean itsusitzat jo diren eta sare iragazkien bidez blokeatzerik ez dauden elementuak ezkutatzeko balio dute.<\/p>

      Ezaugarri hau gaitzeak uBlock₀en memoria erabilera handitzen du.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "scripta", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ezikusi iragazki kosmetiko orokorrak", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "markoa", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Iragazki kosmetiko orokorrak webgune guztietan aplikatzeko sortu diren iragazki kosmetikoak dira.

      uBlock₀ aplikazioak ongi kudeatzen baditu ere iragazki kosmetiko orokorrek wegune batzuetan memoria edo PUZ erabilera nabarmena ekar dezakete handiak eta antzinakoak diren horietan gehienbat.

      Aukera hau gaituz iragazki kosmetiko orokorren erabileraren ondoriozko memoria eta PUZ erabilera gehigarria sahiestuko da, eta baita uBlock₀ beraren memoria erabilera gutxiagotu.

      Ahalmen gutxiagoko gailuetan aukera hau gaitzea aholkatzen da.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Sortu", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lists of blocked hosts", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Hautatu", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Aplikatu aldaketak", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Irten", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Iragarkiak", - "description":"English: Ads" + "pickerPreview": { + "message": "Aurreikusi", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Pribatutasuna", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Sare iragazkiak", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Malware domeinuak", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Iragazki kosmetikoak", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Gizarte sareak", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Klik, Ktrl-klik", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Helburu anitzekoak", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Blokeatu elementua...", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Eskualdeak, hizkuntzak", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Ezkutatu blokeatutako elementuen hutsuneak", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Pertsonala", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Bistaratu blokeatutako eskari kopurua ikonoan", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"URL bat lerroko. Hasieran ‘’ duten lerroak ezikusiko dira. Baliogabeko URLak isilean ezikusiko dira.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Desgaitu argibideak", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Prozesatu", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Erabili laster-menua egokia denean", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"garbitu cachea", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Kolore-itsuentzat egokia", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"bertsio berria eskuragarri", - "description":"English: new version available" + "settingsAppearance": { + "message": "Itxura", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"zaharkituta", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Azala", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Azken eguneraketa: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Azentu-kolore pertsonalizatua", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Iragazki bat lerroko. Iragazkia hostalari izen soila izan daiteke, edo Adblock Plusekin bateragarria den iragazki bat. Hasieran ‘’ duten lerroak ezikusiko dira.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Gaitu hodei biltegiratzearen euskarria", + "description": "" }, - "1pImport":{ - "message":"Inportatu eta gehitu", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Erabiltzaile aurreratua naiz (Irakurri beharrekoa)", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Esportatu", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Desgaitu aurrez-kargatzea (blokeatutako sare eskaeretako edozein konexio galarazteko)", + "description": "English: " }, - "1pExportFilename":{ - "message":"nire-ublock-iragazki-estatikoak_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Desgaitu loturen auditoretza", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Aplikatu aldaketak", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Galarazi WebRTCk tokiko IP helbidea iragartzea", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Behin betiko arauak", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Lehenetsitako portaera", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Behin behineko arauak", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Lehenetsitako portaera hauek gunez gune gainidatzi daitezke", + "description": "" }, - "rulesRevert":{ - "message":"Baztertu", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Desgaitu iragazki kosmetikoa", + "description": "" }, - "rulesCommit":{ - "message":"Behin betiko bihurtu", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Blokeatu {{input:number}} kB baino handiagoak diren multimedia elementuak", + "description": "" }, - "rulesEdit":{ - "message":"Aldatu", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Blokeatu urruneko letra-tipoak", + "description": "" }, - "rulesEditSave":{ - "message":"Gorde", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Desgaitu JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Baztertu", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Blokeatu CSP txostenak", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Inportatu fitxategitik...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Erakutsi izen kanonikoak", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Esportatu fitxategira", - "description":"" + "settingsAdvanced": { + "message": "Aurreratua", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"nire-ublock-arau-dinamikoak_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Erabiltzaile teknikoentzat soilik egokiak diren funtzioak", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Zure iragazki dinamikoen arau zerrenda.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "ezarpen aurreratuak", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Arauen sintaxia: jatorria helburua mota ekintza<\/code>(Dokumentazio osoa<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Azken berreskuratzea:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Zure ostalarien zerrenda non uBlock₀ desgaituko den. Sarrera bat lerroko. Baliogabeko ostalari izenak ezikusiko dira.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Azken babeskopia:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Inportatu eta gehitu", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} sare iragazki + {{cosmeticFilterCount}} iragazki kosmetiko hemendik:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Esportatu", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} erabilita, guztira {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"nire-ublock-zerrendazuria_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Automatikoki eguneratu iragazkien zerrenda.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Aplikatu aldaketak", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Eguneratu orain", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Mota", - "description":"English: Type" + "3pPurgeAll": { + "message": "Garbitu cache guztiak", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Domeinua", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Prozesatu eta ezarri iragazki kosmetikoak.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "

      Aukera honek Adblock Plusekin bateragarriak diren “elementuak ezkutatzeko” iragazkiak prozesatzea eta ezartzea gaitzen du. Iragazki hauek nagusiki kosmetikoak dira, web orri batean itsusitzat jo diren eta sare iragazkien bidez blokeatzerik ez dauden elementuak ezkutatzeko balio dute.

      Ezaugarri hau gaitzeak uBlock₀en memoria erabilera handitzen du.

      ", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Iragazkia", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ezikusi iragazki kosmetiko orokorrak", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Guztiak", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

      Iragazki kosmetiko orokorrak webgune guztietan aplikatzeko sortu diren iragazki kosmetikoak dira.

      uBlock₀ aplikazioak ongi kudeatzen baditu ere iragazki kosmetiko orokorrek wegune batzuetan memoria edo PUZ erabilera nabarmena ekar dezakete handiak eta antzinakoak diren horietan gehienbat.

      Aukera hau gaituz iragazki kosmetiko orokorren erabileraren ondoriozko memoria eta PUZ erabilera gehigarria sahiestuko da, eta baita uBlock₀ beraren memoria erabilera gutxiagotu.

      Ahalmen gutxiagoko gailuetan aukera hau gaitzea aholkatzen da.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Atzeko planoan", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Eten sarearen jarduera iragazki-zerrenda guztiak kargatuta egon arte", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"iragazi egunkariko sarrerak", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Egunkariaren gehieneko sarrera kopurua", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Aplikatu aldaketak", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Testuingurua:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Barnekoa", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Mota:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Iragarkiak", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"URL iragazketa dinamikoa", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Pribatutasuna", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Iragazketa estatikoa", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Malware domeinuak", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} {{type}} motako sare eskariak {{br}}URL helbidea {{url}} helbidearekin bat datorrenean {{br}}eta jatorria {{origin}} denean,{{br}}{{importance}} bat datorren salbuespen iragazki bat badago.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Widgets Sozialak", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blokeatu", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Cookie oharrak", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Baimendu", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Eragozpenak", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"mota “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Helburu anitzekoak", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"edozein mota", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Eskualdeak, hizkuntzak", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"hemendik “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Pertsonala", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"edonondik", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Inportatu...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"kenduta", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "URL bat lerroko. Baliogabeko URL-ak ezikusiko dira.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"nahiz eta", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Zaharkituta.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"{{filter}} iragazki estatiko aurkitu da hemen:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "ikusi edukia", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Aldaketa egunkaria", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Azken eguneraketa: {{ago}}.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Eguneratzen...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Laguntza", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Sare errore batek baliabidea eguneratzea eragotzi du.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Iturburu kodea (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Ez gehitu jatorri ezezaguneko iragazkirik", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Parte-hartzaileak", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Aktibatu nire filtro pertsonalitsatuak", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Egin babeskopia fitxategian", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Konfiantza behar duten iragazki pertsonalizatuak baimendu", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"nire-ublock-babeskopia_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Inportatu eta gehitu", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Berreskuratu fitxategitik...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Esportatu", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Leheneratu lehenetsitako ezarpenetara...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "nire-ublock-iragazki-estatikoak_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Zure ezarpen guztiak gainidatziko dira {{time}}ko datuak erabiliz, eta uBlock₀ berrabiaraziko da.\n\nGainidatzi ezarpen guztiak babeskopiako datuekin?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Aplikatu aldaketak", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Datuak ezin dira irakurri edo baliogabeak dira", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Behin betiko arauak", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Zure ezarpen guztiak ezabatuko dira, eta uBlock₀ berrabiaraziko da.\n\nLeheneratu uBlock₀ jatorrizko ezarpenetara?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Behin behineko arauak", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Ezin izan da konektatu {{url}} helbidera", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Baztertu", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Gehitu honako URL hauek zure iragazki pertsonalizatuen zerrendara?\n\nIzenburua: \"{{title}}\"\nURLa: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Behin betiko bihurtu", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"duela minutu bat", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Aldatu", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"duela {{value}} minutu", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Gorde", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"duela ordu bat", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Baztertu", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"duela {{value}} ordu", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Inportatu fitxategitik...", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"duela egun bat", - "description":"English: a day ago" + "rulesExport": { + "message": "Esportatu fitxategira", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"duela {{value}} egun", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "nire-ublock-arau-dinamikoak_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Bistaratu kontrol panela", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Zure iragazki dinamikoen arau zerrenda.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Bistaratu egunkaria", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Arauen sintaxia: jatorria helburua mota ekintza(Dokumentazio osoa).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"itzalita", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Ordena:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock₀ek orri hau kargatzea galarazi du:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Arau mota", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Iragazki hau dela eta", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Iturria", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"parametrorik gabe", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Helburua", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Hemen aurkitua:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Zerrenda zuriaren direktibek uBlock zeintzu web orrietan desgaituko den zehazten dute. Sarrera bat lerroko. Baliogabeko ostalari izenak ezikusiko dira.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Atzera", - "description":"English: Go back" + "whitelistImport": { + "message": "Inportatu eta gehitu", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Itxi leiho hau", - "description":"English: Close this window" + "whitelistExport": { + "message": "Esportatu", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Ezgaitu blokeatze zorrotza {{hostname}} gunean", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "nire-ublock-zerrendazuria_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Une batez", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Aplikatu aldaketak", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Behin betiko", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Mota", + "description": "English: Type" }, - "cloudPush":{ - "message":"Esportatu hodei biltegiratzera", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Domeinua", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Inportatu hodei biltegiratzetik", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Inportatu hodeiko biltegiratzetik eta nahastu oraingo ezarpenekin", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Iragazkia", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Guztiak", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Gailu honen izena:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Atzeko planoan", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Bidali", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Uneko fitxa", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Baztertu", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Birkargatu fitxako edukia", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"byte", - "description":"" + "loggerDomInspectorTip": { + "message": "Txandakatu DOM ikuskatzailea", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Une batez baimendu multimedia elementu handiak", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Txandakatu laster-leiho panela", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: Egunkaria", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Garbitu egunkaria", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Pausatu egunkaria (baztertu jasotako informazioa)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Kendu pausa egunkariari", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Txandakatu egunkariaren iragazkia", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "iragazi egunkariko sarrerak", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Egunkaria iragazteko aukerak", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Ez", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "blokeatuta", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "baimenduta", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "aldatua", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "Lehen eskukoa", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "Hirugarrengoa", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Xehetasunak", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Iragazkia", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Iragazki-zerrendak", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Araua", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Testuingurua", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Erro testuingurua", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Jatorria", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Mota", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URLa", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL araua", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Testuingurua:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Mota:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Iragazketa estatikoa", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} {{type}} motako sare eskariak {{br}}URL helbidea {{url}} helbidearekin bat datorrenean {{br}}eta jatorria {{origin}} denean,{{br}}{{importance}} bat datorren salbuespen iragazki bat badago.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Blokeatu", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Baimendu", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "mota “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "edozein mota", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "hemendik “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "edonondik", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "kenduta", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "nahiz eta", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "{{filter}} iragazki estatikoa aurkitu da hemen:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "{{filter}} iragazki estatikoa ezin izan da aurkitu orain aktibatutako iragazki zerrendetan", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Beheko hiru baldintzak betetzen ez dituzten egunkariko sarrerak automatikoki ezikusiko dira:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Mantendu azken {{input}} minutuetako sarrerak", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Mantendu gehienez {{input}} orrien kargak fitxako", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Mantendu gehienez {{input}} sarrera fitxako", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Erabili {{input}} errenkada sarrerako bertikalki hedatutako moduan", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Ezkutatu zutabeak:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Denbora", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Iragazkia/araua", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Testuingurua", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} jatorria", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Zerrenda", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Taula", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Laua", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Ireki", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Txosten berri bat sortu", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Antzeko txostenak aurkitu", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Dokumentazioa", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Irakurri dokumentazioa uBlock/wiki helbidean, uBlock Originen funtzio guztiak ezagutzeko.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Galderak eta laguntza", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "/r/uBlockOrigin azpidian galderen erantzunak eta beste laguntza mota batzuk eskaintzen dira.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Arazoak iragazkiekin/webguneak ez du funtzionatzen", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Web-gune espezifikoekin iragazteko arazoak jakinaraz iezaguzu hemen: uBlockOrigin/uAssets issue tracker. GitHub kontu bat behar da", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Kontuan izan: Ez erabili antzeko helburua duten beste blokeatzaile batzuk uBlock Originekin batera, horrek arazoak sor baititzake webgune espezifikoetan iragazteko.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Aholkuak Ziurtatu zure iragazki-zerrendak eguneratuta daudela. Erregistratzailea da iragazkiekin lotutako arazoak diagnostikatzeko tresna nagusia.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Errore-txostena", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Arazoak jakinarazi uBlock Originekin arazoen erregistroan uBlockOrigin/uBlock-issueissue tracker. GitHub kontua beharrezkoa da.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Arazoen konponbideari buruzko informazioa", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Jarraian, boluntarioek arazo bat konpontzen laguntzen saiatzen direnean baliagarria izan daitekeen informazio teknikoa aurkituko duzu.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Iragazkiko arazo baten berri eman", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Txosten bikoiztuak dituzten boluntarioak ez gainkargatzeko, mesedez egiaztatu arazoa ez dela jakinarazi.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Iragazki-zerrendak egunero eguneratzen dira. Begiratu zure kasua azken iragazki-zerrendetako baten konpondu den.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Egiaztatu zure kasua arazoak eman dizkizun webgunea berriz kargatu ostean oraindik ere gertatzen den.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Web orriaren helbidea:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Webgunea...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Aukeratu sarrera bat --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Iragarkiak edo iragarkien hondarrak erakusten ditu", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Gainjartzeak edo bestelako eragozpenak ditu", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "uBlock Origin detektatzen du", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Pribatutasun-arazoak ditu", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Funtzionamendu-akatsak uBlock Origin aktibatuta dagoenean", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Ireki nahi ez diren erlaitzak edo leihoak", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Web orria «NSFW» moduan jarri (“Not Safe For Work” )", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Pribatutasun politika", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Aldaketa egunkaria", + "description": "" + }, + "aboutCode": { + "message": "Iturburu kodea (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Parte-hartzaileak", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Iturburu-kodea", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Itzulpenak", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Iragazki-zerrendak", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Kanpo menpekotasunak (GPLv3 lizentziarekin bateragarriak):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBOren iragazki zerrendan CDN hauetan daude:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Ausaz aukeratutako CDN bat erabiltzen da iragazki zerrenda bat eguneratu behar denean", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Egin babeskopia fitxategian", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "nire-ublock-babeskopia_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Berreskuratu fitxategitik...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Leheneratu lehenetsitako ezarpenetara...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Zure ezarpen guztiak gainidatziko dira {{time}}ko datuak erabiliz, eta uBlock₀ berrabiaraziko da.\n\nGainidatzi ezarpen guztiak babeskopiako datuekin?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Datuak ezin dira irakurri edo baliogabeak dira", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Zure ezarpen guztiak ezabatuko dira, eta uBlock₀ berrabiaraziko da.\n\nLeheneratu uBlock₀ jatorrizko ezarpenetara?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Sare-errorea: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Harpidetu", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "duela minutu bat", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "duela {{value}} minutu", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "duela ordu bat", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "duela {{value}} ordu", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "duela egun bat", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "duela {{value}} egun", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Bistaratu kontrol panela", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Bistaratu egunkaria", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "itzalita", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Blokeatutako orrialdea", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock₀ek orri hau kargatzea galarazi du:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Iragazki hau dela eta", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "parametrorik gabe", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Hemen aurkitua:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Atzera", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Itxi leiho hau", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Ez esan ezer berriz ere orrialde honi buruz", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Ezgaitu blokeatze zorrotza {{hostname}} gunean", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Une batez", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Behin betiko", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Aurrera", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Blokeatutako orrialdeak beste helbide batera berbideratu nahi zaitu. Jarraitu nahi baduzu, zuzenean helbide honetara joango zara: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Esportatu hodei biltegiratzera", + "description": "tooltip" + }, + "cloudPull": { + "message": "Inportatu hodei biltegiratzetik", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Inportatu hodeiko biltegiratzetik eta nahastu oraingo ezarpenekin", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Gailu honen izena:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Abisua! Ez aldatu ezarpen aurreratu hauek zertan ari zaren ez badakizu.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Bidali", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Aplikatu aldaketak", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Baztertu", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "byte", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Marko bateko elementua blokeatu...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Harpidetu iragazki zerrenda batera...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Une batez baimendu multimedia elementu handiak", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Ikusi iturburu kodea…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Idatzi lasterbide bat", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Txandakatu korritze blokeatua", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Kopiatu arbelera", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Hautatu dena", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Iragazte kosmetikoa txandakatu", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "JavaScripta aktibatu/desaktibatu", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Baretu blokeatze-modua", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Erabilitako biltegiratzea: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Sakatu kargatzeko", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Erroreak: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Iragazkia ezin izan da kargatu nabigatzailea irekitzeak. Kargatu berriz orria iragazkiak ondo funtzionatzen duela ziurtatzeko.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/fa/messages.json b/src/_locales/fa/messages.json index 5837c04a41740..fc5ea6583aff3 100644 --- a/src/_locales/fa/messages.json +++ b/src/_locales/fa/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"بالاخره، یک بلاکر کارآمد. کم حجم بر روی پردازنده و حافظه.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "بالاخره، یک بلاکر کارآمد. کم حجم بر روی پردازنده و حافظه.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — داشبورد", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — داشبورد", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"تنظیمات", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "هشدار! شما تنطیمات ذخیره نشده دارید", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"فیلتر های خارجی", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "بمان", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"فیلترهای من", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "نادیده بگیر", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"قوانین من", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "تنظیمات", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"لیست سپید", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "لیست‌های فیلتر", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock — لاگ درخواست های شبکه", - "description":"Title for the logger window" + "1pPageName": { + "message": "فیلترهای من", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"در باره", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "قوانین من", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"کلیک: غیر فعال\/ فعال کردن uBlock₀ برای این سایت.\n\nکنترل+کلیک: غیر فعال کردن uBlock₀ فقط برای همین صفحه.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "لیست سپید", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"درخواست مسدود شده", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "میانبرها", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"در این صفحه", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — واقعه‌نگار", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} یا {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "در باره", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"از زمان نصب", - "description":"English: since install" + "supportPageName": { + "message": "پشتیبانی", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"یا", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — نماینگر دارایی", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"برای باز کردن داشبورد کلیک کنید", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "تنظیمات پیشرفته", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"ورود به حالت انتخاب اشیاء", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "کلیک: غیر فعال/ فعال کردن uBlock₀ برای این سایت.\n\nکنترل+کلیک: غیر فعال کردن uBlock₀ فقط برای همین صفحه.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"بازنمایی ثبت درخواست", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "کلیک کنید تا uBlock₀ برای این سایت غیر فعال شود.\n\nهمزمان کلیدکنترل را نگهدارید و کلیک کنید تا uBlock₀ فقط برای این صفحه غیر فعال شود.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"تغییر وضعیت انسداد همه ی پنجره های این سایت", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "کلیک کنید تا uBlock₀ برای این سایت فعال شود.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"تغییر وضعیت انسداد عناصر مدیای حجیم برای این سایت", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "درخواست مسدود شده", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"تغییر وضعیت فیلترزیباسازی در این صفحه", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "در این صفحه", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"تغییر وضعیت انسداد فونت های از راه دور برای این سایت", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} یا {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"قوانین همگانی: این ستون برای قوانینی است که به تمامی سایت ها اعمال می شود.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "از زمان نصب", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"قوانین محلی: این ستون برای قوانینی است که تنها در این وب‌گاه اعمال می شود.\nقوانین محلی بر قوانین سراسری برتری دارد.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "یا", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"برای دائمی سازی تغییرات کلیک کنید.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "بلاک‌شده در این صفحه", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"برای برگشت تغییرات کلیک کنید.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "بلاک شده از زمان نصب", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"همه", - "description":"" + "popupDomainsConnected_v2": { + "message": "دامنه‌های متصل‌شده", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"تصاویر", - "description":"" + "popupTipDashboard": { + "message": "باز کردن داشبورد", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"3rd-party", - "description":"" + "popupTipZapper": { + "message": "ورود به حالت له کردن اشیاء", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"تصاویر\/css سایت های ثالث", - "description":"" + "popupTipPicker": { + "message": "ورود به حالت انتخاب اشیاء", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"اسکریپت های درون خطی", - "description":"" + "popupTipLog": { + "message": "بازکردن واقعه‌نگار", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"اسکریپت های 1st-party", - "description":"" + "popupTipReport": { + "message": "گزارش یک اشکال در خصوص این وبسایت", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"اسکریپت های 3rd-party", - "description":"" + "popupTipNoPopups": { + "message": "تغییر وضعیت انسداد همه‌ی پنجره های بالاپَر برای این سایت", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"فریم های 3rd-party", - "description":"" + "popupTipNoPopups1": { + "message": "کلیک کنید تا همۀ پنجره های بالاپَر در این سایت مسدود شوند", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"دامنه های دست خورده", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "کلیک کنید تا دیگر هیچ کدام از پنجره های بالاپَر این سایت مسدود نشوند", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"تعداد {{count}} از {{total}} تا", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "تغییر وضعیت مسدود کردن عناصر رسانه ای حجیم برای این سایت", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"ایجاد", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "کلیک کنید تا عناصر رسانه ای حجیم بر روی این سایت مسدود شوند", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"انتخاب", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "کلیک کنید تا از این به بعد عناصر رسانه ای حجیم روی این سایت مسدود نشوند", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"خروج", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "تغییر وضعیت فیلترزیباسازی برای این سایت", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"پیش نمایش", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "کلیک کنید تا فیلتر زیبا سازی بر روی این سایت غیر فعال شود", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"فیلترهای شبکه", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "کلیک کنید تا فیلتر زیبا سازی بر روی این سایت فعال شود", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"فیلترهای انتخابی", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "تغییر وضعیت انسداد فونت های راه دور برای این سایت", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"کلیک، کنترل-کلیک", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "کلیک کنید تا فونت های راه دور در این سایت مسدود شوند", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"بلاک کردن این شیء", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "کلیک کنید تا از این به بعد فونت های راه دور در این سایت مسدود نشوند", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"مخفی کردن نگاهدارنده اشیاء بلاک شده", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "کلیک کنید تا جاوا اسکریپت در این سایت غیرفعال شود", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"نمایش تعداد درخواست های بلاک شده بر روی آیکون", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "کلیک کنید تا جاوا اسکریپت دیگر در این سایت غیرفعال نشود", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"غیر فعال سازی راهنماها", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "پنجره‌ی پاپ‌آپ", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"استفاده از منوی متنی در زمانهای لازم", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "اِلمان‌های دارای مدیای بزرگ", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"بهینه سازی کور رنگی", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "فیلترهای انتخابی", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"فعال سازی پشتیبانی ذخیره سازی ابری", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "فونت‌های راه دور", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"من کاربر حرفه ای هستم (لازم است بخوانید<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "جاوااسکریپت", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"غیر فعال کردن واکشی اولیه (برای جلوگیری از هر گونه اتصال برای درخواست های شبکه مسدود شده)", - "description":"English: " + "popupMoreButton_v2": { + "message": "بیشتر", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"غیر فعال سازی پیوندهای نظارتی \/ هدایتی", - "description":"English: " + "popupLessButton_v2": { + "message": "کمتر", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"جلوگیری WebRTC از افشاسازی آدرس های IP محلی", - "description":"English: " + "popupTipGlobalRules": { + "message": "قوانین همگانی: این ستون برای قوانینی است که برای همۀ سایت ها اعمال می شوند.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"رفتار پیش فرض", - "description":"" + "popupTipLocalRules": { + "message": "قوانین محلی: این ستون برای قوانینی است که تنها در این وب‌گاه اعمال می شود.\nقوانین محلی بر قوانین سراسری برتری دارد.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"این رفتارهای پیش فرض بسته به هر وب‌گاهیی می تواند باطل شود", - "description":"" + "popupTipSaveRules": { + "message": "برای دائمی سازی تغییرات کلیک کنید.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"غیر فعال‌سازی انسداد تزیینی", - "description":"" + "popupTipRevertRules": { + "message": "برای دور انداختن تغییراتی که اعمال کرده اید کلیک کنید.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"انسداد عناصر مدیایی حجیم تر از {{input:number}} کیلوبایت", - "description":"" + "popupAnyRulePrompt": { + "message": "همه", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"انسداد فونت های از راه دور", - "description":"" + "popupImageRulePrompt": { + "message": "تصاویر", + "description": "" }, - "settingsStorageUsed":{ - "message":"فضای مصرفی: {{value}} بایت", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "3rd-party", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"آخرین بازیابی:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "تصاویر/css سایت های ثالث", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"آخرین پشتیبانی:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "اسکریپت های درون خطی", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} فیلتر های شبکه + {{cosmeticFilterCount}} فرم های فیلتر انتخابی:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "اسکریپت های 1st-party", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"تعداد {{used}} از {{total}} مورد استفاده شده", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "اسکریپت های 3rd-party", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"بروز رسانی خودکار لیست فیلتر.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "فریم های 3rd-party", + "description": "" }, - "3pUpdateNow":{ - "message":"اکنون به روز رسانی شود", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "دامنه های دست خورده", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"پاکسازی تمام انبارها", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "تعداد {{count}} از {{total}} تا", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"تجزیه و اجرای فیلترهای انتخابی.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "نگارش", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      این گزینه Adblock Plus-compatible “element hiding” filters<\/a> را تجزیه و اجرا میکند. این فیلتر ها اساساً فنی هستند، آنها اشیاء موجود در صفحه وب را که مزاحم تلقی میشوند و با موتور فیلترینگ شبکه قابل بلاک کردن نیستند را حذف میکنند.<\/p>

      فعال کردن این قابلیت مصرف حافظه ی uBlock<\/i>را افزایش میدهد.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "اسکریپت", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignore generic cosmetic filters", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "چارچوب", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites.

      Though handled efficiently by uBlock₀, generic cosmetic filters may still contribute measurable memory and CPU overhead on some web pages, especially for large and long-lived ones.

      Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters, and also lower the memory footprint of uBlock₀ itself.

      It is recommended to enable this option on less powerful devices.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "ایجاد", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"فهرست میزبان های مسدود شده", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "انتخاب", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"اعمال تغییرات", - "description":"English: Apply changes" + "pickerQuit": { + "message": "خروج", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"تبلیغات", - "description":"English: Ads" + "pickerPreview": { + "message": "پیش نمایش", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"حریم خصوصی", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "فیلترهای شبکه", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"دامنه های مخرب", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "فیلترهای انتخابی", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"اجتماعی", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "کلیک، کنترل-کلیک", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"چند منظوره", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "بلاک کردن این بخش", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"مناطق، زبانها", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "مخفی کردن نگاهدارنده اشیاء بلاک شده", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"سفارشی", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "نمایش تعداد درخواست های بلاک شده بر روی آیکون", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"هر آدرس در یک خط. خطوطی با پیشوند ‘!’ در نظر گرفته نمیشوند. آدرس های نامعتبر نیز در سکوت نادیده گرفته میشوند.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "غیر فعال سازی راهنماها", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"تجزیه", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "استفاده از منوی متنی در زمانهای لازم", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"پاکسازی حافظه پنهان", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "بهینه سازی کور رنگی", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"نسخه جدید آماده دریافت", - "description":"English: new version available" + "settingsAppearance": { + "message": "ظاهر", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"منقضی شده", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "پوسته", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"آخرین به روز رسانی: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "رنگ اصلی دلخواه", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"یک فیلتر در هر خط. یک فیلتر می تواند آدرس هاست ساده یا فیلتر سازگار با Adblock plus باشد. خطوط با پیشوند ‘!’ نادیده گرفته می شوند.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "فعال سازی پشتیبانی ذخیره سازی ابری", + "description": "" }, - "1pImport":{ - "message":"وارد کردن و الحاق", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "من کاربر حرفه ای هستم (لازم است بخوانید)", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"خروجي گرفتن", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "غیر فعال کردن واکشی اولیه (برای جلوگیری از هر گونه اتصال برای درخواست های مسدود شدۀ شبکه)", + "description": "English: " }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "غیرفعال کردن حسابرسی پیوند", + "description": "English: " }, - "1pApplyChanges":{ - "message":"اعمال تغییرات", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "جلوگیری کردن از WebRTC از افشاسازی آدرس های IP محلی", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"قوانین دائمی", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "رفتار پیش فرض", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"قوانین موقت", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "تنظیمات مخصوص هر سایت این تنظیمات پیش فرض را لغو می‌کند", + "description": "" }, - "rulesRevert":{ - "message":"بازگرداندن", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "غیر فعال‌سازی فیلتر زیبا سازی", + "description": "" }, - "rulesCommit":{ - "message":"ذخیره در منبع", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "انسداد عناصر رسانه ای حجیم تر از {{input:number}} کیلوبایت", + "description": "" }, - "rulesEdit":{ - "message":"ویرایش", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "انسداد فونت های راه دور", + "description": "" }, - "rulesEditSave":{ - "message":"ذخيره", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "غیرفعال کردن جاوا اسکریپت", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"لغو", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "مسدود کردن براساس گزارشات سیاست امنیت محتوا", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"وارد کردن از فایل...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "اسامی متعارف را از حالت قفل خارج کنید", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"خروجی گرفتن به فایل...", - "description":"" + "settingsAdvanced": { + "message": "پیشرفته", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "قابلیت‌های مناسب برای کاربران فنی", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"لیست قوانین فیلترینگ پویای شما.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "تنظیمات پیشرفته", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"نحوه استفاده: source destination type action<\/code> (مستندات کامل<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "آخرین بازیابی:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"لیست شما از هاست هایی که uBlock₀ در آنها غیرفعال خواهد شد. یک ورودی در هر خط. هاست های نامعتبر بدون اشاره ای نادیده گرفته می شوند.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "آخرین پشتیبانی:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"وارد کردن و الحاق", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} فیلتر های شبکه + {{cosmeticFilterCount}} فرم های فیلتر انتخابی:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"خروجي گرفتن", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "تعداد {{used}} از {{total}} مورد استفاده شده", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "بروز رسانی خودکار لیست فیلتر.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"اعمال تغییرات", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "اکنون به روز رسانی شود", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"نوع", - "description":"English: Type" + "3pPurgeAll": { + "message": "پاکسازی تمام انبارها", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"دامنه", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "تجزیه و اجرای فیلترهای انتخابی.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"آدرس", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "

      این گزینه فیلترهای “مخفی‌کردن اشیا” سازگار با ادبلاک پلاس را تجزیه و اجرا میکند. این فیلتر ها اساساً فنی هستند، آنها اشیاء موجود در صفحه وب را که مزاحم تلقی میشوند و با موتور فیلترینگ شبکه قابل بلاک کردن نیستند را حذف میکنند.

      فعال کردن این قابلیت مصرف حافظه ی uBlock را افزایش میدهد.

      ", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"فیلتر", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "نادیده گرفتن فیلترهای زیبا سازی عمومی", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"همه", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

      فیلترهای زیبا سازی عمومی، آن دسته از فیلترهای زیبا سازی هستند که در همه وب سایت ها کاربرد دارند.\n

      اگر چه بصورت موثر توسط uBlock₀ انجام شده، ولی فیلترهای عمومی زیبا سازی هنوز هم ممکن است سربار حافظه قابل اندازه گیری و سربار پردازنده در برخی از صفحات وب به جای بگذارد، به ویژه برای صفحات وب بزرگ و طولانی مدت.

      فعال کردن این گزینه سربارهای حافظه و پردازنده را که به صفحات اضافه شده به عنوان نتیجۀ اجرای فیلترهای عمومی زیبا سازی برطرف می‌کند، و همچنین ردپای حافظۀ خود uBlock₀ را کمتر می‌کند

      توصیه می شود این گزینه را در دستگاه های با قدرت کمتر فعال کنید.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"پشت صحنه", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "تا وقتی همه‌ی فیلترها لود نشده‌اند ارتباط شبکه را قطع کن", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"فیلتر کردن مطالب لاگ", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "فهرست میزبان های مسدود شده", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"بیشترین تعداد مطالب لاگ", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "اعمال تغییرات", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"زمینه:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "داخلی", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"نوع:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "تبلیغات", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"فیلترینگ آدرس اینترنتی پویا", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "حریم خصوصی", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"فیلترینگ ایستا", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "دامنه های مخرب", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} درخواست های شبکه از {{type}} {{br}} هر آدرس اینترنتی مطابقت داده می شود {{url}} {{br}}و هر چه شد{{origin}},{{br}}{{importance}} یک فیلتر تطبیق استثنا وجود دارد.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "ابزارک‌های اجتماعی", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"انسداد", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "اطلاعیه‌های کلوچک", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"مجاز", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "مزاحم‌ها", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"نوع “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "چند منظوره", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"هر نوعی", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "مناطق، زبانها", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"از “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "سفارشی", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"از هر جایی", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "وارد شده", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"بجز وقتی", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "هر آدرس در یک خط. خطوطی با پیشوند ‘!’ در نظر گرفته نمیشوند. آدرس های نامعتبر نیز در سکوت نادیده گرفته میشوند.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"حتی اگر", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "منقضی شده.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"انسداد ایستا {{filter}} یاقت شد در:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "نمایش محتویات", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"تغییرات اخیر", - "description":"English: Change log" + "3pLastUpdate": { + "message": "آخرین به روز رسانی: {{ago}}.\nبرای یک به روز رسانی اجباری کلیک کنید.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"ویکی", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "درحال بروزرسانی...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"پشتیبانی", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "یک خطای شبکه از بروزشدن این منبع جلوگیری کرد.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"سورس کد (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "پالایه‌ها از منابع نامعتبر افزوده نشود.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"مشارکت کنندگان", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "فعال‌سازی پالایه‌های سفارشی من", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"پشتیبان گیری در فایل", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "اجازه‌دهی به پالایه‌های سفارشی نیازمند اعتمادسازی ", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "وارد کردن و الحاق", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"بازیابی از فایل...", - "description":"English: Restore from file..." + "1pExport": { + "message": "خروجي گرفتن", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"تنظیم مجدد تنظیمات پیش فرض...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"تمام تنظیمات با استفاده از پشتیبان گیری در {{time}}، رونویسی شده و uBlock₀ مجدد راه اندازی میشود.\n\nتمام تنظیمات موجود با استفاده از داده های پشتیبانی رونویسی شود؟", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "اعمال تغییرات", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"داده ها نمی تواند خوانده شوند و یا نامعتبر اند", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "قوانین دائمی", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"تمام تنظیمات شده حذف و uBlock دوباره راه اندازی خواهد شد.\n\nتنظیم مجدد uBlock به تنظیمات کارخانه؟", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "قوانین موقت", + "description": "header" }, - "errorCantConnectTo":{ - "message":"قادر به اتصال به {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "بازگرداندن", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock: لینک زیر به لیست فیلتر ها اضافه شود؟\n\nعنوان: \"{{title}}\"\nآدرس: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "ذخیره در منبع", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"1 دقیقه پیش", - "description":"English: a minute ago" + "rulesEdit": { + "message": "ویرایش", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} دقیقه پیش", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "ذخيره", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"یک ساعت پیش", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "لغو", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} ساعت قبل", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "وارد کردن از فایل...", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"دیروز", - "description":"English: a day ago" + "rulesExport": { + "message": "خروجی گرفتن به فایل...", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} روز قبل", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"نمایش داشبورد", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "لیست قوانین فیلترینگ پویای شما.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"نمایش درخواست ثبت شبکه", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "نحوه استفاده: source destination type action (مستندات کامل).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"خاموش", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "مرتب‌سازی:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"ublock از بارگذاری این صفحات جلوگیری کرده:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "نوع قانون", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"بخاطر فیلتر زیر", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "منبع ", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"بدون پارامترها", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "مقصد", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"یافته شده در:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "دستور العمل‌های لیست سفید حکم می‌کند که uBlock₀ باید بر روی کدام یک از صفحات وب غیر فعال باشد. در هر خط فقط یک مورد. دستور العمل‌های نامعتبر بدون اشاره ای نادیده گرفته شده و بیرون انداخته می‌شوند.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"بازگشت به عقب", - "description":"English: Go back" + "whitelistImport": { + "message": "وارد کردن و الحاق", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"بستن این پنجره", - "description":"English: Close this window" + "whitelistExport": { + "message": "خروجي گرفتن", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"غیر فعال کردن بلاک برای {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"موقتا", - "description":"English: Temporarily" + "whitelistApply": { + "message": "اعمال تغییرات", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"دائمی", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "نوع", + "description": "English: Type" }, - "cloudPush":{ - "message":"صدور به فضای ذخیره سازی ابری", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "دامنه", + "description": "English: Domain" }, - "cloudPull":{ - "message":"ورود از فضای ذخیره سازی ابری", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "آدرس", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"ورود از فضای ذخیره سازی ابری و ادغام با تنظیمات فعلی", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "فیلتر", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "همه", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"نام این وسیله:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "پشت صحنه", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"ثبت", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "برگۀ فعلی", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"بازگشت", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "بارگیری مجدد محتوای صفحه", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"بایت", - "description":"" + "loggerDomInspectorTip": { + "message": "تغییر وضعیت جستجوگر DOM", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"اجازه موقت عناصر مدیای حجیم", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "تغییر وضعیت پنل پاپ‌آپ", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"این باید آخرین مطلب باشد", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "ویکی uBlock Origin: ثبت‌کننده رویداد‌ها", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "پاک‌کردن رویداد‌ها", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "توقف ثبت رویداد‌ها (تمام داده‌های ورودی را نادیده بگیر)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "از سرگیری ثبت رویداد‌ها", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "تغییر وضعیت فیلتر ثبت رویداد‌ها", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "فیلتر کردن محتوای لاگ", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "گزینه‌های فیلتر ثبت رویداد‌ها", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "نفی", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "مسدود شده", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "مجاز", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "تغییر کرده", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "1st-party", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "طرف سوم", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "جزئیات", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "فیلتر", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "لیست فیلتر", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "قانون", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "محتوا", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "محتوای ریشه", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Partyness", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "نوع", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "آدرس", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "فیلترینگ پویای آدرس اینترنتی", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "زمینه:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "نوع:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "فیلترینگ ایستا", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} درخواست های شبکه از نوع {{type}}{{br}} که مطابقت دارد با آدرس اینترنی {{url}}{{br}} و سرچشمه می‌گیرد از {{origin}}،{{br}}{{importance}} اینها یک فیلتر استثناء از تطبیق هستند.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "انسداد", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "مجاز", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "نوع “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "هر نوعی", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "از “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "از هر جایی", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "بجز وقتی", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "حتی اگر", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "انسداد ایستا {{filter}} یافت شد در:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "فیلتر ایستا {{filter}} در هیچ یک از لیست‌های فیلتر فعال پیدا نشد", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "رویدادهای ورودی که مطابق سه شرط زیر نباشند، بصورت خودکار نادیده گرفته خواهند شد:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "ورودی‌های {{input}} دقیقه اخیر را نگه دار", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "در هر سربرگ حداقل {{input}} ورودی نگه دار", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "لطفا در هر تب حداکثر {{input}} مدخل نگه‌دارید", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "استفاده از {{input}} خط برای هر ورودی در حالت عمودی گسترش‌یافته", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "پنهان‌سازی ستون", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} زمان", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} فیلتر/قانون", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Context", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Partyness", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "لیست", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "جدول", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "ساده", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "مارک‌داون", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "باز کردن", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "ایجاد گزارش جدید", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "یافتن گزارش‌های مشابه", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "مستندات", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "مستنداتی که در uBlock/wiki هست را بخوانید تا با تمام امکانات uBlock Origin آشنا شوید.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "سوال‌ها و پشتیبانی", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "پاسخ به سوالات و انواع راهنمایی‌ها در ساب‌ردیت /r/uBlockOrigin ارائه می‌شود.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "مشکل فیلترها/وبسایتی ایراد دارد", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "مشکلات فیلتر با وب‌سایت‌های خاص را به uBlockOrigin/uAssets گزارش دهید. نیاز به یک حساب کاربری GitHub دارد.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "مهم: از مسدودکننده‌های مشابه دیگر در کنار یوبلاک اوریجین استفاده نکنید. این کار ممکن است باعث ایجاد مشکل در فیلترها برای برخی سایت‌ها شود.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "نکته‌ها: مطمئن شوید که فهرست‌های فیلتر شما به‌روز هستند. گزارشگر ابزار اصلی برای تشخیص مشکلات مربوط به فیلترهاست.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "گزارش اشکال", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "مشکلات مربوط به خود uBlock Origin را به uBlockOrigin/uBlock-issue گزارش دهید. نیاز به یک حساب کاربری GitHub دارد.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "اطلاعات مشکل‌گشایی", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "در زیر اطلاعات فنی آمده که ممکن است برای داوطلبانی که می‌خواهند در حل یک مشکل کمک کنند مفید باشد.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "گزارش یک اشکال در فیلتر", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "برای این که وقت داوطلبان با گزارش‌های تکراری گرفته نشوند، لطفا مطمئن شوید که این اشکال قبلا گزارش نشده باشد.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "فهرست‌های پالایش روزانه به‌روز می‌شوند. مطمئن شوید که مشکل شما پیشتر در فهرست‌های پالایش اخیر بررسی نشده باشد.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "تأیید کنید که مشکل پس از بارگذاری مجدد صفحهٔ مشکل‌دار همچنان وجود دارد.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "آدرس صفحه‌ی وب:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "این صفحه‌ی وب...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- یک گزینه را انتخاب کنید --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "تبلیغات یا باقی‌مانده‌هایی از آن نشان می‌دهد", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "دارای لایه‌های اضافی یا مشکلات مزاحم دیگر", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "یوبلاک اوریجین را تشخیص می‌دهد", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "دارای ایراد مربوط به حریم خصوصی است", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "وقتی یوبلاک اوریجین فعال است عملکرد درستی ندارد", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "تب یا پنجره‌ی ناخواسته باز می‌کند", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "منجر به بدافزار یا فیشینگ می‌شود", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "علامت زدن صفحه به عنوان \"NSFW\" (\"نامناسب برای کار\")", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "قوانین حریم خصوصی", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "تغییرات اخیر", + "description": "" + }, + "aboutCode": { + "message": "سورس کد (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "مشارکت کنندگان", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "کد منبع", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "ترجمه‌ها", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "لیست‌های فیلتر", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "وابستگی‌های خارجی (سازگار با GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "لیست‌های فیلتر اصلی uBlock Origin به صورت آزاد در این شبکه‌های تحویل محتوا میزبانی می‌شوند.", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "وقتی که لازم باشد تا یک لیست فیلتر به روزرسانی شود، از یکی از شبکه‌های تحویل محتوا به صورت تصادفی استفاده می‌شود", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "پشتیبان گیری در فایل", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "بازیابی از فایل...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "تنظیم مجدد تنظیمات پیش فرض...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "تمام تنظیمات با استفاده از پشتیبان گیری در {{time}}، رونویسی شده و uBlock₀ مجدد راه اندازی میشود.\n\nتمام تنظیمات موجود با استفاده از داده های پشتیبانی رونویسی شود؟", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "داده ها نمی تواند خوانده شوند و یا نامعتبر اند", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "تمام تنظیمات شما حذف شده و uBlock₀ دوباره راه اندازی خواهد شد.\n\nتنظیم مجدد uBlock₀ به تنظیمات کارخانه؟", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "خطای شبکه: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "آبونه شدن", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "1 دقیقه پیش", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} دقیقه پیش", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "یک ساعت پیش", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} ساعت قبل", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "دیروز", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} روز قبل", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "نمایش داشبورد", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "نمایش واقعه‌نگار", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "خاموش", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "صفحه مسدود شده است", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock₀ از بارگذاری این صفحات جلوگیری کرده:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "بخاطر فیلتر زیر", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "بدون پارامترها", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "یافته شده در:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "بازگشت به عقب", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "بستن این پنجره", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "دیگر در مورد این تارنما هشداری به من داده نشود", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "غیر فعال کردن بلاک برای {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "موقتا", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "دائمی", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "ادامه", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "صفحه مسدود شده می‌خواد به سایت دیگری شما را هدایت کند. در صورت قبول کردن، شما مستقیم به {{url}} وارد خواهید شد", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "دلیل", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "مخرب", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "ردیاب", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "صدور به فضای ذخیره سازی ابری", + "description": "tooltip" + }, + "cloudPull": { + "message": "وارد کردن از فضای ذخیره سازی ابری", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "وارد کردن از فضای ذخیره سازی ابری و ادغام با تنظیمات فعلی", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "نام این وسیله:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "هشدار! این تنظیمات پیشرفته را با مسئولیت خود تغییر دهید.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "ارسال", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "اعمال تغییرات", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "بازگرداندن", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "بایت", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "بلاک‌کردن اِلمان در فریم...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Subscribe to filter list...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "اجازه موقت عناصر رسانه‌ای حجیم", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "مشاهده کد منبع…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "یک میانبر وارد کنید", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "تغییر وضعیت پیمایش قفل شده", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "کپی به کلیپ‌بورد", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "انتخاب همه", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "فیلترگذاری ظاهری را فعال/غیرفعال کنید", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "تغییر وضعیت جاوا اسکریپت", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "حالت بلاک‌کردن غیرسخت‌گیر", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "فضای مصرفی: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "کیلوبایت", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "مگابایت", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "گیگابایت", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "برای بازکردن کلیک نمایید", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "خطا: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "فیلترگذاری به‌درستی در هنگام راه‌اندازی مرورگر انجام نشد. صفحه را دوباره بارگذاری کنید تا از فیلترگذاری صحیح اطمینان حاصل کنید.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "این باید آخرین مطلب باشد", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/fi/messages.json b/src/_locales/fi/messages.json index 667e4ec07feab..bd411bc97e685 100644 --- a/src/_locales/fi/messages.json +++ b/src/_locales/fi/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Viimeinkin tehokas ja kevyt mainosten estäjä.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Viimeinkin tehokas estotyökalu, joka ei kuormita prosessoria ja muistia.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Hallintapaneeli", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Hallintapaneeli", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Asetukset", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Varoitus! Olet tehnyt muutoksia, joita ei ole vielä tallennettu", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"3:nen osapuolen suodattimet", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Älä poistu", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Minun suodattimet", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ohita", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Omat säännöt", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Asetukset", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Valkolista", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Suodatinlistat", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Verkkopyyntöjen loki", - "description":"Title for the logger window" + "1pPageName": { + "message": "Omat suodattimet", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Tietoja", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Omat säännöt", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Painallus: poista käytöstä\/ota käyttöön uBlock₀ tällä sivustolla.\n\nCtrl+painallus: poista uBlock₀ käytöstä vain tällä sivulla.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Luotetut sivustot", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"pyyntöjä estetty", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Pikanäppäimet", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"tällä sivulla", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Pyyntöhistoria", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} tai {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Tietoja", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"asennuksen jälkeen", - "description":"English: since install" + "supportPageName": { + "message": "Tuki", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"tai", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Resurssien katselu", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Paina avataksesi hallintapaneeli", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Lisäasetukset", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Siirry elementtien valintaan", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Painallus: poista uBlock₀ käytöstä/ota se käyttöön tällä sivustolla.\n\nCtrl+painallus: poista uBlock₀ käytöstä vain tällä sivulla.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Näytä pyyntöjen loki", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Poista uBlock₀ käytöstä tällä sivustolla painamalla tästä.\n\nCtrl+painallus poistaa uBlock₀:n käytöstä vain tällä sivulla.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Aktivoi ponnahdusikkunoiden esto tälle sivulle", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Ota uBlock₀ käyttöön tällä sivustolla painamalla tästä.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Ota käyttöön suurien mediaelementtien estäminen tälle sivustolle", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "pyyntöjä estetty", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Aktivoi kosmeettinen suodatus tälle sivulle", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "tällä sivulla", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Estä etäladattavat fontit tällä sivulla", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Yleiset säännöt: tämä sarake on säännöille, joita käytetään kaikille sivustoille.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "asennuksen jälkeen", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Paikalliset säännöt: tämä sarake on säännöille, joita käytetään vain nykyiselle sivustolle.\nPaikalliset säännöt ohittavat yleiset säännöt.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "tai", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Paina tehdäksesi muutoksesi pysyviksi.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Estetty tällä sivulla", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Paina kumotaksesi muutoksesi.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Estetty asennuksen jälkeen", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"kaikki", - "description":"" + "popupDomainsConnected_v2": { + "message": "Verkkotunnuksia yhdistetty", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"kuvat", - "description":"" + "popupTipDashboard": { + "message": "Avaa hallintapaneeli", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"3. osapuoli", - "description":"" + "popupTipZapper": { + "message": "Avaa elementtien piilotustila", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"3. osapuolen css\/kuvat", - "description":"" + "popupTipPicker": { + "message": "Avaa elementtien valintatila", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"upotetut skriptit", - "description":"" + "popupTipLog": { + "message": "Näytä pyyntöhistoria", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"1:sen osapuolen skriptit", - "description":"" + "popupTipReport": { + "message": "Ilmoita ongelmasta tällä verkkosivustolla", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"3:nen osapuolen skriptit", - "description":"" + "popupTipNoPopups": { + "message": "Muuta ponnahduseston tilaa tällä sivustolla", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"3:nen osapuolen kehykset", - "description":"" + "popupTipNoPopups1": { + "message": "Estä kaikki ponnahdukset tällä sivustolla painamalla tästä", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"yhdistetyt verkkotunnukset", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Salli kaikki ponnahdukset tällä sivustolla painamalla tästä", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}}\/{{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Muuta suurten mediaelementtien eston tilaa tällä sivustolla", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Luo", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Estä suuret mediaelementit tällä sivustolla painamalla tästä", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Valitse", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Salli suuret mediaelementit tällä sivustolla painamalla tästä", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Lopeta", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Muuta kosmeettisen suodatuksen tilaa tällä sivustolla", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Esikatsele", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Poista kosmeettinen suodatus käytöstä tällä sivustolla painamalla tästä", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Verkkosuodattimet", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Ota kosmeettinen suodatus käyttöön tällä sivustolla painamalla tästä", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Kosmeettiset suodattimet", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Muuta ulkoisten fonttien lataustilaa tällä sivustolla", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Painallus, Ctrl-painallus", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Estä ulkoisten fonttien lataus tällä sivustolla painamalla tästä", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Estä elementti", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Salli ulkoisten fonttien lataus tällä sivustolla painamalla tästä", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Piilota estettyjen elementtien paikanpitäjät", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Estä JavaScript tällä sivustolla painamalla tästä", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Näytä estetyt pyynnöt työkalupalkin kuvakkeessa", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Salli JavaScript tällä sivustolla painamalla tästä", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Poista käytöstä työkaluvinkit", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Ponnahdukset", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Käytä sisältövalikkoa, kun mahdollista", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Suuret mediaelementit", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Mukauta värisokeille", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Kosmeettinen suodatus", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Ota käyttöön tuki pilvitallennukselle", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Ulkoiset fontit", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Olen edistynyt käyttäjä (Lue tämä<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Estä linkkien esihaku (jotta sitä kautta ei voi ladata estettyä sisältöä)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Enemmän", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Estä linkkien seuranta", - "description":"English: " + "popupLessButton_v2": { + "message": "Vähemmän", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Estä WebRTC:tä vuotamasta paikallista IP-osoitetta", - "description":"English: " + "popupTipGlobalRules": { + "message": "Yleiset säännöt: Sarake säännöille, joita käytetään kaikilla sivustoilla.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Oletustoiminto", - "description":"" + "popupTipLocalRules": { + "message": "Paikalliset säännöt: Sarake säännöille, joita käytetään vain nykyisellä sivustolla.\nPaikalliset säännöt ohittavat yleiset säännöt.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Nämä oletustoiminnot voidaan ohittaa sivustokohtaisesti", - "description":"" + "popupTipSaveRules": { + "message": "Tee muutoksistasi pysyviä painamalla tästä.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Poista kosmeettinen suodatus käytöstä", - "description":"" + "popupTipRevertRules": { + "message": "Kumoa muutoksesi painamalla tästä.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Estä mediaelementit, jotka ovat suurempia kuin {{input:number}} kt", - "description":"" + "popupAnyRulePrompt": { + "message": "kaikki", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Estä etäladattavat kirjasimet", - "description":"" + "popupImageRulePrompt": { + "message": "kuvat", + "description": "" }, - "settingsStorageUsed":{ - "message":"Tilaa käytetty: {{value}} tavua", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "3. osapuoli", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Viimeisin palautus:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "Kolmannen osapuolen css/kuvat", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Viimeisin varmuuskopio:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "upotetut komentosarjat", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} verkkosuodatinta ja {{cosmeticFilterCount}} kosmeettista suodatinta kohteesta:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "1. osapuolen komentosarjat", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"käytetty {{used}}\/{{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "3. osapuolen komentosarjat", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Päivitä suodatinlista automaattisesti.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "3. osapuolen kehykset", + "description": "" }, - "3pUpdateNow":{ - "message":"Päivitä", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "verkkotunnuksia yhdistetty", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Tyhjennä välimuisti", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}}/{{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Jäsennä ja pakota käyttöön kosmeettiset suodattimet.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Versio", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Tämä asetus ottaa käyttöön Adblock Plus-yhteensopivat “elementtejä piilottavat” suodattimet<\/a>. Nämä suodattimet ovat pääasiassa ehosteita. Ne piilottavat verkkosivuilta elementtejä, jotka ovat visuaalisesti häiritseviä eikä niitä voi estää verkkopyyntöihin pohjautuvalla suodatinmoottorilla. <\/p>

      Tämä ominaisuus nostaa uBlock<\/i>in muistinkäyttöä.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "komentosarja", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Jätä huomioitta geneeriset kosmeettiset suodattimet", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "kehys", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Yleiset kosmeettiset suotimet ovat ne kosmeettiset suotimet joiden on tarkoitus päteä kaikkiin web-sivustoihin.

      Vaikka uBlock₀ käsittelee ne tehokkaasti, yleiset kosmeettiset suotimet voivat silti lisätä mitattavaa muisti- ja CPU-ylikuormitusta joillakin web-sivuilla, erityisesti suurilla ja pitkäikäisillä sivuilla.

      Tämän valinnan salliminen karsii pois web-sivuille lisätyn muisti- ja CPU-ylikuormituksen joka aiheutuu yleisten kosmeettisten suotimien käsittelystä, ja alentaa myös uBlock₀ sovelluksen muisti-jalanjälkeä.

      On suositeltavaa sallia tämä vaihtoehto vähemmän tehokkailla laitteilla.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Luo", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lista estetyistä isännistä", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Valitse", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Vahvista muutokset", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Lopeta", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Mainokset", - "description":"English: Ads" + "pickerPreview": { + "message": "Esikatsele", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Tietosuoja", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Verkkosuodattimet", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Malware domains", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Kosmeettiset suodattimet", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Sosiaalinen", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Painallus, Ctrl-painallus", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Monikäyttöinen", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Estä elementti…", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Alueet, kielet", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Piilota estettyjen elementtien paikkamerkit", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Mukautettu", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Näytä estettyjen pyyntöjen määrä", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Yksi URL-osoite kullekin riville. Rivit, joiden alussa on ‘!’, jätetään huomiotta. Epäkelvot osoitteet ohitetaan ilman ilmoitusta.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Älä näytä työkaluvihjeitä", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Vahvista", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Käytä kontekstivalikkoa tarvittaessa", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"tyhjennä välimuisti", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Värisokeille sopiva tila", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"Uusi versio saatavilla", - "description":"English: new version available" + "settingsAppearance": { + "message": "Ulkoasu", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"vanhentunut", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Teema", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Viimeisin päivitys: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Oma korostusväri", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Yksi suodatin kullekin riville. Suodatin voi olla pelkkä osoite tai Adblock Plus -yhteensopiva suodatin. Rivit, joiden alussa on ‘!’, jätetään huomiotta.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Käytä pilvitallennusta", + "description": "" }, - "1pImport":{ - "message":"Tuo ja liitä loppuun", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Olen edistynyt käyttäjä", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Vie", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Älä käytä esihakua (estää kaikki yhteydet estetyiltä verkkopyynnöiltä)", + "description": "English: " }, - "1pExportFilename":{ - "message":"staattiset-ublock-suodattimeni_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Älä salli hyperlinkkien käytönseurantaa", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Vahvista muutokset", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Estä paikallisen IP-osoitteen vuoto WebRTC:n välityksellä", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Pysyvät säännöt", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Oletuskäytännöt", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Väliaikaiset säännöt", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Nämä oletuskäytännöt voidaan ohittaa sivustokohtaisesti", + "description": "" }, - "rulesRevert":{ - "message":"Kumoa", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Älä käytä kosmeetista suodatusta", + "description": "" }, - "rulesCommit":{ - "message":"Lähetä", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Estä mediaelementit, jotka ovat suurempia kuin {{input:number}} kt", + "description": "" }, - "rulesEdit":{ - "message":"Muokkaa", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Estä ulkoisten fonttien lataus", + "description": "" }, - "rulesEditSave":{ - "message":"Tallenna", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Poista JavaScript käytöstä", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Hylkää", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Estä CSP-raportit", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Tuo tiedostosta...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Paljasta kanoniset nimet (CNAME-uncloaking)", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Vie tiedostoon...", - "description":"" + "settingsAdvanced": { + "message": "Lisäasetukset", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"dynaamiset-ublock-saantoni_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Teknisille käyttäjille sopivat ominaisuudet", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Lista dynaamisista suodatussäännöistäsi.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "Lisäasetukset", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Säännön syntaksi: lähde kohde tyyppi toiminto<\/code> (täysi dokumentaatio<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Viimeisin palautus:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Lista osoitteista, joissa haluat kytkeä uBlock₀:n pois päältä. Kirjoita yksi osoite kullekin riville. Virheelliset säännöt ohitetaan.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Viimeisin varmuuskopio:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Tuo ja lisää", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} verkkosuodatinta + {{cosmeticFilterCount}} kosmeettista suodatinta:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Vie", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "Käytössä {{used}}/{{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"minun-ublock-valkolista_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Päivitä suodatinlistat automaattisesti", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Vahvista muutokset", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Päivitä nyt", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Tyyppi", - "description":"English: Type" + "3pPurgeAll": { + "message": "Tyhjennä kaikki välimuistit", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Verkkotunnus", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Jäsennä ja pakota kosmeettiset suodattimet", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL-Osoite", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Kosmeettisten suodattimien tehtävä on piilottaa sivujen elementtejä, jotka on luokiteltu visuaalisiksi ärsykkeiksi ja joiden esto ei ole mahdollista verkkopyyntöjen estoon perustuvien suodatusmoottoreiden avulla.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Suodatin", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ohita kosmeettiset yleissuodattimet", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Kaikki", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Kosmeettiset yleissuodattimet ovat sellaisia kosmeettisia suodattimia, jotka on tarkoitettu käytettäväksi kaikilla verkkosivustoilla. Tämä asetus poistaa tällaisten suodattimien käsittelystä verkkosivuille aiheutuvan, korkeamman keskusmuistin ja suorittimen kuormituksen.\n\nAsetuksen käyttö on suositeltavaa heikkotehoisilla laitteilla.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Kulissien takana", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Keskeytä verkon toiminta, kunnes kaikki suodatinlistat on ladattu", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"suodata lokimerkinnät", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Lista estetyistä osoitteista", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Maksimi määrä lokimerkintöjä", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Vahvista muutokset", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Konteksti:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Laajennukseen sisältyvät", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tyyppi:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Mainokset", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Dynaaminen URL-suodatus", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Tietosuoja", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Staattinen suodatus", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Haittaohjelmasuojaus, tietoturva", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} verkkopyyntö {{type}}, {{br}}jonka URL-osoite vastaa {{url}} {{br}}ja joka on peräisin {{origin}},{{br}}{{importance}} löytyy vastaava poikkeussuodatin.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Sosiaaliset widgetit", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Estä", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Evästeilmoitukset", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Salli", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Ärsykkeet", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tyyppi \"{{type}}\"", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Yleishyödylliset", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"kaikki tyypit", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Alueet, kielet", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"kohteesta \"{{origin}}\"", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Muut listat", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"kaikkialta", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Tuo…", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"paitsi jos", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Yksi URL-osoite riviä kohden. Virheelliset osoitteet ohitetaan huomaamattomasti.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"vaikka", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Vanhentunut", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Staattinen suodatus {{filter}} löytyi:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "Näytä sisältö", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Muutosloki", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Viimeisin päivitys: {{ago}}.\nPakota päivitys painamalla tästä.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Päivitetään…", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Tuki", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Verkkovirhe esti resurssin päivityksen.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Lähdekoodi (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Älä lisää suodattimia lähteistä, joihin et luota.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Kehittäjät", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Käytä omia suodattimia", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Varmuuskopioi tiedostoon", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Salli luottamusta edellyttävät omat suodattimet", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"minun-ublock-varmuuskopio_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Tuo ja lisää…", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Palauta tiedostosta...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Vie…", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Palauta oletusasetukset...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "omat-staattiset-ublock-suodattimet_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Kaikki asetuksesi korvataan käyttäen tietoja, jotka on varmuuskopioitu {{time}} ja uBlock₀ käynnistyy uudelleen.\nPäällekirjoitetaanko kaikki nykyiset asetukset käyttäen varmuuskopioituja tietoja?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Vahvista muutokset", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Tietoa ei voitu lukea, tai se on viallista", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Pysyvät säännöt", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Kaikki asetuksesi poistetaan ja uBlock₀ käynnistyy uudelleen. \n\nPalautetaanko uBlock₀ oletusasetuksiin?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Tilapäiset säännöt", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Yhteyttä ei voitu muodostaa osoitteeseen: {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Palauta", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Lisää seuraava URL-osoite mukautettujen suodattimien luetteloihisi?\n\nNimi: \"{{title}}\"\nURL-osoite: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Pysyväksi", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"minuutti sitten", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Muokkaa", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minuuttia sitten", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Tallenna", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"tunti sitten", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Hylkää", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} tuntia sitten", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Tuo tiedostosta…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"päivä sitten", - "description":"English: a day ago" + "rulesExport": { + "message": "Vie tiedostoon…", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} päivää sitten", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "omat-dynaamiset-ublock-saannot_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Näytä Hallintapaneeli", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Listaus dynaamisista suodatussäännöistä.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Näytä Verkkopyyntöjen Loki", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Sääntösyntaksi: lähde kohde tyyppi toiminto (täysi ohje).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"pois päältä", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Järjestys:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin on estänyt seuraavaa sivua lataamasta:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Säännön tyyppi", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Seuraavan suodattimen takia", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Lähde", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"ilman parametrejä", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Kohde", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Löytyy:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Luotettu sivusto -luokitukset määrittelevät millä sivuilla uBlock Originia ei käytetä. Yksi osoite riviä kohden.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Mene takaisin", - "description":"English: Go back" + "whitelistImport": { + "message": "Tuo ja lisää…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Sulje tämä ikkuna", - "description":"English: Close this window" + "whitelistExport": { + "message": "Vie…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Poista tiukka estäminen {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "omat-luotetut-ublock-sivustot_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Tilapäisesti", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Vahvista muutokset", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Pysyvästi", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Tyyppi", + "description": "English: Type" }, - "cloudPush":{ - "message":"Vie pilveen", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Verkkotunnus", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Tuo pilvestä", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Tuo pilvestä ja yhdistä nykyisten asetuksen kanssa", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Suodatin", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Kaikki", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Tämän laitteen nimi:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Piilotetut", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Lähetä", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Nykyinen välilehti", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Kumoa", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Lataa välilehden sisältö uudelleen", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"tavua", - "description":"" + "loggerDomInspectorTip": { + "message": "Kytke DOM-rakennenäkymä", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Salli tilapäisesti suuret mediaelementit", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Kytke ponnahduspaneeli", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: Pyyntöhistoria", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Tyhjennä pyyntöhistoria", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Pysäytä pyyntöhistoria (ohita kaikki saapuva tietoliikenne)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Käynnistä pyyntöhistoria", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Muuta pyyntöhistorian suodatusta", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "Suodata pyyntöhistoriaa", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Pyyntöhistorian suodatusvalinnat", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Ei", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "tapahtumarikas", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "estetty", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "sallittu", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "muokattu", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "1. osapuoli", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "3. osapuoli", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Tiedot", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Suodatin", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Suodatinlista", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Sääntö", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Konteksti", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Juurikonteksti", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Osapuoli", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Tyyppi", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL-sääntö", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Konteksti: ", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Tyyppi: ", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Staattinen suodatus", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} verkkopyynnöt, joiden tyyppi on {{type}}, {{br}}URL vastaa osoitetta {{url}} {{br}}ja joiden lähde on {{origin}},{{br}}{{importance}} vastaava poikkeussuodatin.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Estä", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Salli", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "{{type}}", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "mikä tahansa", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "{{origin}}", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "mikä tahansa", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "paitsi, kun löytyy", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "vaikka löytyisi", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Staattinen suodatin {{filter}} löydettiin:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Staattista suodatinta ei löytynyt tällä hetkellä käytössä olevilta suodatinlistoilta", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Merkinnät, jotka eivät täytä alla olevista kolmesta ehdosta jokaista, ohitetaan automaattisesti:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Säilytä merkinnät viimeisten {{input}} minuutin ajalta", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Säilytä enintään {{input}} sivulatausta välilehteä kohden", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Säilytä enintään {{input}} pyyntöä välilehteä kohden", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Näytä pyynnöille {{input}} riviä pystysuutaan laajennetussa tilassa", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Piilota sarakkeita:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Aika", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Suodatin/sääntö", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Konteksti", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Osapuoli", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Lista", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Taulukko", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Pelkkä teksti", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown-kieli", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Avaa", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Luo GitHubiin uusi ilmoitus", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Etsi GitHubista vastaavia ilmoituksia", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Ohje", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Lue ohjeet sijainnista uBlock/wiki tutustuaksesi uBlock Originin kaikkiin ominaisuuksiin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Kysymykset ja tuki", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Vastauksia kysymyksiin ja muuta tukea on saatavilla /r/uBlockOrigin-subredditistä.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Suodatusongelma/sivusto on hajonnut", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Ilmoita sivustokohtaisista suodatinongelmista uBlockOrigin/uAssets -ongelmaseurantaan. Vaatii GitHub-tilin.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Tärkeää: Vältä muiden vastaavien estotyökalujen samanaikaista käyttöä uBlock Originin kanssa, koska se voi aiheuttaa ongelmia joillakin sivustoilla.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Vinkkejä: Varmista, että suodatinlistasi ovat ajan tasalla. Pyyntöhistoria on pääasiallinen työkalu suodattimiin liittyvien ongelmien selvityksessä.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Virheilmoitus", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Ilmoita uBlock Origin -laajennuksen ongelmista uBlockOrigin/uBlock-ongelmaseurannanssa. Vaatii GitHub-tilin.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Vianselvitystiedot", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Alla on teknisiä tietoja, jotka saattavat auttaa ongelmasi ratkonnassa auttavia vapaaehtoisia.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Ilmoita suodatinongelmasta", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Välttääksesi vapaaehtoisten kuormittamisen ylimääräisillä ilmoituksilla, tarkasta ensin onko ongelmasta jo ilmoitettu. Huomioi: Painikkeen painallus lähettää sivun osoitteen GitHubiin.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Suodatinlistoja päivitetään päivittäin. Varmista, ettei ongelmaasi ole jo korjattu listojen uusissa versioissa.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Vahvista ongelman edelleen esiintyvän kyseisellä verkkosivulla.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Verkkosivun osoite:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Verkkosivu…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Valitse aihe --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Näyttää mainoksia tai niiden jäänteitä", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Sisältää peiteruutuja tai muita ärsykkeitä", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Havaitsee uBlock Originin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Sisältää tietosuojaan liittyviä ongelmia", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Ei toimi oikein uBlock Originin ollessa käytössä", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Avaa ei-toivottuja välilehtiä tai ikkunoita", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Johtaa badwareen ja tietojenkalasteluun", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Luokittele verkkosivu ns. työpaikalle sopimattomaksi, \"NSFW\" (\"Not Safe For Work\")", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Tietosuojakäytäntö", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Muutoshistoria", + "description": "" + }, + "aboutCode": { + "message": "Lähdekoodi (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Avustajat", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Lähdekoodi", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Käännökset", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Suodatinlistat", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Ulkopuoliset riippuvuudet (GPLv3-yhteensopiva):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO:n omat suodatinlistat ovat vapaasti saatavilla seuraavista sisällönjakeluverkoista:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Suodatinlistat päivitetään satunnaisesti valitusta sisällönjakeluverkosta (CDN).", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Varmuuskopioi tiedostoon…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "oma-ublock-varmuuskopio_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Palauta tiedostosta…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Palauta oletusasetukset…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Kaikki asetuksesi korvataan {{time}} varmuuskopioiduilla tiedoilla ja uBlock₀ käynnistyy uudelleen.\n\nKorvataanko kaikki nykyiset asetukset varmuuskopioduilla tiedoilla?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Tietoja ei voitu lukea tai ne ovat virheellisiä", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Kaikki asetuksesi poistetaan ja uBlock₀ käynnistyy uudelleen. \n\nPalautetaanko uBlock₀ oletusasetuksiin?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Verkkovirhe: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Tilaa", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "minuutti sitten", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} minuuttia sitten", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "tunti sitten", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} tuntia sitten", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "päivä sitten", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} päivää sitten", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Näytä Hallintapaneeli", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Näytä pyyntöhistoria", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "ei käytössä", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Sivu estetty", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock₀ on estänyt seuraavan sivun latauksen:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Seuraavan suodattimen vuoksi:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "ilman parametrejä", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Sisältyy listoihin:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Palaa takaisin", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Sulje tämä ikkuna", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Älä varoita tästä sivustosta uudelleen", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Älä käytä tiukkaa estoa osoitteelle {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Tilapäisesti", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Pysyvästi", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Jatka", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Estetty sivu ohjautuu eri sivustolle. Jos jatkat, siirryt suoraan osoitteeseen {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Syy:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Haitallinen", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Seuranta", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Huonomaineinen", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Vie pilvitallennustilaan", + "description": "tooltip" + }, + "cloudPull": { + "message": "Tuo pilvitallennustilasta", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Tuo pilvitallennustilasta ja yhdistä nykyisiin asetuksiin", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Tämän laitteen nimi:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Varoitus! Muuta näitä lisäasetuksia omalla vastuullasi.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Lähetä", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Vahvista muutokset", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Palauta", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "tavua", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Estä elementti kehyksestä…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Tilaa suodatinlista…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Salli suuret mediaelementit tilapäisesti", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Näytä lähdekoodi…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Syötä näppäinyhdistelmä", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Kytke puoliskojen välisen vierityksen lukitus", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Kopioi leikepöydälle", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Valitse kaikki", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Kytke kosmeettinen suodatus", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Kytke JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Kevennetty estotila", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Tallennustilan käyttö: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "kt", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "Mt", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "Gt", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Lataa painamalla tästä", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Virheitä: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Suodatus ei onnistunut kunnolla selaimen käynnistyessä. Päivitä sivu varmistaaksesi kunnollisen suodatuksen.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Tämän on oltava viimeinen merkintä", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/fil/messages.json b/src/_locales/fil/messages.json index f026973dbf904..3ec47e10ffc92 100644 --- a/src/_locales/fil/messages.json +++ b/src/_locales/fil/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Sa wakas! Isang magaling na blocker para sa Chromium-based browsers. Magaan sa CPU at memory.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Mainam na pangharang sa content. Magaan sa CPU at memorya.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Dashboard", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Dashboard", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Mga Setting", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Babala! Hindi pa na-save ang ilan mong mga pagbabago", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"3rd-party na mga filter", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Manatili", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Ang iyong filters", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Balewalain", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Mga patakaran", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Mga Setting", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Whitelist", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Listahan ng mga filter", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Logger", - "description":"Title for the logger window" + "1pPageName": { + "message": "Mga filter ko", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"About", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Mga patakaran ko", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Click: disable\/enable µBlock para sa site na to.\n\nCtrl+click: disable µBlock para lang sa pahina na to.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Mga pinagkakatiwalaang site", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"i-block ang mga request", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Mga Shortcut", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"sa pahina na to", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Talaan", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} o {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Tungkol", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"noong ininstall", - "description":"English: since install" + "supportPageName": { + "message": "Suporta", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"o", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Tingnan ang mga Asset", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"i-click para buksan ang dashboard", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Karagdagang mga setting", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Buksan ang element picker mode", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Click: patayin/paandarin ang uBlock₀ para sa site na ito.\n\nCtrl+click: patayin ang uBlock₀ sa pahinang ito lang.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Pumunta sa request log", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "I-click para patayin ang uBlock₀ sa site na ito.\n\nI-Ctrl+click para patayin ang uBlock₀ sa pahinang ito lang.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Toggle the blocking of all popups for this site", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "I-click para paandarin ang uBlock₀ sa site na ito.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Toggle the blocking of large media elements for this site", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "mga hinarang na hiling", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Toggle cosmetic filtering for this site", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "sa pahinang ito", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Toggle the blocking of remote fonts for this site", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Global rules: this column is for rules which apply to all sites.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "mula pagka-install", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "o", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Click to make your changes permanent.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Hinarang sa pahinang ito", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Click to revert your changes.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Hinarang mula pagka-install", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"all", - "description":"" + "popupDomainsConnected_v2": { + "message": "Mga konektadong domain", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"images", - "description":"" + "popupTipDashboard": { + "message": "Buksan ang dashboard", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"3rd-party", - "description":"" + "popupTipZapper": { + "message": "Buksan ang pantanggal sa mga elemento", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"3rd-party css\/images", - "description":"" + "popupTipPicker": { + "message": "Buksan ang tagapili sa mga elemento", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"inline scripts", - "description":"" + "popupTipLog": { + "message": "Buksan ang talaan", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"1st-party scripts", - "description":"" + "popupTipReport": { + "message": "Mag-ulat ng isyu sa website na ito", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"3rd-party scripts", - "description":"" + "popupTipNoPopups": { + "message": "Paandarin/patayin ang pagharang sa mga popup sa site na ito", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"3rd-party frames", - "description":"" + "popupTipNoPopups1": { + "message": "Pindutin upang harangin lahat ng mga popup sa site na ito", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"domains connected", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Pindutin upang payagan lahat ng mga popup sa site na ito", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} out of {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Paandarin/patayin ang pagharang sa mga malalaking elemento ng media sa site na ito", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Create", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Pindutin upang harangin ang mga malalaking elemento ng media sa site na ito", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Pick", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Pindutin upang ihinto ang pagharang sa mga malalaking elemento ng media sa site na ito", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Quit", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Paandarin/patayin ang kosmetikong pagfi-filter sa site na ito", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Preview", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Pindutin upang ihinto ang kosmetikong pagfi-filter sa site na ito", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Network filters", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Pindutin upang paandarin ang kosmetikong pagfi-filter sa site na ito", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Cosmetic filters", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Paandarin/patayin ang pagharang sa remote fonts sa site na ito", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Click, Ctrl-click", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Pindutin upang harangin ang remote fonts sa site na ito", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Block element", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Pindutin upang ihinto ang pagharang sa remote fonts sa site na ito", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Hide placeholders of blocked elements", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Pindutin upang harangin ang JavaScript sa site na ito", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Show the number of blocked requests on the icon", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Pindutin upang paandarin ang JavaScript sa site na ito", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Disable tooltips", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Mga window na nagpa-pop-up", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Make use of context menu where appropriate", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Malalaking mga elemento ng media", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Color-blind friendly", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Kosmetikong pagfi-filter", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Enable cloud storage support", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Remote fonts", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"I am an advanced user (Required reading<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Disable pre-fetching (to prevent any connection for blocked network requests)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Higit pa", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Disable hyperlink auditing", - "description":"English: " + "popupLessButton_v2": { + "message": "Mas konti", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Prevent WebRTC from leaking local IP addresses", - "description":"English: " + "popupTipGlobalRules": { + "message": "Mga pangkalahatang patakaran: ang hanay na ito ay para sa mga patakarang ipinapatupad sa lahat ng mga site.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Default behavior", - "description":"" + "popupTipLocalRules": { + "message": "Mga lokal na patakaran: ang hanay na ito ay para sa mga patakarang ipinapatupad sa site site na ito lamang. Mas sinusunod ang mga lokal na patakaran kaysa sa mga pandaigdigang patakaran.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"These default behaviors can be overridden on a per-site basis", - "description":"" + "popupTipSaveRules": { + "message": "Pindutin upang maging permanente ang mga pagbabago mo.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Disable cosmetic filtering", - "description":"" + "popupTipRevertRules": { + "message": "Pindutin upang kanselahin ang mga pagbabago mo.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Block media elements larger than {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "lahat", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Block remote fonts", - "description":"" + "popupImageRulePrompt": { + "message": "mga larawan", + "description": "" }, - "settingsStorageUsed":{ - "message":"Storage used: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "3rd-party", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Last restore:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "mga 3rd-party na CSS/larawan", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Last backup:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "mga nakapaloob na script", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "mga 1st-party na script", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} used out of {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "mga 3rd-party na script", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Auto-update filter lists", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "mga 3rd-party na frame", + "description": "" }, - "3pUpdateNow":{ - "message":"Update now", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "mga konektadong domain", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Purge all caches", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} sa {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Parse and enforce cosmetic filters", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Bersyon", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      This option enables the parsing and enforcing of Adblock Plus-compatible “element hiding” filters<\/a>. These filters are essentially cosmetic, they serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the net request-based filtering engine.<\/p>

      Enabling this feature increases uBlock₀'s memory footprint.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignore generic cosmetic filters", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "frame", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites.

      Though handled efficiently by uBlock₀, generic cosmetic filters may still contribute measurable memory and CPU overhead on some web pages, especially for large and long-lived ones.

      Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters, and also lower the memory footprint of uBlock₀ itself.

      It is recommended to enable this option on less powerful devices.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Lumikha", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lists of blocked hosts", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Pumili", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Isumite ang mga pagbabago", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Umalis", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Ads", - "description":"English: Ads" + "pickerPreview": { + "message": "Silipin", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Pribado", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Mga filter sa network", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Mga Malware domains", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Mga kosmetikong filter", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Social", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "I-click, Ctrl-click", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Multipurpose", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Harangin ang elemento…", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Regions, languages", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Itago ang placeholder ng mga hinarang na mga elemento", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Custom", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Ipakita kung ilan ang mga naharang na hiling sa icon", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Huwag magpakita ng mga tooltip", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Parse", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Gamitin ang menu sa konteksto kung naaangkop", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"purge cache", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Para sa color-blind", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"new version available", - "description":"English: new version available" + "settingsAppearance": { + "message": "Hitsura", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"out of date", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Tema", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Last update: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Pinasadyang kulay ng accent", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Paandarin ang suporta sa imbakan sa cloud", + "description": "" }, - "1pImport":{ - "message":"I-Import at idugtong", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Isa akong advanced user", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"I-Export", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Pigilan ang browser na mag-preload ng mga pahinang iniisip nito na baka bisitahin mo (upang pigilan ang koneksyon sa mga hinarang na site)", + "description": "English: " }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Pigilan ang pag-audit sa hyperlink", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Apply changes", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Pigilan ang WebRTC na magkalat ng mga lokal na IP address", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Permanent rules", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Default na ugali", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Temporary rules", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Mas sinusunod ang mga per-site na ugali kaysa sa default na ugali", + "description": "" }, - "rulesRevert":{ - "message":"Revert", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Ihinto ang kosmetikong pagfi-filter", + "description": "" }, - "rulesCommit":{ - "message":"Commit", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Harangin ang mga elemento ng media na mas malaki sa {{input}} KB", + "description": "" }, - "rulesEdit":{ - "message":"Edit", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Harangin ang remote fonts", + "description": "" }, - "rulesEditSave":{ - "message":"Save", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Harangin ang JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Discard", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Harangin ang mga ulat ng CSP", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Import from file...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Ilantad ang totoong pagkakakilanlan ng mga kanonikal na pangalan (CNAME)", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Export to file", - "description":"" + "settingsAdvanced": { + "message": "Advanced", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Mga feature na angkop lang sa mga gumagamit na maraming alam", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"List of your dynamic filtering rules.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "karagdagang mga setting", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Rule syntax: source destination type action<\/code> (full documentation<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Huling pag-restore:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Your list of host names for which uBlock₀ will be disabled. One entry per line. Invalid host names will be silently ignored.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Huling pag-backup:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Import and append", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} (na) mga network filter + {{cosmeticFilterCount}} (na) mga kosmetikong filter mula sa:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Export", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} ginagamit sa {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Awtomatikong i-update ang listahan ng mga filter", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Apply changes", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "I-update ngayon", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Type", - "description":"English: Type" + "3pPurgeAll": { + "message": "Tanggalin lahat ng mga cache", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Domain", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Iproseso at ipatupad ang mga kosmetikong filter", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Hinaharang ng kosmetikong filter ang mga elemento sa web page na nakakaabala at hindi maharang ng mga pangharang na nakabase sa mga hiling sa network.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Huwag pansinin ang mga generikong kosmetikong filter", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"All", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Ang generikong kosmetikong filter ay ang mga kosmetikong filter na para sa lahat ng mga website. Nakakatipid ito ng memorya at CPU sapagkat ihihinto ang pagproseso sa mga generikong kosmetikong filter.\n\nMainam na gamitin ang opsyong ito sa mga device na hindi ganoon kalakas.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Behind the scene", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Itigil ang lahat ng mga aktibidad sa network hanggang sa ma-load ang lahat ng mga listahan ng mga filter", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"filter log entries", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Listahan ng mga naharang na host", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Maximum number of log entries", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Ilapat ang mga pagbabago", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Context:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Built-in", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Type:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Mga ad", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Dynamic URL filtering", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Pagkapribado", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Static filtering", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Mga domain na may malware", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Panlipunang mga widget", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Block", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Pabatid para sa mga cookie", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Allow", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Mga nakakaabalang bagay", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"type “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Maraming-mapaggagamitan", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"any type", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Mga rehiyon o wika", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"from “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Ipinasadya", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"from anywhere", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Mag-import…", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"except when", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Isang URL kada linya. Hindi papansinin ang mga invalid na URL.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"even if", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Luma na", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Static filter {{filter}} found in:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "tingnan ang nilalaman", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Change log", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Huling update: {{ago}}.\nPindutin upang pilitin ang pag-update.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Ina-update…", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Support", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Hindi na-update ang resource dahil sa isang network error.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Source code (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Huwag magdagdag ng pangsala mula sa mga hindi katiwa-tiwalang pinagmulan.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Contributors", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Paganahin ang mga pasadyang filter", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Backup to file", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Hayaan ang mga pansariling filter na kailangan ng tiwala", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "I-import at idagdag", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Restore from file...", - "description":"English: Restore from file..." + "1pExport": { + "message": "I-export", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Reset to default settings...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "mga-static-filter-ko-sa-ublock_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Ilapat ang mga pagbabago", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"The data could not be read or is invalid", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Mga permanenteng patakaran", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Mga panandaliang patakaran", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Hindi maka-connect sa {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Ibalik", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Ilapat", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"a minute ago", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Baguhin", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minutes ago", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "I-save", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"an hour ago", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Itapon", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} hours ago", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Mag-import mula sa file…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"a day ago", - "description":"English: a day ago" + "rulesExport": { + "message": "I-export sa file", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} days ago", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "mga-dynamikong-patakaran-ko-sa-ublock_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Show Dashboard", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Listahan ng mga dynamikong patakaran mo sa pagfi-filter.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Show Logger", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Format ng patakaran: pinagmulan patutunguhan uri aksyon (kumpletong dokumentasyon [sa Ingles]).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"off", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Pagsunud-sunurin:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin has prevented the following page from loading:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Uri ng patakaran", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Because of the following filter", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Pinagmulan", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"without parameters", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Patutunguhan", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Found in:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Idinidikta nito kung sa aling mga webpage papatayin ang uBlock Origin. Isang entry kada linya.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Go back", - "description":"English: Go back" + "whitelistImport": { + "message": "I-import at idagdag", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Close this window", - "description":"English: Close this window" + "whitelistExport": { + "message": "I-export", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Disable strict blocking for {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "mga-pinagkakatiwalaan-kong-site-sa-ublock_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Temporarily", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Ilapat ang mga pagbabago", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Permanently", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Uri", + "description": "English: Type" }, - "cloudPush":{ - "message":"Export to cloud storage", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Domain", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Import from cloud storage", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Import from cloud storage and merge with current settings", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Lahat", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"This device name:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Walang tab", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Submit", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Kasalukuyang tab", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Revert", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "I-reload ang nilalaman ng tab", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"bytes", - "description":"" + "loggerDomInspectorTip": { + "message": "Buksan/isara ang inspektor ng DOM", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Temporarily allow large media elements", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Buksan/isara ang popup panel", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "wiki ng uBlock Origin: Ang talaan", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Linisin ang talaan", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Ihinto ang tagatala (itapon ang lahat ng papasok na datos)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Ituloy ang pagtatala", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Paandarin/patayin ang pagfi-filter ng talaan", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "nilalaman ng filter sa pagtatala", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Mga opsyon sa pagfi-filter ng talaan", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Hindi", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "inaksyunan", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "hinarang", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "pinayagan", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "binago", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "1st-party", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "3rd-party", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Mga detalye", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filter", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Listahan ng filter", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Patakaran", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Konteksto", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Pangunahing konteksto", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Pagkapartido", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Uri", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Patakaran sa URL", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Konteksto:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Uri:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Statikong filter", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} ang mga hiling sa network na {{type}} {{br}}kung tumutugma ang URL address nito sa {{url}} {{br}}at nagmumula ito sa {{origin}},{{br}}{{importance}} may tugmang exception filter.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Harangin", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Payagan", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "uri “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "anumang uri", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "mula sa “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "mula saanman", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "maliban na lang kung", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "kahit na", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Statikong filter {{filter}} sa:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Hindi mahanap ang statikong filter sa mga kasalukuyang ipinapatupad na listahan ng mga filter", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Awtomatikong itatapon ang mga entry sa talaan na hindi nakakasunod sa lahat ng mga kondisyon sa ibaba:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Panatilihin ang mga entry mula sa huling {{input}} (na mga) minuto", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Panatilihin ang hanggang sa {{input}} page load kada tab", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Panatilihin ang hanggang sa {{input}} entry kada tab", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Gumamit ng {{input}} (na mga) linya kada entry sa mode na pinalaki patayo", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Itago ang mga hanay:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Oras", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filter/patakaran", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Konteksto", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Pagkapartido", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Listahan", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Talahanayan", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Plain", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Buksan", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Gumawa ng bagong ulat", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Maghanap ng mga magkahawig na ulat", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Dokumentasyon", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Basahin ang dokumentasyon sa uBlock/wiki upang matuto tungkol sa lahat ng mga feature ng uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Mga tanong at suporta", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Makakapagtanong at sasagutin ka, o makakahingi ka ng higit pang tulong sa subreddit na /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Mga problema sa filter/may problema sa website", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Iulat ang mga problema sa filter sa iilang mga website sa issue tracker ng uBlockOrigin/uAssets. Kailangan mo ng account sa GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Mahalaga: Upang maiwasan ang mga problema sa ilang mga website, iwasang gumamit ng iba pang mga katulad na pangharang sa content kasabay ng uBlock Origin.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tip: Siguraduhing updated ang listahan mo ng mga filter. Gamitin mo ang talaan upang ayusin ang mga problemang naidudulot ng ilang mga filter.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Mag-ulat ng problema", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Iulat ang mga problema ng mismong uBlock Origin sa issue tracker ng uBlockOrigin/uBlock-issues. Kailangan mo ng account sa GitHub.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Impormasyon para sa Pag-aayos ng Problema", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Nasa ibaba ang mga teknikal na impormasyon na maaaring makatulong sa mga volunteer na tumutulong masolusyonan ang problema mo.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Mag-ulat ng problema ng filter", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Siguraduhing wala pang ibang nakakapag-ulat ng problema mo upang hindi bahain ng trabaho ang mga volunteer.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Ang listahan ng pangsala ng kontent ay araw-araw binabago at dinadag-dagan. Siguruhin na ang iyong isyu ay hindi pa napauukulan sa mga pinakabagong update sa listahan ng pangsala. ", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Kumpirmahin na nanatili ang isyu pagkatapos i-reload ang nagkaproblema na pahina ng web.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address ng web page:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Ang web page…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pumili rito --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Nagpapakita ng mga ad o mga tira-tira ng ad", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "May overlay o iba pang mga panggulo", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Nade-detect ang uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "May mga problema sa pagkapribado", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Nasisira kung umaandar ang uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Kung anu-anong mga tab o window ang binubuksan", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Patungo sa badware o phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Markahan bilang hindi dapat tinitignan sa pook-trabahuan (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Patakaran sa pagkapribado", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Talaan ng mga pagbabago", + "description": "" + }, + "aboutCode": { + "message": "Source code (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Mga nag-ambag", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Source code", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Mga pagsasalin", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Listahan ng mga filter", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Mga panlabas na dependency (angkop sa GPLv3)", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Naka-host sa mga CDN na ito ang mga listahan ng mga filter ng uBO:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Random na pumipili ng CDN ang uBO kung may listahan ng mga filter na kailangang i-update", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "I-back up sa file…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "ublock-backup-ko_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Ibalik mula sa file…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "I-reset sa mga default na setting…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Papalitan ng datos na binack-up noong {{time}} ang mga setting mo, at magre-restart ang uBlock₀.\n\nPayagang palitan ng naka-back up na data ang kasalukuyan mong mga setting?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Hindi mabasa o invalid ang datos", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Tatanggalin lahat ng mga setting mo, at magre-restart ang uBlock₀.\n\nI-reset ang uBlock₀ sa default na mga setting?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Error sa network: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Subaybayan", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "isang minuto ang nakalipas", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} (na) mga minuto ang nakalipas", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "isang oras ang nakalipas", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} (na) mga oras ang nakalipas", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "isang araw ang nakalipas", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} (na) mga araw ang nakalipas", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Ipakita ang Dashboard", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Ipakita ang Talaan", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "hindi umaandar", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Hinarang ang pahina", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "Hinarang ng uBlock Origin ang sumusunod na pahina sa paglo-load:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Dahil sa sumusunod na filter:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "kung walang mga parameter", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Nahanap sa:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Bumalik", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Isarado ang window na ito", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Huwag na akong balaan ulit tungkol sa site na ito", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Patayin ang striktong pagharang para sa {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Pansamantala", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Permanente", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Tumuloy", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Nais nitong website na dalhin ka sa iss pang site. Kung tutuloy ka, pupunta ka sa: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "I-export sa imbakan sa cloud", + "description": "tooltip" + }, + "cloudPull": { + "message": "Mag-export mula sa imbakan sa cloud", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Mag-export mula sa imbakan sa cloud at ihalo sa mga kasalukuyang setting", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Itong pangalan ng device:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Babala! Mag-ingat kung babaguhin mo ang mga advanced na setting.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "I-submit", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Ilapat ang mga pagbabago", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Ibalik", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "(na) mga byte", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Harangin ang elemento sa frame…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Subaybayan ang listahan ng filter…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Pansamantalang payagan ang mga malalaking elemento ng media", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Tingnan ang source code…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Magsulat ng shortcut", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Paandarin/patayin ang naka-lock na pagso-scroll", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Kopyahin sa clipboard", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Piliin lahat", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Paandarin/patayin ang kosmetikong pagfi-filter", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Paganahin ang JavaScript ", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Babaan ang lebel ng pagharang", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Nagamit na imbakan: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Pindutin upang i-load", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Errors: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Hindi nakapagsala ng maayos nung binuksan ang browser. I-reload ang pahina upang masiguro ang tamang proseso ng pagsasala.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Dapat mahuli ang entry na ito", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/fr/messages.json b/src/_locales/fr/messages.json index 845998c12c351..5dc47404e65ab 100644 --- a/src/_locales/fr/messages.json +++ b/src/_locales/fr/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Un bloqueur de nuisances efficace, qui ménagera votre processeur et votre mémoire vive.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Un bloqueur de nuisances efficace, qui ménagera votre processeur et votre mémoire vive.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Tableau de bord", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Tableau de bord", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Paramètres", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Attention, vous avez des changements non enregistrés !", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Listes de filtres", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Rester ici", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Mes filtres", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ignorer", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Mon filtrage dynamique", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Paramètres", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Liste blanche", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Listes de filtres", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Journal des requêtes réseau", - "description":"Title for the logger window" + "1pPageName": { + "message": "Mes filtres", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"À propos", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Mon filtrage dynamique", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Clic : Désactiver\/Activer uBlock Origin pour ce site.\n\nCtrl+clic : Désactiver uBlock Origin uniquement sur cette page.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Sites Web fiables", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"Requêtes bloquées", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Raccourcis", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"sur cette page :", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Journal des requêtes réseau", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}}, soit {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "À propos", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"depuis toujours :", - "description":"English: since install" + "supportPageName": { + "message": "Support", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"soit", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Visionneuse d'éléments", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Cliquez pour accéder au tableau de bord", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Paramètres avancés", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Aller au sélecteur d'élément", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Clic : Désactiver/Activer uBlock₀ pour ce site.\n\nCtrl+clic : Désactiver uBlock₀ uniquement sur cette page.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Ouvrir le journal des requêtes", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Cliquez pour désactiver uBlock₀ pour ce site\n\nCtrl+Clic pour désactiver uBlock₀ uniquement pour cette page", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Activer\/Désactiver le blocage des fenêtres pop-ups pour ce site", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Cliquez pour activer uBlock₀ pour ce site", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Activer\/Désactiver le blocage d'éléments médias à grande taille de ce site", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "Requêtes bloquées", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Activer\/Désactiver le filtrage esthétique pour ce site", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "sur cette page :", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Activer\/Désactiver le blocage de polices d'écriture distantes pour ce site", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}}, soit {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Règles globales : Cette colonne concerne des règles qui s'appliquent partout.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "depuis toujours :", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Règles locales : Cette colonne concerne des règles qui ne s'appliquent que sur le site actuellement visité.\nLes règles locales supplantent les règles globales.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "soit", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Cliquez pour rendre les changements opérés permanents.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Bloqués sur cette page", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Cliquez pour annuler les changements opérés.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Bloqués depuis l'installation", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"Tout", - "description":"" + "popupDomainsConnected_v2": { + "message": "Domaines connectés", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"Images", - "description":"" + "popupTipDashboard": { + "message": "Ouvrir le Tableau de bord", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"Tierce-partie", - "description":"" + "popupTipZapper": { + "message": "Entrer en mode Zappeur d'élément", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"CSS\/Images de tierce-partie", - "description":"" + "popupTipPicker": { + "message": "Entrer en mode Sélecteur", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"Scripts embarqués", - "description":"" + "popupTipLog": { + "message": "Ouvrir le journal des requêtes", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"Scripts du domaine de la page", - "description":"" + "popupTipReport": { + "message": "Rapporter un problème sur ce site Web", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"Scripts de tierce-partie", - "description":"" + "popupTipNoPopups": { + "message": "Activer/Désactiver le blocage des fenêtres pop-ups pour ce site", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"Cadres de tierce-partie", - "description":"" + "popupTipNoPopups1": { + "message": "Cliquez pour bloquer toutes les pop-ups de ce site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"Domaines connectés", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Cliquez pour cesser de bloquer toutes les pop-ups de ce site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} sur un total de {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Bloquer/Autoriser le chargement d'éléments médias à taille plus importante pour ce site", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Créer", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Cliquez pour bloquer les médias de grande taille sur ce site", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Cibler", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Cliquez pour cesser de bloquer les médias de grande taille sur ce site", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Quitter", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Activer/Désactiver le filtrage esthétique pour ce site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Aperçu", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Cliquez pour désactiver le filtrage esthétique sur ce site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Filtres de réseau", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Cliquez pour activer le filtrage esthétique sur ce site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Filtres esthétiques", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Autoriser/Bloquer le téléchargement des polices d'écriture distantes pour ce site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Clic, Ctrl-clic", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Cliquez pour bloquer les polices d'écriture distantes sur ce site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Bloquer cet élément", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Cliquez pour cesser de bloquer les polices d'écriture distantes sur ce site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Cacher les espaces réservés aux éléments bloqués", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Cliquez pour désactiver JavaScript sur ce site", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Afficher le nombre de requêtes bloquées sur l'icône", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Cliquez pour cesser de désactiver JavaScript sur ce site", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Désactiver les infobulles", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Fenêtres pop-ups", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Utiliser le menu contextuel si possible", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Médias de grande taille", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Mode Daltonien", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Filtrage esthétique", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Activer le support de stockage dans le nuage", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Polices d'écriture distantes", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Activer le mode pour personnes expérimentées (À lire<\/a>, page en Anglais)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Désactiver la prédiction des actions sur le réseau (afin d'empêcher toute connexion pour les requêtes réseau bloquées)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Plus", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Désactiver l'audit hyperlien", - "description":"English: " + "popupLessButton_v2": { + "message": "Moins", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Empêcher la fuite des adresses IP locales via WebRTC", - "description":"English: " + "popupTipGlobalRules": { + "message": "Règles globales : Cette colonne concerne des règles qui s'appliquent partout.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Comportement par défaut", - "description":"" + "popupTipLocalRules": { + "message": "Règles locales : Cette colonne concerne des règles qui ne s'appliquent que sur le site actuellement visité.\nLes règles locales supplantent les règles globales.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Ces comportements par défaut peuvent être remplacés au cas par cas", - "description":"" + "popupTipSaveRules": { + "message": "Cliquez pour rendre les changements opérés permanents.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Désactiver le filtrage esthétique", - "description":"" + "popupTipRevertRules": { + "message": "Cliquez pour annuler les changements opérés.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Bloquer les éléments médias d'une taille supérieure à {{input:number}} Ko", - "description":"" + "popupAnyRulePrompt": { + "message": "Tout", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Bloquer les polices d'écriture distantes", - "description":"" + "popupImageRulePrompt": { + "message": "Images", + "description": "" }, - "settingsStorageUsed":{ - "message":"Espace de stockage utilisé : {{value}} octet(s)", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "Tierce-partie", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Date de la dernière restauration :", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "CSS/Images de tierce-partie", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Date de la dernière sauvegarde :", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "Scripts embarqués", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} filtre(s) réseau et {{cosmeticFilterCount}} filtre(s) esthétique(s) sont actuellement en vigueur :", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "Scripts du domaine de la page", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} utilisé(s) sur un total de {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "Scripts de tierce-partie", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Mettre à jour les listes de filtres sélectionnées automatiquement", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "Cadres de tierce-partie", + "description": "" }, - "3pUpdateNow":{ - "message":"Mettre à jour maintenant", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "Domaines connectés", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Vider tous les caches", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} sur un total de {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Utiliser en plus les règles esthétiques", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Version", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Cette option permet de prendre en charge les filtres Adblock Plus de type “element hiding”<\/a>. Ces filtres ont principalement un impact visuel, servant à dissimuler des éléments nuisibles d'une page Web et qui ne sont pas blocables par le filtrage standard.<\/p>

      L'activation de cette fonctionnalité augmente l'empreinte mémoire de uBlock Origin.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignorer les filtres esthétiques génériques", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "cadre", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Les filtres esthétiques génériques sont des filtres esthétiques conçus pour être appliqués sur tous les sites Web.

      Bien qu'ils soient pris en charge efficacement par uBlock₀, les filtres esthétiques génériques restent susceptibles de consommer des ressources supplémentaires en mémoire vive & en processeur central sur certaines pages Web, tout particulièrement ceux de grandes taille & longévité.

      Ignorer ce type de filtrage esthétique réduira l'utilisation supplémentaire en RAM & en CPU sur les pages Web, diminuant également l'empreinte mémoire d'uBlock₀.

      Il est recommandé d'activer ce paramètre sur des appareils modestes.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Créer", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Listes prédéfinies d'hôtes à bloquer", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Cibler", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Appliquer", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Quitter", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Publicités", - "description":"English: Ads" + "pickerPreview": { + "message": "Aperçu", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Confidentialité", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Filtres de réseau", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Domaines malveillants", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Filtres esthétiques", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Réseaux sociaux", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Clic, Ctrl-clic", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Tout usage", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Bloquer l'élément", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Régions, langages", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Cacher les espaces réservés aux éléments bloqués", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Vos propres listes", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Afficher le nombre de requêtes bloquées sur l'icône", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Une adresse Web par ligne. Les lignes débutant par un ‘!’ seront ignorées. Les adresses Web invalides seront ignorées sans avertissement.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Désactiver les infobulles", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Appliquer", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Utiliser le menu contextuel si possible", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"Vider le cache", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Mode Daltonien", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"Nouvelle version disponible", - "description":"English: new version available" + "settingsAppearance": { + "message": "Apparence", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"Potentiellement obsolète", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Thème", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Dernière mise à jour effectuée : {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Couleur d'accentuation personnalisée", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Une règle par ligne. Une règle peut être un simple nom d'hôte, ou encore un filtre respectant la syntaxe des filtres Adblock Plus. Les lignes débutant par ‘!’ seront ignorées.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Activer le stockage des paramètres dans le nuage", + "description": "" }, - "1pImport":{ - "message":"Importer", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Je suis un utilisateur/une utilisatrice avancé(e)", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Exporter", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Désactiver la prédiction des actions sur le réseau (afin d'empêcher toute connexion pour les requêtes réseau bloquées)", + "description": "English: " }, - "1pExportFilename":{ - "message":"mes-filtres-statiques-ublock_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Désactiver l'audit hyperlien", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Appliquer", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Empêcher la fuite des adresses IP locales via WebRTC", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Règles permanentes", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Comportement par défaut", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Règles temporaires", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Ces comportements par défaut peuvent être remplacés au cas par cas", + "description": "" }, - "rulesRevert":{ - "message":"Rétablir", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Désactiver le filtrage esthétique", + "description": "" }, - "rulesCommit":{ - "message":"Appliquer", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Bloquer les éléments médias d'une taille supérieure à {{input}} Ko", + "description": "" }, - "rulesEdit":{ - "message":"Éditer", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Bloquer les polices d'écriture distantes", + "description": "" }, - "rulesEditSave":{ - "message":"Enregistrer", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Désactiver JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Annuler", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Bloquer les rapports CSP", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Importer à partir du fichier", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Révéler les noms canoniques", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Exporter vers un fichier", - "description":"" + "settingsAdvanced": { + "message": "Avancé", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"mes-regles-de-filtrage-dynamique-ublock_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Fonctionnalités convenant uniquement aux utilisateurs avancés", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Liste de vos règles de filtrage dynamique", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "Paramètres avancés", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Syntaxe : source destination type action<\/code> (Documentation complète en Anglais<\/a>)", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Date de la dernière restauration :", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Renseignez ici votre liste d'hôtes à autoriser. Un nom d'hôte par ligne. Les noms d'hôte invalides seront ignorés et vous n'en serez pas averti(e).", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Date de la dernière sauvegarde :", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Importer", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} filtre(s) réseau et {{cosmeticFilterCount}} filtre(s) esthétique(s) sont actuellement en vigueur :", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Exporter", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} utilisé(s) sur un total de {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"ma-liste-blanche-ublock-{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Mettre à jour les listes de filtres sélectionnées automatiquement", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Appliquer", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Mettre à jour maintenant", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Type", - "description":"English: Type" + "3pPurgeAll": { + "message": "Vider tous les caches", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Domaine", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Utiliser en plus les règles esthétiques", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Les filtres esthétiques servent à cacher des éléments d'une page Web considérés comme une nuisance visuelle, et qui ne peuvent pas être bloqués par le filtrage réseau basé sur les requêtes.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filtre", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignorer les filtres esthétiques génériques", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Tout", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Les filtres esthétiques génériques sont des filtres esthétiques conçus pour être appliqués sur tous les sites Web. Activer cette option réduira l'utilisation en mémoire et en processeur sur les pages Web.\n\nIl est recommandé d'activer ce paramètre sur des appareils à la puissance modeste.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Requêtes en coulisses", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Suspendre l'activité réseau jusqu'au chargement de toutes les listes de filtres", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"Filtrer les entrées du journal", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Listes prédéfinies d'hôtes à bloquer", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Nombre maximum d'entrées à conserver dans le journal", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Appliquer", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Contexte :", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Intégrées", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Type :", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Publicités", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Filtrage dynamique de l'URL", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Confidentialité", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Filtrage statique", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Protection anti-malware et sécurité", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} les requêtes réseau de {{type}} {{br}} dont l'adresse Web correspond à {{url}} {{br}} qui provient du domaine {{origin}}, {{br}}{{importance}} il y a un filtre d'exception correspondant", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Widgets de réseaux sociaux", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Bloquer", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Bannières de cookie", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Autoriser", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Nuisances", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"type \"{{type}}\"", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Tout usage", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"tout type", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Régions, langues", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"\"{{origin}}\"", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Vos propres listes", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"de n'importe où", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Importer", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"sauf quand", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Une adresse Web par ligne. Les adresses Web invalides seront ignorées sans avertissement.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"même s'", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Obsolète", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Filtre statique {{filter}} trouvé dans :", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "Voir le contenu", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Journal des changements (en Anglais)", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Dernière mise à jour effectuée : {{ago}}\nCliquez pour forcer la mise à jour", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Documentation (en Anglais)", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Mise à jour en cours…", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Support (en Anglais)", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Une erreur réseau a empêché la mise à jour de la ressource.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Code Source (Licence GPLv3, en Anglais)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Il est recommandé de ne pas ajouter de filtres en provenance de sources non fiables.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Contributeurs", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Activer mes filtres personnalisés", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Exporter vers un fichier", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Faire confiance aux filtres personnalisés", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"mes-donnees-ublock_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Importer", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Importer depuis un fichier", - "description":"English: Restore from file..." + "1pExport": { + "message": "Exporter", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Paramètres par défaut", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "mes-filtres-statiques-ublock_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Vos paramètres seront remplacés par les données sauvegardées le {{time}}, puis uBlock Origin redémarrera.\n\nProcéder à l'importation ?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Appliquer", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Les données ne peuvent être lues ou sont invalides", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Règles permanentes", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Vos paramètres seront effacés, puis uBlock Origin redémarrera.\n\nProcéder à la réinitialisation des paramètres ?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Règles temporaires", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Ne peut se connecter sur {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Rétablir", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀ : Ajouter la ressource Web suivante à votre sélection de listes de filtrage ?\n\nTitre : \"{{title}}\"\nURL : {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Appliquer", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"Il y a une minute", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Éditer", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"Il y a {{value}} minutes", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Enregistrer", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"Il y a une heure", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Annuler", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"Il y a {{value}} heures", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Importer à partir du fichier…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"Il y a un jour", - "description":"English: a day ago" + "rulesExport": { + "message": "Exporter vers un fichier", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"Il y a {{value}} jours", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "mes-regles-de-filtrage-dynamique-ublock_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Afficher le Tableau de bord", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Liste de vos règles de filtrage dynamique", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Voir le Journal", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Syntaxe : source destination type action (Documentation complète en anglais)", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"Arrêt", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Trier :", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin a empêché le chargement de la page suivante :", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Type de règle", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"À cause du filtre suivant :", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Source", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"sans paramètres", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Destination", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Trouvé dans :", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Les directives de site de confiance indiquent sur quelles pages Web uBlock Origin devrait être désactivée. Une entrée par ligne.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Retour", - "description":"English: Go back" + "whitelistImport": { + "message": "Importer", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Fermer cette fenêtre", - "description":"English: Close this window" + "whitelistExport": { + "message": "Exporter", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Désactiver le blocage strict du domaine {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "mes-sites-fiables-ublock-{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"De manière temporaire", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Appliquer", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"De manière définitive", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Type", + "description": "English: Type" }, - "cloudPush":{ - "message":"Exporter vers le stockage dans le nuage", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Domaine", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Importer depuis le stockage dans le nuage", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Importer depuis le stockage dans le nuage et fusionner avec les réglages actuels", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filtre", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Tout", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Nom de ce périphérique :", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "En coulisses", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Appliquer", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Onglet courant", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Rétablir", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Recharger le contenu de l'onglet", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"octets", - "description":"" + "loggerDomInspectorTip": { + "message": "Activer/Désactiver l'Inspecteur DOM", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Autoriser temporairement les éléments médias à grande taille", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Activer/Désactiver le panneau pop-up", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "Page Wiki uBlock Origin : Le journal", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Vider le journal", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Mettre en pause le journal (désactive toutes les données entrantes)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Terminer la mise en pause du journal", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Activer le filtrage du journal", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "Filtrer le contenu du journal", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Options de filtrage du journal", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Pas", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "dynamique", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "bloquée", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "autorisée", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "Modifié", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "Domaine de la page", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "Tierce-partie", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Détails", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filtre", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Liste de filtres", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Règle", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Contexte", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Contexte racine", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Niveau de partie", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Type", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "Lien", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Règle de lien", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Contexte :", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Type :", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Filtre statique", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} les requêtes réseau de {{type}} {{br}} dont l'adresse Web correspond à {{url}} {{br}} qui provient du domaine {{origin}}, {{br}}{{importance}} il y a un filtre d'exception correspondant", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Bloquer", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Autoriser", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "type \"{{type}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "tout type", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "\"{{origin}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "de n'importe où", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "sauf quand", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "même s'", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Filtre statique {{filter}} trouvé dans :", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Filtre statique introuvable parmi les listes de filtre actives", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Les entrées du journal ne remplissant aucune des trois conditions ci-dessous seront automatiquement abandonnées :", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Conserver les entrées des {{input}} dernières minutes", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Préserver {{input}} chargements de page maximum par onglet", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Préserver {{input}} entrées maximum par onglet", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Utiliser {{input}} lignes par entrée dans le mode développé verticalement", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Cacher les colonnes :", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Heure", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filtre/Règle", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Contexte", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Niveau de partie", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Liste", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tableau", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Brut", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Ouvrir", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Créer un nouveau rapport sur GitHub", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Trouver des rapports similaires sur GitHub", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Documentation", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Lisez la documentation à uBlock/wiki pour apprendre toutes les fonctionnalités d'uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Questions et support", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Les réponses aux questions et autres formes d'assistance sont fournies dans le subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Problèmes de filtrage/Site Web non fonctionnel", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Rapportez les problèmes de filtrage avec des sites Web spécifiques dans le suivi des problèmes. Nécessite un compte GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Important : Evitez d'utiliser des bloqueurs similaires à uBlock Origin en même temps que ce dernier, car cela peut causer des problèmes de filtrage sur certains sites Web.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Astuces : Assurez-vous que vos listes de filtres sont à jour. Le journal des requêtes est l'outil principal pour diagnostiquer des problèmes liés au filtrage.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Rapporter un bogue", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Rapportez des problèmes avec l'extension uBlock Origin elle-même dans le suivi des problèmes. Nécessite un compte GitHub.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Informations de dépannage", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Veuillez trouver ci-dessous les informations techniques pouvant aider les bénévoles à vous assister dans la résolution de problème.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Rapporter un problème de filtre", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Pour éviter d'encombrer les contributeurs avec des rapports en double, veuillez vérifier que le problème n'a pas déjà été rapporté.\nNote : Cliquer sur le bouton entraînera l'envoi de la page d'origine à GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Les listes de filtres sont actualisées tous les jours. Assurez-vous que votre problème n'ait pas déjà été résolu dans les listes de filtres les plus récentes.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Vérifiez que le problème persiste après avoir rechargé la page Web problématique.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Adresse de la page Web :", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "La page Web…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Choisir un type --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "affiche des publicités ou des résidus de publicité", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "a une surcouche ou d'autres nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "détecte uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "a des problèmes de confidentialité", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "ne fonctionne pas correctement quand uBlock Origin est activée", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "ouvre des onglets ou fenêtres indésirables", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "conduit à/redirige vers des logiciels malveillants, du hameçonnage", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Marquer le site Web en tant que \"NSFW\" (\"Not Safe For Work\", c'est-à-dire pour public averti/inapproprié au travail)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Politique de confidentialité", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Journal des changements", + "description": "" + }, + "aboutCode": { + "message": "Code Source (Licence GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Contributeurs", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Code source", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Traductions", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Listes de filtres", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Dépendances externes (compatibles GPLv3) :", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Les propres listes de filtres d'uBO sont hébergées gratuitement sur les RDC suivants :", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Un RDC choisi aléatoirement est utilisé lorsqu'une liste de filtres doit être mise à jour.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Exporter vers un fichier", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "mes-donnees-ublock_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Restaurer depuis un fichier…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Réinitialiser les réglages", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Vos paramètres seront remplacés par les données sauvegardées le {{time}}, puis uBlock₀ redémarrera.\n\nProcéder à l'importation ?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Les données ne peuvent être lues ou sont invalides", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Vos paramètres seront effacés, puis uBlock₀ redémarrera.\n\nProcéder à la réinitialisation des paramètres ?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Erreur réseau : {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Souscrire", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "Il y a une minute", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "Il y a {{value}} minutes", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "Il y a une heure", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "Il y a {{value}} heures", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "Il y a un jour", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "Il y a {{value}} jours", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Afficher le Tableau de bord", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Voir le Journal", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "Arrêt", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Page bloquée", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock₀ a empêché le chargement de la page suivante :", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "À cause du filtre suivant :", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "sans paramètres", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Trouvé dans :", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Retour", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Fermer cette fenêtre", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Ne plus m'avertir à propos de ce site", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Désactiver le blocage strict du domaine {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "De manière temporaire", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "De manière définitive", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Poursuivre", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "La page bloquée souhaite rediriger vers un autre site. Si vous choisissez de continuer, vous vous rendrez à l'adresse suivante : {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Motif du blocage :", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malveillant", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Pisteur", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Douteux", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Exporter vers le stockage dans le nuage", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importer depuis le stockage dans le nuage", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importer depuis le stockage dans le nuage et fusionner avec les réglages actuels", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Nom de ce périphérique :", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Attention, modifiez ces paramètres avancés à vos risques et périls.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Appliquer", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Appliquer", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Rétablir", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "octets", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Bloquer l'élément dans le cadre", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Souscrire à la liste de filtres", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Autoriser temporairement le chargement d'éléments médias à taille plus importante", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Voir la source…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Saisir un raccourci", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Verrouiller/Déverrouiller le défilement", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Copier vers le presse-papier", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Sélectionner tout", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Commuter le filtrage esthétique", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Commuter JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Détendre le mode de blocage", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Espace de stockage utilisé : {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "Ko", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "Mo", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "Go", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Cliquez pour charger", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Erreurs : {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Échec du filtrage au lancement du navigateur. Rechargez la page pour assurer un filtrage correct.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/fy/messages.json b/src/_locales/fy/messages.json index 3f6abd84fba0b..6030a4d7bbce8 100644 --- a/src/_locales/fy/messages.json +++ b/src/_locales/fy/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Einlik, in effisjinte adblocker. Brûkt hast gjin prosessorkrêft of ûnthâld.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Einlik, in effisjinte adblocker. Brûkt hast gjin prosessorkrêft of ûnthâld.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Dashboerd", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Dashboerd", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Ynstellingen", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Warskôging! Net bewarre wizigingen", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Filters fan tredden", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Bliuwe", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Myn filters", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Negearje", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Myn rigels", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Ynstellingen", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Whitelist", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filterlisten", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Lochboek", - "description":"Title for the logger window" + "1pPageName": { + "message": "Myn filters", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Oer", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Myn rigels", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Klikke: uBlock₀ foar dizze website yn-\/útskeakelje.\n\nCtrl+klikke: uBlock₀ inkeld foar dizze side útskeakelje.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Fertroude websites", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"blokkearre fersiken", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Fluchtoetsen", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"op dizze side", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Lochboek", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} fan {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Oer", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"sûnt ynstallaasje", - "description":"English: since install" + "supportPageName": { + "message": "Stipe", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"of", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ – Middelenviewer", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Klik om it dashboerd te iepenjen", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Avansearre ynstellingen", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Elemintkiesmodus iepenje", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Klikke: uBlock₀ foar dizze website yn-/útskeakelje.\n\nCtrl+klikke: uBlock₀ inkeld foar dizze side útskeakelje.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Lochboek iepenje", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Klik om uBlock₀ foar dizze website út te skeakeljen.\n\nCtrl+klik om uBlock₀ inkeld foar dizze side út te skeakeljen.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Alle pop-ups foar dizze website yn-\/útskeakelje", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Klik om uBlock₀ foar dizze website yn te skeakeljen.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Grutte media-eleminten foar dizze website yn-\/útskeakelje", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "blokkearre fersiken", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Kosmetyske filters foar dizze website yn-\/útskeakelje", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "op dizze side", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Blokkearjen fan eksterne lettertypen foar dizze website yn-\/útskeakelje", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} fan {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Globale rigels: dizze kolom is foar rigels dy't op alle websites fan tapassing binne.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "sûnt ynstallaasje", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Lokale rigels: dizze kolom is foar rigels dy't allinnich op de aktuele website fan tapassing binne.\nLokale rigels hawwe foarrang op globale rigels.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "of", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Klik om jo wizigingen permanint te meitsjen.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Blokkearre op dizze side", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Klik om jo wizigingen werom te draaien.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Blokkearre sûnt ynstallaasje", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"alles", - "description":"" + "popupDomainsConnected_v2": { + "message": "Ferbûne domeinen", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"ôfbyldingen", - "description":"" + "popupTipDashboard": { + "message": "Dashboerd iepenje", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"fan tredden", - "description":"" + "popupTipZapper": { + "message": "Elemintwiskmodus iepenje", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"css\/ôfbyldingen fan tredden", - "description":"" + "popupTipPicker": { + "message": "Elemintkiesmodus iepenje", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"ynline skripts", - "description":"" + "popupTipLog": { + "message": "Lochboek iepenje", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"skripts fan de websites sels", - "description":"" + "popupTipReport": { + "message": "In probleem op dizze website melde", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"skripts fan tredden", - "description":"" + "popupTipNoPopups": { + "message": "Alle pop-ups foar dizze website yn-/útskeakelje", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"frames fan tredden", - "description":"" + "popupTipNoPopups1": { + "message": "Klik om alle pop-ups op dizze website te blokkearjen", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"ferbûne domeinen", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Klik om alle pop-ups op dizze website net mear te blokkearjen", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} fan de {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Grutte media-eleminten foar dizze website yn-/útskeakelje", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Meitsje", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Klik om grutte media-eleminten op dizze website te blokkearjen", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Kieze", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Klik om grutte media-eleminten op dizze website net mear te blokkearjen", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Slute", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Kosmetyske filters foar dizze website yn-/útskeakelje", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Foarbyld", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Klik om kosmetyske filters op dizze website út te skeakeljen", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Netfilters", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Klik om kosmetyske filters op dizze website yn te skeakeljen", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Kosmetyske filters", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Blokkearjen fan eksterne lettertypen foar dizze website yn-/útskeakelje", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Klik, Ctrl-klik", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Klik om eksterne lettertypen op dizze website te blokkearjen", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Elemint blokkearje", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Klik om eksterne lettertypen op dizze website net mear te blokkearjen", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Tydlike oantsjutting fan blokkearre eleminten ferstopje", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Klik om JavaScript op dizze website út te skeakeljen", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"It tal blokkearre oanfragen op it ikoan toane", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Klik om JavaScript op dizze website net mear út te skeakeljen", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Tooltips útskeakelje", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Pop-upfinsters", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Wêr mooglik gebrûk meitsje fan it kontekstmenu", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Grutte media-eleminten", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Kleureblynfreonlik", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Kosmetyske filters", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Stipe foar cloudûnthâld ynskeakelje", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Eksterne lettertypen", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Ik bin in betûfte brûker (Lês dit earst<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Pre-fetching útskeakelje (om eltse ferbining foar blokkearre netwurkfersiken foar te kommen)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Mear", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Auditing fan keppelingen útskeakelje", - "description":"English: " + "popupLessButton_v2": { + "message": "Minder", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"It lekken fan it lokale IP-adres fia WebRTC opkeare", - "description":"English: " + "popupTipGlobalRules": { + "message": "Globale rigels: dizze kolom is foar rigels dy't op alle websites fan tapassing binne.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Standertgedrach", - "description":"" + "popupTipLocalRules": { + "message": "Lokale rigels: dizze kolom is foar rigels dy't allinnich op de aktuele website fan tapassing binne.\nLokale rigels hawwe foarrang op globale rigels.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Dizze standertgedragingen kinne foar eltse website oerskreaun wurde", - "description":"" + "popupTipSaveRules": { + "message": "Klik om jo wizigingen permanint te meitsjen.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Kosmetyske filters útskeakelje", - "description":"" + "popupTipRevertRules": { + "message": "Klik om jo wizigingen werom te draaien.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Media-eleminten grutter as {{input:number}} kB blokkearje", - "description":"" + "popupAnyRulePrompt": { + "message": "alles", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Eksterne lettertypen blokkearje", - "description":"" + "popupImageRulePrompt": { + "message": "ôfbyldingen", + "description": "" }, - "settingsStorageUsed":{ - "message":"Brûkte ûnthâldromte: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "fan tredden", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Lêste werstel:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "CSS/ôfbyldingen fan tredden", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Lêste reservekopy:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "ynline skripts", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} netwurkfilters + {{cosmeticFilterCount}} kosmetyske filters fan:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "skripts fan de websites sels", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} gebrûk fan {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "skripts fan tredden", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Filterlisten automatysk fernije.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "frames fan tredden", + "description": "" }, - "3pUpdateNow":{ - "message":"No fernije", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "ferbûne domeinen", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Alle buffers leegje", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} fan {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Kosmetyske filters ynlêze en tapasse.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Ferzje", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Dizze opsje skeakelt it ynlêzen en tapassen fan Adblock Plus-kompatibele “element hiding”-filters<\/a> yn. Dizze filters binne suver kosmetysk: se ferstopje eleminten yn de webside dy't fisueel steurend wêze kinne en kinne dus net blokkearre wurde troch de op netfersiken basearre filtermasine.<\/p>

      It ynskeakeljen fan dizze funksje ferheget it ûnthâldgebrûk fan uBlock₀.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Algemiene kosmetyske filters negearje", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "frame", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Algemiene kosmetyske filters binne dy kosmetyske filters dy't bedoeld binne om op alle websites tapast te wurden.

      Hoewol't se effisjint troch uBlock₀ ferwurke wurde, kinne algemiene kosmetyske filters op guon websiden dochs bydrage oan mjitbere ûnthâld- en cpu-oerhead, mei nammen op grutte siden en dy't mei in lange libbensdoer.

      It ynskeakeljen fan dizze opsje eliminearret de oan websiden tafoege ûnthâld- en cpu-oerhead as gefolch fan it ferwurkjen fan algemiene kosmetyske filters, en ferleget ek it ûnthâldgebrûk fan uBlock₀ sels.

      It wurdt oanrekommandearre dizze opsje op minder krêftige apparaten yn te skeakeljen.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Meitsje", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"List fan blokkearre hosts", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Kieze", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Wizigingen tapasse", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Slute", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Advertinsjes", - "description":"English: Ads" + "pickerPreview": { + "message": "Foarbyld", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Privacy", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Netfilters", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Malwaredomeinen", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Kosmetyske filters", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Sosjaal", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Klik, Ctrl-klik", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Multifunksjoneel", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Elemint blokkearje…", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Gebieden, talen", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Tydlike oantsjutting fan blokkearre eleminten ferstopje", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Oanpast", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "It tal blokkearre oanfragen op it ikoan toane", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Ien URL per rigel. Rigels begjinnend mei ‘!’ wurde negearre. Unjildige URL's wurde stil negearre.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Tooltips útskeakelje", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Tapasse", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Wêr mooglik gebrûk meitsje fan it kontekstmenu", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"buffer leegje", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Kleureblynfreonlik", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"nije ferzje beskikber", - "description":"English: new version available" + "settingsAppearance": { + "message": "Foarmjouwing", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"ferâldere", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Tema", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Lêste fernijing: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Oanpaste aksintkleur", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Ien filter per rigel. Ien filter kin in gewoane hostnamme of ien Adblock Plus-kompatibel filter wêze. Rigels begjinnend mei ‘!’ wurde negearre.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Stipe foar cloudûnthâld ynskeakelje", + "description": "" }, - "1pImport":{ - "message":"Ymportearje en tafoegje", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Ik bin in betûfte brûker (Lês dit earst)", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Eksportearje", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Pre-fetching útskeakelje (om eltse ferbining foar blokkearre netwurkfersiken foar te kommen)", + "description": "English: " }, - "1pExportFilename":{ - "message":"myn-ublock-statyske-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Auditing fan keppelingen útskeakelje", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Wizigingen tapasse", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "It lekken fan it lokale IP-adres fia WebRTC opkeare", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Permaninte rigels", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Standertgedrach", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Tydlike rigels", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Dizze standertgedragingen kinne foar eltse website oerskreaun wurde", + "description": "" }, - "rulesRevert":{ - "message":"Tebeksette", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Kosmetyske filters útskeakelje", + "description": "" }, - "rulesCommit":{ - "message":"Tapasse", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Media-eleminten grutter as {{input}} KB blokkearje", + "description": "" }, - "rulesEdit":{ - "message":"Bewurkje", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Eksterne lettertypen blokkearje", + "description": "" }, - "rulesEditSave":{ - "message":"Bewarje", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "JavaScript útskeakelje", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Annulearje", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "CSP-rapporten blokkearje", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Ut bestân ymportearje...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Kanonike nammen toane", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Nei bestân eksportearje", - "description":"" + "settingsAdvanced": { + "message": "Avansearre", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"myn-ublock-dynamyske-rigels_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Allinnich foar technyske brûkers geskikte funksjes.", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"List fan jo dynamyske filterrigels.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "avansearre ynstellingen", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Rigelsyntaks: boarne bestimming type aksje<\/code> (folsleine dokumintaasje<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Lêste werstel:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Jo list fan hostnammen wêrop uBlock₀ útskeakele is. Ien per rigel ynjaan. Unjildige hostnammen wurde stil negearre.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Lêste reservekopy:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Ymportearje en tafoegje", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} netwurkfilters + {{cosmeticFilterCount}} kosmetyske filters fan:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Eksportearje", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} fan de {{total}} brûkt", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"myn-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Filterlisten automatysk fernije.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Wizigingen tapasse", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "No fernije", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Type", - "description":"English: Type" + "3pPurgeAll": { + "message": "Alle buffers leegje", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Domein", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Kosmetyske filters ynlêze en tapasse.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Kosmetyske filters binne foar it ferstopjen fan eleminten yn in webside dy't fisueel steurend wêze kinne en net troch de op netwurkoanfragen basearre filter-masinen blokkearre wurde kinne.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Algemiene kosmetyske filters negearje", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Alles", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Algemiene kosmetyske filters binne dy kosmetyske filters dy't bedoeld binne om op alle websites tapast te wurden. It ynskeakeljen fan dizze opsje eliminearret de oan websiden tafoege ûnthâld- en cpu-oerhead as gefolch fan it ferwurkjen fan algemiene kosmetyske filters.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Achter de skermen", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Netwurkaktiviteit ûnderbrekke oant alle filterlisten laden binne", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"lochboekitems filterje", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "List fan blokkearre hosts", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Maksimum oantal lochboekitems", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Wizigingen tapasse", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Kontekst:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Lokaal", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Type:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Advertinsjes", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Dynamyske URL-filtering", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Privacy", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Statysk filterje", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Malwaredomeinen", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} netwurkfersiken fan {{type}} {{br}}wêrfan de URL lyk is oan {{url}} {{br}}en dy komme fan {{origin}},{{br}}{{importance}} der is in oerienkomstich útsûnderingsfilter.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Sosjale widgets", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blokkearje", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Cookiemeldingen", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Tastean", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Ungeriif", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"type “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Multifunksjoneel", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"elts type", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Gebieden, talen", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"fan “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Oanpast", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"fan oeral wei", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Ymportearje…", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"útsein as", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Ien URL per rigel. Unjildige URL's wurde stil negearre.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"sels as", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Ferâldere.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statysk filter {{filter}} fûn yn:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "ynhâld werjaan", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Wizigingenlochboek", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Lêste fernijing: {{ago}}.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Fernijt…", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Stipe", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "In netwurkflater hat opkeard dat de boarne bywurke waard.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Boarnekoade (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Foegje gjin filters fan ûnbekende boarnen ta.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Meiwurkers", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Myn oanpaste filters ynskeakelje", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Reservekopy nei bestân", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Oanpaste filters dy’t fertrouwen fereaskje tastean", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"myn-ublock-reservekopy_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Ymportearje en tafoegje", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Ut bestân werstelle...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Eksportearje", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Nei de standertynstellingen weromsette...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "myn-ublock-statyske-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Al jo ynstellingen sille oerskreaun wurde mei de reservekopygegevens fan {{time}} en uBlock₀ sil werstart wurde.\n\nBinne jo wis dat jo alle besteande ynstellingen oerskriuwe wolle mei de reservekopygegevens?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Wizigingen tapasse", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"De gegevens koene net lêzen wurde of binne ûnjildich", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Permaninte rigels", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Al jo ynstellingen sille fuortsmiten wurde, wêrnei uBlock₀ werstart.\n\nYnstellingen dochs werstelle nei de standertwearden?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Tydlike rigels", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Kin net ferbine mei {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Tebeksette", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: De folgjende URL oan jo oanpaste filterlisten tafoegje?\n\nTitel: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Tapasse", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"in minút lyn", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Bewurkje", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minuten lyn", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Bewarje", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"in oere lyn", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Annulearje", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} oeren lyn", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Ut bestân ymportearje…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"in dei lyn", - "description":"English: a day ago" + "rulesExport": { + "message": "Nei bestân eksportearje", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} dagen lyn", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "myn-ublock-dynamyske-rigels_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Dashboerd toane", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "List fan jo dynamyske filterrigels.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Lochboek toane", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Rigelsyntaks: boarne bestimming type aksje (folsleine dokumintaasje).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"útskeakele", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Sortearje:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin hat it laden fan de folgjende side opkeard:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Rigeltype", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Fanwege it folgjende filter", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Boarne", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"sûnder parameters", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Bestimming", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Fûn yn:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "De fertroude-website-ynstruksjes skriuwe foar op hokker websiden uBlock Origin útskeakele wurde moat. Ien fermelding per rigel.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Tebekgean", - "description":"English: Go back" + "whitelistImport": { + "message": "Ymportearje en tafoegje", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Dit finster slute", - "description":"English: Close this window" + "whitelistExport": { + "message": "Eksportearje", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Strikte blokkearing foar {{hostname}} útskeakelje", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "myn-ublock-whitelist_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Tydlik", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Wizigingen tapasse", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Permanint", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Type", + "description": "English: Type" }, - "cloudPush":{ - "message":"Eksportearje nei cloudûnthâld", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Domein", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Ymportearje fan cloudûnthâld", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Ut cloudopslach ymportearje en gearfoegje mei aktuele ynstellingen", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Alles", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Apparaatnamme:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Efter de skermen", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Ferstjoere", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Aktuele ljepblêd", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Tebeksette", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "De ljepblêdynhâld fernije", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"bytes", - "description":"" + "loggerDomInspectorTip": { + "message": "De DOM-inspector yn-/útskeakelje", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Grutte media-eleminten tydlik tastean", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "It pop-uppaniel yn-/útskeakelje", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin-wiki: de logger", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Logger wiskje", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Lochboek pauzearje (alle ynkommende gegevens negearje)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Lochboek ferfetsje", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Loggerfiltering yn-/útskeakelje", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "loggerynhâld filterje", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Opsjes foar loggerfiltering", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Net", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "ôfwikseljend", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "blokkearre", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "tastien", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "oanpast", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "aktuele domein", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "fan tredden", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Details", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filter", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Filterlist", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Rigel", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Kontekst", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Haadkontekst", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "1e/3e partij", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Type", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Dynamyske URL-filtering", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Kontekst:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Type:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Statysk filter", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} netwurkfersiken fan {{type}} {{br}}wêrfan de URL lyk is oan {{url}} {{br}}en dy komme fan {{origin}},{{br}}{{importance}} der is in oerienkomstich útsûnderingsfilter.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Blokkearje", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Tastean", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "type ‘{{type}}’", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "elts type", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "fan ‘{{origin}}’", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "fan oeral wei", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "útsein as", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "sels as", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Statysk filter {{filter}} fûn yn:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Statysk filter koe net yn ien fan de op dit stuit ynskeakele filterlisten fûn wurde", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Loggerfermeldingen dy't net oan alle trije fan de ûndersteande betingsten foldogge, wurde automatysk negearre:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Fermeldingen fan de lêste {{input}} minuten behâlde", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Maksimaal {{input}} sideladingen per ljepblêd behâlde", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Maksimaal {{input}} fermeldingen per ljepblêd behâlde", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "{{input}} rigels per fermelding yn fertikaal útklappe modus brûke", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Kolommen ferstopje:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Tiid", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filter/rigel", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Kontekst", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} 1e/3e partij", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "List", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tabel", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Plat", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Iepenje", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Nije melding meitsje", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Soartgelikense meldingen sykje", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Dokumintaasje", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Lês de dokumintaasje op uBlock/wiki foar mear ynfo oer alle funksjes fan uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Fragen en stipe", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Antwurden op fragen en oare soarten stipe wurde levere op de subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filterproblemen/website wurket net", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Meld filterproblemen mei spesifike websites op de probleemtracker. Fereasket in GitHub-account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Wichtich: mij it gebrûk fan oare adblockers foar itselde doel yn kombinaasje mei uBlock Origin, omdat dit op bepaalde websites problemen jaan kin.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tips: soargje derfoar dat jo filterlisten by-de-tiid binne. De logger is it primêre helpmiddel foar it analysearjen fan filterrelatearre problemen.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Bugmelding", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Meld problemen mei uBlock Origin sels by de probleemtracker. Fereasket in GitHub-account.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Probleemoplossingsynformaasje", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Hjirûnder stiet technyske ynformaasje dy't handich wêze kin wannear't frijwilligers jo probearje te helpen by it oplossen fan in probleem.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "In filterprobleem melde", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Kontrolearje oft it probleem net earder meld is om foar te kommen dat frijwilligers mei dûbele meldingen belêst wurde.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filterlisten wurde elke dei bywurke. Kontrolearje oft jo probleem net al yn de meast resinte filterlisten ferholpen is.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Kontrolearje oft it probleem noch hieltyd bestiet nei opnij laden fan de problematyske webside.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Adres fan de webside:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "De webside...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Meitsje in kar --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Toant advertinsjes of restanten", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Hat oerlapingen of oare ûngemakken", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detektearret uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Hat privacy-relatearre problemen", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Wurket net as uBlock Origin ynskeakele is", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Iepenet net-winske ljepblêden of finsters", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Liedt ta badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "De webside labelje as ‘NSFW’ (‘Not Safe For Work’)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Privacybelied", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Wizigingenlochboek", + "description": "" + }, + "aboutCode": { + "message": "Boarnekoade (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Meiwurkers", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Boarnekoade", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Oersettingen", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Filterlisten", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Eksterne ôfhinklikheden (GPLv3-kompatibel):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO’s eigen filterlisten binne fergees beskikber op de folgjende CDN’s:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "As in filterlist bywurke wurde moat, wurdt samar in CDN brûkt", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Reservekopy nei bestân meitsje…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "myn-ublock-reservekopy_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Ut bestân werstelle…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Nei de standertynstellingen weromsette…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Al jo ynstellingen sille oerskreaun wurde mei de reservekopygegevens fan {{time}} en uBlock₀ sil werstart wurde.\n\nBinne jo wis dat jo alle besteande ynstellingen oerskriuwe wolle mei de reservekopygegevens?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "De gegevens koene net lêzen wurde of binne ûnjildich", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Al jo ynstellingen sille fuortsmiten wurde, wêrnei uBlock₀ werstart.\n\nYnstellingen dochs werstelle nei de standertwearden?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Netwurkflater: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Abonnearje", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "in minút lyn", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} minuten lyn", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "in oere lyn", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} oeren lyn", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "in dei lyn", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} dagen lyn", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Dashboerd toane", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Lochboek toane", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "útskeakele", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Side blokkearre", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin hat it laden fan de folgjende side opkeard:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Fanwege it folgjende filter", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "sûnder parameters", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Fûn yn:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Tebekgean", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Dit finster slute", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "My net mear warskôgje oer dizze website", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Strikte blokkearring foar {{hostname}} útskeakelje", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Tydlik", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Permanint", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Trochgean", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "De blokkearre side wol nei in oare website trochferwize. As jo fierder gean, wurdt de folgjende side oproppen: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reden:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "kweawillich", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "berucht", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Eksportearje nei cloudûnthâld", + "description": "tooltip" + }, + "cloudPull": { + "message": "Ymportearje fan cloudûnthâld", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Ut cloudopslach ymportearje en gearfoegje mei aktuele ynstellingen", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Apparaatnamme:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Warskôging! Wizigje dizze avansearre ynstellingen op eigen risiko.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Ferstjoere", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Wizigingen tapasse", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Tebeksette", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Elemint yn frame blokkearje...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Abonnearje op filterlist...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Grutte media-eleminten tydlik tastean", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Boarnekoade besjen…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Typ in fluchtoets", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Beskoattele skowe yn-/útskeakelje", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Kopiearje nei klamboerd", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Alles selektearje", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Kosmetyske filters yn-/útskeakelje", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "JavaScript yn-/útskeakelje", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Blokkearringsmodus beheine", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Brûkte ûnthâldromte {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Klik om te laden", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Flaters: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Koe net goed filterje by starten fan browser.\nFernij de side foar in goede filtering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/gl/messages.json b/src/_locales/gl/messages.json index 613c59c30ea39..4d3b6279087fa 100644 --- a/src/_locales/gl/messages.json +++ b/src/_locales/gl/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Ó fin, un bloqueador eficiente que non chupa toda a memoria e o procesador.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Ó fin, un bloqueador eficiente que non chupa toda a memoria e o procesador.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Panel de control", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Panel de control", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Preferencias", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Aviso! Non gardaches os cambios", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Filtros de terceiros", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Non saír", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Os meus filtros", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ignorar", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"As miñas regras", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Configuración", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Lista branca", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filtros de terceiros", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Rexistro de peticións de rede", - "description":"Title for the logger window" + "1pPageName": { + "message": "Os meus filtros", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Sobre", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "As miñas regras", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: desactivar o uBlock₀ só nesta páxina.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Sitios de confianza", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"peticións bloqueadas", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Atallos", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"nesta páxina", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Rexistro de peticións de rede", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} ou {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Sobre", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"dende a instalación", - "description":"English: since install" + "supportPageName": { + "message": "Axuda", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"ou", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Visor de elementos", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Fai click para abrir o panel de control", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Configuración avanzada", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Ir ó modo do selector de elementos", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Click: desactivar/activar o uBlock₀ neste sitio.\n\nCtrl+click: desactivar o Block₀ só nesta páxina.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Ir ó rexistro de peticións", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Click: desactivar/activar o uBlock₀ neste sitio.\n\nCtrl+click: desactivar o Block₀ só nesta páxina.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Activar todas as xanelas emerxentes nesta páxina", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Click: activar o uBlock₀ neste sitio.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Activar\/desactivar o bloqueo de elementos multimedia grandes para este sitio", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "peticións bloqueadas", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Activar o filtrado cosmético nesta páxina", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "nesta páxina", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Activar o bloqueo de fontes remotas para esta páxina", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} ou {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Reglas globais: esta columna é para as reglas que afectan a todos os sitios.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "dende a instalación", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Reglas locais: esta columna é para as reglas que afectan só a un sitio. As reglas locais anteponse ás globais.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "ou", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Fai click para gardar os cambios.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Bloqueado nesta páxina", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Fai click para desfacer os cambios.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Bloqueado desde a instalación", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"todo", - "description":"" + "popupDomainsConnected_v2": { + "message": "Dominios conectados", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"imaxes", - "description":"" + "popupTipDashboard": { + "message": "Fai click para abrir o panel de control", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"de terceiros", - "description":"" + "popupTipZapper": { + "message": "Activar o modo \"eliminación de elementos\"", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"Imaxes\/css de terceiros", - "description":"" + "popupTipPicker": { + "message": "Ir ó modo do selector de elementos", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"Scripts embebidos", - "description":"" + "popupTipLog": { + "message": "Ir ó rexistro de peticións", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"Scripts de dominio", - "description":"" + "popupTipReport": { + "message": "Informar dun problema nesta web", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"Scripts de terceiros", - "description":"" + "popupTipNoPopups": { + "message": "Activar todas as xanelas emerxentes nesta páxina", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"Frames de terceiros", - "description":"" + "popupTipNoPopups1": { + "message": "Click: bloquear todos os elementos emerxentes neste sitio", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"dominios conectados", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Click: deixar de bloquear todos os elementos emerxentes neste sitio", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} de {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Activar/desactivar o bloqueo de elementos multimedia grandes para este sitio", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Crear", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Click: bloquear todos elementos multimedia de gran tamaño neste sitio", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Escoller", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Click: deixar de bloquear todos elementos multimedia de gran tamaño neste sitio", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Saír", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Activar o filtrado cosmético nesta páxina", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Vista previa", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Click: desactivar filtrado cosmético neste sitio", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Filtros da rede", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Click: activar filtrado cosmético neste sitio", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Filtros cosméticos", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Activar o bloqueo de fontes remotas para esta páxina", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Click, Ctrl-click", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Click: bloquear fontes remotas neste sitio", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Bloquear elemento", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Click: deixar de bloquear fontes remotas neste sitio", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Agochar marcadores de posición dos elementos bloqueados", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Preme para desactivar JavaScript nesta web", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Amosar o número de peticións bloqueadas no icono", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Preme para volver activar JavaScript nesta web", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Desactivar axuda emerxente", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Ventás emerxentes", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Empregar o menú contextual cando sexa posible", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Elementos multimedia grandes", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Accesible para daltónicos", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Filtrado cosmético", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Activar soporte para almacenamento na nube", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Tipografías remotas", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Sonche un usuario experto (Precisas ler isto<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Desactivar a precarga de sitios (prevén calquera conexión para peticións de red bloqueadas)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Máis", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Desactivar a auditoría de hiperligazóns\/señais (beacons<\/i>)", - "description":"English: " + "popupLessButton_v2": { + "message": "Menos", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Impedir que o WebRTC revele os enderezos IP locais", - "description":"English: " + "popupTipGlobalRules": { + "message": "Reglas globais: esta columna é para as reglas que afectan a todos os sitios.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Comportamento predefinido", - "description":"" + "popupTipLocalRules": { + "message": "Reglas locais: esta columna é para as reglas que afectan só a un sitio. As reglas locais anteponse ás globais.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Estes comportamentos predefinidos poden ser modificados para cada páxina en particular", - "description":"" + "popupTipSaveRules": { + "message": "Fai click para gardar os cambios.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Desactivar o filtrado cosmético", - "description":"" + "popupTipRevertRules": { + "message": "Fai click para desfacer os cambios.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Bloquear elementos os audiovisuais meirandes de {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "todo", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Bloquear fontes remotas", - "description":"" + "popupImageRulePrompt": { + "message": "imaxes", + "description": "" }, - "settingsStorageUsed":{ - "message":"Almacenamento empregado: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "de terceiros", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Última recuperación:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "Imaxes/css de terceiros", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Última copia de seguridade:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "Scripts embebidos", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} filtros de rede + {{cosmeticFilterCount}} filtros cosméticos:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "Scripts de dominio", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"Empregados {{used}} de {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "Scripts de terceiros", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Actualización automática das listas de filtros.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "Frames de terceiros", + "description": "" }, - "3pUpdateNow":{ - "message":"Actualizar agora", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "dominios conectados", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Vaciar todas as cachés", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} de {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Analizar e aplicar filtros cosméticos.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Versión", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Esta opción permitirache a análise e a aplicación de “filtros de ocultación de elementos” compatibles co Adblock Plus<\/a>. \nEstes filtros sonche sobre todo cosméticos, serven para agochar elementos visualmente molestos nunha determinada páxina, non sendo posible a súa eliminación cun motor de bloqueo baseado en peticións.<\/p>

      Activar esta opción incrementará o uso de memoria do uBlock₀<\/i>.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignorar os filtros cosméticos xenéricos", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "marco", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Os filtros cosméticos xenéricos estanche pensados para seren aplicados en todas as páxinas.

      Aínda que o uBlock₀ os xestiona dun xeito eficiente, algúns deles precisan de altas cantidades de memoria e sobreemprego da CPU, especialmente nas páxinas grandes e nas máis duradeiras.

      Activar esta opción suprimirá os requerimentos de memoria e CPU por causa destes filtros cosméticos xenéricos, así como reducirá a cantidade de memoria ocupada polo uBlock₀ mesmo.

      Recomendámosche activar esta opción sobre todo nos dispositivos menos potentes.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Crear", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lista dos servidores bloqueados", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Escoller", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Aplicar os cambios", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Saír", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Anuncios", - "description":"English: Ads" + "pickerPreview": { + "message": "Vista previa", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Privacidade", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Filtros da rede", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Dominios de malware<\/i>", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Filtros cosméticos", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Social", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Click, Ctrl-click", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Multipropósito", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Bloquear elemento…", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Rexións, linguaxes", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Agochar marcadores de posición dos elementos bloqueados", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Personalizado", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Amosar o número de peticións bloqueadas no icono", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Un enderezo por liña. As liñas prefixadas con ‘!’ seranche ignoradas, así como os enderezos inválidos.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Desactivar axuda emerxente", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Aplicar", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Empregar o menú contextual cando sexa posible", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"baleirar a caché", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Accesible para daltónicos", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"unha nova versión está dispoñible", - "description":"English: new version available" + "settingsAppearance": { + "message": "Aparencia", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"desactualizado", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Decorado", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Última actualización: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Cor destacada personalizada", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Un filtro por cada liña. O filtro pode ser un nome de servidor, ou un filtro compatible co Adblock Plus. As liñas que comecen con ‘!’ seranche ignoradas.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Activar soporte para almacenamento na nube", + "description": "" }, - "1pImport":{ - "message":"Importar e anexar", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Son unha persoa experta", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Exportar", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Desactivar a precarga de sitios (prevén calquera conexión para peticións de red bloqueadas)", + "description": "English: " }, - "1pExportFilename":{ - "message":"o-meu-ublock-filtros-estaticos_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Desactivar a auditoría de hiperligazóns/señais (beacons)", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Aplicar cambios", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Impedir que o WebRTC revele os enderezos IP locais", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Regras permanentes", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Comportamento predefinido", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Regras temporais", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Estes comportamentos predefinidos poden ser modificados para cada páxina en particular", + "description": "" }, - "rulesRevert":{ - "message":"Reverter", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Desactivar o filtrado cosmético", + "description": "" }, - "rulesCommit":{ - "message":"Estabelecer", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Bloquear elementos audiovisuais maiores de {{input}} KB", + "description": "" }, - "rulesEdit":{ - "message":"Editar", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Bloquear fontes remotas", + "description": "" }, - "rulesEditSave":{ - "message":"Gardar", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Desactivar JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Descartar", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Bloquear reportes CSP", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Importar dun arquivo...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Descubrir nomes canónicos", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Exportar a un arquivo", - "description":"" + "settingsAdvanced": { + "message": "Avanzadas", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"o-meu-ublock-regras-dinamicas_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Ferramentas orientadas a persoas con coñecemento técnico", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Listado coas túas regras de filtrado dinámico.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "configuración avanzada", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Sintaxe das regras: orixe destino tipo acción<\/code> (documentación completa<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Última recuperación:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"A túa lista de nomes de servidor nos que o uBlock₀ estará desactivado. Unha entrada por cada liña. Os nomes de servidor non válidos serán ignorados.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Última copia de seguridade:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Importar e anexar", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} filtros de rede + {{cosmeticFilterCount}} filtros cosméticos:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Exportar", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "Empregados {{used}} de {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"o-meu-ublock-lista-branca_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Actualización automática das listas de filtros.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Aplicar os cambios", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Actualizar agora", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Tipo", - "description":"English: Type" + "3pPurgeAll": { + "message": "Vaciar todas as cachés", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Dominio", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Analizar e aplicar filtros cosméticos.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"Enderezo", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "

      Esta opción permitirache a análise e a aplicación de “filtros de ocultación de elementos” compatibles co Adblock Plus. \nEstes filtros sonche sobre todo cosméticos, serven para agochar elementos visualmente molestos nunha determinada páxina, non sendo posible a súa eliminación cun motor de bloqueo baseado en peticións.

      Activar esta opción incrementará o uso de memoria do uBlock₀.

      ", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filtro", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignorar os filtros cosméticos xenéricos", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Todas", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

      Os filtros cosméticos xenéricos estanche pensados para seren aplicados en todas as páxinas.

      Aínda que o uBlock₀ os xestiona dun xeito eficiente, algúns deles precisan de altas cantidades de memoria e sobreemprego da CPU, especialmente nas páxinas grandes e nas máis duradeiras.

      Activar esta opción suprimirá os requerimentos de memoria e CPU por causa destes filtros cosméticos xenéricos, así como reducirá a cantidade de memoria ocupada polo uBlock₀ mesmo.

      Recomendámosche activar esta opción sobre todo nos dispositivos menos potentes.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Peticións ocultas", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Suspender actividade da rede ata que se carguen todas as listas de filtrado", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"filtras as entradas de rexistro", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Lista dos servidores bloqueados", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Número máximo de entradas de rexistro", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Aplicar os cambios", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Contexto:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Local", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tipo:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Anuncios", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Filtrado dinámico do enderezo", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Privacidade", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Filtrado estático", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Protección contra malware, seguridade", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} peticións de rede tipo {{type}} {{br}} nas cales o enderezo contenga {{url}} {{br}}e que teñan como orixe {{origin}},{{br}}{{importance}} haxa un filtro de excepción aplicable.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Widgets sociais", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Bloquear", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Avisos de rastro", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Permitir", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Molestias", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tipo “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Multipropósito", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"calquera tipo", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Rexións, linguaxes", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"dende “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Personalizado", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"dende calquera sitio", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Importar...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"agás cando", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Un enderezo por liña. Os enderezos inválidos seranche ignorados.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"aínda cando", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Desactualizada.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Filtro estático {{filter}}atopado en:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "ver contido", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Rexistro de cambios", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Última actualización: {{ago}}\nFai click para forzar a actualización.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Actualizando...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Asistencia", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Un erro de rede está a impedir que se actualicen os recursos.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Código fonte (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Non engadir filtros de fontes non confiables.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Colaboradores", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Activar os meus filtros personais", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Facer copia de seguridade nun arquivo", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Requerir confiar nos filtros personalizados", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"ublock-copia-seguridade_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Importar e engadir…", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Recuperar dende arquivo...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Exportar…", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Restabelecer os axustes por defecto...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "o-meu-ublock-filtros-estaticos_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Todas as túas preferencias serán rescritas, usando os datos rexistrados no {{time}}, e o uBlock₀ reiniciará. Queres sobrescribir toda a configuración existente empregando os datos da copia de seguridade?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Aplicar cambios", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Os datos son inválidos ou non poden ser lidos", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Regras permanentes", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Eliminaranse todas as túas preferencias, e reiniciará o uBlock₀. Queres resetear o uBlock₀ á configuración por defecto?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Regras temporais", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Non foi posible conectar con {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Reverter", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Engadir o seguinte enderezo á túa lista de filtros personalizados?\n\nTitle: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Estabelecer", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"fai un minuto", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Editar", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"fai {{value}} minutos", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Gardar", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"fai unha hora", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Descartar", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"fai {{value}} horas", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Importar dun arquivo...", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"fai un día", - "description":"English: a day ago" + "rulesExport": { + "message": "Exportar a un ficheiro…", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"fai {{value}} días", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "o-meu-ublock-regras-dinamicas_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Amosar no Panel de control", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Listado coas túas regras de filtrado dinámico.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Amosar o rexistro de peticións da rede", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Sintaxe das regras: orixe destino tipo acción (documentación completa).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"desactivado", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Orde:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"O uBlock₀ impediu cargar a seguinte páxina:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Tipo de regra", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Por mor deste filtro:", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Orixe", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"sen parámetros", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Destino", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Atopado en:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "As directivas de sitios de confianza indican as páxinas nas que uBlock Origin estará desactivado. Ten unha entrada por cada liña.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Retroceder", - "description":"English: Go back" + "whitelistImport": { + "message": "Importar e engadir…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Pechar esta xanela", - "description":"English: Close this window" + "whitelistExport": { + "message": "Exportar…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Desactivar o bloqueo estricto en {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "o-meu-ublock-webs-confiables_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Temporalmente", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Aplicar os cambios", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Permanentemente", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Tipo", + "description": "English: Type" }, - "cloudPush":{ - "message":"Exportar ó almacenamento na nube", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Dominio", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Importar dende o almacenamento na nube", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "Enderezo", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Importar dende a nube e combinar coas preferencias actuais", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filtro", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"... ...", - "description":"" + "logAll": { + "message": "Todas", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"O nome deste dispositivo:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Peticións ocultas", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Enviar", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Lapela activa", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Reverter", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Recargar contido da pestana", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"bytes", - "description":"" + "loggerDomInspectorTip": { + "message": "Activar inspector do DOM", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Permitir temporalmente os elementos multimedia grandes", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Activar panel emerxente", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"Esta ten que ser a derradeira entrada", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "wiki de uBlock Origin: The logger", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Baleirar rexistro", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Pausar rexistro (desbotar todos os datos de entrada)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Reactivar rexistro", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Activar filtrado do rexistro", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filtras as entradas de rexistro", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Opcións do filtrado do rexistro", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Non", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "bloqueado", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "permitido", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "modificado", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "da orixe", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "de terceiras partes", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Detalles", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filtrar", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Lista de filtrado", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Regra", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Contexto", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Contexto Root", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Orixe do elemento", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Tipo", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Filtrado dinámico do enderezo", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Contexto:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Tipo:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Filtrado estático", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} peticións de rede tipo {{type}} {{br}} nas cales o enderezo contenga {{url}} {{br}}e que teñan como orixe {{origin}},{{br}}{{importance}} haxa un filtro de excepción aplicable.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Bloquear", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Permitir", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "tipo “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "calquera tipo", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "dende “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "dende calquera sitio", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "agás cando", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "aínda cando", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Filtro estático {{filter}}atopado en:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Non atopamos filtro estático {{filter}} en ningunha das listas de filtros activas", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "As entradas no rexistro que non cumpran coas tres condicións inferiores desbotaranse automáticamente:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Manter entradas dos últimos {{input}} minutos", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Manter como máximo {{input}} cargas da páxina por pestana", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Manter como máximo {{input}} entradas por pestana", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Usar {{input}} liñas por entrada en modo vertical despregado", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Agochar columnas:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Hora", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filtro/regra", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Contexto", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Orixe", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Lista", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Táboa", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Plano", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Abrir", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Crear nova denuncia", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Atopar denuncias parecidas", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Documentación", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Le a documentación en uBlock/wiki para saber máis acerca das ferramentas de uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Preguntas e axuda", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "No subreddit /r/uBlockOrigin hai respostas a preguntas e outro tipo de axuda", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Problemas co filtrado/Esta web non funciona", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Informar de problemas co filtrado en sitios web específicos no uBlockOrigin/uAssets issue tracker.Require unha conta en GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Importante: Evitar usar ao mesmo tempo outros bloqueadores semellantes a uBlock Origin, xa que podería causar problemas co filtrado nalgunhas webs en concreto.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Truco: Mira que as listas de filtrado estean actualizadas.The logger é a ferramenta principal para diagnosticar problemas relacionados co filtrado.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Informar de problemas", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Informar de problemas co filtrado en sitios web específicos no uBlockOrigin/uAssets issue tracker.Require unha conta en GitHub.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Información para arranxar problemas", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "A información técnica seguinte podería ser útil para que as persoas que intentan axudar poidan resolver o problema.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Informar dun problema co filtrado", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Para evitar a sobrecarga de traballo para as persoas voluntarias con duplicados dos problemas, comproba que aínda non se informou acerca do problema.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "As listas de filtrado actualizanse a diario. Comproba que non fose solucionado coa lista de filtrado máis recente.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Comproba que o problema persiste despois de recargar a web problemática.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Enderezo da páxina web:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "A páxina web...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Escolle unha opción --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Mostra publicidade ou restos dela", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Ten capas sobreimpostas ou elementos molestos", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detecta uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Ten problemas relacionados coa privacidade", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Funciona mal cando teño uBlock Origin activado", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Abre ventás ou páxinas non desexadas", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leva a software malicioso, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Etiqueta a páxina como \"NSFW\" (\"Non é Segura No Traballo\")", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Política de privacidade", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Rexistro de cambios", + "description": "" + }, + "aboutCode": { + "message": "Código fonte (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Colaboradores", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Código fonte", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Traducións", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Listas de filtrado", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Dependencias externas (GPLv3-compatible)", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "As listas de filtrado de uBO están aloxadas gratuitamente nos seguintes servidores CDN:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Escóllese un CDN ao chou cando se precisa actualizar a lista.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Facer copia de seguridade nun arquivo", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "ublock-copia-seguridade_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Recuperar desde arquivo...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Restabelecer os axustes por defecto...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Todas as túas preferencias serán rescritas, usando os datos rexistrados no {{time}}, e o uBlock₀ reiniciará. Queres sobrescribir toda a configuración existente empregando os datos da copia de seguridade?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Os datos son inválidos ou non poden ser lidos", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Eliminaranse todas as túas preferencias, e reiniciará o uBlock₀. Queres resetear o uBlock₀ á configuración por defecto?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Erro da rede: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Subscribir", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "fai un minuto", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "fai {{value}} minutos", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "fai unha hora", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "fai {{value}} horas", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "fai un día", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "fai {{value}} días", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Amosar no Panel de control", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Amosar o rexistro de peticións da rede", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "desactivado", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Páxina bloqueada", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "O uBlock₀ impediu cargar a seguinte páxina:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Por mor deste filtro:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "sen parámetros", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Atopado en:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Retroceder", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Pechar esta xanela", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Non avisarme máis sobre esta web", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Desactivar o bloqueo estricto en {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Temporalmente", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Permanentemente", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Proceder", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "A páxina bloqueada quere redirixir a outra web. Se elixes continuar vas ir directamente a: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Razón:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Daniña", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Rastrexo", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Mala reputación", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Exportar ó almacenamento na nube", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importar dende o almacenamento na nube", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importar dende a nube e combinar coas preferencias actuais", + "description": "tooltip" + }, + "cloudNoData": { + "message": "... ...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "O nome deste dispositivo:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Ollo! Non cambies estas configuracións avanzadas senón sabes ben o que estás a facer.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Enviar", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Aplicar os cambios", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Reverter", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Bloquear elemento no marco...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Subscribirse á lista de filtrado...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Permitir temporalmente os elementos multimedia grandes", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Ver código fonte...", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Introduce un atallo", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Cambiar estado desprazamento", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Copiar ao portapapeis", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Seleccionar todo", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Activar filtrado cosmético", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Alternar JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Relaxar o modo de bloqueo", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Almacenaxe usada: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Preme para cargar", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Erros: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Non se filtrou correctamente ao inicio do navegador. Recarga a páxina para asegurar un filtrado correcto.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Esta ten que ser a derradeira entrada", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/gu/messages.json b/src/_locales/gu/messages.json new file mode 100644 index 0000000000000..488adce2e009d --- /dev/null +++ b/src/_locales/gu/messages.json @@ -0,0 +1,1314 @@ +{ + "extName": { + "message": "uBlock Origin", + "description": "extension name." + }, + "extShortDesc": { + "message": "અંતે, એક કાર્યક્ષમ અવરોધક. સીપીયુ અને મેમરી પર સરળ.", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "dashboardName": { + "message": "uBlock₀ — Dashboard", + "description": "English: uBlock₀ — Dashboard" + }, + "dashboardUnsavedWarning": { + "message": "ચેતવણી! તમારા ફેરફારો સચવાયેલા નથી ", + "description": "A warning in the dashboard when navigating away from unsaved changes" + }, + "dashboardUnsavedWarningStay": { + "message": "રહો\n", + "description": "Label for button to prevent navigating away from unsaved changes" + }, + "dashboardUnsavedWarningIgnore": { + "message": "અવગણો", + "description": "Label for button to ignore unsaved changes" + }, + "settingsPageName": { + "message": "સેટિંગ્સ", + "description": "appears as tab name in dashboard" + }, + "3pPageName": { + "message": "ફિલ્ટર યાદીઓ", + "description": "appears as tab name in dashboard" + }, + "1pPageName": { + "message": "મારા ફિલ્ટર ", + "description": "appears as tab name in dashboard" + }, + "rulesPageName": { + "message": "મારા નિયમો", + "description": "appears as tab name in dashboard" + }, + "whitelistPageName": { + "message": "Trusted sites", + "description": "appears as tab name in dashboard" + }, + "shortcutsPageName": { + "message": "Shortcuts", + "description": "appears as tab name in dashboard" + }, + "statsPageName": { + "message": "uBlock₀ — Logger", + "description": "Title for the logger window" + }, + "aboutPageName": { + "message": "About", + "description": "appears as tab name in dashboard" + }, + "supportPageName": { + "message": "Support", + "description": "appears as tab name in dashboard" + }, + "assetViewerPageName": { + "message": "uBlock₀ — Asset viewer", + "description": "Title for the asset viewer page" + }, + "advancedSettingsPageName": { + "message": "Advanced settings", + "description": "Title for the advanced settings page" + }, + "popupPowerSwitchInfo": { + "message": "Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + }, + "popupPowerSwitchInfo1": { + "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "description": "Message to be read by screen readers" + }, + "popupPowerSwitchInfo2": { + "message": "Click to enable uBlock₀ for this site.", + "description": "Message to be read by screen readers" + }, + "popupBlockedRequestPrompt": { + "message": "requests blocked", + "description": "English: requests blocked" + }, + "popupBlockedOnThisPagePrompt": { + "message": "on this page", + "description": "English: on this page" + }, + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 (13%)" + }, + "popupBlockedSinceInstallPrompt": { + "message": "since install", + "description": "English: since install" + }, + "popupOr": { + "message": "or", + "description": "English: or" + }, + "popupBlockedOnThisPage_v2": { + "message": "Blocked on this page", + "description": "For the new mobile-friendly popup design" + }, + "popupBlockedSinceInstall_v2": { + "message": "Blocked since install", + "description": "For the new mobile-friendly popup design" + }, + "popupDomainsConnected_v2": { + "message": "Domains connected", + "description": "For the new mobile-friendly popup design" + }, + "popupTipDashboard": { + "message": "Open the dashboard", + "description": "English: Click to open the dashboard" + }, + "popupTipZapper": { + "message": "Enter element zapper mode", + "description": "Tooltip for the element-zapper icon in the popup panel" + }, + "popupTipPicker": { + "message": "Enter element picker mode", + "description": "English: Enter element picker mode" + }, + "popupTipLog": { + "message": "Open the logger", + "description": "Tooltip used for the logger icon in the panel" + }, + "popupTipReport": { + "message": "Report an issue on this website", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipNoPopups": { + "message": "Toggle the blocking of all popups for this site", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups1": { + "message": "Click to block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2": { + "message": "Click to no longer block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoLargeMedia": { + "message": "Toggle the blocking of large media elements for this site", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia1": { + "message": "Click to block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoCosmeticFiltering": { + "message": "Toggle cosmetic filtering for this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering1": { + "message": "Click to disable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2": { + "message": "Click to enable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoRemoteFonts": { + "message": "Toggle the blocking of remote fonts for this site", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts1": { + "message": "Click to block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts2": { + "message": "Click to no longer block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoScripting1": { + "message": "Click to disable JavaScript on this site", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupTipNoScripting2": { + "message": "Click to no longer disable JavaScript on this site", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupNoPopups_v2": { + "message": "Pop-up windows", + "description": "Caption for the no-popups per-site switch" + }, + "popupNoLargeMedia_v2": { + "message": "Large media elements", + "description": "Caption for the no-large-media per-site switch" + }, + "popupNoCosmeticFiltering_v2": { + "message": "Cosmetic filtering", + "description": "Caption for the no-cosmetic-filtering per-site switch" + }, + "popupNoRemoteFonts_v2": { + "message": "Remote fonts", + "description": "Caption for the no-remote-fonts per-site switch" + }, + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" + }, + "popupMoreButton_v2": { + "message": "More", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton_v2": { + "message": "Less", + "description": "Label to be used to hide popup panel sections" + }, + "popupTipGlobalRules": { + "message": "Global rules: this column is for rules which apply to all sites.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." + }, + "popupTipLocalRules": { + "message": "Local rules: this column is for rules which apply to the current site only.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." + }, + "popupTipSaveRules": { + "message": "Click to make your changes permanent.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." + }, + "popupTipRevertRules": { + "message": "Click to revert your changes.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + }, + "popupAnyRulePrompt": { + "message": "all", + "description": "" + }, + "popupImageRulePrompt": { + "message": "images", + "description": "" + }, + "popup3pAnyRulePrompt": { + "message": "3rd-party", + "description": "" + }, + "popup3pPassiveRulePrompt": { + "message": "3rd-party CSS/images", + "description": "" + }, + "popupInlineScriptRulePrompt": { + "message": "inline scripts", + "description": "" + }, + "popup1pScriptRulePrompt": { + "message": "1st-party scripts", + "description": "" + }, + "popup3pScriptRulePrompt": { + "message": "3rd-party scripts", + "description": "" + }, + "popup3pFrameRulePrompt": { + "message": "3rd-party frames", + "description": "" + }, + "popupHitDomainCountPrompt": { + "message": "domains connected", + "description": "appears in popup" + }, + "popupHitDomainCount": { + "message": "{{count}} out of {{total}}", + "description": "appears in popup" + }, + "popupVersion": { + "message": "Version", + "description": "Example of use: Version 1.26.4" + }, + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" + }, + "popup3pFrameFilter": { + "message": "frame", + "description": "Appears as an option to filter out firewall rows" + }, + "pickerCreate": { + "message": "Create", + "description": "English: Create" + }, + "pickerPick": { + "message": "Pick", + "description": "English: Pick" + }, + "pickerQuit": { + "message": "Quit", + "description": "English: Quit" + }, + "pickerPreview": { + "message": "Preview", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + }, + "pickerNetFilters": { + "message": "Network filters", + "description": "English: header for a type of filter in the element picker dialog" + }, + "pickerCosmeticFilters": { + "message": "Cosmetic filters", + "description": "English: Cosmetic filters" + }, + "pickerCosmeticFiltersHint": { + "message": "Click, Ctrl-click", + "description": "English: Click, Ctrl-click" + }, + "pickerContextMenuEntry": { + "message": "Block element…", + "description": "An entry in the browser's contextual menu" + }, + "settingsCollapseBlockedPrompt": { + "message": "Hide placeholders of blocked elements", + "description": "English: Hide placeholders of blocked elements" + }, + "settingsIconBadgePrompt": { + "message": "Show the number of blocked requests on the icon", + "description": "English: Show the number of blocked requests on the icon" + }, + "settingsTooltipsPrompt": { + "message": "Disable tooltips", + "description": "A checkbox in the Settings pane" + }, + "settingsContextMenuPrompt": { + "message": "Make use of context menu where appropriate", + "description": "English: Make use of context menu where appropriate" + }, + "settingsColorBlindPrompt": { + "message": "Color-blind friendly", + "description": "English: Color-blind friendly" + }, + "settingsAppearance": { + "message": "Appearance", + "description": "Section for controlling user interface appearance" + }, + "settingsThemeLabel": { + "message": "Theme", + "description": "Label for checkbox to enable a custom dark theme" + }, + "settingsThemeAccent0Label": { + "message": "Custom accent color", + "description": "Label for checkbox to pick an accent color" + }, + "settingsCloudStorageEnabledPrompt": { + "message": "Enable cloud storage support", + "description": "" + }, + "settingsAdvancedUserPrompt": { + "message": "I am an advanced user", + "description": "Checkbox to let user access advanced, technical features" + }, + "settingsPrefetchingDisabledPrompt": { + "message": "Disable pre-fetching (to prevent any connection for blocked network requests)", + "description": "English: " + }, + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Disable hyperlink auditing", + "description": "English: " + }, + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Prevent WebRTC from leaking local IP addresses", + "description": "English: " + }, + "settingPerSiteSwitchGroup": { + "message": "Default behavior", + "description": "" + }, + "settingPerSiteSwitchGroupSynopsis": { + "message": "These default behaviors can be overridden on a per-site basis", + "description": "" + }, + "settingsNoCosmeticFilteringPrompt": { + "message": "Disable cosmetic filtering", + "description": "" + }, + "settingsNoLargeMediaPrompt": { + "message": "Block media elements larger than {{input}} KB", + "description": "" + }, + "settingsNoRemoteFontsPrompt": { + "message": "Block remote fonts", + "description": "" + }, + "settingsNoScriptingPrompt": { + "message": "Disable JavaScript", + "description": "The default state for the per-site no-scripting switch" + }, + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" + }, + "settingsUncloakCnamePrompt": { + "message": "Uncloak canonical names", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" + }, + "settingsAdvanced": { + "message": "Advanced", + "description": "Section for controlling advanced-user settings" + }, + "settingsAdvancedSynopsis": { + "message": "Features suitable only for technical users", + "description": "Description of section controlling advanced-user settings" + }, + "settingsAdvancedUserSettings": { + "message": "advanced settings", + "description": "For the tooltip of a link which gives access to advanced settings" + }, + "settingsLastRestorePrompt": { + "message": "Last restore:", + "description": "English: Last restore:" + }, + "settingsLastBackupPrompt": { + "message": "Last backup:", + "description": "English: Last backup:" + }, + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:", + "description": "Appears at the top of the _3rd-party filters_ pane" + }, + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} used out of {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "3pAutoUpdatePrompt1": { + "message": "Auto-update filter lists", + "description": "A checkbox in the _3rd-party filters_ pane" + }, + "3pUpdateNow": { + "message": "Update now", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pPurgeAll": { + "message": "Purge all caches", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pParseAllABPHideFiltersPrompt1": { + "message": "Parse and enforce cosmetic filters", + "description": "English: Parse and enforce Adblock+ element hiding filters." + }, + "3pParseAllABPHideFiltersInfo": { + "message": "Cosmetic filters serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the network request-based filtering engines.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + }, + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignore generic cosmetic filters", + "description": "This will cause uBO to ignore all generic cosmetic filters." + }, + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." + }, + "3pSuspendUntilListsAreLoaded": { + "message": "Suspend network activity until all filter lists are loaded", + "description": "A checkbox in the 'Filter lists' pane" + }, + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" + }, + "3pApplyChanges": { + "message": "Apply changes", + "description": "English: Apply changes" + }, + "3pGroupDefault": { + "message": "Built-in", + "description": "Filter lists section name" + }, + "3pGroupAds": { + "message": "Ads", + "description": "Filter lists section name" + }, + "3pGroupPrivacy": { + "message": "Privacy", + "description": "Filter lists section name" + }, + "3pGroupMalware": { + "message": "Malware protection, security", + "description": "Filter lists section name" + }, + "3pGroupSocial": { + "message": "Social widgets", + "description": "Filter lists section name" + }, + "3pGroupCookies": { + "message": "Cookie notices", + "description": "Filter lists section name" + }, + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "Filter lists section name" + }, + "3pGroupMultipurpose": { + "message": "Multipurpose", + "description": "Filter lists section name" + }, + "3pGroupRegions": { + "message": "Regions, languages", + "description": "Filter lists section name" + }, + "3pGroupCustom": { + "message": "Custom", + "description": "Filter lists section name" + }, + "3pImport": { + "message": "Import…", + "description": "The label for the checkbox used to import external filter lists" + }, + "3pExternalListsHint": { + "message": "One URL per line. Invalid URLs will be silently ignored.", + "description": "Short information about how to use the textarea to import external filter lists by URL" + }, + "3pExternalListObsolete": { + "message": "Out of date.", + "description": "used as a tooltip for the out-of-date icon beside a list" + }, + "3pViewContent": { + "message": "view content", + "description": "used as a tooltip for eye icon beside a list" + }, + "3pLastUpdate": { + "message": "Last update: {{ago}}.\nClick to force an update.", + "description": "used as a tooltip for the clock icon beside a list" + }, + "3pUpdating": { + "message": "Updating…", + "description": "used as a tooltip for the spinner icon beside a list" + }, + "3pNetworkError": { + "message": "A network error prevented the resource from being updated.", + "description": "used as a tooltip for error icon beside a list" + }, + "1pTrustWarning": { + "message": "Do not add filters from untrusted sources.", + "description": "Warning against copy-pasting filters from random sources" + }, + "1pEnableMyFiltersLabel": { + "message": "Enable my custom filters", + "description": "Label for the checkbox use to enable/disable 'My filters' list" + }, + "1pTrustMyFiltersLabel": { + "message": "Allow custom filters requiring trust", + "description": "Label for the checkbox use to trust the content of 'My filters' list" + }, + "1pImport": { + "message": "Import and append…", + "description": "Button in the 'My filters' pane" + }, + "1pExport": { + "message": "Export…", + "description": "Button in the 'My filters' pane" + }, + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" + }, + "1pApplyChanges": { + "message": "Apply changes", + "description": "English: Apply changes" + }, + "rulesPermanentHeader": { + "message": "Permanent rules", + "description": "header" + }, + "rulesTemporaryHeader": { + "message": "Temporary rules", + "description": "header" + }, + "rulesRevert": { + "message": "Revert", + "description": "This will remove all temporary rules" + }, + "rulesCommit": { + "message": "Commit", + "description": "This will persist temporary rules" + }, + "rulesEdit": { + "message": "Edit", + "description": "Will enable manual-edit mode (textarea)" + }, + "rulesEditSave": { + "message": "Save", + "description": "Will save manually-edited content and exit manual-edit mode" + }, + "rulesEditDiscard": { + "message": "Discard", + "description": "Will discard manually-edited content and exit manual-edit mode" + }, + "rulesImport": { + "message": "Import from file…", + "description": "" + }, + "rulesExport": { + "message": "Export to file…", + "description": "Button in the 'My rules' pane" + }, + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" + }, + "rulesHint": { + "message": "List of your dynamic filtering rules.", + "description": "English: List of your dynamic filtering rules." + }, + "rulesFormatHint": { + "message": "Rule syntax: source destination type action (full documentation).", + "description": "English: dynamic rule syntax and full documentation." + }, + "rulesSort": { + "message": "Sort:", + "description": "English: label for sort option." + }, + "rulesSortByType": { + "message": "Rule type", + "description": "English: a sort option for list of rules." + }, + "rulesSortBySource": { + "message": "Source", + "description": "English: a sort option for list of rules." + }, + "rulesSortByDestination": { + "message": "Destination", + "description": "English: a sort option for list of rules." + }, + "whitelistPrompt": { + "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line.", + "description": "A concise description of the 'Trusted sites' pane." + }, + "whitelistImport": { + "message": "Import and append…", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExport": { + "message": "Export…", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExportFilename": { + "message": "my-ublock-trusted-sites_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" + }, + "whitelistApply": { + "message": "Apply changes", + "description": "English: Apply changes" + }, + "logRequestsHeaderType": { + "message": "Type", + "description": "English: Type" + }, + "logRequestsHeaderDomain": { + "message": "Domain", + "description": "English: Domain" + }, + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" + }, + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" + }, + "logAll": { + "message": "All", + "description": "Appears in the logger's tab selector" + }, + "logBehindTheScene": { + "message": "Tabless", + "description": "Pretty name for behind-the-scene network requests" + }, + "loggerCurrentTab": { + "message": "Current tab", + "description": "Appears in the logger's tab selector" + }, + "loggerReloadTip": { + "message": "Reload the tab content", + "description": "Tooltip for the reload button in the logger page" + }, + "loggerDomInspectorTip": { + "message": "Toggle the DOM inspector", + "description": "Tooltip for the DOM inspector button in the logger page" + }, + "loggerPopupPanelTip": { + "message": "Toggle the popup panel", + "description": "Tooltip for the popup panel button in the logger page" + }, + "loggerInfoTip": { + "message": "uBlock Origin wiki: The logger", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Clear logger", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Pause logger (discard all incoming data)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Unpause logger", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Toggle logger filtering", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filter logger content", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Logger filtering options", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Not", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "blocked", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "allowed", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "modified", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "1st-party", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "3rd-party", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Details", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filter", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Filter list", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Rule", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Context", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Root context", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Partyness", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Type", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL rule", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Context:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Type:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Static filter", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Block", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Allow", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "type “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "any type", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "from “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "from anywhere", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "except when", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "even if", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Static filter {{filter}} found in:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Static filter could not be found in any of the currently enabled filter lists", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Preserve entries from the last {{input}} minutes", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Preserve at most {{input}} page loads per tab", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Preserve at most {{input}} entries per tab", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Use {{input}} lines per entry in vertically expanded mode", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Hide columns:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Time", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filter/rule", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Context", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Partyness", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "List", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Table", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Plain", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Open", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Create new report on GitHub", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Find similar reports on GitHub", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Documentation", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Read the documentation at uBlock/wiki to learn about all of uBlock Origin's features.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Questions and support", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Answers to questions and other kinds of help support is provided on the subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filter issues/website is broken", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Important: Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tips: Be sure your filter lists are up to date. The logger is the primary tool to diagnose filter-related issues.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Bug report", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Report issues with uBlock Origin itself to the uBlockOrigin/uBlock-issue issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Troubleshooting Information", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported. Note: clicking the button will cause the page's origin to be sent to GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verify that the issue still exists after reloading the problematic web page.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the web page:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The web page…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBlock Origin is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the web page as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Privacy policy", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Changelog", + "description": "" + }, + "aboutCode": { + "message": "Source code (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Contributors", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Source code", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Translations", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Filter lists", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "External dependencies (GPLv3-compatible):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO's own filter lists are freely hosted on the following CDNs:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "A randomly picked CDN is used when a filter list needs to be updated.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Back up to file…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Restore from file…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Reset to default settings…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "The data could not be read or is invalid", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Network error: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Subscribe", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "a minute ago", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} minutes ago", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "an hour ago", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} hours ago", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "a day ago", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} days ago", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Show Dashboard", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Show Logger", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "off", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Page blocked", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin has prevented the following page from loading:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "This happened because of the following filter:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "without parameters", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "The filter has been found in:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Go back", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Close this window", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Disable strict blocking for {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Temporarily", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Permanently", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Proceed", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Export to cloud storage", + "description": "tooltip" + }, + "cloudPull": { + "message": "Import from cloud storage", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Import from cloud storage and merge with current settings", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "This device name:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Warning! Change these advanced settings at your own risk.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Submit", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Apply changes", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Revert", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Block element in frame…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Subscribe to filter list…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Temporarily allow large media elements", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "View source code…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Type a shortcut", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Toggle locked scrolling", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Copy to clipboard", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Select all", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Toggle cosmetic filtering", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Toggle JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Relax blocking mode", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Storage used: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Click to load", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Errors: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" + } +} diff --git a/src/_locales/he/messages.json b/src/_locales/he/messages.json index b2d5788039054..9839eff1b66fe 100644 --- a/src/_locales/he/messages.json +++ b/src/_locales/he/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"סוף סוף, חוסם יעיל. קל על המעבד והזיכרון.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "סוף סוף, חוסם יעיל. קל על המעבד והזיכרון.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — פאנל הקונפיגורציות", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — לוח מחוונים", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"הגדרות", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "אזהרה! יש לך שינויים שלא שמרת עדיין", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"מסננים צד-3", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "הישאר", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"המסננים שלי", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "התעלם", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"החוקים שלי", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "הגדרות", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"רשימה לבנה", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "רשימות מסננים", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — מתעד הבקשות", - "description":"Title for the logger window" + "1pPageName": { + "message": "המסננים שלי", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"אודות", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "החוקים שלי", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"לחיצה: כבה\/הפעל את uBlock₀ לאתר זה לצמיתות.\n\nCtrl+לחיצה: כבה את uBlock₀ רק בדף זה.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "אתרים מהימנים", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"בקשות שנחסמו", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "קיצורי דרך", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"בדף זה", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — מתעד הבקשות", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} או {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "אודות", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"מאז ההתקנה", - "description":"English: since install" + "supportPageName": { + "message": "תמיכה", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"או", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — מציג הנכסים", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"לחץ כדי לפתוח את פאנל הקונפיגורציות", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "הגדרות מתקדמות", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"היכנס למצב בחירת אלמנט", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "לחיצה: כבה/הפעל את uBlock₀ לאתר זה לצמיתות.\n\nCtrl+לחיצה: כבה את uBlock₀ רק בדף זה.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"פתח את מתעד הבקשות", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "לחיצה: כבה את uBlock₀ לאתר זה.\n\nCtrl+לחיצה: כבה את uBlock₀ רק בדף זה.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"הפעל\/כבה את החסימה של חלונות קופצים באתר זה", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "לחץ על מנת להפעיל את uBlock₀ באתר זה.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"הפעל\/כבה את החסימה של אלמנטי מדיה גדולים באתר זה", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "בקשות שנחסמו", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"הפעל\/כבה מסננים קוסמטיים באתר זה", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "בדף זה", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"הפעל\/כבה את החסימה של פונטים חיצוניים באתר זה", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"חוקים גלובליים: עמודה זו היא עבור חוקים אשר תקפים לכל האתרים.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "מאז ההתקנה", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"חוקים לוקאליים: עמודה זו היא עבור חוקים אשר תקפים לאתר הנוכחי בלבד.\nחוקים לוקאליים דורסים את החוקים גלובליים.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "או", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"לחץ על מנת להפוך את השינויים שלך לקבועים.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "חסומים בדף זה", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"לחץ על מנת לבטל את השינויים שלך.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "נחסמו מאז ההתקנה", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"הכל", - "description":"" + "popupDomainsConnected_v2": { + "message": "דומיינים שהתחברת אליהם", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"תמונות", - "description":"" + "popupTipDashboard": { + "message": "פתח את לוח המחוונים", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"צד-3", - "description":"" + "popupTipZapper": { + "message": "היכנס למצב מחיקת אלמנט באופן זמני", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"css\/תמונות צד-3", - "description":"" + "popupTipPicker": { + "message": "היכנס למצב בחירת אלמנט", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"סקריפטים מוטמעים", - "description":"" + "popupTipLog": { + "message": "פתח את מתעד הבקשות", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"סקריפטים צד-1", - "description":"" + "popupTipReport": { + "message": "דווח על בעיה באתר אינטרנט זה", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"סקריפטים צד-3", - "description":"" + "popupTipNoPopups": { + "message": "הפעל/כבה את החסימה של חלונות קופצים באתר זה", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"מסגרות צד-3", - "description":"" + "popupTipNoPopups1": { + "message": "לחץ על מנת לחסום חלונות קופצים באתר זה", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"דומיינים שהתחברת אליהם", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "לחץ על מנת לבטל את החסימה של חלונות קופצים באתר זה", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} מתוך {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "הפעל/כבה את החסימה של אלמנטי מדיה גדולים באתר זה", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"צור", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "לחץ על מנת לחסום אלמנטי מדיה גדולים באתר זה", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"בחר", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "לחץ על מנת לבטל את החסימה של אלמנטי מדיה גדולים באתר זה", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"צא", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "הפעל/כבה מסננים קוסמטיים באתר זה", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"תצוגה מקדימה", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "לחץ על מנת לכבות מסננים קוסמטיים באתר זה", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"מסנני רשת", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "לחץ על מנת להפעיל מסננים קוסמטיים באתר זה", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"מסננים קוסמטיים", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "הפעל/כבה את החסימה של פונטים חיצוניים באתר זה", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"לחיצה, Ctrl+לחיצה", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "לחץ על מנת לחסום פונטים חיצוניים באתר זה", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"חסום אלמנט", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "לחץ על מנת לבטל את החסימה של פונטים חיצוניים באתר זה", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"הסתר את המקום שנשאר מחסימה של אלמנטים", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "לחץ על מנת לחסום JavaScript באתר זה", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"הראה את מספר הבקשות החסומות על האייקון", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "לחץ על מנת להפסיק לחסום JavaScript באתר זה", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"כבה רמזים צצים", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "חלונות קופצים", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"הצגת הפריט 'חסום אלמנט' בתפריט הלחצן הימני איפה שאפשר", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "אלמנטי מדיה גדולים", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"ידידותי לעיוורי צבעים", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "מסננים קוסמטיים", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"הפעל אחסון בענן", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "פונטים חיצוניים", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"אני משתמש מתקדם (נדרש לקרוא<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"כבה אחזור מוקדם של משאבים (על מנת למנוע מחיבורים של בקשות רשת חסומות להישלח)", - "description":"English: " + "popupMoreButton_v2": { + "message": "עוד", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"חסום Hyperlink auditing", - "description":"English: " + "popupLessButton_v2": { + "message": "פחות", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"מנע מ WebRTC להדליף כתובות IP לוקאליות", - "description":"English: " + "popupTipGlobalRules": { + "message": "חוקים גלובליים: עמודה זו היא עבור חוקים אשר תקפים לכל האתרים.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"התנהגות ברירת מחדל", - "description":"" + "popupTipLocalRules": { + "message": "חוקים לוקאליים: עמודה זו היא עבור חוקים אשר תקפים לאתר הנוכחי בלבד.\nחוקים לוקאליים דורסים את החוקים הגלובליים.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"התנהגויות ברירת מחדל אלו יכולות להיקבע עבור כל אתר בנפרד", - "description":"" + "popupTipSaveRules": { + "message": "לחץ על מנת להפוך את השינויים שלך לקבועים.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"כבה מסננים קוסמטיים", - "description":"" + "popupTipRevertRules": { + "message": "לחץ על מנת לבטל את השינויים שלך.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"חסום אלמנטי מדיה הגדולים מ {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "הכל", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"חסום פונטים חיצוניים", - "description":"" + "popupImageRulePrompt": { + "message": "תמונות", + "description": "" }, - "settingsStorageUsed":{ - "message":"אחסון בשימוש: {{value}} בתים", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "צד-3", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"שחזור אחרון:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "CSS/תמונות צד-3", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"גיבוי אחרון:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "סקריפטים מוטמעים", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} מסנני רשת + {{cosmeticFilterCount}} מסננים קוסמטיים מתוך:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "סקריפטים צד-1", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} בשימוש מתוך {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "סקריפטים צד-3", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"עדכן אוטומטית את רשימות המסננים.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "מסגרות צד-3", + "description": "" }, - "3pUpdateNow":{ - "message":"עדכן כעת", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "דומיינים שהתחברת אליהם", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"נקה את כל זיכרוני המטמון", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} מתוך {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"פרסר ואפשר מסננים קוסמטיים.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "גרסה", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      אפשרות זו מאפשרת פירסור ואיפשור של מסנני “ההסתרת האלמנטים” התואמים ל Adblock Plus<\/a>. מסננים אלו הם קוסמטיים, הם נועדו להסתיר אלמנטים בדף אשר נחשבים למטרד חזותי, ואשר לא יכולים להיחסם על ידי מנוע חסימת בקשות רשת.<\/p>

      הפעלת פיצ'ר זה מעלה את צריכת הזיכרון של uBlock₀<\/i><\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "סקריפט", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"התעלם ממסננים קוסמטיים כלליים", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "מסגרת", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      מסננים קוסמטיים כלליים הם המסננים הקוסמטיים אשר מיועדים להיות מוחלים על כל דפי האינטרנט.

      למרות ש uBlock₀ מטפל בהם ביעילות, מסננים קוסמטיים כללים יכולים להכביד על הזיכרון וה CPU בדפי אינטרנט מסוימים, בעיקר לדפי אינטרנט גדולים ובעלי חיים ארוכים.

      אפשור הגדרה זו תמנע את השימוש הרב בזיכרון וב CPU אשר נוספים לדפי אינטרנט כתוצאה משימוש במסננים קוסמטיים כלליים, וגם תוריד את צריכת הזיכרון של uBlock₀ עצמו.

      מומלץ לאפשר הגדרה זו במכשירים חלשים יותר.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "צור", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"רשימה של דומיינים חסומים", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "בחר", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"החל שינויים", - "description":"English: Apply changes" + "pickerQuit": { + "message": "צא", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"פרסומות", - "description":"English: Ads" + "pickerPreview": { + "message": "תצוגה מקדימה", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"פרטיות", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "מסנני רשת", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"דומיינים של תוכנות זדוניות", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "מסננים קוסמטיים", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"חברתי", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "לחיצה, Ctrl+לחיצה", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"רב תכליתי", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "חסום אלמנט…", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"אזורים, שפות", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "הסתר את המקום שנשאר מחסימה של אלמנטים", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"מותאם אישית", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "הראה את מספר הבקשות החסומות על האייקון", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"כתובת אחת בכל שורה. שורות עם קידומת ‘!’ לא יפורשו. כתובות לא חוקיות לא יפורשו ולא תהיה התראה לכך.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "כבה רמזים צצים", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"החל", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "הצגת הפריט 'חסום אלמנט' בתפריט הלחצן הימני איפה שאפשר", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"נקה זיכרון מטמון", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "ידידותי לעיוורי צבעים", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"גרסה חדשה זמינה", - "description":"English: new version available" + "settingsAppearance": { + "message": "נראות", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"עדכון זמין", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "ערכת נושא", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"עדכון אחרון: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "צבע הדגשה מותאם אישית", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"מסנן אחד לכל שורה. המסנן יכול להיות דומיין פשוט, או מסנן המותאם ל- Adblock Plus. שורות עם קידומת ‘!’ לא יפורשו.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "הפעל אחסון בענן", + "description": "" }, - "1pImport":{ - "message":"ייבא וצרף", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "אני משתמש מתקדם", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"ייצוא", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "כבה אחזור מוקדם של משאבים (על מנת למנוע מחיבורים של בקשות רשת חסומות להישלח)", + "description": "English: " }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "חסום Hyperlink auditing", + "description": "English: " }, - "1pApplyChanges":{ - "message":"החל שינויים", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "מנע מ WebRTC להדליף כתובות IP לוקאליות", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"חוקים קבועים", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "התנהגות ברירת מחדל", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"חוקים זמניים", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "התנהגויות ברירת מחדל אלו יכולות להיקבע עבור כל אתר בנפרד", + "description": "" }, - "rulesRevert":{ - "message":"החזר למצב הקודם", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "כבה מסננים קוסמטיים", + "description": "" }, - "rulesCommit":{ - "message":"החל", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "חסום אלמנטי מדיה הגדולים מ {{input}} KB", + "description": "" }, - "rulesEdit":{ - "message":"ערוך", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "חסום פונטים חיצוניים", + "description": "" }, - "rulesEditSave":{ - "message":"שמור", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "חסום JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"בטל", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "חסום דיווחי CSP", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"ייבא מקובץ...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "חשוף רשומות DNS מסוג CNAME", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"ייצא לקובץ...", - "description":"" + "settingsAdvanced": { + "message": "מתקדם", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "מאפיינים למשתמשים בעלי ידע טכני בלבד", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"רשימת חוקי המסננים הדינאמיים שלך.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "הגדרות מתקדמות", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"סינטקס חוק: פעולה סוג יעד מקור<\/code> (תיעוד מלא<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "שחזור אחרון:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"רשימת שמות המתחם שלך בהם uBlock₀ לא יהיה פעיל. רשומה אחת בכל שורה. שמות מתחם לא חוקיים לא יפורשו ולא תהיה התראה לכך.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "גיבוי אחרון:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"ייבא וצרף", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} מסנני רשת + {{cosmeticFilterCount}} מסננים קוסמטיים מתוך:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"ייצוא", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} בשימוש מתוך {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "עדכן אוטומטית את רשימות המסננים.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"החל שינויים", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "עדכן כעת", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"סוג", - "description":"English: Type" + "3pPurgeAll": { + "message": "נקה את כל זיכרוני המטמון", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"דומיין", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "פרסר ואפשר מסננים קוסמטיים.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"כתובת", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "מסננים קוסמטיים נועדו להסתיר אלמנטים בדף אינטרנט אשר נחשבים למטרד חזותי, ואשר לא יכולים להיחסם על ידי מנוע חסימת בקשות רשת.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"מסנן", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "התעלם ממסננים קוסמטיים כלליים", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"כל הטאבים", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "מסננים קוסמטיים כלליים - אלה הם המסננים הקוסמטיים, אשר מיועדים להיות מוחלים על כל דפי האינטרנט. אפשור הגדרה זו תוריד את צריכת הזיכרון והמעבד אשר מתווספות לדפי אינטרנט כתוצאה משימוש במסננים קוסמטיים כלליים.\n\nמומלץ לאפשר הגדרה זו במכשירים פחות חזקים.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"מאחורי הקלעים", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "השהה פעילות רשת עד לסיום טעינת כל רשימות הסינון", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"סנן רשומות", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "רשימה של דומיינים חסומים", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"מספר רשומות מקסימליות", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "החל שינויים", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"קונטקטס:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "מובנה", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"סוג:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "פרסומות", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"סינון URL דינאמי", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "פרטיות", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"סינון סטאטי", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "הגנה מפני נוזקות, אבטחה", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} בקשות רשת מסוג {{type}} {{br}} שה URL שלהן הוא {{url}} {{br}} ואשר מגיע מהאתר {{origin}},{{br}}{{importance}} קיים כבר מסנן שמתיר להעביר בקשות רשת אלה.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "יישומונים חברתיים", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"חסום", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "הודעות בקשר לעוגיות", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"אפשר", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "מטרדים", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"מסוג \"{{type}}\"", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "רב תכליתי", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"כל סוג", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "אזורים, שפות", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"מתוך \"{{origin}}\"", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "מותאם אישית", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"מכל מקום", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "ייבא…", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"אך לא כאשר", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "כתובת אינטרנט אחת בכל שורה. כתובות אינטרנט שאינן חוקיות לא יפורשו.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"גם אם", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "לא עדכני.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"המסנן הסטאטי {{filter}} נמצא ב:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "הצג תוכן", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"רשימת שינויים", - "description":"English: Change log" + "3pLastUpdate": { + "message": "עדכון אחרון: {{ago}}.\nלחץ על מנת לאלץ עידכון.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"ויקי", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "מעדכן…", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"תמיכה", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "בעיית רשת מנעה מהמשאב להתעדכן.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"קוד מקור (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "אל תוסיף מסננים ממקורות לא מהימנים.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"תורמים", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "אפשור מסננים מותאמים אישית", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"גבה לקובץ", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "אפשור למסננים מותאמים אישית לדרוש אמון", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "ייבא וצרף…", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"שחזר מקובץ...", - "description":"English: Restore from file..." + "1pExport": { + "message": "ייצוא…", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"אפס להגדרות ברירת מחדל...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"כל ההגדרות שלך יוחלפו בנתונים שגובו ב {{time}}, ו uBlock₀ יופעל מחדש.\n\nהאם להחליף את כל ההגדרות הקיימות בנתונים המגובים?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "החל שינויים", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"לא הוצלח לקרוא את המידע או שהוא פגום", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "חוקים קבועים", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"כל ההגדרות שלך יימחקו, ו uBlock₀ יופעל מחדש.\n\nלאפס את uBlock₀ להגדרות ברירת מחדל?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "חוקים זמניים", + "description": "header" }, - "errorCantConnectTo":{ - "message":"אין אפשרות להתחבר ל {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "החזר למצב הקודם", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: הוסף את הכתובת הבאה לרשימת הפילטרים המותאמים אישית שלך?\n\nכותרת: \"{{title}}\"\nכתובת URL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "החל", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"לפני דקה", - "description":"English: a minute ago" + "rulesEdit": { + "message": "ערוך", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"לפני {{value}} דקות", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "שמור", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"לפני שעה", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "בטל", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"לפני {{value}} שעות", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "ייבא מקובץ…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"לפני יום", - "description":"English: a day ago" + "rulesExport": { + "message": "ייצא לקובץ…", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"לפני {{value}} ימים", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"הצג את פאנל הקונפיגורציות", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "רשימת חוקי המסננים הדינאמיים שלך.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"הצג את המתעד", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "סינטקס חוק: פעולה סוג יעד מקור (תיעוד מלא).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"מכובה", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "מיין לפי:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin מנע מהעמוד הבא להיטען:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "סוג הרשומה", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"בגלל המסנן הבא", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "מקור", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"ללא פרמטרים", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "יעד", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"נמצא ב:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "הנחיות אתר מהימנות, מכתיבות באילו עמודי מרשתת יש להשבית את uBlock Origin. רשומה אחת לכול שורה.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"חזור אחורה", - "description":"English: Go back" + "whitelistImport": { + "message": "ייבא וצרף…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"סגור חלון זה", - "description":"English: Close this window" + "whitelistExport": { + "message": "ייצוא…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"בטל חסימה נוקשה עבור {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "my-ublock-trusted-sites_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"זמנית", - "description":"English: Temporarily" + "whitelistApply": { + "message": "החל שינויים", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"לצמיתות", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "סוג", + "description": "English: Type" }, - "cloudPush":{ - "message":"ייצא לאחסון ענן", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "דומיין", + "description": "English: Domain" }, - "cloudPull":{ - "message":"ייבא מאחסון ענן", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "כתובת", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"ייבא מהגיבוי בענן ומזג עם ההגדרות הקיימות", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "מסנן", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "כל הטאבים", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"שם המכשיר:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "מאחורי הקלעים", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"שלח", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "לשונית נוכחית", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"החזר למצב הקודם", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "טען מחדש את תוכן הלשונית", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"בתים", - "description":"" + "loggerDomInspectorTip": { + "message": "פתח/סגור את ה DOM inspector", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"זמנית אפשר אלמנטי מדיה גדולים", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "הצג/הסתר את הפאנל הקופץ", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"ערך זה חייב להיות האחרון", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin וויקי: מתעד הבקשות", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "נקה בקשות", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "עצור תיעוד של בקשות (התעלם מכל בקשה חדשה)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "המשך תיעוד של בקשות", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "הפעל/כבה סינון של מתעד הבקשות", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "סנן רשומות של מתעד הבקשות", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "הגדרות סינון של מתעד הבקשות", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "לא", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "חסום", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "מאופשר", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "השתנה", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "צד-1", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "צד-3", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "פרטים", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "מסנן", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "רשימת מסננים", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "חוק", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "הקשר", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "ההקשר המקורי", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "צד", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "סוג", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "כתובת", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "סינון URL דינאמי", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "הקשר:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "סוג:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "סינון סטאטי", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} בקשות רשת מסוג {{type}} {{br}} שה URL שלהן הוא {{url}} {{br}} ואשר מגיע מהאתר {{origin}},{{br}}{{importance}} קיים כבר מסנן שמתיר להעביר בקשות רשת אלה.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "חסום", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "אפשר", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "מסוג \"{{type}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "כל סוג", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "מתוך \"{{origin}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "מכל מקום", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "אך לא כאשר", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "גם אם", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "המסנן הסטאטי {{filter}} נמצא ב:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "המסנן הסטאטי לא נמצא בשום אחת מרשימות המסננים המופעלות כרגע", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "רשומות של מתעד הבקשות שלא תואמות את כל שלושת התנאים הבאים לא ישמרו:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "שמור היסטוריית רשומות של {{input}} הדקות האחרונות", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "שמור היסטוריה של עד {{input}} טעינות עמוד עבור כל לשונית", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "שמור היסטוריה עד {{input}} רשומות עבור כל לשונית", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "השתמש ב {{input}} שורות עבור כל רשומה במצב פרוס אנכית", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "הסתר עמודות:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} זמן", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} מסנן/חוק", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} הקשר", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} צד", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "רשימה", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "טבלה", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "פשוט", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "פורמט Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "לפתוח", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "צור דוח חדש", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "חיפוש דוחות דומים", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "דוקומנטציה", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "קרא את הדוקומנטציה ב uBlock/wik על מנת ללמוד על כל היכולות של uBlock Origin", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "שאלות ותמיכה", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "תשובות לשאלות ושאר סוגי העזרה ניתן להיעזר בסאברדיט /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "בעיות סינון/אתר שבור", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "דווח על בעיות סינון באתרים קונקרטיים בלוח הבעיות uBlockOrigin/uAssets. נדרש משתמש GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "חשוב: המנע משימוש בחוסמים אחרים שיש להם את אותה המטרה באותו הזמן עם uBlock Origin, שכן זה יכול לגרום לבעיות סינון באתרים ספציפיים.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "טיפים: וודאו כי רשימות המסננים שלכם מעודכנים. מתעד הבקשות הינו הכלי המרכזי לפענוח בעיות הקשורות לרשימות מסננים.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "דיווח על באג", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "דווח על בעיות ב uBlock Origin עצמו ל מעקב הסוגייות uBlockOrigin/uBlock-issue.\nנידרש חשבון גיטהאב (GitHub)", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "מידע לפתרון בעיות", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "ראה מטה מידע טכני שיכול להיות מועיל למתנדב, כאשר הוא מנסה לעזור לך לפתור בעיה.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "דיווח על בעיית מסנן", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "כדי להימנע מהכבדה על מתנדבים בדווחים כפולים, נא לודא שבעיה דומה טרם דווחה.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "רשימות הסינון מתעדכנות מדי יום. וודא שהבעיה שלך עדיין לא טופלה ברשימות הסינון המעודכנות.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "וודא כי הבעיה עדיין קיימת לאחר רענון הדף הבעייתי.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "כתובת דף האינטרנט:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "דף האינטרנט…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- בחר קטגוריה --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "הצגת פרסומות או שאריות שלהן", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "קיים ריבוד או מטרד אחר", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "מזהה את uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "בעיות הקשורות לפרטיות", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "כשל תפעולי כאשר uBlock Origin פעיל", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "נפתחים לשוניות או חלונות לא רצויים", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "מוביל לנוזקה, פישינג", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "תיוג דף האינטרנט כ- לב\"ל ('לא בטוח לעבודה')", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "מדיניות פרטיות", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "רשימת שינויים", + "description": "" + }, + "aboutCode": { + "message": "קוד מקור (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "תורמים", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "קוד מקור", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "תרגומים", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "רשימות מסננים", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "תלויות חיצוניות (תואם-GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "רשימות המסננים של uBO מופצות בחינם בשירותי ה CDN הבאים:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "שרות CDN אקראי נבחר לשם עדכון רשימת מסננים", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "גבה לקובץ…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "שחזר מקובץ…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "אפס להגדרות ברירת מחדל…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "כל ההגדרות שלך יוחלפו בנתונים שגובו ב {{time}}, ו uBlock₀ יופעל מחדש.\n\nהאם להחליף את כל ההגדרות הקיימות בנתונים המגובים?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "לא הוצלח לקרוא את המידע או שהוא פגום", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "כל ההגדרות שלך יימחקו, ו uBlock₀ יופעל מחדש.\n\nלאפס את uBlock₀ להגדרות ברירת מחדל?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "בעיית רשת: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "הירשם כמנוי", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "לפני דקה", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "לפני {{value}} דקות", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "לפני שעה", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "לפני {{value}} שעות", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "לפני יום", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "לפני {{value}} ימים", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "הצג את לוח המחוונים", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "הצג את מתעד הבקשות", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "מכובה", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "הדף חסום", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin מנע מהעמוד הבא להיטען:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "בגלל המסנן הבא", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "ללא פרמטרים", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "נמצא ב:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "חזור אחורה", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "סגור חלון זה", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "אל תתריע לי שוב על אתר זה", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "בטל חסימה נוקשה עבור {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "זמנית", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "לצמיתות", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "המשך", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "הדף החסום מבקש לעבור לאתר אחר. אם תחליטו להמשיך, תעברו ישירות ל: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "הסיבה:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "זדוני", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "מעקב", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "מפוקפק", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "ייצא לאחסון ענן", + "description": "tooltip" + }, + "cloudPull": { + "message": "ייבא מאחסון ענן", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "ייבא מהגיבוי בענן ומזג עם ההגדרות הקיימות", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "שם המכשיר:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "אזהרה! שינוי הגדרות אלו על אחריותך בלבד.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "שלח", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "החל שינויים", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "החזר למצב הקודם", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "בתים", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "חסום אלמנט בתוך מסגרת…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "הירשם לרשימת המסננים…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "זמנית אפשר אלמנטי מדיה גדולים", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "צפה בקוד המקור…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "הקלד קיצור דרך", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "הפעל/כבה נעילת גלילה", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "העתק ללוח", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "בחר הכל", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "הפעל/כבה מסננים קוסמטיים", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "מיתוג JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "הרפה את מצב החסימה הנוכחי", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "אחסון בשימוש: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "לחץ על מנת לטעון", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "שגיאות: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "לא ניתן היה לסנן כראוי בעת הפעלת הדפדפן. נא לטעון את העמוד מחדש להבטחת סינון ראוי.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "ערך זה חייב להיות האחרון", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/hi/messages.json b/src/_locales/hi/messages.json index db1638d9468ce..afa3ae626029f 100644 --- a/src/_locales/hi/messages.json +++ b/src/_locales/hi/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"आख़िरकार, क्रोमियम-बेस्ड ब्राउज़रों के लिए एक कुशल अवरोधक। CPU और स्मृति पर आसान।", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "आख़िरकार, क्रोमियम-बेस्ड ब्राउज़रों के लिए एक कुशल अवरोधक। सीपीयू और मेमोरी पर कम भार के साथ।\n", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — डैशबोर्ड", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — डैशबोर्ड", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"सेटिंग्स", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "चेतावनी! आपके कुछ परिवर्तनों को सहेजना अभी बाकी है", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"तृतीय-पक्ष फ़िल्टर", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "यहाँ रुकें", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"मेरे फिल्टर", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "नज़रअंदाज़ करें ", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"मेरे नियम", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "सेटिंग्स", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"सफेद सूची", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "तृतीय-पक्ष फ़िल्टर", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"यूब्लॉक — नेटवर्क रिक्वेस्ट लॉग", - "description":"Title for the logger window" + "1pPageName": { + "message": "मेरे फिल्टर", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"जानकारी", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "मेरे नियमों", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"दबाए : uBlock को इस साईट में बंद\/चालु करने के लिए।\n\nCtrl के साथ दबाए : uBlock को सिर्फ इस पेज में बंद करने के लिए।", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "विश्वस्त साइट सूची", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"रुके हुए अनुरोध", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "शॉर्टकट", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"इस पृष्ठ पर", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — लॉगर", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} या {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "जानकारी", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"इंस्टॉल से अब तक", - "description":"English: since install" + "supportPageName": { + "message": "सहायता", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"या", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — असेट व्यूअर", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"डैशबोर्ड को खोलने के लिए क्लिक करें", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "उन्नत सेटिंग्स", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"अन्श चाटने वाले साधन में प्रवेश करे", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "दबाए : uBlock को इस साईट में बंद/चालु करने के लिए।\n\nCtrl के साथ दबाए : uBlock को सिर्फ इस पेज में बंद करने के लिए।", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"अनुरोध दैनिकी में जाए", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "दबाए: uBlock को इस साईट पर बंद करने के लिए।\n\nCtrl के साथ दबाए: uBlock को केवल इस पेज पर बंद करने के लिए।", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"इस साईट के लिए कोई पॉपअप नहीं", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "इस साईट में uBlock₀ को चालू करने के लिए क्लिक कीजिये।", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"बड़े मीडिया चीजों को रोक दें", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "रुके हुए अनुरोध", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"इस वेबसाइट की खूबसूरत फ़िल्टरिंग करें", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "इस पृष्ठ पर", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"बाहरी फ़ॉन्ट्स को ब्लॉक करें", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} या {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"निन्मलिखित नियमें सब वेस्बिते पर लागू है", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "स्थापना से अब तक", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"निन्मलिखित नियमें सिर्फ इस वेबसाइट पर लागू है", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "या", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"आपके परिवर्तनों को रकने के लिए क्लिक करें", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "इस पेज पर ब्लॉक किया गया ", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"आपके परिवर्तनों को उलटने के लिए क्लिक करें", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "स्थापना के समय से ब्लॉक किया हुआ", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"सभी", - "description":"" + "popupDomainsConnected_v2": { + "message": "कनेक्ट हुई डोमेंस", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"चित्र", - "description":"" + "popupTipDashboard": { + "message": "डैशबोर्ड खोलें", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"तृतीय-पक्ष", - "description":"" + "popupTipZapper": { + "message": "चीजें मिटाने के मोड में जाएं", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"तृतीया पक्ष सीइसइस तस्वीरें", - "description":"" + "popupTipPicker": { + "message": "एलिमेंट पिकर मोड में जाएं ", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"लाइन के बीच वाले स्क्रिप्ट्स", - "description":"" + "popupTipLog": { + "message": "लॉगर खोलें", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"असली साइट के स्क्रिप्ट्स", - "description":"" + "popupTipReport": { + "message": "इस वेबसाइट पर किसी समस्या की रिपोर्ट करें", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"दूसरी साइट के स्क्रिप्ट्स", - "description":"" + "popupTipNoPopups": { + "message": "इस साईट के लिए कोई पॉपअप नहीं", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"दूसरी साइट के फ्रेम्स", - "description":"" + "popupTipNoPopups1": { + "message": "इस वेबसाइट पर सभी पॉप-अप्स को ब्लाक करने के लिए क्लिक करें", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"योजित साइटें", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "इस वेबसाइट पर सभी पॉप-अप्स को और ब्लाक न करने के लिए क्लिक करें", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{total}} मे से {{count}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "बड़े मीडिया चीजों को रोक दें", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"बनाएँ", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "इस वेबसाइट पर बड़े मीडिया ऐलिमेंटस को ब्लाक करने के लिए क्लिक करें", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"चयन", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "इस वेबसाइट पर बड़े मीडिया ऐलिमेंटस को ब्लाक न करने के लिए क्लिक करें", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"बंद करें", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "इस वेबसाइट की खूबसूरत फ़िल्टरिंग करें", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Preview", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "इस साइट पर कॉस्मेटिक फ़िल्टरिंग बंद करने के लिए क्लिक करें", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"नेट फिलटर्स", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "इस साइट पर कॉस्मेटिक फ़िल्टरिंग चालू करने के लिए क्लिक करें", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"सुंदरता के लिए फिलटरें", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "बाहरी फ़ॉन्ट्स को ब्लॉक करें", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"क्लिक, कंट्रोल - क्लिक", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "इस साइट पर रिमोट फोंट को बंद करने के लिए क्लिक करें", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"इस को ब्लॉक करो", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "इस साइट पर रिमोट फोंट अब और नहीं ब्लॉक करने के क्लिक करें ", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"ब्लॉक किये चीज़ो की प्लेसहोल्डर को हटाओ", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "जावास्क्रिप्ट को रोकने के के लिए दबाएं", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"इसके आइकॉन पर ब्लॉक किये चीज़ो की गिनती दिखाओ", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "जावास्क्रिप्ट को अब और न बंद करने के लिए दबाएं", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"टूलटिप्स मत दिखाओ", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "पॉप-अप विंडोज", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"विकल्प सूचि का प्रयोग करें", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "बड़े मीडिया एलिमेंट्स ", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"वरणांध अनुकूल", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "कॉस्मेटिक फिल्टर", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"क्लाउड स्टोरिज समर्थन साझा करें", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "रिमोट फोंट्स\n", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"मैं एक उच्च उपयोगकर्ता हूँ (आवश्यक पठन<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "जावास्क्रिप्ट ", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"प्री-फ़ेचिंग अक्षम करें (अवरुद्ध नेटवर्क रिक्वेस्ट को रोकने के लिए)", - "description":"English: " + "popupMoreButton_v2": { + "message": "और", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"हाइपरलिंक जाँच को अवरुध करें", - "description":"English: " + "popupLessButton_v2": { + "message": "कम", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"WebRTC को लोकल IP ऐड्रेस प्रकट करने से रोकें", - "description":"English: " + "popupTipGlobalRules": { + "message": "सार्वत्रिक नियम: इस क़तार के नियम सारे साइट्स पर लागु करने के लिए हैं ", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"सामान्य व्यवहार", - "description":"" + "popupTipLocalRules": { + "message": "निन्मलिखित नियमें सिर्फ इस वेबसाइट पर लागू है", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"ये सामान्य व्यवहारों को प्रति-पृष्ठ आधार पर बदला जा सकता है", - "description":"" + "popupTipSaveRules": { + "message": "अपने परिवर्तनों को पक्का बनाने के लिए क्लिक करें।", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"काज़्मेटिक निस्पंदन को रोकें", - "description":"" + "popupTipRevertRules": { + "message": "आपके परिवर्तनों को उलटने के लिए क्लिक करें", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"{{input:number}} kB से ज़्यादा अंश को रोकें", - "description":"" + "popupAnyRulePrompt": { + "message": "सभी", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"बाहरी अक्षराकृति को रोकें", - "description":"" + "popupImageRulePrompt": { + "message": "चित्र", + "description": "" }, - "settingsStorageUsed":{ - "message":"Storage used: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "तीसरे पक्ष", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Last restore:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "३री-पार्टी CSS/तस्वीरें ", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Last backup:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "लाइन के बीच वाले स्क्रिप्ट्स", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "असली साइट के स्क्रिप्ट्स", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{total}} में से {{used}} का इस्तेमाल किया", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "दूसरी साइट के स्क्रिप्ट्स", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Auto-update filter lists", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "दूसरी साइट के फ्रेम्स", + "description": "" }, - "3pUpdateNow":{ - "message":"अभी अपडेट करें", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "कनेक्ट हुई साइटें ", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Purge all caches", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{total}} मे से {{count}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Parse and enforce cosmetic filters", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "वर्जन", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      This option enables the parsing and enforcing of Adblock Plus-compatible “element hiding” filters<\/a>. These filters are essentially cosmetic, they serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the net request-based filtering engine.<\/p>

      Enabling this feature increases uBlock₀'s memory footprint.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "स्क्रिप्ट", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignore generic cosmetic filters", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "फ़्रेम", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites.

      Though handled efficiently by uBlock₀, generic cosmetic filters may still contribute measurable memory and CPU overhead on some web pages, especially for large and long-lived ones.

      Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters, and also lower the memory footprint of uBlock₀ itself.

      It is recommended to enable this option on less powerful devices.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "बनाएँ", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lists of blocked hosts", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "चयन", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"परिवर्तन लागू करें", - "description":"English: Apply changes" + "pickerQuit": { + "message": "बंद करें", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"विज्ञापन", - "description":"English: Ads" + "pickerPreview": { + "message": "पूर्व दर्शन", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"गोपनीयता", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "नेट फिलटर्स", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"मैलवेयर डोमेन", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "कॉस्मेटिक फिल्टर", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"सामाजिक", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "क्लिक, कंट्रोल - क्लिक", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"बहुउद्देशीय", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "इस को ब्लॉक करो", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"क्षेत्र, भाषा", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "ब्लॉक किये चीज़ो की प्लेसहोल्डर को हटाओ", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"कस्टम", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "ब्लॉक कि गयी चीज़ो की गिनती आइकॉन पर दिखाओ", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "टूलटिप्स बंद कीजिऐ", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"लागू करें", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "जहाँ उपयुक्त हो, संदर्भ मेनू का इस्तेमाल करें", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"कैश खाली", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "वरणांध अनुकूलित ", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"नया संस्करण उपलब्ध है", - "description":"English: new version available" + "settingsAppearance": { + "message": "दिखावट", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"पुरानी", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "थीम", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Last update: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "निर्मित किए हुए उच्चारण रंग", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "क्लाउड स्टोरेज सपोर्ट चालू करें", + "description": "" }, - "1pImport":{ - "message":"Import and append", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "मैं एक उन्नत प्रयोक्ता हूँ", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"निर्यात करें", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "प्री-फ़ेचिंग बंद करें (कोई भी ब्लॉक किये गए कनेक्शंनो से संपर्क न करने लिए)", + "description": "English: " }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "हाइपरलिंक जाँच को बंद करें", + "description": "English: " }, - "1pApplyChanges":{ - "message":"परिवर्तन लागू करें", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "WebRTC को स्थानीय IP पतों लीक करने से रोकें ", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"स्थायी नियम", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "सामान्य व्यवहार", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"अस्थायी नियम", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "ये सामान्य व्यवहारों को प्रति-पृष्ठ आधार पर बदला जा सकता है", + "description": "" }, - "rulesRevert":{ - "message":"पलटदे", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "कॉस्मेटिक फ़िल्टरिंग बंद करें ", + "description": "" }, - "rulesCommit":{ - "message":"पक्का करो", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "{{input}} KB से बड़े मीडिया चीजें को बंद करें ", + "description": "" }, - "rulesEdit":{ - "message":"एडिट", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "बाहरी फोंट्स को बंद करें ", + "description": "" }, - "rulesEditSave":{ - "message":"सहेजें", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "जावास्क्रिप्ट को बंद करें ", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"रद्द करें", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": " CSP रिपोर्ट्स को ब्लॉक करें ", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Import from file...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "विहित नाम अनलॉक करें", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Export to file", - "description":"" + "settingsAdvanced": { + "message": "उन्नत", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "केवल तकनीकी उपयोगकर्ताओं के लिए उपयुक्त सुविधाएँ.", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"List of your dynamic filtering rules.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "उन्नत सेटिंग्स", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Rule syntax: source destination type action<\/code> (full documentation<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": " पिछला रिस्टोर:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Your list of host names for which uBlock₀ will be disabled. One entry per line. Invalid host names will be silently ignored.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "पिछला बैकअप", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Import and append", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} नेटवर्क फिल्टर्स + {{cosmeticFilterCount}} कॉस्मेटिक फिल्टर्स यहां से:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"निर्यात करें", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{total}} में से {{used}} का इस्तेमाल किया", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "स्व-अद्यतन फ़िल्टर सूचियां", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"परिवर्तन लागू करें", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "अभी नवीकृत करें", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"प्रकार", - "description":"English: Type" + "3pPurgeAll": { + "message": "सभी अस्थायी मेमोरी को शुद्ध करे", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"डोमेन", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "कॉस्मेटिक फिल्टर्स को लें और लागू करें", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"यू आर एल", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "यह विकल्प कॉस्मेटिक फिल्टर्स को लेता और उन्हें जारी करता है जो Adblock Plus- \"एलीमेंट हाइड\" से मिलतें-जुलातें हैं। यह उन चीजों को ब्लॉक करतें हैं जो वेब पेज के दिखावत में छोटे- मोटी समस्या पैदा करतें है जो नेटवर्क रिक्वेस्ट-के फिल्टरों से ब्लुक नहीं किए जा सकते। ", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"फिल्टर", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "जेनेरिक कम्सेटिक फिल्टरों को नजरंदाज करें", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"सब", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "जेनेरिक कॉस्मेटिक फिल्टरस वो कॉस्मेटिक फिल्टरस हैं जो सब वेब साइट्स पर लागू होते हैं। यह विकल्प को चालू कराने से मेमोरी और सीपीयू पर जो उपर का दबाव पड़ता है वो नहीं रहेगा जो कॉस्मेटिक फिल्टरों को जारी करने से हुआ था।\n\nइस विकल्प को कमज़ोर डिवाइसों पर चालू कराने की सलाह दी जाती है।", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"पर्दे के पीछे", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "सभी फ़िल्टर सूचियाँ लोड होने तक नेटवर्क गति-विधि को निलंबित करें", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"filter log entries", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Maximum number of log entries", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "परिवर्तन लागू करें", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Context:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "बिल्ट-इन ", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"प्रकार", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "विज्ञापन", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Dynamic URL filtering", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "गोपनीयता", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"स्थायी छनाना", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "मैलवेयर डोमेन", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "सोशल विज़ेट्स", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Block", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "कुकी सूचनाएं", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Allow", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "सतानेवाले विज्ञापन", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"type “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "बहुउद्देशीय", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"any type", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "क्षेत्र, भाषा", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"from “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "कस्टम", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"from anywhere", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "इम्पोर्ट...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"except when", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "एक URL हर लाइन में. अमान्य URLs को सीधे से नजरअंदाज किया जायेगा।", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"even if", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "पुरानी", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Static filter {{filter}} found in:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "चीजों को देखें ", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Change log", - "description":"English: Change log" + "3pLastUpdate": { + "message": "अन्तिम अद्यातन: {{ago}}. \nकृत्रिम नवीकरण के लिए क्लिक की जिए", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"विकी", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "नवीकरण प्रगति में हैं...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Support", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "एक नेटवर्क त्रुटि ने रिसोर्स को अपडेट होने से रोक दिया। ", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Source code (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "अविश्वसनीय स्रोतों से फ़िल्टर न जोड़ें.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"योगदानकर्ता", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "मेरे कस्टम फ़िल्टर सक्षम करें", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Backup to file", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "विश्वास की आवश्यकता वाले कस्टम फ़िल्टर की अनुमति दें", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "इम्पोर्ट करें और जोड़ें...", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Restore from file...", - "description":"English: Restore from file..." + "1pExport": { + "message": "निर्यात करें", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Reset to default settings...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "मेरे-ublock-स्‍थिर-फिल्टेरें_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "परिवर्तन लागू करें", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"The data could not be read or is invalid", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "स्थायी नियम", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "अस्थायी नियम", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Unable to connect to {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "पलटदे", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "पक्का करो", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"एक मिनट पहले", - "description":"English: a minute ago" + "rulesEdit": { + "message": "एडिट", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} मिनट पहले", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "सहेजें", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"एक घंटे पहले", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "रद्द करें", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} घंटे पहले", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "फाइल से आयात करे...", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"एक दिन पहले", - "description":"English: a day ago" + "rulesExport": { + "message": "फाइल में एक्सपोर्ट करें...", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} दिन पहले", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "मेरे-ublock-डायनामिक-नियम_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Show Dashboard", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "मेरे डायनामिक रूल्स की लिस्ट।", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Show Logger", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "सिंटेक्स नियम: सोर्स डेस्टिनेशन टाइप एक्शन ( पूरी डॉक्यूमेंटेशन).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"off", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "क्रम में लगाये:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin has prevented the following page from loading:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "नियम प्रकार", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Because of the following filter", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "मूल", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"without parameters", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "गंतव्य", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Found in:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "वाइटलिस्ट के नियम यह बताते हैं कि uBlock Origin को किस वेब पेज पर बंद करना चाहिए। एक एंट्री हर लाइन में। अमान्य नियमों को सीधे-सीधे नजरअंदाज कर दिया जाएगा।", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Go back", - "description":"English: Go back" + "whitelistImport": { + "message": "इम्पोर्ट करें और जोड़ें...", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Close this window", - "description":"English: Close this window" + "whitelistExport": { + "message": "निर्यात करें...", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Disable strict blocking for {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "मेरे-उबलॉक-व्हाइटलिस्ट_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Temporarily", - "description":"English: Temporarily" + "whitelistApply": { + "message": "परिवर्तन लागू करें", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"हमेशा", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "प्रकार", + "description": "English: Type" }, - "cloudPush":{ - "message":"Export to cloud storage", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "डोमेन", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Import from cloud storage", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "यू आर एल", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Import from cloud storage and merge with current settings", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "फिल्टर", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "सब", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"This device name:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "पर्दे के पीछे", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"पक्का", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "वर्तमान टैब", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"पलटदे", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "टैब की चीज़ों को फिर से लोड करें ", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"बाइट्स", - "description":"" + "loggerDomInspectorTip": { + "message": "DOM इंस्पेक्टर को टॉगल करें ", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Temporarily allow large media elements", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "पॉप-उप पैनल को टॉगल करें ", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin विकी: लॉग्गर ", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "लॉगर क्लियर करें ", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "लॉग्गर क्लियर करें", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "लोगेर को फिर से चालू करें ", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "लोगर फ़िल्टर को टॉगल करें ", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "लोगर चीज़ों को फिल्टीर करें ", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "लोगर फ़िल्टर के चुनाव ", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "नही", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "ब्लॉक किया हुआ ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "स्वीकार किया हुआ ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "परिवर्तित", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "१ली-पार्टी ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "तृतीय-पक्ष", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "विवरण", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "फ़िल्टर ", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "फिल्टीर सूची", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "नियम", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "संदर्भ", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "मूल सन्दर्भ ", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "पर्टिनेस", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "प्रकार", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL नियम ", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "सन्दर्भ:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "प्रकार:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "स्थिर फ़िल्टर", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{type}}{{br}} कि नेटवर्क रिक्वेस्ट्स {{action}} जो मिलती है इस URL पते से {{url}}{{br}} और जो आती है यहां से {{origin}},{{br}}{{importance}} मैचिंग एक्सेप्शन फिल्टर मौजूद है।", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "ब्लॉक", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "अनुमति दें", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "प्रकार \"{{type}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "कोई भी प्रकार का", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "\"{{origin}}\" से", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "कहि से भी", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "सिवाय जब ", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "फिर भी ", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "{{filter}} में पाया गया स्थिर फ़िल्टर", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "फिलहाल चालू की गई हुई कोई भी फिल्टर्स सूची में स्थिर फिल्टर नहीं मिल पाया", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "नीचे दी गई तीनों सूचियों से जो नहीं मिलते उनको ऑटोमेटिकली निकाल दिया जाएगा:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "आखरी {{input}} मिनट की जो एंट्रेंस हैं उन्हें बचा कर रखें", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "ज्यादा-से-ज्यादा इतनी पेज लोड्स को बचा कर रखें {{input}}", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "ज्यादा से ज्यादा {{input}} एंट्रीज को रखें", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "{{input}} लाइनों को इस्तेमाल करें पर एंट्री में जो खड़ी स्थिति में हैं", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "कॉलम्स को छिपाएं:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} समय", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} फिल्टर/रूल", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} संदर्भ", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "पर्टीनेस", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "सूची", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "टेबल", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "प्लेन", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "मार्कडाउन", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "खोलें", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "नई रिपोर्ट बनाएं", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "ऐसी ही रिपोर्ट खोजें", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "प्रलेखन", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "uBlock की सभी विशेषताओं के बारे में जानने के लिए uBlock/wiki पर दस्तावेज़ पढ़ें।", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "प्रश्न और समर्थन", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "सबरेडिट /r/uBlockOrigin. पर सवालों के जवाब और अन्य प्रकार की सहायता सहायता प्रदान की जाती है", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "फ़िल्टर समस्याएं/वेबसाइट टूट गई है", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "विशिष्ट वेबसाइटों के साथ फ़िल्टर समस्याओं की रिपोर्टuBlockOrigin/uAssets इश्यू ट्रैकर. GitHub खाते की आवश्यकता है। ", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "ध्यान दें :uBlock Origin के साथ समान उद्देश्य वाले अन्य अवरोधकों का उपयोग करने से बचें, क्योंकि इससे विशिष्ट वेबसाइटों पर फ़िल्टर समस्याएँ हो सकती हैं।", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "युक्तियाँ : सुनिश्चित करें कि आपकी फ़िल्टर सूचियाँ नवीनतम हैं। लॉगर आपकी फ़िल्टर से संबंधित समस्याओं के निदान के लिए प्राथमिक टूल है।", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "बग रिपोर्ट", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "uBlock Origin के साथ समस्याओं की रिपोर्ट यहाँ uBlockOrigin/uBlock-issueइश्यू ट्रैकर पर करें। इसके लिए GitHub खाते की आवश्यकता है।", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "समस्या निवारक जानकारी", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "नीचे तकनीकी जानकारी दी गई है जो तब उपयोगी हो सकती है जब स्वयंसेवक किसी समस्या का समाधान करने में आपकी सहायता करने का प्रयास कर रहे हों।", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "फ़िल्टर समस्या की रिपोर्ट करें", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "स्वयंसेवकों पर डुप्लीकेट रिपोर्ट का बोझ डालने से बचने के लिए, कृपया सत्यापित करें कि समस्या की रिपोर्ट पहले ही नहीं की गई है।", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "फ़िल्टर सूचियों को रोजाना अपडेट किया जाता है। सुनिश्चित करें कि आपकी समस्या का समाधान पहले से ही नवीनतम फ़िल्टर सूचियों में नहीं किया गया है।", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "सत्यापित करें कि समस्यात्मक वेबपेज को रीलोड करने के बाद समस्या अभी भी बनी हुई है।", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "वेब पेज का पता:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "वेब पेज...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- एक प्रविष्टि चुनें --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "विज्ञापन या बचा हुआ विज्ञापन दिखाता है", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "ओवरले या अन्य उपद्रव हैं", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "uBlock Origin का पता लगाता है", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "गोपनीयता से संबंधित समस्याएं हैं", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "uBlock Origin सक्षम होने पर खराबी", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "अवांछित टैब या विंडो खोलता है", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "बैडवेयर, फ़िशिंग की ओर ले जाता है", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "वेब पेज को इस रूप में लेबल करें “NSFW” (“काम करने के लिए सुरक्षित नहीं”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "गोपनीयता नीति", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "परिवर्तन सूची", + "description": "" + }, + "aboutCode": { + "message": "सोर्स कोड {GPLv3}", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "योगदानकर्ता", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "सोर्स कोड", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "अनुवाद", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "फिल्टर सूची", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "बाहरी डिपेंडेंसीज (GPLv3-compatible):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO's स्वयं की फ़िल्टर सूचियाँ निम्नलिखित पर स्वतंत्र रूप से होस्ट की जाती हैं CDNs ", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "बेतरतीब ढंग से चुनी गई सीडीएन का उपयोग तब किया जाता है जब फ़िल्टर सूची को अद्यतन करने की आवश्यकता होती है", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "फ़ाइल में बैकअप लें", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "मेरे-ublock-बैकअप_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "फाइल से वापस करो", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "सेटिंग्स को पहले की तरह करें...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "{{समय}} पर बैकअप किए गए डेटा इस्तेमाल करके आपकी सभी सेटिंग्स को ओवरराइट कर दिया जाएगा, और uBlock₀ फिर से चालू किया जाएगा।\n\nबैकअप डेटा का इस्तेमाल करके सभी मौजूदा सेटिंग्स को ओवरराइट करें?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "डेटा पढ़ा नहीं जा सका या अमान्य है", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "आपकी सारी सेटिंग्स मिटा दी जाएंगी, और uBlock₀ को फिर से चालू किया जाएगा।\n\nuBlock₀ को फ़ैक्टरी सेटिंग्स पर रीसेट करें?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "नेटवर्क त्रुटि: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "फ़िल्टर सूची का उपयोग करें", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "एक मिनट पेहेले ", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} मिनट पेहेले ", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "एक घंटे पेहेले ", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} घंटे पहले", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "एक दिन पहले", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} दिन पहले", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "डैशबोर्ड दिखाओ", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "लॉगर दिखाएं", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "बंद", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "पृष्ठ प्रतिबंधित है", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin ने इस पेज को लोड होने से रोक दिया हैं:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "इस फिल्टर की वजह से ", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "पैरामीटर के बिना", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "इन में पायी है:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "पीछे जाएं", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "इस विंडो को बंद करे", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "इस साइट के बारे में मुझे दोबारा चेतावनी न दें", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "स्ट्रिक्ट ब्लॉकिंग को बंद करें इस साइट पर {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "कुछ समय के लिए", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "स्थायी", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "आगे बढ़ें", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "ब्लॉक किया गया पेज किसी दूसरी साइट पर ले जाना चाहता है. अगर आप आगे बढ़ना चुनते हैं, तो आप सीधे इस लिंक को खोल सकते हैं: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "कारण:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "दुर्भावनापूर्ण", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "ट्रैकर", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "जर्जर", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "क्लाउड स्टोरेज में भेजें", + "description": "tooltip" + }, + "cloudPull": { + "message": "क्लाउड स्टोरेज से आयात करें", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "क्लाउड स्टोरेज से डाउनलोड करें और मौजूदा सेटिंग्स के साथ मिलाएं ", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "इस साधन का नाम:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "चेतावनी! इन एडवांस सेटिंग्स को अपने जोखिम पर बदलें", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "पक्का", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "परिवर्तन लागू करें", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "पलटदे", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "बाइट्स", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "फ्रेम में तत्व को ब्लॉक करें...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "फ़िल्टर सूची की सदस्यता लें...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "कुछ समय के लिए विशाल तत्वोंको चलने की अनुमति दे", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "स्रोत कोड देखें", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "शॉर्टकट को टाइप करें ", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "लॉक की हुई स्क्रोलिंग को टोगल करें ", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "क्लिपबोर्ड में कॉपी करें", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "सभी चुनें", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "कॉस्मेटिक फ़िल्टरिंग टॉगल करें", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "जावास्क्रिप्ट टॉगल करें", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "ब्लैकिंग मोड को ढील दें", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "इस्तेमाल हुई स्टोरेज:{{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "केबी", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "एमबी", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "जीबी", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "लोड करने के लिए क्लिक करें", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "त्रुटियाँ : {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "ब्राउज़र खोलने पर ठीक से फ़िल्टर नहीं कर सका। उचित फ़िल्टरिंग सुनिश्चित करने के लिए वेबपेज को रीलोड करें।", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/hr/messages.json b/src/_locales/hr/messages.json index 7bd9cf38675a3..d5101bf82b0c3 100644 --- a/src/_locales/hr/messages.json +++ b/src/_locales/hr/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Konačno, efikasan blokator. Lak na CPU i memoriji.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Konačno, efikasan blokator. Lak na CPU i memoriji.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Nadzorna ploča", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Nadzorna ploča", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Postavke", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Upozorenje! Niste spremili promjene", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Filteri treće strane", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Ostani", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Moji filteri", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ignoriraj", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Moja pravila", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Postavke", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Popis dopuštenih", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Liste filtera", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Zapisnik mrežnih zahtjeva", - "description":"Title for the logger window" + "1pPageName": { + "message": "Moji filteri", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"O programu", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Moja pravila", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Klik: trajno onemogućiti\/omogućiti uBlock₀ za ovaj sajt.\n\nCtrl+klik: onemogućiti µBlock₀ samo za ovu stranicu.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Pouzdane stranice", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"zahtjeva blokirano", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Tipkovni prečaci", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"na ovoj stranici", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Zapisnik mrežnih zahtjeva", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} ili {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "O programu", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"od instalacije", - "description":"English: since install" + "supportPageName": { + "message": "Podrška", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"ili", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Preglednik svojstva", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Kliknite za otvaranje upravljačke ploče", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Napredne postavke", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Pokrenite odabir elementa", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Klik: trajno onemogućiti/omogućiti uBlock₀ za ovaj sajt.\n\nCtrl+klik: onemogućiti µBlock₀ samo za ovu stranicu.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Odlazak na zapisnik zahtjeva", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Kliknite za onemogućiti uBlock₀ za ovaj sajt.\n\nCtrl+klik za onemogućiti uBlock₀ samo za ovu stranicu.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Uključi\/isključi skočne prozore na ovoj stranici", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Kliknite za omogućiti uBlock₀ za ovaj sajt.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Namjestite blokiranje velikih medijskih elemenata za ovaj sajt", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "zahtjeva blokirano", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Uključi\/isključi estestko filtriranje na ovoj stranici", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "na ovoj stranici", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Uključi\/isključi blokiranje udaljenih fontova za ovu stranicu", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} ili {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Globalna pravila: ovaj stupac je za pravila koja vrijede za sve stranice.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "od instalacije", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Lokalna pravila: ovaj stupac je za pravila koja vrijede samo za trenutnu stranicu.\nLokalna pravila nadjačavaju globalna pravila.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "ili", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Kliknite kako biste spremili promjene.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Blokirano na ovoj stranici", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Kliknite kako bi vratili promjene.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Blokirano od instalacije", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"sve", - "description":"" + "popupDomainsConnected_v2": { + "message": "Domena povezano", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"slike", - "description":"" + "popupTipDashboard": { + "message": "Otvori upravljačku ploču", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"treće strane", - "description":"" + "popupTipZapper": { + "message": "Pokrenite odabir elementa za blokiranje", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"CSS\/slike trećih strana", - "description":"" + "popupTipPicker": { + "message": "Pokrenite odabir elementa", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"skripte u liniji", - "description":"" + "popupTipLog": { + "message": "Odlazak na zapisnik zahtjeva", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"Skripte prve strane", - "description":"" + "popupTipReport": { + "message": "Prijavite problem na ovoj web stranici", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"Skripte trećih strana", - "description":"" + "popupTipNoPopups": { + "message": "Uključi/isključi skočne prozore na ovoj stranici", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"Okviri trećih strana", - "description":"" + "popupTipNoPopups1": { + "message": "Kliknite za blokiranje svih pop-up prozora na ovom sajtu", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"domena povezan", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Kliknite za ukloniti blokiranje svih pop-up prozora na ovoj stranici", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} od {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Namjestite blokiranje velikih medijskih elemenata za ovu stranicu", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Stvaranje", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Kliknite za blokiranje velikih medijskih elemenata na ovom sajtu", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Odabir", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Kliknite za ukloniti blokiranje velikih medijskih elemenata na ovom sajtu", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Izlaz", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Uključi/isključi estestko filtriranje na ovoj stranici", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Pregled", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Kliknite kako biste onemogućili estestko filtriranje na ovom sajtu", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Mrežni filteri", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Kliknite kako biste omogućili estestko filtriranje na ovom sajtu", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Estetski filteri", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Uključi/isključi blokiranje udaljenih fontova za ovu stranicu", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Klik, Ctrl-klik", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Kliknite za blokiranje udaljenih fontova na ovom sajtu", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Blokiraj element", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Kliknite za ukloniti blokiranje udaljenih fontova na ovom sajtu", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Sakrij rezervirana mjesta blokiranih elemenata", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Kliknite kako biste onemogućili JavaScript na ovoj stranici", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Pokaži broj blokiranih zahtjeva na ikoni", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Kliknite kako biste omogućili JavaScript na ovoj stranici", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Isključi naputke", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Skočni prozori", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Koristite kontekstni izbornik gdje je prikladno", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Veliki medija elementi", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Ugodan za daltoniste", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Estetski filteri", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Omogući podršku za pohranu u oblaku", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Udaljeni fontovi", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Ja sam napredni korisnik (Obavezna literatura<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Onemogući pretpreuzimanje (za sprečavanje bilo koje veze blokiranih mrežnih zahtjeva)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Više", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Onemogući provjeravanje hiperlinkova", - "description":"English: " + "popupLessButton_v2": { + "message": "Manje", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Spriječi WebRTC da propušta lokalnu IP adresu", - "description":"English: " + "popupTipGlobalRules": { + "message": "Globalna pravila: ovaj stupac je za pravila koja vrijede za sve stranice.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Zadano ponašanje", - "description":"" + "popupTipLocalRules": { + "message": "Lokalna pravila: ovaj stupac je za pravila koja vrijede samo za trenutnu stranicu.\nLokalna pravila nadjačavaju globalna pravila.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Ova zadana ponašanja mogu biti poništena na bazi web-stranice", - "description":"" + "popupTipSaveRules": { + "message": "Kliknite kako biste spremili promjene.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Onemogući estesko filtriranje", - "description":"" + "popupTipRevertRules": { + "message": "Kliknite kako bi vratili promjene.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Blokiraj medijske elemente veće od {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "sve", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blokiraj udaljene fontove", - "description":"" + "popupImageRulePrompt": { + "message": "slike", + "description": "" }, - "settingsStorageUsed":{ - "message":"Korišteno prostora: {{value}} bajtova", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "treće strane", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Posljednji povratak na prijašnje:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "CSS/slike trećih strana", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Posljednja sigurnosna kopija:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "skripte u liniji", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} mrežni\/ih filter\/a + {{cosmeticFilterCount}} estetski\/ih filter\/a iz:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "Skripte prve strane", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} korišteno od {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "Skripte trećih strana", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Automatsko ažuriranje popisa filtera.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "Okviri trećih strana", + "description": "" }, - "3pUpdateNow":{ - "message":"Ažuriraj odmah", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "domena povezan", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Očistiti sve cache-ove", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} od {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Raščlaniti i primijeniti estetske filtre.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Verzija", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Ova opcija omogućava raščlambu i provođenje Adblock Plus-kompatibilnih filtera sa “elementima za skrivanje” <\/a>. Ovi filteri su uglavnom estetski, oni služe za skrivanje elemenata na web-stranici koja se smatra da je vizualna smetnja, a koja ne može biti blokirana od strane mrežnih zahtjeva temeljenih na filtriranju.<\/p>

      Omogućavanje ove značajke povećava uBlock₀ <\/i>memorijski otisak.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "skripta", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignoriraj opće estetsko filtriranje.", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "okvir", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Generički estetski filteri su takvi filteri koji su namijenjeni svim web stranicama.

      Iako efikasno korišteni sa uBlock₀ blokerom, generički estetski filteri svejedno mogu doprinijeti dodatnoj mjerljivoj memorijskoj i procesorskoj upotrebi na nekim stranicama, posebno za velike i dugovječne stranice.

      Omogućavanjem ove postavke eliminirati će se memorijska i procesorska dodatna upotreba na web stranicama kao rezultat korištenja generičkih estetskih filtera i tako smanjiti ukupna memorijska potrošnja proširenja uBlock₀.

      Preporučeno je omogućiti ovu postavku na slabijim uređajima.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Stvaranje", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Popis blokiranih hosts", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Odabir", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Primijeni promjene", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Izlaz", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Reklame", - "description":"English: Ads" + "pickerPreview": { + "message": "Pregled", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Privatnost", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Mrežni filteri", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Zloćudne domene", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Estetski filteri", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Socijalno", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Klik, Ctrl-klik", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Višenamjensko", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Blokiraj element…", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Regije, jezici", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Sakrij rezervirana mjesta blokiranih elemenata", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Prilagođeno", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Pokaži broj blokiranih zahtjeva na ikoni", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Jedan URL po retku. Linije sa prefiksom ‘!’ zanemarit će se. Nevaljani URL-ovi će biti tiho ignorirani.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Isključi naputke", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Primijeni", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Koristite kontekstni izbornik gdje je prikladno", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"čišćenje predmemorije", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Ugodan za daltoniste", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"dostupna nova verzija", - "description":"English: new version available" + "settingsAppearance": { + "message": "Izgled", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"zastarjelo", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Tema", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Posljednje ažuriranje: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Prilagođena glavna boja", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Jedan filtar po retku. Filtar može biti običan hostname ili filter kompatibilan sa Adblock Plus-om. Linije sa prefiksom ‘!’ zanemarit će se.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Omogući podršku za pohranu u oblaku", + "description": "" }, - "1pImport":{ - "message":"Uvesti i dodati", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Ja sam napredni korisnik", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Izvoz", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Onemogući pretpreuzimanje (za sprečavanje bilo koje veze blokiranih mrežnih zahtjeva)", + "description": "English: " }, - "1pExportFilename":{ - "message":"moji-ublock-staticni-filteri_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Onemogući provjeravanje hiperlinkova", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Primijeni promjene", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Spriječi WebRTC da propušta lokalnu IP adresu", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Trajna pravila", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Zadano ponašanje", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Privremena pravila", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Ova zadana ponašanja mogu biti poništena na bazi web-stranice", + "description": "" }, - "rulesRevert":{ - "message":"Vratiti", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Onemogući estesko filtriranje", + "description": "" }, - "rulesCommit":{ - "message":"Izvršiti", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Blokiraj medijske elemente veće od {{input}} KB", + "description": "" }, - "rulesEdit":{ - "message":"Uredi", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Blokiraj udaljene fontove", + "description": "" }, - "rulesEditSave":{ - "message":"Spremi", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Onemogući JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Odbaci", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Blokiraj CSP izvješća", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Uvoz iz datoteke...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Prikaži kanonske nazive", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Izvoz u datoteku...", - "description":"" + "settingsAdvanced": { + "message": "Napredno", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"moja-ublock-dinamicna-pravila_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Značajke prikladne samo za napredne korisnike.", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Popis dinamičkih pravila filtriranja.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "napredne postavke", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Pravila sintakse: akcija tipa izvornog odredišta<\/code> (sva dokumentacija<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Posljednji povratak na prijašnje:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Popis host naziva za koje će uBlock₀ biti onemogućen. Jedan zapis po retku. Nevaljani host nazivi će tiho biti ignorirani.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Posljednja sigurnosna kopija:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Uvesti i dodati", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} mrežni/ih filter/a + {{cosmeticFilterCount}} estetski/ih filter/a iz:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Izvoz", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} korišteno od {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"moja-ublock-lista_dopustenog_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Automatsko ažuriranje popisa filtera.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Primijeni promjene", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Ažuriraj odmah", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Tip", - "description":"English: Type" + "3pPurgeAll": { + "message": "Očistiti sve cache-ove", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Domena", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Raščlaniti i primijeniti estetske filtre.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Estetski filteri služe za skrivanje elementa web stranice koji se smatraju vizualnim smetanjem i koji ne mogu biti blokirani filtriranjem mrežnih zahtjeva.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignoriraj opće estetsko filtriranje.", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Sve", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Generički estetski filteri su takvi filteri koji su namijenjeni svim web stranicama. Omogućavanjem ove postavke eliminirati će se memorijska i procesorska dodatna upotreba na web stranicama kao rezultat korištenja generičkih estetskih filtera.\n\nPreporučeno je omogućiti ovu postavku na slabijim uređajima.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Iza scene", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Obustavite mrežnu aktivnost dok se ne učitaju svi popisi filtera", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"filtrirajte zabilješke", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Popis blokiranih hosts", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Makismalan broj zabilješki", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Primijeni promjene", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Kontekst:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Ugrađeno", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tip:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Reklame", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Dinamično URL filtriranje", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Privatnost", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Statičko filtriranje", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Zaštita od zlonamjernog softvera, sigurnost", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} mrežni zahtjev {{type}} {{br}}kojem URL adresa odgovora {{url}} {{br}}i koji dolazi od {{origin}},{{br}}{{importance}} postoji odgovarajući filter izuzetak.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Socijalni widgeti", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blokiraj", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Obavijest o kolačićima", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Dopusti", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Nametljivost", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tip “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Višenamjensko", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"i tip", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Regije, jezici", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"od “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Prilagođeno", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"bilo gdje", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Uvoz…", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"osim kad", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Jedan URL po retku. Nevaljani URL-ovi će biti tiho ignorirani.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"čak i ako", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Zastarjelo.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statični filter {{filter}} pronađen u:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "vidi sadržaj", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Popis promjena", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Posljednje ažuriranje: {{ago}}.\nKliknite za ažuriranje.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Ažuriranje u tijeku…", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Podrška", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Mrežna pogreška je sprječila ažuriranje resursa.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Izvorni kôd (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Nemojte dodavati filtere iz nepouzdanih izvora.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Suradnici", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Omogući moje prilagođene filtre", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Sigurnosno kopiranje u datoteku...", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Dopusti prilagođene filtre koji zahtijevaju povjerenje", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"moja-ublock-sig_kopija_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Uvesti i dodati...", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Vraćanje iz datoteke...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Izvoz...", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Vraćanje izvornih zadanih postavki...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "moji-ublock-staticni-filteri_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Sve vaše postavke prebrisat će se sa postavkama spremljenim {{time}}, i uBlock₀ će se ponovno pokrenuti. \n\nPrepisati sve postojeće postavke pomoću sigurnosne kopije postavki?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Primijeni promjene", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Podatke nije moguće učitati ili su neispravni", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Trajna pravila", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Sve vaše postavke će biti obrisane i µBlock₀ će se ponovno pokrenuti. \n\nVraćanje µBlock₀ tvorničkih postavki?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Privremena pravila", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Nemoguće se povezati sa {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Vratiti", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Dodajte slijedeći izvor u vaš izbor filter lista?\n\nNaslov: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Izvršiti", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"prije minutu", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Uredi", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"prije {{value}} minute\/a", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Spremi", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"prije jedan sat", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Odbaci", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"prije {{value}} sata\/i", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Uvoz iz datoteke…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"prije jedan dan", - "description":"English: a day ago" + "rulesExport": { + "message": "Izvoz u datoteku...", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"prije {{value}} dana", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "moja-ublock-dinamicna-pravila_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Prikaži kontrolnu ploču", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Popis dinamičkih pravila filtriranja.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Prikaži zapis mrežnih zahtjeva", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Pravila sintakse: akcija tipa izvornog odredišta (sva dokumentacija).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"isključen", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Sortiraj:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin je onemogućio učitavanje sljedeće stranice:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Vrsta pravila", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Zbog sljedećeg filtera", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Izvor", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"bez parametara", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Destinacija", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Pronađeno u:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Direktiva pouzdanih stranica govori za koje bi web stranice uBlock Origin trebao biti onemogućen. Jedan zapis po retku.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Natrag", - "description":"English: Go back" + "whitelistImport": { + "message": "Uvesti i dodati...", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Zatvori ovaj prozor", - "description":"English: Close this window" + "whitelistExport": { + "message": "Izvoz...", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Isključi strogo blokiranje za {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "moje-ublock-pouzdane-stranice_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Privremeno", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Primijeni promjene", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Trajno", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Tip", + "description": "English: Type" }, - "cloudPush":{ - "message":"Izvezi u pohranu u oblaku", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Domena", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Uvezi iz pohrane u oblaku", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Uvezite iz spremišta u oblaku i spojite sa trenutnim postavkama", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Sve", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Naziv ovog uređaja:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Iza scene", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Pošalji", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Trenutna kartica", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Vratiti", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Ponovno učitaj sadržaj kartice", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"bajtovi", - "description":"" + "loggerDomInspectorTip": { + "message": "Uključi/Isključi DOM inspektor", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Privremeno dopusti velike medijske elemente", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Uključi/Isključi panel sa skočnim prozorima", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"Ova stavka mora biti posljednja", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: Zabilješke", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Očisti zabilješke", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Pauziraj zabilješke (odbaci sve dolazne podatke)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Uključite zabilješke", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Uključi/Isključi filtriranje zabilješki", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filtrirajte zabilješke", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Postavke filtiriranja zabilješki", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Ne", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "sadržajno", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "blokirano", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "dopušteno", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "promijenjeno", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "Prve strane", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "Treće strane", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Detalji", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filter", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Lista filtera", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Pravilo", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Kontekst", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Korijenski kontekst", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Pripadnost", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Tip", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Dinamično URL filtriranje", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Kontekst:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Tip:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Statičko filtriranje", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} mrežni zahtjev {{type}} {{br}}kojem URL adresa odgovora {{url}} {{br}}i koji dolazi od {{origin}},{{br}}{{importance}} postoji odgovarajući filter izuzetak.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Blokiraj", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Dopusti", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "tip “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "i tip", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "od “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "bilo gdje", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "osim kad", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "čak i ako", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Statični filter {{filter}} pronađen u:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Statični filter nije pronađen u trenutno uključenim listama filtera", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Unosi zapisnika koji ne ispunjavaju sva tri uvjeta navedena ispod bit će automatski odbačeni:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Sačuvajte unose od zadnjih {{input}} minuta", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Sačuvajte najviše {{input}} osvježavanja stranice po kartici", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Sačuvajte najviše {{input}} unosa po kartici", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Koristi {{input}} linija po unosu u vertikalno proširenom načinu", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Sakrij stupce:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Vrijeme", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filter/pravilo", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Kontekst", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Pripadnost", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Popis", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tablica", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Obično", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Otvori", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Napravi novu prijavu na GitHub-u", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Nađi slične prijave na GitHub-u", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Dokumentacija", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Pročitajte dokumentaciju na uBlock/wiki kako bi ste saznali uBlock Origin mogućnosti.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Pitanja i podrška", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Odgovori na pitanja i druge vrste podrške nalaze se na subreddit r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filter problemi/website je pao", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Prijavite probleme s filtriranjem određenih web stranica uBlockOrigin/uAssets alatki za praćenje problema. Potreban je GitHub račun.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Važno: Izbjegavajte korištenje drugih blokera slične namjene u isto vrijeme s uBlock Origin-om jer to može uzrokovati probleme s filtriranjem na određenim web stranicama.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Savjeti: Provjerite jesu li vaše liste filtera ažurirane. Zapisnik je primarni alat za dijagnosticiranje problema povezanih s filterima.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Prijava greške", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Prijavite probleme sa samim uBlock Origin-om na uBlockOrigin/uBlock-problem alatki za praćenje problema. Potreban je GitHub račun.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Informacije o rješavanju problema", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "U nastavku se nalaze tehničke informacije koje bi mogle biti korisne kada vam volonteri pokušavaju pomoći u rješavanju problema.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Prijavi problem sa filterom", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Kako biste izbjegli opterećivanje volontera duplim prijavama, provjerite nije li problem već prijavljen. Napomena: klik na gumb uzrokovat će slanje izvorne stranice na GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Popisi filtera ažuriraju se svakodnevno. Provjerite nije li vaš problem već riješen sa najnovijim popisima filtera.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Provjerite postoji li problem i dalje nakon ponovnog učitavanja problematične web stranice.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Adresa web stranice:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Web stranica…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Odaberite unos --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Prikazuje oglase ili ostatke oglasa", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Ima overlaye ili druge smetnje", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detektira uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Ima problema u vezi s privatnošću", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Ruši se kad je uBlock Origin omogućen", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Otvara neželjene kartice ili prozore", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Vodi do zloćudnog softvera, krađe identiteta", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Označite web stranicu kao “NSFW” (“nije sigurno za pregledavanje na poslu“)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Pravila privatnosti", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Popis promjena", + "description": "" + }, + "aboutCode": { + "message": "Izvorni kôd (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Suradnici", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Izvorni kod", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Prijevodi", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Liste filtera", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Vanjski korišteni programi (GPLv3-kompatiblini):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Vlastiti popisi filtera uBO-a besplatno su posluženi sa sljedećih CDN-ova:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Koristit će se slučajno odabrani CDN kada treba ažurirati popis filtera", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Sigurnosno kopiranje u datoteku...", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "moja-ublock-sig_kopija_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Vraćanje iz datoteke…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Vraćanje izvornih zadanih postavki…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Sve vaše postavke prebrisat će se sa postavkama spremljenim {{time}}, i uBlock₀ će se ponovno pokrenuti. \n\nPrepisati sve postojeće postavke pomoću sigurnosne kopije postavki?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Podatke nije moguće učitati ili su neispravni", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Sve vaše postavke će biti obrisane i µBlock₀ će se ponovno pokrenuti. \n\nVraćanje µBlock₀ tvorničkih postavki?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Mrežna greška {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Prijava", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "prije minutu", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "prije {{value}} minute/a", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "prije jedan sat", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "prije {{value}} sata/i", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "prije jedan dan", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "prije {{value}} dana", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Prikaži kontrolnu ploču", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Prikaži zapis mrežnih zahtjeva", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "isključen", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Stranica blokirana", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin je onemogućio učitavanje sljedeće stranice:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Zbog sljedećeg filtera", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "bez parametara", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Pronađeno u:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Natrag", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Zatvori ovaj prozor", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Ne upozoravaj me više za ovu web stranicu", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Isključi strogo blokiranje za {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Privremeno", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Trajno", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Nastavi", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Blokirana stranica želi preusmjeriti na drugu stranicu. Ako odlučite nastaviti, otići ćete izravno na: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Razlog:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Zlonamjerno", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Pratioc", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Zloglasno", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Izvezi u pohranu u oblaku", + "description": "tooltip" + }, + "cloudPull": { + "message": "Uvezi iz pohrane u oblaku", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Uvezite iz spremišta u oblaku i spojite sa trenutnim postavkama", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Naziv ovog uređaja:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Upozorenje! Mijenjate ove napredne postavke na vlastitu odgovornost.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Pošalji", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Primijeni promjene", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Vratiti", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bajtovi", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Blokiraj element u okviru…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Prijavite se na popis filtera…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Privremeno dopusti velike medijske elemente", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Pogledaj izvorni kod...", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Utipkajte tipkovni prečac", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Uključi/Isključi zaključano pomicanje", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Kopiraj u međuspremnik", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Odaberi sve", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Prekidač estetskog filtriranja", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Uključi/isključi JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Opušteni način blokiranja", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Korišteno prostora: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Kliknite za pokretanje", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Greške: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Nije moguće pravilno filtrirati pri pokretanju \npreglednika. Ponovno učitajte stranicu \nkako biste osigurali ispravno filtriranje.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Ova stavka mora biti posljednja", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/hu/messages.json b/src/_locales/hu/messages.json index 6b436f565cb09..26301de6d8fd5 100644 --- a/src/_locales/hu/messages.json +++ b/src/_locales/hu/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Végre egy hatékony reklám- és követésblokkoló böngészőkhöz, amely kíméletes a processzorral és a memóriával.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Végre egy hatékony reklám- és követésblokkoló böngészőkhöz, amely kíméletes a processzorral és a memóriával.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Vezérlőpult", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Vezérlőpult", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Beállítások", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Figyelem! Mentetlen változtatásai vannak.", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Külső szűrők", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Tartózkodás", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Saját szűrők", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Figyelmen kívül hagyás", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Saját szabályok", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Beállítások", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Kivételek", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Külső szűrők", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Hálózati lekérések naplója", - "description":"Title for the logger window" + "1pPageName": { + "message": "Saját szűrők", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Névjegy", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Saját szabályok", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Klikk: uBlock₀ tiltása\/engedélyezése ezen a webhelyen.\n\nCtrl+klikk: csak a jelenlegi oldal tiltása\/engedélyezése.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Kivételek", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"blokkolt lekérések", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Billentyűparancsok", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"ezen a lapon", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Hálózati lekérések naplója", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} vagy {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Névjegy", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"telepítés óta", - "description":"English: since install" + "supportPageName": { + "message": "Támogatás", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"vagy", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ - Eszköznézet", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Kattintson ide a vezérlőpult megnyitásához", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Haladó beállítások", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Elemválasztó mód aktiválása", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Klikk: uBlock₀ tiltása/engedélyezése ezen a webhelyen.\n\nCtrl+klikk: csak a jelenlegi oldal tiltása/engedélyezése.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Naplózott lekérések megtekintése", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Kattints a uBlock₀ letiltásához ezen a webhelyen.\n\nCtrl+kattintás a uBlock₀ letiltásához csak a jelenlegi oldalon.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Oldal összes felugró ablakának blokkolása\/engedélyezése", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Kattintson a uBlock₀ engedélyezéséhez ezen a webhelyen.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Nagyméretű média elemek blokkolásának ki\/bekapcsolása", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "blokkolt lekérések", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Kozmetikai szűrés ki- és bekapcsolása ezen a weboldalon", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "ezen a lapon", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Távoli betűkészletek blokkolásának ki\/bekapcsolása ezen az oldalon", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} vagy {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Globális szabályok: ebben az oszlopban azok a szabályok vannak, amelyek minden weboldalra vonatkoznak.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "telepítés óta", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Lokális szabályok: ebben az oszlopban azok a szabályok vannak, amelyek csak a jelenlegi weboldalra vonatkoznak.\nA lokális szabályok felülírják a globális szabályokat.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "vagy", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Kattintson a módosítások véglegesítéséhez.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Blokkolva ezen az oldalon", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Kattintson ide a módosítások visszavonásához.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Blokkolva a telepítés óta", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"minden", - "description":"" + "popupDomainsConnected_v2": { + "message": "Kapcsolódott domainek", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"képek", - "description":"" + "popupTipDashboard": { + "message": "Vezérlőpult megnyitása", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"külső féltől", - "description":"" + "popupTipZapper": { + "message": "Belépés az elemeltávolító módba", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"3rd-party css\/képek", - "description":"" + "popupTipPicker": { + "message": "Elemválasztó mód aktiválása", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"inline scriptek", - "description":"" + "popupTipLog": { + "message": "Naplózott lekérések megtekintése", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"1st-party scriptek", - "description":"" + "popupTipReport": { + "message": "Az oldalon lévő probléma bejelentése", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"3rd-party scriptek", - "description":"" + "popupTipNoPopups": { + "message": "Oldal összes felugró ablakának blokkolása/engedélyezése", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"3rd-party frame-ek", - "description":"" + "popupTipNoPopups1": { + "message": "Kattintson az összes felugró ablak letiltásához ezen a webhelyen", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"domain csatlakozik", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Kattints, hogy ne legyen többé az összes előugró ablak blokkolva ezen a webhelyen", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}}, összesen: {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Nagyméretű média elemek blokkolásának ki/bekapcsolása", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Létrehoz", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Kattints a nagyméretű médiaelemek blokkolásához ezen a webhelyen", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Választ", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Kattints a nagyméretű médiaelemek blokkolásának visszavonásához ezen a webhelyen", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Kilép", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Kozmetikai szűrés ki- és bekapcsolása ezen a weboldalon", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Előnézet", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Kattints a kozmetikai szűrés kikapcsolásához ezen a webhelyen", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Hálózati szűrők", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Kattints a kozmetikai szűrés bekapcsolásához ezen a webhelyen", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Kozmetikai szűrők", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Távoli betűkészletek blokkolásának ki/bekapcsolása ezen az oldalon", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Klikk, Ctrl-klikk", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Kattints a távoli fontok blokkolásához ezen a webhelyen", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Elem blokkolása", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Kattints a távoli betűtípusok blokkolásának visszavonásához ezen a webhelyen", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Blokkolt elemek helyőrzőinek elrejtése", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Kattints a JavaScript teljes letiltásához ezen az oldalon", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Jelenjen meg a blokkolt lekérések száma az ikonon", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Kattints, hogy JavaScript ne legyen teljesen letiltva ezen az oldalon", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Buboréksúgó (tooltip) kikapcsolása", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Felugró ablakok", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Környezeti menü alkalmazása, ahol lehetséges", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Nagy média elemek", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Színvak-barát", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Kozmetikai szűrés", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Felhőben tárolás bekapcsolása", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Távoli betűkészletek", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Haladó felhasználó vagyok (További tudnivalók<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Előtöltés kikapcsolása (kapcsolódás megakadályozása blokkolt hálózati lekérésekhez)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Több", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Hivatkozás-vizsgálat kikapcsolása", - "description":"English: " + "popupLessButton_v2": { + "message": "Kevesebb", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"WebRTC helyi IP-cím szivárogtatásának megakadályozása", - "description":"English: " + "popupTipGlobalRules": { + "message": "Globális szabályok: ebben az oszlopban azok a szabályok vannak, amelyek minden weboldalra vonatkoznak.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Alapértelmezett viselkedés", - "description":"" + "popupTipLocalRules": { + "message": "Lokális szabályok: ebben az oszlopban azok a szabályok vannak, amelyek csak a jelenlegi weboldalra vonatkoznak.\nA lokális szabályok felülírják a globális szabályokat.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Ezek az alapértelmezett viselkedések felülírhatóak weboldal-szinten", - "description":"" + "popupTipSaveRules": { + "message": "Kattintson a módosítások véglegesítéséhez.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Kozmetikai szűrés kikapcsolása", - "description":"" + "popupTipRevertRules": { + "message": "Kattintson ide a módosítások visszavonásához.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"{{input:number}} kB-nál nagyobb média elemek blokkolása", - "description":"" + "popupAnyRulePrompt": { + "message": "minden", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Távoli betűkészletek blokkolása", - "description":"" + "popupImageRulePrompt": { + "message": "képek", + "description": "" }, - "settingsStorageUsed":{ - "message":"Tárolóhely használat: {{value}} byte", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "külső féltől", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Utolsó visszaállítás:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "külső féltől származó css/képek", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Utolsó biztonsági mentés:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "inline scriptek", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} hálózati szűrők + {{cosmeticFilterCount}} kozmetikai szűrők:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "1st-party scriptek", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} használatban a listában lévő {{total}} szűrő közül", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "3rd-party scriptek", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Szűrőlisták automatikus frissítése.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "3rd-party frame-ek", + "description": "" }, - "3pUpdateNow":{ - "message":"Frissítés most", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "domain csatlakozik", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Gyorsítótárak ürítése", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}}, összesen: {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Értelmezze és alkalmazza a kozmetikai szűrőket.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Verzió", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Ez a beállítás engedélyezi az Adblock Plus-típusú “elemelrejtő” szűrőket<\/a>. Ezek kizárólag kozmetikai célokat szolgálnak; elrejtik egy webhely azon elemeit, amelyek vizuálisan zavaróak, de a hálózati lekérések alapján nem szűrhetők ki.<\/p>

      A beállítás engedélyezése megnöveli a uBlock₀<\/i> memóriahasználatát.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "parancsfájl", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Általános kozmetikai szűrők figyelmen kívül hagyása", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "keret", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Az általános kozmetikai szűrők azok a kozmetikai szűrők, amelyek minden weboldalra érvényesek.

      Ugyan a uBlock₀ hatékonyan kezeli őket, az általános kozmetikai szűrők mégis mérhetően magasabb memória és CPU használatot eredményezhetnek néhány weboldalon, főleg nagy, és régóta futóak esetében.

      Ennek az opciónak a bekapcsolása kiküszöböli az általános kozmetikai szűrők kezeléséből a weboldalakon adódó memória és CPU használat többletet, továbbá csökkenti a uBlock₀ által foglalt memóriát is.

      Ajánlott bekapcsolni ezt az opciót a gyengébb eszközökön.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Létrehoz", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Blokkolt hostokat tartalmazó listák", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Választ", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Módosítások alkalmazása", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Kilép", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Hirdetések", - "description":"English: Ads" + "pickerPreview": { + "message": "Előnézet", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Adatvédelem", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Hálózati szűrők", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Malware domainek", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Kozmetikai szűrők", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Közösségi", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Klikk, Ctrl-klikk", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Többcélú", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Elem blokkolása…", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Régiók, nyelvek", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Blokkolt elemek helyőrzőinek elrejtése", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Saját", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Jelenjen meg a blokkolt lekérések száma az ikonon", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Soronként egy URL. A ‘!’ kezdetű sorok figyelmen kívül maradnak. A szabálytalan URL-ek szintén figyelmen kívül maradnak, hibajelzés nélkül.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Buboréksúgó (tooltip) kikapcsolása", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Alkalmaz", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Környezeti menü alkalmazása, ahol lehetséges", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"gyorsítótár ürítése", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Színvak-barát", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"új verzió érhető el", - "description":"English: new version available" + "settingsAppearance": { + "message": "Kinézet", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"elavult", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Téma", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Utolsó frissítés: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Egyéni kiemelőszín", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Soronként egy szűrő. A szűrő lehet egy hostnév, vagy egy Adblock Plus kompatibilis szűrő.\nA ‘!’ kezdetű sorok figyelmen kívül maradnak.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Felhőben tárolás bekapcsolása", + "description": "" }, - "1pImport":{ - "message":"Importál és hozzáad", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Haladó felhasználó vagyok (További tudnivalók)", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Exportál", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Előtöltés kikapcsolása (kapcsolódás megakadályozása blokkolt hálózati lekérésekhez)", + "description": "English: " }, - "1pExportFilename":{ - "message":"ublock-statikus-szabalyaim_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Hivatkozás-vizsgálat kikapcsolása", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Módosítások alkalmazása", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "WebRTC helyi IP-cím szivárogtatásának megakadályozása", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Állandó szabályok", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Alapértelmezett viselkedés", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Átmeneti szabályok", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Ezek az alapértelmezett viselkedések felülírhatóak weboldal-szinten", + "description": "" }, - "rulesRevert":{ - "message":"Visszaállítás", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Kozmetikai szűrés kikapcsolása", + "description": "" }, - "rulesCommit":{ - "message":"Alkalmaz", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Média elemek blokkolása, amelyek nagyobbak, mint {{input:number}} kB", + "description": "" }, - "rulesEdit":{ - "message":"Szerkesztés", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Távoli betűkészletek blokkolása", + "description": "" }, - "rulesEditSave":{ - "message":"Mentés", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "JavaScript letiltása", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Elvetés", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "CSP jelentések blokkolása", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Importálás fájlból…", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Kanonikus nevek felfedése", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Exportálás fájlba", - "description":"" + "settingsAdvanced": { + "message": "Speciális", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"ublock-dinamikus-szabalyaim_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Funkciók csak hozzáértő felhasználóknak", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Saját szűrőszabályok listája.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "haladó beállítások", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Szabály szintaxis: forrás cél típus művelet<\/code> (Teljes dokumentáció<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Utolsó visszaállítás:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Az alábbi listában felsorolt hostokon a kiegészítő nem fog működni. Soronként egy bejegyzés. Érvénytelen hostnevek figyelmen kívül maradnak.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Utolsó biztonsági mentés:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Importál és hozzáad", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} hálózati szűrők + {{cosmeticFilterCount}} kozmetikai szűrők:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Exportál", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} használatban a listában lévő {{total}} szűrő közül", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"ublock-kiveteleim_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Szűrőlisták automatikus frissítése.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Módosítások alkalmazása", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Frissítés most", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Típus", - "description":"English: Type" + "3pPurgeAll": { + "message": "Gyorsítótárak ürítése", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Domain", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Értelmezze és alkalmazza a kozmetikai szűrőket.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "A kozmetikai célú szűrők elrejtik a webhely azon elemeit, amelyek vizuálisan zavaróak, de a hálózati kérések alapján nem szűrhetők ki.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Szűrő", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Általános kozmetikai szűrők figyelmen kívül hagyása", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Összes", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

      Az általános kozmetikai szűrők azok a kozmetikai szűrők, amelyek minden weboldalra érvényesek.

      Ugyan a uBlock₀ hatékonyan kezeli őket, az általános kozmetikai szűrők mégis mérhetően magasabb memória és CPU használatot eredményezhetnek néhány weboldalon, főleg nagy, és régóta futóak esetében.

      Ennek az opciónak a bekapcsolása kiküszöböli az általános kozmetikai szűrők kezeléséből a weboldalakon adódó memória és CPU használat többletet, továbbá csökkenti a uBlock₀ által foglalt memóriát is.

      Ajánlott bekapcsolni ezt az opciót a gyengébb eszközökön.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Hálózati lekérések a háttérben", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Hálózati forgalom szüneteltetése, amíg a szűrőlisták be nem töltődtek", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"naplóbejegyzések szűrése", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Blokkolt hostokat tartalmazó listák", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Naplóbejegyzések maximális száma", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Módosítások alkalmazása", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Kontextus:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Beépített", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Típus:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Hirdetések", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Dinamikus URL szűrő", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Adatvédelem", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Statikus szűrés", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Malware domainek", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"Hálózati kérések {{action}} amik {{type}} {{br}} és illeszkednek a(z) {{url}} URL-re {{br}} és amik innen származnak: {{origin}},{{br}}{{importance}} van illeszkedő kivétel szűrő.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Közösségi média felületi elemei", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"blokkolása", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Sütiértesítések", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"engedélyezése", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Kellemetlenségek", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"„{{type}}” típusúak", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Többcélú", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"bármilyen típusúak", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Régiók, nyelvek", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"{{origin}}", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Saját", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"bárhonnan", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Importálás...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"kivéve ha", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Soronként egy URL. A ‘!’ kezdetű sorok figyelmen kívül maradnak. A szabálytalan URL-ek szintén figyelmen kívül maradnak, hibajelzés nélkül.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"akkor is, ha", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Elavult.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statikus filter, amiben {{filter}} benne van:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "tartalom megtekintése", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Változások listája", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Utolsó frissítés: {{ago}}.\nKattintson a frissítés kényszerítéséhez.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Frissítés...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Támogatás", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Egy hálózati hiba megakadályozta az erőforrás frissítését.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Forráskód (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Ne adjon hozzá megbízhatatlan forrásokból származó szűrőket.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Közreműködők", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Egyéni szűrők engedélyezése", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Biztonsági mentés fájlba...", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Bizalmas egyéni szűrők engedélyezése", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"ublock-mentesem_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Importál és hozzáad", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Biztonsági mentés visszaállítása fájlból...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Exportál", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Alapértelmezett beállítások visszaállítása...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "ublock-statikus-szabalyaim_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"A jelenlegi beállítások felülíródnak a mentett adatokkal (mentési idő: {{time}}), utána a uBlock₀ újraindul.\n\nFelülírja a jelenlegi beállításokat a biztonsági mentéssel?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Módosítások alkalmazása", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Nem olvasható vagy érvénytelen adat", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Állandó szabályok", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Az összes beállítás törlődik, utána a uBlock₀ újraindul.\n\nÁllítsa vissza a gyári beállításokat?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Átmeneti szabályok", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Csatlakozás sikertelen a következő címhez: {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Visszaállítás", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Hozzáadja a következő URL-t a saját szűrő listákhoz?\n\nNév: \"{{title}}\"\nURL: \"{{url}}\"", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Alkalmaz", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"egy perce", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Szerkesztés", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} perce", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Mentés", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"egy órája", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Elvetés", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} órája", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Importálás fájlból…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"egy napja", - "description":"English: a day ago" + "rulesExport": { + "message": "Exportálás fájlba…", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} napja", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "ublock-dinamikus-szabalyaim_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Vezérlőpult megnyitása", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Saját szűrőszabályok listája.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Napló mutatása", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Szabály szintaxis: forrás cél típus művelet (Teljes dokumentáció).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"kikapcsolva", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Rendezés:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin nem engedte a következő lap betöltését:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Szabály típusa", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"A következő szűrő miatt", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Forrás", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"paraméterek nélkül", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Cél", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Ezekben található:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Az alábbi listában felsorolt hostokon a kiegészítő nem fog működni. Soronként egy bejegyzés. Érvénytelen hostnevek figyelmen kívül maradnak.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Vissza", - "description":"English: Go back" + "whitelistImport": { + "message": "Importál és hozzáad", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Ablak bezárása", - "description":"English: Close this window" + "whitelistExport": { + "message": "Exportál", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Kapcsolja ki a szigorú tiltást a(z) {{hostname}} részére", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "ublock-megbizhato-oldalak_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Ideiglenesen", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Módosítások alkalmazása", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Véglegesen", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Típus", + "description": "English: Type" }, - "cloudPush":{ - "message":"Exportálás a felhőszolgáltatásba", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Domain", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Importálás a felhőszolgáltatásból", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Importálás a felhőből és egybevonás a jelenlegi beállításokkal", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Szűrő", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Összes", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Ennek az eszköznek a neve:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Hálózati forgalom a háttérben", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Küldés", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Jelenlegi lap", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Visszaállítás", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Töltse újra a lap tartalmát", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"bájt", - "description":"" + "loggerDomInspectorTip": { + "message": "DOM ellenőrző kapcsolása", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Nagyméretű média elemek ideiglenes engedélyezése", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Felugró panel kapcsolása", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"Ez a bejegyzés utolsó kell hogy legyen", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: A naplózó", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Naplózó törlése", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Naplózás szüneteltetése (az összes bejövő adat elvetése)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Naplózó folytatása", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Naplózó szűrése be/ki", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "naplóbejegyzések szűrése", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Naplózó szűrőbeállításai", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Nem", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "blokkolva", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "engedélyezve", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "módosítva", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "1. fél", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "3. fél", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Részletek", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Szűrő", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Szűrőlista", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Szabály", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Környezet", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Gyökérkörnyezet", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Fél", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Típus", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Webcímszabály", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Kontextus:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Típus:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Statikus szűrő", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "Hálózati kérések {{action}} amik {{type}} {{br}} és illeszkednek a(z) {{url}} URL-re {{br}} és amik innen származnak: {{origin}},{{br}}{{importance}} van illeszkedő kivétel szűrő.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "blokkolása", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "engedélyezése", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "„{{type}}” típusúak", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "bármilyen típusúak", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "{{origin}}", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "bárhonnan", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "kivéve ha", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "akkor is, ha", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Statikus filter, amiben {{filter}} benne van:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "A statikus szűrő {{filter}} nem található az aktuálisan engedélyezett szűrőlisták egyikében sem", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Azok a naplóbejegyzések, amelyek nem felelnek meg az alábbi három feltételnek, automatikusan eldobásra kerülnek:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Bejegyzések megőrzése az utolsó {{input}} percből", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Laponként legfeljebb {{input}} oldalbetöltés megtartása", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Laponként legfeljebb {{input}} bejegyzés megtartása", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Bejegyzésenként {{input}} sor használata a függőlegesen bővített módban", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Oszlopok elrejtése:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Idő", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Szűrő/szabály", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Környezet", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Fél", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Lista", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tábla", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Egyszerű", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Megnyitás", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Hiba bejelentése", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Hasonló hibák keresése", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Dokumentáció", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "A uBlock Origin további funkcióihoz olvassa el a dokumentációt itt: uBlock/wiki.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Kérdések és támogatás", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "A felhasználói kérdésekre választ és további segítséget, támogatást az /r/uBlockOrigin subredditen nyújtunk.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Szűrőhibák/a weboldal nem működik megfelelően", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Az adott weboldalra vonatkozó szűrőhibákat jelentse a uBlockOrigin/uAssets hibakövetőben. GitHub-fiók szükséges.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Fontos: Ne használjon hasonló célú reklámblokkolókat a uBlock Originnel egyidőben, mert ez szűrőhibákat okozhat bizonyos weboldalakon.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tippek: Bizonyosodjon meg arról, hogy a legfrissebb szűrőlistákat használja. A naplózó a legfontosabb eszköz a szűrőkkel kapcsolatos hibák megállapításában.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Hibajelentés", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "A uBlock Origin hibáit jelentse a uBlockOrigin/uBlock-issue hibakövetőben. GitHub-fiók szükséges.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Hibakeresési információk", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Az alábbi műszaki információk segíthetnek önkénteseinknek megoldani a problémáját.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Szűrőhibák bejelentése", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Az önkéntesek terhelésének csökkentése érdekében győződjön meg róla, hogy a hiba még nem lett bejelentve.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "A szűrőlisták naponta frissülnek. Győződjön meg róla, hogy a problémáját nem oldják meg a legfrissebb szűrőlisták.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Ellenőrizze, hogy a probléma a problémás weboldal újratöltése után is fennáll-e.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "A weboldal címe:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "A weboldal…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Válasszon egy bejegyzést --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Hirdetéseket vagy azok maradványait jelenít meg", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Zavaró elemeket tartalmaz", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Észleli a uBlock Origint", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Adatvédelmi problémákat vet fel", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Hibásan működik, amikor a uBlock Origin be van kapcsolva", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Kéretlen lapokat vagy ablakokat nyit meg", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Kártékony programokhoz, adathalászathoz vezet", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "A weboldal megjelölése felnőtt tartalomként", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Adatvédelmi irányelvek", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Változások listája", + "description": "" + }, + "aboutCode": { + "message": "Forráskód (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Közreműködők", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Forráskód", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Fordítások", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Szűrőlisták", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Külső függőségek (GPLv3-kompatibilis):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "A uBO saját szűrőlistáit a következő ingyenes CDN-ek (angol) szolgáltatják:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "A szűrőlisták frissítéséhez egy véletlenszerűen kiválasztott CDN használatos.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Biztonsági mentés fájlba…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "ublock-mentesem_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Visszaállítás fájlból...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Alapértelmezett beállítások visszaállítása…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "A jelenlegi beállítások felülíródnak a mentett adatokkal (mentési idő: {{time}}), utána a uBlock₀ újraindul.\n\nFelülírja a jelenlegi beállításokat a biztonsági mentéssel?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Nem olvasható vagy érvénytelen adat", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Az összes beállítás törlődik, utána a uBlock₀ újraindul.\n\nÁllítsa vissza a gyári beállításokat?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Hálózati hiba: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Feliratkozás", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "egy perce", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} perce", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "egy órája", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} órája", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "egy napja", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} napja", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Vezérlőpult megnyitása", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Napló mutatása", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "kikapcsolva", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Oldal blokkolva", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin nem engedte a következő lap betöltését:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "A következő szűrő miatt", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "paraméterek nélkül", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Ezekben található:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Vissza", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Ablak bezárása", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Ne figyelmeztessen újra ennél az oldalnál", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Kapcsolja ki a szigorú tiltást a(z) {{hostname}} részére", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Ideiglenesen", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Véglegesen", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Továbblépés", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "A blokkolt oldal egy másik webhelyre akarja átirányítani. Ha a folytatást választja, akkor közvetlenül ide fog navigálni: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Ok:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Káros", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Nyomkövető", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Rossz hírnevű", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Exportálás a felhőszolgáltatásba", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importálás a felhőszolgáltatásból", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importálás a felhőből és egybevonás a jelenlegi beállításokkal", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Ennek az eszköznek a neve:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Figyelem! Haladó beállítások, megváltoztatásuk csak saját felelősségre.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Küldés", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Módosítások alkalmazása", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Visszaállítás", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bájt", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Elem blokkolása a keretben…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Feliratkozás szűrőlistára…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Nagyméretű média elemek ideiglenes engedélyezése", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Forráskód megtekintése…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Billentyűkombináció megadása", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Zárolt görgetés be/ki", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Másolás a vágólapra", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Összes kijelölése", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Kozmetikai szűrés kapcsolása", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Javascript be/ki", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Blokkolási mód lazítása", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Használt tárhely: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "kB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Kattintson a betöltéshez", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Hibák: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Nem sikerült megfelelően szűrni a böngésző indításakor. Töltse újra az oldalt a megfelelő szűrés biztosítása érdekében.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Ez a bejegyzés utolsó kell hogy legyen", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/hy/messages.json b/src/_locales/hy/messages.json new file mode 100644 index 0000000000000..9e1c212d75d0a --- /dev/null +++ b/src/_locales/hy/messages.json @@ -0,0 +1,1314 @@ +{ + "extName": { + "message": "uBlock Origin", + "description": "extension name." + }, + "extShortDesc": { + "message": "Վերջապե՛ս, արդյունավետ արգելափակիչ։ Խնայում է մշակիչը և հիշողությունը։", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "dashboardName": { + "message": "uBlock₀ — Կառավահան", + "description": "English: uBlock₀ — Dashboard" + }, + "dashboardUnsavedWarning": { + "message": "Ուշադրությո՛ւն։ Դուք ունեք չպահպանված փոփոխություններ։", + "description": "A warning in the dashboard when navigating away from unsaved changes" + }, + "dashboardUnsavedWarningStay": { + "message": "Մնալ", + "description": "Label for button to prevent navigating away from unsaved changes" + }, + "dashboardUnsavedWarningIgnore": { + "message": "Անտեսել", + "description": "Label for button to ignore unsaved changes" + }, + "settingsPageName": { + "message": "Կարգավորումներ", + "description": "appears as tab name in dashboard" + }, + "3pPageName": { + "message": "Զտիչների ցանկեր", + "description": "appears as tab name in dashboard" + }, + "1pPageName": { + "message": "Իմ զտիչները", + "description": "appears as tab name in dashboard" + }, + "rulesPageName": { + "message": "Իս կանոնները", + "description": "appears as tab name in dashboard" + }, + "whitelistPageName": { + "message": "Վստահված կայքեր", + "description": "appears as tab name in dashboard" + }, + "shortcutsPageName": { + "message": "Դյուրանցումներ", + "description": "appears as tab name in dashboard" + }, + "statsPageName": { + "message": "uBlock₀ — Մատյան", + "description": "Title for the logger window" + }, + "aboutPageName": { + "message": "Ընդլայնման մասին", + "description": "appears as tab name in dashboard" + }, + "supportPageName": { + "message": "Աջակցություն", + "description": "appears as tab name in dashboard" + }, + "assetViewerPageName": { + "message": "uBlock₀ — Ակտիվների դիտակ", + "description": "Title for the asset viewer page" + }, + "advancedSettingsPageName": { + "message": "Ընդլայնված կարգավորումներ", + "description": "Title for the advanced settings page" + }, + "popupPowerSwitchInfo": { + "message": "Կտտոց՝ անջատել/միացնել uBlock₀-ն այս կայքի համար։\n\nCtrl+կտտոց՝ անջատել uBlock₀-ը միայն այս էջում։", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + }, + "popupPowerSwitchInfo1": { + "message": "Կտտացրեք՝ uBlock₀֊ն այս կայքի համար անջատելու համար։\n\nCtrl+կտտոց՝ uBlock₀֊ն միայն այս էջում անջատելու համար։", + "description": "Message to be read by screen readers" + }, + "popupPowerSwitchInfo2": { + "message": "կտտացրեք՝ uBlock₀֊ն այս կայքի համար միացնելու համար։", + "description": "Message to be read by screen readers" + }, + "popupBlockedRequestPrompt": { + "message": "արգելափակված հարցում", + "description": "English: requests blocked" + }, + "popupBlockedOnThisPagePrompt": { + "message": "այս էջում", + "description": "English: on this page" + }, + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 (13%)" + }, + "popupBlockedSinceInstallPrompt": { + "message": "տեղադրման պահից", + "description": "English: since install" + }, + "popupOr": { + "message": "կամ", + "description": "English: or" + }, + "popupBlockedOnThisPage_v2": { + "message": "Արգելափակվել է այս էջում", + "description": "For the new mobile-friendly popup design" + }, + "popupBlockedSinceInstall_v2": { + "message": "Արգելափակվել է տեղադրման պահից", + "description": "For the new mobile-friendly popup design" + }, + "popupDomainsConnected_v2": { + "message": "Միացվել է տիրույթներ", + "description": "For the new mobile-friendly popup design" + }, + "popupTipDashboard": { + "message": "Բացել կառավահանը", + "description": "English: Click to open the dashboard" + }, + "popupTipZapper": { + "message": "Գործարկել տարրերի ջնջման ռեժիմը", + "description": "Tooltip for the element-zapper icon in the popup panel" + }, + "popupTipPicker": { + "message": "Գործարկել տարրերի ընտրության ռեժիմը", + "description": "English: Enter element picker mode" + }, + "popupTipLog": { + "message": "Բացել մատյանը", + "description": "Tooltip used for the logger icon in the panel" + }, + "popupTipReport": { + "message": "Հաղորդել կայքում առաջացած խնդրի մասին", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipNoPopups": { + "message": "Միաց./Անջ. այս կայքի բոլոր ելնող լուսամուտների արգելափակումը", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups1": { + "message": "Կտտացրեք՝ այս կայքի բոլոր ելնող լուսամուտներն արգելափակելու", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2": { + "message": "Կտտացրեք՝ այս կայքի բոլոր ելնող լուսամուտների արգելափակումն անջատելու", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoLargeMedia": { + "message": "Միաց./Անջ. այս կայքի խոշոր մեդիա տարրերի արգելափակումը", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia1": { + "message": "Կտտացրեք՝ այս կայքի խոշոր մեդիա տարրերն արգելափակելու", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2": { + "message": "Կտտացրեք՝ այս կայքի խոշոր մեդիա տարրերի արգելափակումն անջատելու", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoCosmeticFiltering": { + "message": "Միաց./Անջ. կոսմետիկ զտումն այս կայքի համար", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering1": { + "message": "Կտտացրեք՝ այս կայքում կոսմետիկ զտումն անջատելու", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2": { + "message": "Կտտացրեք՝ այս կայքում կոսմետիկ զտումը միացնելու", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoRemoteFonts": { + "message": "Միաց./Անջ. կողմնակի տառատեսակների արգելափակումն այս կայքի համար", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts1": { + "message": "Կտտացրեք՝ կողմնակի տառատեսակներն այս կայքում արգելափակելու", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts2": { + "message": "Կտտացրեք՝ այս կայքի համար կողմնակի տառատեսակների արգելափակումն անջատելու", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoScripting1": { + "message": "Կտտացրեք՝ JavaScript֊ն այս կայքում անջատելու", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupTipNoScripting2": { + "message": "Կտտացրեք՝ այս կայքում JavaScript֊ն այլևս չանջատելու համար", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupNoPopups_v2": { + "message": "Ելնող լուսամուտներ", + "description": "Caption for the no-popups per-site switch" + }, + "popupNoLargeMedia_v2": { + "message": "Խոշոր մեդիա տարրեր", + "description": "Caption for the no-large-media per-site switch" + }, + "popupNoCosmeticFiltering_v2": { + "message": "Կոսմետիկ զտում", + "description": "Caption for the no-cosmetic-filtering per-site switch" + }, + "popupNoRemoteFonts_v2": { + "message": "Կողմնակի տառատեսակներ", + "description": "Caption for the no-remote-fonts per-site switch" + }, + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" + }, + "popupMoreButton_v2": { + "message": "Ավել", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton_v2": { + "message": "Պակաս", + "description": "Label to be used to hide popup panel sections" + }, + "popupTipGlobalRules": { + "message": "Համընդհանուր կանոններ. այս սյունակը նախատեսված է բոլոր կայքերի վրա տարածվող կանոնների համար։", + "description": "Tooltip when hovering the top-most cell of the global-rules column." + }, + "popupTipLocalRules": { + "message": "Տեղական կանոններ. այս սյունակը նախատեսված է միայն այս կայքի վրա տարածվող կանոնների համար։\nՏեղական կանոնները վերասահմանում են համընդհանուր կանոնները։", + "description": "Tooltip when hovering the top-most cell of the local-rules column." + }, + "popupTipSaveRules": { + "message": "Կտտացրեք՝ փոփոխությունները պահպանելու համար։", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." + }, + "popupTipRevertRules": { + "message": "Կտտացրեք՝ փոփոխությունները հետարկելու համար։", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + }, + "popupAnyRulePrompt": { + "message": "բոլորը", + "description": "" + }, + "popupImageRulePrompt": { + "message": "պատկերներ", + "description": "" + }, + "popup3pAnyRulePrompt": { + "message": "3-րդ կողմերի ռեսուրսներ", + "description": "" + }, + "popup3pPassiveRulePrompt": { + "message": "3-րդ կողմերի CSS/պատկերներ", + "description": "" + }, + "popupInlineScriptRulePrompt": { + "message": "ներտող սկրիպտներ", + "description": "" + }, + "popup1pScriptRulePrompt": { + "message": "1-ին կողմի սկրիպտներ", + "description": "" + }, + "popup3pScriptRulePrompt": { + "message": "3-րդ կողմերի սկրիպտներ", + "description": "" + }, + "popup3pFrameRulePrompt": { + "message": "3-րդ կողմերի շրջանակներ", + "description": "" + }, + "popupHitDomainCountPrompt": { + "message": "միացված տիրույթներ", + "description": "appears in popup" + }, + "popupHitDomainCount": { + "message": "{{total}}֊ից {{count}}֊ը", + "description": "appears in popup" + }, + "popupVersion": { + "message": "Տարբերակ", + "description": "Example of use: Version 1.26.4" + }, + "popup3pScriptFilter": { + "message": "սկրիպտ", + "description": "Appears as an option to filter out firewall rows" + }, + "popup3pFrameFilter": { + "message": "շրջանակ", + "description": "Appears as an option to filter out firewall rows" + }, + "pickerCreate": { + "message": "Ստեղծել", + "description": "English: Create" + }, + "pickerPick": { + "message": "Ընտրել", + "description": "English: Pick" + }, + "pickerQuit": { + "message": "Դուրս գալ", + "description": "English: Quit" + }, + "pickerPreview": { + "message": "Նախադիտում", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + }, + "pickerNetFilters": { + "message": "Ցանցային զտիչներ", + "description": "English: header for a type of filter in the element picker dialog" + }, + "pickerCosmeticFilters": { + "message": "Կոսմետիկ զտիչներ", + "description": "English: Cosmetic filters" + }, + "pickerCosmeticFiltersHint": { + "message": "Կտտոց, Ctrl+կտտոց", + "description": "English: Click, Ctrl-click" + }, + "pickerContextMenuEntry": { + "message": "Արգելափակել տարրը...", + "description": "An entry in the browser's contextual menu" + }, + "settingsCollapseBlockedPrompt": { + "message": "Թաքցնել արգելափակված տարրերի տեղապահները", + "description": "English: Hide placeholders of blocked elements" + }, + "settingsIconBadgePrompt": { + "message": "Ցուցադրել արգելափակված հայտերի քանակը պատկերակի վրա", + "description": "English: Show the number of blocked requests on the icon" + }, + "settingsTooltipsPrompt": { + "message": "Անջատել գործիքահուշերը", + "description": "A checkbox in the Settings pane" + }, + "settingsContextMenuPrompt": { + "message": "Օգտվեք համատեքստային ընտրացանկից, երբ դա տեղին է", + "description": "English: Make use of context menu where appropriate" + }, + "settingsColorBlindPrompt": { + "message": "Բարեհաճ գույներ գունակուրություն ունեցողների համար", + "description": "English: Color-blind friendly" + }, + "settingsAppearance": { + "message": "Արտաքին տեսք", + "description": "Section for controlling user interface appearance" + }, + "settingsThemeLabel": { + "message": "Թեմա", + "description": "Label for checkbox to enable a custom dark theme" + }, + "settingsThemeAccent0Label": { + "message": "Ընտրովի շեշտային գույն", + "description": "Label for checkbox to pick an accent color" + }, + "settingsCloudStorageEnabledPrompt": { + "message": "Միացնել ամպային պահեստի աջակցոմը", + "description": "" + }, + "settingsAdvancedUserPrompt": { + "message": "Ես հմուտ օգտվող եմ (կարդալը պարտադիր է)", + "description": "Checkbox to let user access advanced, technical features" + }, + "settingsPrefetchingDisabledPrompt": { + "message": "Անջատել նախաբեռնումը՝ արգելափակված ցանցային հայտերի համար միացումները կանխելու", + "description": "English: " + }, + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Անջատել հիպերհղումների ստուգումը", + "description": "English: " + }, + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Կանխել տեղական IP-հասցեների արտահոսքը WebRTC-ի միջոցով", + "description": "English: " + }, + "settingPerSiteSwitchGroup": { + "message": "Լռելյայն վարքագիծ", + "description": "" + }, + "settingPerSiteSwitchGroupSynopsis": { + "message": "Այս կարգավորումները կարող են նշված լինել յուրաքանչյուր կայքի համար ջոկ֊ջոկ", + "description": "" + }, + "settingsNoCosmeticFilteringPrompt": { + "message": "Անջատել կոսմետիկ զտումը", + "description": "" + }, + "settingsNoLargeMediaPrompt": { + "message": "Արգելափակել {{input}} ԿԲ-ից մեծ մեդիա տարրերը", + "description": "" + }, + "settingsNoRemoteFontsPrompt": { + "message": "Արգելափակել կողմնակի տառատեսակները", + "description": "" + }, + "settingsNoScriptingPrompt": { + "message": "Անջատել JavaScript֊ը", + "description": "The default state for the per-site no-scripting switch" + }, + "settingsNoCSPReportsPrompt": { + "message": "Արգելափակել CSP հաշվետվությունները", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" + }, + "settingsUncloakCnamePrompt": { + "message": "Բանալ կանոնական անունները", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" + }, + "settingsAdvanced": { + "message": "Ընդլայնված կարգավորումներ", + "description": "Section for controlling advanced-user settings" + }, + "settingsAdvancedSynopsis": { + "message": "Տեխնիկական օգտվողների համար նախատեսված գործառույթներ", + "description": "Description of section controlling advanced-user settings" + }, + "settingsAdvancedUserSettings": { + "message": "ընդլայնված կարգավորումներ", + "description": "For the tooltip of a link which gives access to advanced settings" + }, + "settingsLastRestorePrompt": { + "message": "Վերջին վերականգնումը՝", + "description": "English: Last restore:" + }, + "settingsLastBackupPrompt": { + "message": "Վերջին պահուստային պատճենը՝", + "description": "English: Last backup:" + }, + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} ցանցային զտիչ + {{cosmeticFilterCount}} կոսմետիկ զտիչ այստեղից՝", + "description": "Appears at the top of the _3rd-party filters_ pane" + }, + "3pListsOfBlockedHostsPerListStats": { + "message": "{{total}}֊ից օգտագործվում է {{used}}֊ը", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "3pAutoUpdatePrompt1": { + "message": "Ինքնաշխատորեն թարմացնել զտիչների ցանկերը", + "description": "A checkbox in the _3rd-party filters_ pane" + }, + "3pUpdateNow": { + "message": "Թարմացնել հիմա", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pPurgeAll": { + "message": "Մաքրել բոլոր հիշապահեստները", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pParseAllABPHideFiltersPrompt1": { + "message": "Վերլուծել և կիրառել կոսմետիկ զտիչներ", + "description": "English: Parse and enforce Adblock+ element hiding filters." + }, + "3pParseAllABPHideFiltersInfo": { + "message": "Կոսմետիկ զտիչները ծառայում են կայքէջի այն տարրերը թաքցնելու համար, որոնք պատճառում են տեսողական անհանգստություն և որոնք չեն կարող արգելափակվել ցանցային հայտերի հիման վրա աշխատող զտման մեխանիզմներով։", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + }, + "3pIgnoreGenericCosmeticFilters": { + "message": "Անտեսել ընդհանուր կոսմետիկ զտիչները", + "description": "This will cause uBO to ignore all generic cosmetic filters." + }, + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Ընդհանուր կոսմետիկ զտիչներն այն կոսմետիկ զտիչներն են, որոնք նախատեսված են կիրառվել բոլոր կայքերում։ Այս ընտրանքը միացնելը կվերացնի հիշողության և մշակիչի բեռնվածությունը, որը կայքեջերի մոտ ավելանում է ընդհանուր կոսմետիկ զտիչների մշակման արդյունքում։\n\nԽորհուրդ է տրվում միացնել այս ընտրանքը ոչ բավականաչափ հզոր սարքերում։", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." + }, + "3pSuspendUntilListsAreLoaded": { + "message": "Կանգնեցնել ցանցային ակտիվությմւնը մինչև բեռնվեն զտիչների բոլոր ցուցակները", + "description": "A checkbox in the 'Filter lists' pane" + }, + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" + }, + "3pApplyChanges": { + "message": "Կիրառել փոփոխությունները", + "description": "English: Apply changes" + }, + "3pGroupDefault": { + "message": "Ներկառուցված", + "description": "Filter lists section name" + }, + "3pGroupAds": { + "message": "Գովազդ", + "description": "Filter lists section name" + }, + "3pGroupPrivacy": { + "message": "Գաղտնիություն", + "description": "Filter lists section name" + }, + "3pGroupMalware": { + "message": "Վնասակար տիրույթներ", + "description": "Filter lists section name" + }, + "3pGroupSocial": { + "message": "Սոցիալական վիդջեթներ", + "description": "Filter lists section name" + }, + "3pGroupCookies": { + "message": "Cookie ծանուցում", + "description": "Filter lists section name" + }, + "3pGroupAnnoyances": { + "message": "Ջղայնացնող տարրեր", + "description": "Filter lists section name" + }, + "3pGroupMultipurpose": { + "message": "Բազմանպատակային", + "description": "Filter lists section name" + }, + "3pGroupRegions": { + "message": "Տարածաշրջաններ, լեզուներ", + "description": "Filter lists section name" + }, + "3pGroupCustom": { + "message": "Օգտվողային", + "description": "Filter lists section name" + }, + "3pImport": { + "message": "Ներմուծել...", + "description": "The label for the checkbox used to import external filter lists" + }, + "3pExternalListsHint": { + "message": "Մեկ URL մեկ տողում։ Անվավեր URL֊ներն անտեսվելու են առանց նախազգուշացման։", + "description": "Short information about how to use the textarea to import external filter lists by URL" + }, + "3pExternalListObsolete": { + "message": "Ժամկետանց։", + "description": "used as a tooltip for the out-of-date icon beside a list" + }, + "3pViewContent": { + "message": "տեսնել բովանդակությունը", + "description": "used as a tooltip for eye icon beside a list" + }, + "3pLastUpdate": { + "message": "Վերջին թարմացումը՝ {{ago}}։\nԿտտացրեք՝ ստիպողական թարմացման համար։", + "description": "used as a tooltip for the clock icon beside a list" + }, + "3pUpdating": { + "message": "Թարմացվում է...", + "description": "used as a tooltip for the spinner icon beside a list" + }, + "3pNetworkError": { + "message": "Ցանցի սխալի պատճառով թարմացումը տեղի չունեցավ։", + "description": "used as a tooltip for error icon beside a list" + }, + "1pTrustWarning": { + "message": "Մի՛ ավելացրեք զտիչներ անվստահելի աղբյուրներից։", + "description": "Warning against copy-pasting filters from random sources" + }, + "1pEnableMyFiltersLabel": { + "message": "Թուլատրել իմ անհատական ֆիլտրերը", + "description": "Label for the checkbox use to enable/disable 'My filters' list" + }, + "1pTrustMyFiltersLabel": { + "message": "Թույլատրել վստահություն պահանջող հատուկ զտիչները", + "description": "Label for the checkbox use to trust the content of 'My filters' list" + }, + "1pImport": { + "message": "Ներմուծել և հավելել", + "description": "Button in the 'My filters' pane" + }, + "1pExport": { + "message": "Արտահանել", + "description": "Button in the 'My filters' pane" + }, + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" + }, + "1pApplyChanges": { + "message": "Կիրառել փոփոխությունները", + "description": "English: Apply changes" + }, + "rulesPermanentHeader": { + "message": "Մշտական կանոններ", + "description": "header" + }, + "rulesTemporaryHeader": { + "message": "Ժամանակավոր կանոններ", + "description": "header" + }, + "rulesRevert": { + "message": "Հետադարձել", + "description": "This will remove all temporary rules" + }, + "rulesCommit": { + "message": "Հաստատել", + "description": "This will persist temporary rules" + }, + "rulesEdit": { + "message": "Խմբագրել", + "description": "Will enable manual-edit mode (textarea)" + }, + "rulesEditSave": { + "message": "Պահպանել", + "description": "Will save manually-edited content and exit manual-edit mode" + }, + "rulesEditDiscard": { + "message": "Չեղարկել", + "description": "Will discard manually-edited content and exit manual-edit mode" + }, + "rulesImport": { + "message": "Ներմուծել նիշքից...", + "description": "" + }, + "rulesExport": { + "message": "Արտահանել դեպի նիշք", + "description": "Button in the 'My rules' pane" + }, + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" + }, + "rulesHint": { + "message": "Դինամիկական զտման կանոնների Ձեր ցուցակը։", + "description": "English: List of your dynamic filtering rules." + }, + "rulesFormatHint": { + "message": "Կանոնների շարահյուսություն՝ աղբյուր նպատակակետ տեսակ գործողություն (բոլոր փաստաթղթերը)։", + "description": "English: dynamic rule syntax and full documentation." + }, + "rulesSort": { + "message": "Տեսակավորել՝", + "description": "English: label for sort option." + }, + "rulesSortByType": { + "message": "Կանոնի տեսակ", + "description": "English: a sort option for list of rules." + }, + "rulesSortBySource": { + "message": "Աղբյուր", + "description": "English: a sort option for list of rules." + }, + "rulesSortByDestination": { + "message": "Նպատակակետ", + "description": "English: a sort option for list of rules." + }, + "whitelistPrompt": { + "message": "Վստահված կայքերի ցուցակը սահմանում է, թե որ կայքերում uBlock Origin-ը պիտի անջատված լինի։ Մեկ տողում մեկ գրառում։ Անճիշտ կանոններն առանց նախազգուշացման անտեսվելու և մեկնաբանվելու են։", + "description": "A concise description of the 'Trusted sites' pane." + }, + "whitelistImport": { + "message": "Ներմուծել և հավելել", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExport": { + "message": "Արտահանել", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExportFilename": { + "message": "my-ublock-trusted-sites_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" + }, + "whitelistApply": { + "message": "Կիրառել փոփոխությունները", + "description": "English: Apply changes" + }, + "logRequestsHeaderType": { + "message": "Տեսակ", + "description": "English: Type" + }, + "logRequestsHeaderDomain": { + "message": "Տիրույթ", + "description": "English: Domain" + }, + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" + }, + "logRequestsHeaderFilter": { + "message": "Զտիչ", + "description": "English: Filter" + }, + "logAll": { + "message": "Բոլորը", + "description": "Appears in the logger's tab selector" + }, + "logBehindTheScene": { + "message": "Անդրկուլիսյան հարցումներ", + "description": "Pretty name for behind-the-scene network requests" + }, + "loggerCurrentTab": { + "message": "Ընթացիկ ներդիր", + "description": "Appears in the logger's tab selector" + }, + "loggerReloadTip": { + "message": "Վերաբեռնել ներդիրի բովանդակությունը", + "description": "Tooltip for the reload button in the logger page" + }, + "loggerDomInspectorTip": { + "message": "Միաց./Անջատել DOM-տեսուչը", + "description": "Tooltip for the DOM inspector button in the logger page" + }, + "loggerPopupPanelTip": { + "message": "Միաց./Անջատել ելնող վահանակը", + "description": "Tooltip for the popup panel button in the logger page" + }, + "loggerInfoTip": { + "message": "uBlock Origin վիքի. Մատյան", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Մաքրել մատյանը", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Դադարեցնել մատյանավորումը (մերժել բոլոր մուտքային տվյալները)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Վերսկսել մատյանավորումը", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Միաց./Անջ. մատյանի զտումը", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "մատյանի գրառումների զտում", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Մատյանի զտման ընտրանքներ", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Ոչ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "արգելափակված", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "թույլատրված", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "փոփոխված", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "1-ին կողմ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "3-րդ կողմ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Մանրամասներ", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Զտիչ", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Զտիչների ցանկ", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Կանոն", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Համատեքստ", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Արմատային համատեքստ", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Պատկանելություն", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Տեսակ", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL-ի կանոն", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Համատեքստ՝", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Տեսակ՝", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Ստատիկ զտիչ", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} {{type}} ցանցային հարցումները,{{br}}որոնց URL-հասցեներն համընկնում են {{url}} {{br}}և որոնք ծագում են {{origin}},{{br}}{{importance}} կա համապատասխան բացառության կանոն։", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Արգելափակել", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Թույլատրել", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "«{{type}}» տեսակի", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "ցանկացած տեսակի", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "«{{origin}}»-ից", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "ցանկացած տեղից", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "բացառությամբ այն դեպքերի, երբ", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "նույնիսկ եթե", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "{{filter}} ստատիկ զտիչը գտնվել է՝", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Ստատիկ զտիչն անհնար է գտնել ներկայումս միացված զտիչների ցանկերից որևէ մեկում", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Մատյանի գրառումները, որոնք չեն բավարարում ցածում նշված բոլոր երեք պայմաններին, ինքնաշխատ կմերժվեն։", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Պահպանել վերջին {{input}} րոպեի գրառումները", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Պահպանել ոչ ավելի, քան {{input}} բեռնում ամեն մի ներդիրում", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Պահպանել ոչ ավելի, քան {{input}} գրառում ամեն մի ներդիրում", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Ուղղահայացորեն ընդլայնված ռեժիմում օգտագործել {{input}} տող ամեն մի գրառման համար", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Թաքցնել սյունակները՝", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Ժամանակ", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Զտիչ/կանոն", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Համատեքստ", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Պատկանելություն", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Ցանկ", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Աղյուսակ", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Պարզ", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Բացել", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Նոր զեկույց ստեղծել", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Գտնել նման զեկույցներ", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Փաստաթղթեր", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Կարդացեք փաստաթղթերը uBlock/wiki-ում՝ uBlock Origin-ի բոլոր հնարավորությունների մասին իմանալու։", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Հարցեր և աջակցություն", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Հարցերի պատասխանները և օգնության այլ տեսակները մատչելի են Reddit-ի /r/uBlockOrigin բաժնում։", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Զտիչի խնդիրներ/կայքը կոտրված է", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Հաղորդեք որոշակի կայքերի հետ կապված զտիչի խնդիրների մասին uBlockOrigin/uAssets-ի խնդիրների հետագծիչի բաժնում։ Պահանջվում է GitHub հաշիվ։", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Կարևոր է. Խուսափեք uBlock Origin-ի հետ մեկտեղ նման այլ արգելափակիչներ օգտագործելուց, քանի որ դա կարող է որոշակի կայքերում զտիչի հետ կապված խնդիրներ առաջացնել:", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Խորհուրդներ.Համոզվեք, որ Ձեր զտիչների ցուցակները թարմացված են: Մատյանը զտիչների հետ կապված խնդիրների ախտորոշման հիմնական գործիքն է։", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Զեկույց սխալի մասին", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Հաղորդեք uBlock Origin-ի սեփական սխալների մասին uBlockOrigin/uBlock-issue խնդիրների հետագծիչի բաժնում։ Պահանջվում է GitHub հաշիվ։", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Ախտորոշիչ տեղեկություն", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Ցածում տեխնիկական տեղեկություն է, որը կարող է օգտակար լինել, երբ կամավորները փորձում են օգնել Ձեզ լուծել խնդիրը։", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Հաղորդել զտիչի խնդրի մասին", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Կամավորներին կրկնօրինակ զեկույցներով չծանրաբեռնելու համար խնդրում ենք ստուգել, որ խնդիրն արդեն հաղորդված չէ։", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Զտիչների ցուցակները թարմացվում են ամեն օր։ Համոզվեք, որ Ձեր խնդիրը չի լուծվել զտիչների թարմ ցուցակներում։", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Համոզվեք, որ խնդիրը պահպանվում է նույնիսկ խնդրահարույց էջը վերաբեռնելուց հետո։", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Վեբ էջի հասցեն՝", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Վեբ էջը...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Ընտրեք կատեգորիա --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Գովազդ է ցուցադրվում կամ դրա մնացորդներ", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Վրածածկումներ կամ այլ խանգարումներ", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Հայտնաբերվում է uBlock Origin-ը", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Գաղտնիության հետ կապված խնդիրներ", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Անսարքություններ, երբ uBlock Origin-ը միացված է", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Բացում է անցանկալի ներդիրները կամ լուսամուտները", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Նշել վեբ էջը որպես «NSFW» («Աշխատանքի համար անվտանգ չէ»)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Գաղտնիության քաղաքականություն", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Փոփոխությունների մատյան", + "description": "" + }, + "aboutCode": { + "message": "Աղբյուրի կոդ (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Աջակցողներ", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Աղբյուրի կոդ", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Թարգմանություններ", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Զտիչների ցանկեր", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Արտաքին կախվածություններ (GPLv3-համատեղելի)՝", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO-ի սեփական զտիչների ցանկերն ազատորեն տեղաբաշխված են հետևյալ CDN-երում.", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Զտիչների ցանկը թարմացնելիս օգտագործվում է պատահականորեն ընտրված CDN", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Պահուստավորել նիշքում...", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "ublock-իմ-պահուստ_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Վերականգնել նիշքից...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Վերականգնել լռելյայն կարգավորումները...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Ընթացիկ կարգավորումները կփոխարինվեն տվյալներով {{time}}-ին ստեղծված պահուստային պատճենից, և uBlock₀-ը կվերագործարկվի։\n\nՓոխարինե՞լ առկա բոլոր կարգավորումները պահուստավորված տվյալներով։", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Տվյալները չեն կարող ընթերցվել կամ անվավեր են", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Ձեր բոլոր կարգավորումները կջնջվեն, uBlock₀֊ը կվերագործարկվի։\n\nՎերականգնե՞լ լռելյայն կարգավորումները։", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Ցանցի սխալ՝ {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Բաժանորդագրվել", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "րոպե առաջ", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} րոպե առաջ", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "ժամ առաջ", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} ժամ առաջ", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "օր առաջ", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} օր առաջ", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Ցույց տալ կառավահանը", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Ցույց տալ մատյանը", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "անջատված է", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Էջն արգելաբացվեց", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin֊ը կանխել է հետևյալ էջի բեռնումը՝", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Հետևյալ զտիչի պատճառով՝", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "առանց չափանիշների", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Գտնվել է այստեղ՝", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Հետ", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Փակել այս լուսամուտը", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Այլևս չզգուշացնե՛լ ինձ այս կայքի մասին", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Անջատեք խիստ արգելափակումը {{hostname}}-ի համար", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Առժամապես", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Մշտապես", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Շարունակել", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Արգելափակված կայքը ցանկանում է տեղափոխել Ձեզ ուրիշ կայք։ Եթե ցանկանում եք շարունակել, Դուք անմիջապես կտեղափոխվեք {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Արտահանել առ ամպային պահեստ", + "description": "tooltip" + }, + "cloudPull": { + "message": "Ներմուծել ամպային պահեստից", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Ներմուծել ամպային պահեստից և միաձուլել ընթացիկ կարգավորումների հետ", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Այս սարքի անունը՝", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Ուշադրությո՛ւն։ Փոխեք այս կարգավորումները Ձեր ռիսկով և պատասխանատվությամբ։", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Հաստատել", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Կիրառել", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Հետադարձել", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "բայթ", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Արգելափակել տարրը շրջանակում...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Բաժնեգրվել զտիչների ցանկի...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Ժամանակավորապես թույլ տալ խոշոր մեդիա տարրերը", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Դիտել աղբյուրի կոդը…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Մուտքագրեք դյուրանցում", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Միաց./Անջատել ընդհանուր ոլորումը", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Պատճենել առ սեղմատախտակ", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Ընտրել բոլորը", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Փոխանջատել կոսմետիկ զտումը", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Անջատել JavaScript֊ը", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Արգելափակման թուլացված ռեժիմ", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Պահեստի չափը՝ {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "ԿԲ", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "ՄԲ", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "ԳԲ", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Կտտացրեք՝ բեռնելու համար", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Սխալներ՝ {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Չհաջողվեց կատարել զտումը զննիչի գործարկման ժամանակ։\nՎերաբեռնեք էջը՝ պատշաճ զտումն ապահովելու համար։", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" + } +} diff --git a/src/_locales/id/messages.json b/src/_locales/id/messages.json index 1e55e38319efb..ef6d9659b3474 100644 --- a/src/_locales/id/messages.json +++ b/src/_locales/id/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Akhirnya, pemblokir iklan yang efisien. Ringan penggunaan CPU dan memori.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Akhirnya, pemblokir iklan yang efisien. Ringan penggunaan CPU dan memori.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Dasbor", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Dasbor", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Pengaturan", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Peringatan! Anda memiliki ubahan yang belum disimpan", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Filter Pihak ke-3", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Tinggal", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Filter Saya", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Abaikan", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Aturan Saya", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Pengaturan", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Daftar Putih", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Daftar Filter", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Pencatat Log", - "description":"Title for the logger window" + "1pPageName": { + "message": "Filter Saya", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Tentang", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Aturan Saya", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Klik: nonfungsi\/fungsikan uBlock₀ untuk situs ini.\n\nCtrl+klik: nonfungsikan uBlock₀ hanya di halaman ini.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Situs Terpercaya", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"permintaan diblokir", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Pintasan", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"di laman ini", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Pencatat Log", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} atau {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Tentang", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"sejak dipasang", - "description":"English: since install" + "supportPageName": { + "message": "Dukungan", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"atau", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Penampil aset", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Klik untuk membuka dasbor", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Pengaturan lanjutan", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Memasuki mode pemilihan elemen", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Klik: nonaktif/aktifkan uBlock₀ untuk situs ini.\n\nCtrl+klik: nonaktifkan uBlock₀ hanya di laman ini.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Buka pencatat log", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Klik untuk menonaktifkan uBlock₀ pada situs ini.\n\nCtrl+klik untuk menonaktifkan uBlock₀ hanya di laman ini.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Alihkan pemblokiran semua popup untuk situs ini", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Klik untuk mengaktifkan uBlock₀ pada situs ini.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Aktifkan\/Nonaktifkan pemblokiran elemen media besar untuk situs ini", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "permintaan diblokir", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Alihkan penyaringan tampilan untuk situs ini", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "di laman ini", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Jungkit pemblokiran fon pihak ketiga untuk situs ini", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} atau {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Aturan global: kolom ini untuk aturan yang diterapkan ke semua situs.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "sejak dipasang", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Aturan lokal: kolom ini untuk aturan yang diterapkan ke situs yang sedang dikunjungi saja.\nAturan lokal menimpa aturan global.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "atau", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Klik untuk membuat ubahan Anda permanen.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Diblokir di laman ini", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Klik untuk membatalkan ubahan Anda.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Diblokir sejak dipasang", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"semua", - "description":"" + "popupDomainsConnected_v2": { + "message": "Domain terhubung", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"gambar", - "description":"" + "popupTipDashboard": { + "message": "Buka dasbor", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"pihak ketiga", - "description":"" + "popupTipZapper": { + "message": "Memasuki mode penghapus elemen", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"css\/gambar pihak ketiga", - "description":"" + "popupTipPicker": { + "message": "Memasuki mode pemilihan elemen", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"skrip inline", - "description":"" + "popupTipLog": { + "message": "Buka pencatat log", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"skrip pihak pertama", - "description":"" + "popupTipReport": { + "message": "Laporkan masalah di situs web ini", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"skrip pihak ketiga", - "description":"" + "popupTipNoPopups": { + "message": "Alihkan pemblokiran semua popup untuk situs ini", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"frame pihak ketiga", - "description":"" + "popupTipNoPopups1": { + "message": "Klik untuk memblokir semua popup pada situs ini", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"domain terhubung", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Klik untuk tidak lagi memblokir semua popup pada situs ini", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} dari {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Aktifkan/Nonaktifkan pemblokiran elemen media besar untuk situs ini", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Buat", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Klik untuk memblokir elemen media berukuran besar pada situs ini", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Pilih", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Klik untuk tidak lagi memblokir elemen media berukuran besar pada situs ini", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Keluar", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Aktif/Nonaktifkan filter tampilan untuk situs ini", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Pratinjau", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Klik untuk menonaktifkan filter tampilan pada situs ini", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Filter jaringan", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Klik untuk mengaktifkan filter tampilan pada situs ini", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Filter tampilan", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Aktif/Nonaktifkan pemblokiran fon eksternal untuk situs ini", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Klik, Ctrl-klik", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Klik untuk memblokir fon eksternal pada situs ini", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Blok elemen", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Klik untuk tidak lagi memblokir fon eksternal pada situs ini", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Sembunyikan tempat elemen yang diblokir", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Klik untuk menonaktifkan total JavaScript di situs ini", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Tampilkan jumlah permintaan yang diblokir pada ikon", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Klik untuk tidak lagi menonaktifkan total JavaScript di situs ini", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Nonaktifkan tip alat", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Jendela pop-up", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Pergunakan menu konteks jika sesuai", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Elemen media besar", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Ramah buta warna", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Filter tampilan", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Fungsikan dukungan penyimpanan awan", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Fon eksternal", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Saya pengguna tingkat lanjut (Wajib dibaca<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Nonfungsikan pra-ambil (untuk mencegah sambungan apapun untuk permintaan jaringan yang diblokir)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Lebih banyak", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Nonfungsikan pengauditan pranala", - "description":"English: " + "popupLessButton_v2": { + "message": "Lebih sedikit", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Cegah WebRTC membocorkan alamat IP lokal", - "description":"English: " + "popupTipGlobalRules": { + "message": "Aturan global: kolom ini untuk aturan yang diterapkan ke semua situs.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Perilaku bawaan", - "description":"" + "popupTipLocalRules": { + "message": "Aturan lokal: kolom ini untuk aturan yang diterapkan ke situs yang sedang dikunjungi saja.\nAturan lokal menimpa aturan global.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Perilaku bawaan ini bisa ditimpa pada masing-masing aturan situs", - "description":"" + "popupTipSaveRules": { + "message": "Klik untuk membuat ubahan Anda permanen.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Nonfungsikan filter tampilan", - "description":"" + "popupTipRevertRules": { + "message": "Klik untuk membatalkan ubahan Anda.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Blokir elemen media yang lebih besar dari {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "semua", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blokir fon rajuh", - "description":"" + "popupImageRulePrompt": { + "message": "gambar", + "description": "" }, - "settingsStorageUsed":{ - "message":"Penyimpanan terpakai: {{value}} bita", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "pihak ketiga", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Pemulihan terakhir:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "CSS/gambar pihak ke-3", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Pencadangan terakhir:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "skrip inline", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} filter jaringan + {{cosmeticFilterCount}} filter tampilan dari:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "skrip pihak pertama", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} digunakan dari {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "skrip pihak ketiga", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Pembaruan otomatis daftar filter.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "frame pihak ketiga", + "description": "" }, - "3pUpdateNow":{ - "message":"Perbarui sekarang", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "domain terhubung", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Bersihkan semua tembolok", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} dari {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Uraikan dan paksa jalankan filter tampilan.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Versi", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Opsi ini memfungsikan penguraian dan memaksa-jalankan filter “penyembunyian elemen” yang kompatibel dengan Adblock Plus<\/a>. Filter ini pada dasarnya hanya sekedar penyaring tampilan, berfungsi untuk menyembunyikan elemen di halaman web yang dianggap sebagai gangguan visual, dan tidak dapat diblokir oleh filter berbasis permintaan jaringan.<\/p>

      Memfungsikan fitur ini akan meningkatkan penggunaan memori uBlock₀<\/i>.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "skrip", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Abaikan filter tampilan generik", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "frame", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Filter tampilan generik adalah filter tampilan yang dibuat untuk diterapkan pada semua situs web.

      Meskipun dikelola secara efisien oleh uBlock₀, filter tampilan generik masih dapat menyebabkan peningkatan overhead memori ram dan CPU pada beberapa halaman web, terutama untuk halaman berukuran besar dan jarang diperbarui dalam waktu lama.

      Mengaktifkan opsi ini akan menghilangkan peningkatan overhead memori ram dan CPU pada halaman web akibat diterapkannya filter tampilan generik, dan juga mengurangi penggunaan memori ram uBlock₀ itu sendiri.

      Direkomendasikan untuk mengaktifkan opsi ini pada perangkat dengan ram kecil atau kekuatan CPU yang lemah.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Buat", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Daftar host yang diblokir", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Pilih", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Terapkan perubahan", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Keluar", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Iklan", - "description":"English: Ads" + "pickerPreview": { + "message": "Pratinjau", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Privasi", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Filter jaringan", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Domain malware", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Filter tampilan", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Sosial", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Klik, Ctrl-klik", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Serbaguna", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Blokir elemen...", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Wilayah, bahasa", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Sembunyikan wadah elemen yang diblokir", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Tersesuai", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Tampilkan jumlah permintaan yang diblokir pada ikon", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Satu URL per baris. Baris yang diawali dengan ‘!’ akan diabaikan. URL yang tidak valid akan diabaikan tanpa peringatan.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Nonaktifkan tip alat", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Uraikan", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Pergunakan menu konteks jika sesuai", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"bersihkan tembolok", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Ramah buta warna", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"versi baru tersedia", - "description":"English: new version available" + "settingsAppearance": { + "message": "Tampilan", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"usang", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Tema", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Pembaruan terakhir: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Warna aksen khusus", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Satu filter per baris. Filter dapat berupa nama host, atau filter yang kompatibel dengan Adblock Plus. Baris yang diawali dengan ‘!’ akan diabaikan.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Aktifkan dukungan penyimpanan awan", + "description": "" }, - "1pImport":{ - "message":"Impor dan tambahkan", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Saya pengguna tingkat lanjut", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Ekspor", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Nonaktifkan pra-ambil (untuk mencegah sambungan apapun untuk permintaan jaringan yang diblokir)", + "description": "English: " }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Nonaktifkan pengauditan pranala", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Terapkan perubahan", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Cegah WebRTC membocorkan alamat IP lokal", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Aturan permanen", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Perilaku bawaan", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Aturan sementara", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Perilaku bawaan ini bisa ditimpa pada masing-masing aturan situs", + "description": "" }, - "rulesRevert":{ - "message":"Urungkan", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Nonaktifkan filter tampilan", + "description": "" }, - "rulesCommit":{ - "message":"Tetapkan", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Blokir elemen media yang lebih besar dari {{input}} KB", + "description": "" }, - "rulesEdit":{ - "message":"Sunting", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Blokir fon eksternal", + "description": "" }, - "rulesEditSave":{ - "message":"Simpan", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Nonaktifkan JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Batal", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Blokir laporan CSP", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Impor dari berkas...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Ungkap nama kanonis", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Ekspor ke berkas", - "description":"" + "settingsAdvanced": { + "message": "Tingkat lanjut", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Fitur ditujukan untuk pengguna tingkat lanjut.", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Daftar aturan filter dinamis anda.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "pengaturan lanjutan", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Aturan sintaksis: sumber tujuan jenis tindakan<\/code> (dokumentasi lengkap<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Pemulihan terakhir:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Daftar nama host yang mana uBlock₀ akan dinonfungsikan. Satu entri per baris. Nama host yang tidak valid akan diabaikan tanpa peringatan.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Pencadangan terakhir:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Impor dan tambahkan", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} filter jaringan + {{cosmeticFilterCount}} filter tampilan dari:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Ekspor", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} digunakan dari {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Otomatis perbarui daftar filter", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Terapkan perubahan", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Perbarui sekarang", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Jenis", - "description":"English: Type" + "3pPurgeAll": { + "message": "Bersihkan semua tembolok", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Domain", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Urai dan paksa terapkan filter tampilan", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Filter tampilan berfungsi untuk menyembunyikan elemen di halaman web yang dianggap sebagai gangguan visual, dan tidak bisa diblokir oleh filter berbasis permintaan jaringan.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Abaikan filter tampilan generik", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Semua", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Filter tampilan generik adalah filter tampilan yang dibuat untuk diterapkan pada semua situs web. Mengaktifkan opsi ini akan menghilangkan peningkatan overhead memori ram dan CPU pada halaman web akibat diterapkannya filter tampilan generik.\n\nDirekomendasikan untuk mengaktifkan opsi ini pada perangkat dengan performa rendah.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Di balik layar", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Tunda aktivitas jaringan sampai semua daftar filter dimuat", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"saring entri catatan", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Daftar host yang diblokir", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Jumlah maximum entri catatan", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Terapkan perubahan", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Konteks:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Bawaan", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Jenis:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Iklan", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Penyaring URL Dinamis", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Privasi", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Penyaringan statis", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Perlindungan malware, keamanan", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} permintaan jaringan dari {{type}} {{br}}yang alamat URLnya cocok dengan {{url}} {{br}}dan yang berasal dari {{origin}},{{br}}{{importance}} ada pengecualian penyaring yang cocok.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Gawai sosial", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blokir", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Pemberitahuan cookie", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Izinkan", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Gangguan", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"jenis “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Serbaguna", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"semua jenis", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Wilayah, bahasa", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"dari “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Khusus", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"dari manapun", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Impor...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"kecuali ketika", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Satu URL per baris. URL yang tidak valid akan diabaikan tanpa peringatan.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"meskipun", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Sudah usang.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Filter statis {{filter}} ditemukan di dalam:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "lihat konten", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Catatan perubahan", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Pembaruan terakhir: {{ago}}.\nKlik untuk memaksa memperbarui.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Memperbarui...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Dukungan", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Galat jaringan mencegah sumber daya diperbarui.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Kode sumber (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Jangan tambah filter dari sumber yang tidak terpercaya.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Kontributor", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Aktifkan filter kustom saya", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Cadangkan ke berkas", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Izinkan filter kustom yang memerlukan kepercayaan", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Impor dan tambahkan…", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Pulihkan dari berkas...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Ekspor…", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Kembalikan ke pengaturan bawaan...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Semua pengaturan anda akan ditimpa dengan data yang dicadangkan pada {{time}}, dan uBlock₀ akan memulai ulang.\n\nTimpa semua pengaturan yang ada dengan data cadangan?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Terapkan perubahan", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Data tidak dapat dibaca atau tidak valid", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Aturan permanen", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Semua pengaturan anda akan dihapus, dan uBlock₀ akan memulai ulang.\n\nKembalikan uBlock₀ ke pengaturan bawaan?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Aturan sementara", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Tidak dapat terhubung ke {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Urungkan", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Tambahkan URL berikut ke daftar filter tersesuai anda?\n\nJudul: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Tetapkan", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"semenit yang lalu", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Sunting", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} menit yang lalu", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Simpan", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"sejam yang lalu", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Batal", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} jam yang lalu", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Impor dari berkas...", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"sehari yang lalu", - "description":"English: a day ago" + "rulesExport": { + "message": "Ekspor ke berkas…", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} hari yang lalu", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Tampilkan Dasbor", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Daftar aturan filter dinamis Anda.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Tampilkan Pencatat", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Aturan sintaksis: sumber tujuan jenis tindakan (dokumentasi lengkap).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"mati", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Urutkan:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin telah mencegah halaman berikut dimuat:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Tipe aturan", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Disebabkan oleh filter berikut", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Sumber", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"tanpa parameter", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Tujuan", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Ditemukan di:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Arahan situs tepercaya menentukan halaman web mana yang uBlock Origin harus dinonaktifkan. Satu entri per baris.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Kembali", - "description":"English: Go back" + "whitelistImport": { + "message": "Impor dan tambahkan…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Tutup jendela ini", - "description":"English: Close this window" + "whitelistExport": { + "message": "Ekspor…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Nonfungsikan pemblokiran ketat untuk {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "my-ublock-trusted-sites_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Sementara", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Terapkan perubahan", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Permanen", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Jenis", + "description": "English: Type" }, - "cloudPush":{ - "message":"Ekspor ke penyimpanan awan", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Domain", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Impor dari penyimpanan awan", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Impor dari penyimpanan awan dan gabungkan dengan pengaturan saat ini", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Semua", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Nama perangkat ini:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Di balik layar", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Kirim", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Tab saat ini", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Urungkan", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Muat ulang konten tab", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"byte", - "description":"" + "loggerDomInspectorTip": { + "message": "Aktif/Nonaktifkan inspeksi DOM", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Sementara izinkan elemen media besar", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Aktif/Nonaktifkan panel popup", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"Entri ini harus menjadi yang terakhir", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: Pencatat log", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Kosongkan pencatat log", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Jeda pencatat log (buang semua data masuk)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Lanjutkan pencatat log", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Aktif/Nonaktifkan penyaringan pencatat log", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filter konten pencatat log", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Opsi filter pencatat log", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Tidak", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "diblokir", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "diizinkan", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "diubah", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "pihak ke-1", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "pihak ke-3", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Detail", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filter", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Daftar filter", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Aturan", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Konteks", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Konteks induk", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Hubungan", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Jenis", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Aturan URL", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Konteks:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Jenis:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Filter statis", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} permintaan jaringan dari {{type}} {{br}}yang alamat URLnya cocok dengan {{url}} {{br}}dan yang berasal dari {{origin}},{{br}}{{importance}} ada pengecualian penyaring yang cocok.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Blokir", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Izinkan", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "jenis “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "semua jenis", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "dari “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "dari manapun", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "kecuali ketika", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "meskipun", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Filter statis {{filter}} ditemukan di dalam:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Filter statis tidak dapat ditemukan di semua daftar filter yang aktif saat ini", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Entri pencatat log yang tidak memenuhi ketiga kondisi di bawah akan otomatis dibuang:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Pertahankan entri sejak {{input}} menit terakhir", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Pertahankan maksimal {{input}} pemuatan laman per tab", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Pertahankan maksimal {{input}} entri per tab", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Gunakan {{input}} baris per entri dalam mode perluasan vertikal", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Sembunyikan kolom:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Waktu", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filter/aturan", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Konteks", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Relasi", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Daftar", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tabel", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Biasa", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Buka", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Buat laporan baru di Github", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Temukan laporan serupa di Github", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Dokumentasi", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Baca dokumentasi di uBlock/wiki untuk mempelajari semua fitur uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Pertanyaan dan dukungan", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Jawaban pertanyaan dan dukungan bantuan lainnya tersedia di subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Masalah filter/situs web rusak", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Laporkan masalah filter pada situs web ke pelacak masalah uBlockOrigin/uAssets. Membutuhkan akun GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Penting: Hindari menggunakan pemblokir sejenis bersamaan dengan uBlock Origin, karena mungkin akan mengakibatkan terjadinya masalah filter pada situs web tertentu.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tips: Pastikan filter Anda selalu yang terbaru. Pencatat log adalah utilitas utama untuk mendiagnosis masalah yang terkait dengan filter.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Laporan bug", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Laporkan masalah ekstensi uBlock Origin ke pelacak masalah uBlockOrigin/uBlock-issue. Membutuhkan akun GitHub.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Informasi penyelesaian masalah", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Di bawah ini adalah informasi teknis yang mungkin berguna saat sukarelawan berusaha membantu memecahkan masalah Anda.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Laporkan masalah filter", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Untuk menghindari membebani sukarelawan dengan laporan duplikat, harap verifikasi bahwa masalah tersebut belum dilaporkan.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Daftar filter diperbarui setiap hari. Pastikan masalah Anda belum teratasi dalam daftar filter terbaru.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verifikasi bahwa masalah masih ada setelah memuat ulang halaman web yang bermasalah.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Alamat laman web:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Laman web…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pilih entri --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Menampilkan iklan atau sejenisnya", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Memiliki overlay atau gangguan lainnya", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Mendeteksi uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Memiliki masalah terkait privasi", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Rusak saat uBlock Origin aktif", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Membuka tab atau jendela yang tidak diinginkan", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Mengarah ke perangkat lunak jahat, pengelabuan", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Beri label halaman web sebagai “TAUSB” (“Tidak Aman Untuk Saat Bekerja”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Kebijakan privasi", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Catatan perubahan", + "description": "" + }, + "aboutCode": { + "message": "Kode sumber (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Kontributor", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Kode sumber", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Terjemahan", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Daftar filter", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Dependensi eksternal (kompatibel GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Daftar filter bawaan uBO dihosting secara gratis di CDN berikut:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "CDN yang dipilih secara acak digunakan saat daftar filter perlu diperbarui", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Cadangkan ke berkas…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Pulihkan dari berkas...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Kembalikan ke pengaturan bawaan...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Semua pengaturan Anda akan ditimpa dengan data yang dicadangkan pada {{time}}, dan uBlock₀ akan memulai ulang.\n\nTimpa semua pengaturan yang ada dengan data cadangan?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Data tidak dapat dibaca atau tidak valid", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Semua pengaturan Anda akan dihapus, dan uBlock₀ akan memulai ulang.\n\nKembalikan uBlock₀ ke pengaturan bawaan?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Galat jaringan: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Berlangganan", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "semenit yang lalu", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} menit yang lalu", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "sejam yang lalu", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} jam yang lalu", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "sehari yang lalu", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} hari yang lalu", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Tampilkan Dasbor", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Tampilkan Pencatat Log", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "mati", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Halaman diblokir", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin telah mencegah halaman berikut dimuat:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Disebabkan oleh filter berikut", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "tanpa parameter", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Ditemukan di:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Kembali", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Tutup jendela ini", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Jangan ingatkan saya lagi tentang situs ini", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Nonaktifkan pemblokiran ketat untuk {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Sementara", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Permanen", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Lanjutkan", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Halaman yang terblokir ingin dialihkan ke situs lain. Jika Anda memilih untuk melanjutkan, Anda akan langsung menuju ke: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Penyebab", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Berbahaya", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Pelacak", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Tidak bisa dipercaya", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Ekspor ke penyimpanan awan", + "description": "tooltip" + }, + "cloudPull": { + "message": "Impor dari penyimpanan awan", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Impor dari penyimpanan awan dan gabungkan dengan pengaturan saat ini", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Nama perangkat ini:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Peringatan! Ubah pengaturan lanjutan berikut dengan risiko Anda sendiri.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Kirim", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Terapkan perubahan", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Urungkan", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "byte", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Blokir elemen di dalam frame...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Berlangganan daftar filter...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Sementara izinkan elemen media besar", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Lihat kode sumber…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Ketik pintasan", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Aktif/Nonaktifkan bilah gulir", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Salin ke papan klip", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Pilih semua", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Aktif/Nonaktifkan filter tampilan", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Aktif/Nonaktifkan JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Perlonggar mode pemblokiran", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Penyimpanan terpakai: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Klik untuk memuat", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Galat: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Filter tidak dapat bekerja dengan baik saat peramban dimulai.\nMuat ulang halaman agar filter dapat bekerja dengan baik.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Entri ini harus menjadi yang terakhir", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/it/messages.json b/src/_locales/it/messages.json index a419f4d14964c..e5c14c07155f2 100644 --- a/src/_locales/it/messages.json +++ b/src/_locales/it/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Finalmente, un blocker efficiente. Leggero sulla CPU e sulla memoria.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Finalmente, un blocker efficiente. Leggero sulla CPU e sulla memoria.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Dashboard", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Dashboard", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Opzioni", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Attenzione! Ci sono delle modifiche non ancora salvate", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Lista dei filtri", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Attendi", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"I miei filtri", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ignora", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Le mie regole", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Opzioni", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Whitelist", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Liste dei filtri", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Cronologia richieste di rete", - "description":"Title for the logger window" + "1pPageName": { + "message": "I miei filtri", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Info", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Le mie regole", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Click: disabilita\/abilita uBlock₀ per questo sito.\n\nCtrl+click: disabilita uBlock₀ solo per questa pagina.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Siti affidabili", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"richieste bloccate", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Scorciatoie", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"in questa pagina", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Cronologia richieste di rete", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} o {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Info", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"dall'installazione", - "description":"English: since install" + "supportPageName": { + "message": "Supporto", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"o", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Visualizzatore di risorse", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Clicca per aprire il dashboard", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Impostazioni avanzate", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Accedi alla modalità seleziona elemento", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Click: disabilita/abilita uBlock₀ per questo sito.\n\nCtrl+click: disabilita uBlock₀ solo per questa pagina.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Vai al registro delle richieste", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Click per disabilitare uBlock₀ per questo sito.\n\nCtrl+click per disabilitare uBlock₀ solo su questa pagina.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Disabilita\/abilita il blocco di tutti i popup per questo sito", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Clicca per abilitare uBlock₀ per questo sito.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Abilita\/disabilita il blocco di elementi multimediali di grandi dimensioni per questo sito", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "richieste bloccate", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Disabilita\/abilita filtraggio cosmetico per questo sito", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "in questa pagina", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Attiva o disattiva il blocco dei font remoti per questo sito", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} o {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Regole globali: questa colonna è per le regole che si applicano a tutti i siti.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "dall'installazione", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Regole locali: questa colonna è per le regole che si applicano solo al sito corrente.\nLe regole locali hanno la precedenza su quelle globali.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "o", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Clicca per rendere le tue scelte permanenti.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Bloccati su questa pagina", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Clicca per annullare i cambiamenti.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Bloccati dall'installazione", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"Tutto", - "description":"" + "popupDomainsConnected_v2": { + "message": "Domini connessi", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"Immagini", - "description":"" + "popupTipDashboard": { + "message": "Apri la dashboard", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"Di terze parti", - "description":"" + "popupTipZapper": { + "message": "Accedi alla modalità elimina elemento", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"Immagini\/CSS di terze parti", - "description":"" + "popupTipPicker": { + "message": "Accedi alla modalità seleziona elemento", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"Script inline", - "description":"" + "popupTipLog": { + "message": "Vai al registro delle richieste", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"Script di proprietà del sito", - "description":"" + "popupTipReport": { + "message": "Segnala un problema su questo sito", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"Script di terze parti", - "description":"" + "popupTipNoPopups": { + "message": "Disabilita/abilita il blocco di tutti i popup per questo sito", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"Frame di terze parti", - "description":"" + "popupTipNoPopups1": { + "message": "Clicca per bloccare tutti i popup in questo sito", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"domini contattati", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Clicca per sbloccare tutti i popup in questo sito", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} di {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Abilita/disabilita il blocco di elementi multimediali di grandi dimensioni per questo sito", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Crea", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Clicca per bloccare elementi multimediali di grandi dimensioni in questo sito", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Seleziona", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Clicca per sbloccare elementi multimediali di grandi dimensioni in questo sito", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Esci", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Disabilita/abilita filtraggio cosmetico per questo sito", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Anteprima", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Clicca per disattivare il filtraggio cosmetico in questo sito", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Filtri di rete", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Clicca per attivare il filtraggio cosmetico in questo sito", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Filtri cosmetici", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Attiva o disattiva il blocco dei font remoti per questo sito", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Click, Ctrl-click", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Clicca per bloccare i font remoti in questo sito", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Blocca elemento", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Clicca per sbloccare i font remoti in questo sito", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Nascondi lo spazio riservato agli elementi bloccati", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Clicca per disattivare JavaScript su questo sito", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Visualizza il numero degli elementi bloccati sull'icona", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Clicca per non disabilitare più JavaScript su questo sito", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Disabilita suggerimenti", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Finestre pop-up", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Usa il menu contestuale quando è possibile", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Elementi multimediali di grandi dimensioni", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Adatto ai daltonici", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Filtraggio cosmetico", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Abilita supporto salvataggio nel cloud", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Caratteri remoti", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Sono un utente avanzato (Lettura obbligatoria<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Disattiva pre-fetching (per evitare qualsiasi connessione per le richieste di rete bloccate)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Altro", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Disabilita la revisione degli hyperlink", - "description":"English: " + "popupLessButton_v2": { + "message": "Meno", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Impedisci a WebRTC di rivelare l'indirizzo IP locale", - "description":"English: " + "popupTipGlobalRules": { + "message": "Regole globali: questa colonna è per le regole che si applicano a tutti i siti.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Comportamento predefinito", - "description":"" + "popupTipLocalRules": { + "message": "Regole locali: questa colonna è per le regole che si applicano solo al sito corrente.\nLe regole locali hanno la precedenza su quelle globali.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Questi comportamenti predefiniti possono essere modificati per ogni singolo sito", - "description":"" + "popupTipSaveRules": { + "message": "Clicca per rendere le tue scelte permanenti.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Disabilita filtraggio cosmetico", - "description":"" + "popupTipRevertRules": { + "message": "Clicca per annullare i cambiamenti.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Blocca elementi multimediali di dimensioni maggiori di {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "Tutto", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blocca font remoti", - "description":"" + "popupImageRulePrompt": { + "message": "Immagini", + "description": "" }, - "settingsStorageUsed":{ - "message":"Spazio utilizzato: {{value}} byte", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "Di terze parti", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Ultimo ripristino:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "Immagini/CSS di terze parti", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Ultimo backup:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "Script inline", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} filtri di rete + {{cosmeticFilterCount}} filtri cosmetici da:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "Script di proprietà del sito", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} usati su {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "Script di terze parti", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Aggiornamento automatico liste.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "Frame di terze parti", + "description": "" }, - "3pUpdateNow":{ - "message":"Aggiorna ora", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "domini connessi", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Elimina tutte le cache", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} di {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Utilizza Adblock+ element hiding filters.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Versione", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Questa opzione abilita i filtri di Adblock Plus-compatible “element hiding” filters<\/a>. Questi filtri sono essenzialmente estetici, servono a nascondere elementi fastidiosi in una pagina web , e che non possono essere bloccati normalmente.<\/p>

      Questa funziona aumenta l'uso della memoria da parte di uBlock<\/i>.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignora filtri cosmetici generici.", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "frame", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      I filtri cosmetici generici sono i filtri cosmetici intesi per essere applicati a tutti i siti Web.

      Benché questi siano gestiti in modo efficiente da uBlock₀, i filtri cosmetici generici potrebbero contribuire a un carico elevato in termini di memoria e CPU su alcune pagine Web, in particolare quelle di notevoli dimensioni e a lunga scadenza.

      L'attivazione di quest'opzione eliminerà il carico elevato in termini di memoria e CPU aggiunto alle pagine Web in conseguenza della gestione dei filtri cosmetici generici, e inoltre ridurrà l'impatto sulla memoria di uBlock₀ stesso.

      È raccomandato abilitare quest'opzione sui dispositivi meno potenti.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Crea", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lista degli hosts bloccati", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Seleziona", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Salva i cambiamenti", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Esci", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Pubblicità", - "description":"English: Ads" + "pickerPreview": { + "message": "Anteprima", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Privacy", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Filtri di rete", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Domini con Malware", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Filtri cosmetici", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Social", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Click, Ctrl-click", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Multiuso", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Blocca elemento...", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Regioni, lingue", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Nascondi lo spazio riservato agli elementi bloccati", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Personalizzate", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Visualizza il numero degli elementi bloccati sull'icona", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Un URL per ogni riga. Ogni riga che comincia con ‘!’ verrà ignorata. URL non validi verranno silenziosamente ignorati.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Disabilita suggerimenti", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Analizza", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Usa il menu contestuale quando è possibile", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"Elimina Cache", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Adatto ai daltonici", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"una nuova versione è disponibile", - "description":"English: new version available" + "settingsAppearance": { + "message": "Aspetto", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"obsoleto", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Tema", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Ultimo aggiornamento: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Colore di risalto personalizzato", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Un filtro per ogni riga. Un filtro può essere un hostname, o un filtro compatibile con Adblock Plus. Ogni riga che comincia con ‘!’ verrà ignorata.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Abilita supporto salvataggio nel cloud", + "description": "" }, - "1pImport":{ - "message":"Importa e aggiungi", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Sono un utente avanzato (Lettura obbligatoria)", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Esporta", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Disattiva pre-fetching (per evitare qualsiasi connessione per le richieste di rete bloccate)", + "description": "English: " }, - "1pExportFilename":{ - "message":"ublock-filtri-statici-personalizzati_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Disattiva la revisione dei collegamenti ipertestuali", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Salva i cambiamenti", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Impedisci a WebRTC di rivelare l'indirizzo IP locale", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Regole permanenti", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Comportamento predefinito", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Regole temporanee", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Questi comportamenti predefiniti possono essere modificati per ogni singolo sito", + "description": "" }, - "rulesRevert":{ - "message":"Ripristina", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Disabilita filtraggio cosmetico", + "description": "" }, - "rulesCommit":{ - "message":"Applica", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Blocca gli elementi multimediali di dimensioni maggiori di {{input}} KB", + "description": "" }, - "rulesEdit":{ - "message":"Modifica", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Blocca font remoti", + "description": "" }, - "rulesEditSave":{ - "message":"Salva", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Disattiva JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Annulla", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Blocca i report CSP", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Importa da file...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Rivela i nomi canonici", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Esporta in file", - "description":"" + "settingsAdvanced": { + "message": "Avanzate", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"ublock-filtri-dinamici-personalizzati_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Funzionalità adatte solo per gli utenti tecnici.", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Lista delle regole di filtraggio dinamiche personalizzate.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "impostazioni avanzate", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Sintassi per le regole: sorgente destinazione tipo azione<\/code> (documentazione completa<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Ultimo ripristino:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Lista dei siti dove uBlock è disattivato. Un sito per ogni riga. Le voci non valide verranno silenziosamente ignorate.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Ultimo backup:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Importa e aggiungi", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} filtri di rete + {{cosmeticFilterCount}} filtri cosmetici da:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Esporta", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} usati su {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Aggiornamento automatico liste.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Salva i cambiamenti", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Aggiorna ora", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Tipo", - "description":"English: Type" + "3pPurgeAll": { + "message": "Elimina tutte le cache", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Dominio", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Analizza e applica i filtri cosmetici", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "\nI filtri cosmetici servono a nascondere gli elementi in una pagina web che sono considerati visivamente fastidiosi e che non possono essere bloccati dai motori di filtraggio basati sulle richieste di rete.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filtro", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignora filtri cosmetici generici.", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Tutte", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

      I filtri cosmetici generici sono i filtri cosmetici intesi per essere applicati a tutti i siti Web.

      Benché questi siano gestiti in modo efficiente da uBlock₀, i filtri cosmetici generici potrebbero contribuire a un carico elevato in termini di memoria e CPU su alcune pagine Web, in particolare quelle di notevoli dimensioni e a lunga scadenza.

      L'attivazione di quest'opzione eliminerà il carico elevato in termini di memoria e CPU aggiunto alle pagine Web in conseguenza della gestione dei filtri cosmetici generici, e inoltre ridurrà l'impatto sulla memoria di uBlock₀ stesso.

      È raccomandato abilitare quest'opzione sui dispositivi meno potenti.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Dietro le quinte", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Sospendi l'attività di rete finché tutte le liste dei filtri sono caricate", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"filtra voci del registro", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Lista degli hosts bloccati", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Numero massimo di voci del registro", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Salva i cambiamenti", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Contesto:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Integrati", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tipo:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Pubblicità", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Filtraggio dinamico dell'URL", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Privacy", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Filtraggio statico", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Protezione dai malware, sicurezza", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} la richiesta di rete di {{type}} {{br}} il cui indirizzo URL corrisponde a {{url}} {{br}}e che proviene da {{origin}},{{br}}{{importance}} c'è una corrispondenza nel filtro delle eccezioni.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Widget dei social", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blocca", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Avvisi sui cookie", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Permetti", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Elementi fastidiosi", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tipo “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Multiuso", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"qualsiasi tipo", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Regioni, lingue", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"da “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Personalizzate", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"da ovunque", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Importa...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"tranne quando", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Un URL per riga. Gli URL non validi saranno silenziosamente ignorati.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"anche se", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Obsoleto.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Filtro statico {{filter}} trovato in:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "visualizza contenuto", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Change log", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Ultimo aggiornamento: {{ago}}.\nClicca per forzare l'aggiornamento.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Aggiornamento in corso...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Supporto", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Un errore di rete ha impedito l'aggiornamento della risorsa.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Codice sorgente (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Non aggiungere filtri da fonti non affidabili.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Collaboratori", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Abilita i miei filtri personalizzati", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Crea file di backup...", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Consenti i filtri personalizzati che richiedono affidabilità", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Importa e aggiungi", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Ripristina dal file...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Esporta", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Riparti da zero...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "ublock-filtri-statici-personalizzati_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Tutte le impostazioni verranno sovrascritte utilizzando i dati di backup del {{time}} e uBlock sarà riavviato.\n\nSovrascrivere tutte le impostazioni esistenti con quelle del backup?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Salva i cambiamenti", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"I dati non possono essere letti o non sono validi", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Regole permanenti", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Verranno cancellate tutte le impostazioni, e uBlock₀ sarà riavviato.\n\nResettare uBlock alle impostazioni di fabbrica?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Regole temporanee", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Impossibile connettersi al {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Ripristina", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Aggiungere il seguente URL alla tua lista dei filtri personalizzata?\n\nTitolo: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Applica", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"un minuto fa", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Modifica", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minuti fa", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Salva", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"un'ora fa", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Annulla", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} ore fa", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Importa da file...", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"un giorno fa", - "description":"English: a day ago" + "rulesExport": { + "message": "Esporta in file", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} giorni fa", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "ublock-filtri-dinamici-personalizzati_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Visualizza Dashboard", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Lista delle regole di filtraggio dinamiche personalizzate.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Visualizza registro richieste di rete", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Sintassi per le regole: sorgente destinazione tipo azione (documentazione completa).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"disattivato", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Ordina:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock₀ ha impedito alla seguente pagina di caricarsi:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Tipo regola", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"A causa del seguente filtro", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Fonte", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"senza parametri", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Destinazione", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Trovato in:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Lista dei siti dove uBlock è disattivato. Un sito per ogni riga. Le voci non valide verranno silenziosamente ignorate.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Torna indietro", - "description":"English: Go back" + "whitelistImport": { + "message": "Importa e aggiungi", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Chiudi questa finestra", - "description":"English: Close this window" + "whitelistExport": { + "message": "Esporta", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Disabilita blocco assoluto per {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "ublock-whitelist_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Temporaneamente", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Salva i cambiamenti", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Permanentemente", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Tipo", + "description": "English: Type" }, - "cloudPush":{ - "message":"Esporta nel cloud", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Dominio", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Importa dal cloud", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Importa da archivio cloud ed unisci con le impostazioni attuali", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filtro", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Tutte", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Nome di questo dispositivo:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Dietro le quinte", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Invia", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Scheda corrente", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Ripristina", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Ricarica il contenuto della scheda", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"byte", - "description":"" + "loggerDomInspectorTip": { + "message": "Attiva o disattiva l'ispettore DOM", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Consenti temporaneamente elementi multimediali di grandi dimensioni", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Attiva o disattiva il pannello popup", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "Wiki di uBlock Origin: Il registro", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Pulisci il registro", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Metti in pausa il registro (scarta tutti i dati in arrivo)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Riattiva il registro", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Attiva o disattiva il filtraggio del registro", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filtra il contenuto del registro", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Opzioni di filtraggio del registro", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Non", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "movimentato", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "bloccato", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "Consentito", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "modificato", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "Dominio attuale", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "Di terze parti", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Dettagli", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filtro", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Elenco dei filtri", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Regola", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Contesto", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Contesto di root", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Parte della richiesta", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Tipo", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Regola dell'URL", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Contesto:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Tipo:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Filtraggio statico", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} la richiesta di rete di {{type}} {{br}} il cui indirizzo URL corrisponde a {{url}} {{br}}e che proviene da {{origin}},{{br}}{{importance}} c'è una corrispondenza nel filtro delle eccezioni.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Blocca", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Permetti", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "tipo “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "qualsiasi tipo", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "da “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "da ovunque", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "tranne quando", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "anche se", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Filtro statico {{filter}} trovato in:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Non è stato possibile trovare il filtro statico in alcuna delle liste dei filtri attualmente abilitate", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Le voci del registro che non soddisfano tutte e tre le condizioni seguenti verranno automaticamente scartate:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Mantieni le voci degli ultimi {{input}} minuti", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Conserva al massimo {{input}} caricamenti di pagina per scheda", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Conserva al massimo {{input}} voci per scheda", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Usa {{input}} righe per voce in modalità espansa verticale", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Nascondi colonne:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Tempo", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filtro/regola", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Contesto", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Parte della richiesta", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Lista", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tabella", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Semplice", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Apri", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Crea una nuova segnalazione", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Trova segnalazioni simili", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Documentazione", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Leggi la documentazione su uBlock/wiki per conoscere tutte le funzionalità di uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Domande e supporto", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Le risposte alle domande e ad altri tipi di supporto sono fornite sul subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Problemi dei filtri/siti malfunzionanti", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Segnala problemi dei filtri con siti specifici al tracciatore di bug uBlockOrigin/uAssets. Richiede un account GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Importante: Evita di utilizzare altre estensioni simili insieme a uBlock Origin, poiché ciò potrebbe causare problemi di filtraggio su specifici siti.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Suggerimenti: Assicurati che le tue liste di filtri siano aggiornate. Il registro è lo strumento principale per diagnosticare i problemi relativi ai filtri.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Segnalazione di errori", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Segnala problemi di uBlock Origin stesso al tracciatore di bug uBlockOrigin/uBlock-issue. Richiede un account GitHub.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Informazioni sulla risoluzione dei problemi", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Di seguito sono riportate informazioni tecniche che potrebbero essere utili quando i volontari cercheranno di aiutarti a risolvere un problema.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Segnala un problema con un filtro", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Per evitare di appesantire i volontari con segnalazioni doppie, verifica che il problema non sia già stato segnalato.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Gli elenchi dei filtri vengono aggiornati quotidianamente. Assicurati che il tuo problema non sia già stato risolto negli elenchi di filtri più recenti.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verifica che il problema sussista ancora dopo aver ricaricato la pagina web problematica.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Indirizzo della pagina web:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "La pagina web...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "Scegli una voce", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Mostra pubblicità o avanzi di pubblicità", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Ha sovrapposizioni o altri fastidi", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Rileva uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Ha problemi relativi alla privacy", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Si rompe quando uBlock Origin è attivato", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Apre schede o finestre indesiderate", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Porta a badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Etichetta la pagina web come “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Informativa sulla privacy", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Registro delle modifiche", + "description": "" + }, + "aboutCode": { + "message": "Codice sorgente (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Collaboratori", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Codice sorgente", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Traduzioni", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Liste filtri", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Dipendenze esterne (GPLv3-compatibili):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Gli elenchi di filtri di uBO sono liberamente ospitati sui seguenti CDN:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Un CDN selezionato a caso verrà utilizzato quando è necessario aggiornare un elenco di filtri", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Crea file di backup...", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Ripristina dal file...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Ripristina le impostazioni predefinite…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Tutte le impostazioni verranno sovrascritte utilizzando i dati di backup del {{time}} e uBlock sarà riavviato.\n\nSovrascrivere tutte le impostazioni esistenti con quelle del backup?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "I dati non possono essere letti o non sono validi", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Verranno cancellate tutte le impostazioni, e uBlock₀ sarà riavviato.\n\nResettare uBlock alle impostazioni di fabbrica?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Errore di rete: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Sottoscrivi", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "un minuto fa", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} minuti fa", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "un'ora fa", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} ore fa", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "un giorno fa", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} giorni fa", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Visualizza Dashboard", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Visualizza registro richieste di rete", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "disattivato", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Pagina bloccata", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock₀ ha impedito alla seguente pagina di caricarsi:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "A causa del seguente filtro", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "senza parametri", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Trovato in:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Torna indietro", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Chiudi questa finestra", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Non avvisarmi di nuovo riguardo questo sito", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Disabilita blocco assoluto per {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Temporaneamente", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Permanentemente", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Procedi", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "La pagina bloccata vuole reindirizzare a un altro sito. Se scegli di procedere, navigherai direttamente a: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Motivo:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Maligno", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Localizzatore", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disdicevole", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Esporta nel cloud", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importa dal cloud", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importa da archivio cloud ed unisci con le impostazioni attuali", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Nome di questo dispositivo:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Attenzione! Modifica queste impostazioni avanzate a tuo rischio e pericolo.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Invia", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Salva i cambiamenti", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Ripristina", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "byte", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Blocca elemento in un frame", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Iscriviti alla lista dei filtri...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Consenti temporaneamente elementi multimediali di grandi dimensioni", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Visualizza il codice sorgente…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Digita una scorciatoia", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Attiva o disattiva il blocco dello scorrimento", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Copia negli appunti", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Seleziona tutto", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Attiva/Disattiva il filtraggio cosmetico", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Attiva o disattiva JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Rilassa la modalità di blocco", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Spazio utilizzato: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Clicca per caricare", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Errori: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Non è stato effettuato correttamente il filtraggio all'avvio del browser.\nRicarica la pagina per garantire un filtraggio adeguato.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/ja/messages.json b/src/_locales/ja/messages.json index f963d53d88100..3feaa8a0e9d7c 100644 --- a/src/_locales/ja/messages.json +++ b/src/_locales/ja/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"高効率ブロッカーが遂に登場。CPUとメモリーの負担を抑えます。", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "高効率ブロッカーついに登場。CPU とメモリーに負担をかけません。", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — ダッシュボード", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — ダッシュボード", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":" 設定", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "警告! 保存していない変更があります", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"外部フィルター", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "留まる", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Myフィルター", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "無視", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Myルール", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "設定", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"ホワイトリスト", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "フィルターリスト", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — ネットワークリクエストログ", - "description":"Title for the logger window" + "1pPageName": { + "message": "マイフィルター", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"このプロジェクトについて", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "マイルール", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"uBlock₀ の有効 \/ 無効を切り替えます。\n\nクリック: サイト全体 \nCtrl+クリック: このページのみ", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "信頼するサイト", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"ブロックされたリクエスト", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "ショートカットキー", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"このページ", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — ログ", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}}個 か {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "uBlock₀ について", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"インストールしてから", - "description":"English: since install" + "supportPageName": { + "message": "サポート", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"or", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — アセットビューアー", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"クリックしてダッシュボードを開く", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "高度な設定", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"要素選択モードに移行", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "クリック: このサイトで uBlock₀ を無効または有効にします。\n\nCtrl+クリック: このページだけで uBlock₀ を無効にします。", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"リクエストログへ移動", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "クリックするとこのサイトで uBlock₀ を無効にします。\n\nCtrl+クリックでこのページだけで uBlock₀ を無効にします。", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"このサイトのすべてのポップアップのブロックを切り替えます", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "クリックするとこのサイトで uBlock₀ を有効にします。", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"このサイトの大部分のメディア要素のブロックを切り替えます", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "ブロックしたリクエスト数", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"このサイトの要素隠蔽フィルタを切り替える", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "このページ", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"このサイトでリモートのフォントをブロックするか切り替えます", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} 件 ({{percent}} %)", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"グローバルルール: この列にあるルールは、すべてのサイトに適用されます。", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "インストールしてから", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"ローカルルール: この列にあるルールは、現在のサイトのみに適用されます。\nローカルルールはグローバルルールを上書きします。", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "/", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"変更を保存するにはクリックしてください。", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "このページでのブロック数", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"変更を元に戻すにはクリックしてください。", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "インストールからのブロック数", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"すべて", - "description":"" + "popupDomainsConnected_v2": { + "message": "接続したドメイン数", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"画像", - "description":"" + "popupTipDashboard": { + "message": "ダッシュボードを開く", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"サードパーティー", - "description":"" + "popupTipZapper": { + "message": "要素抹消モードに入る", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"サードパーティ CSS\/イメージ", - "description":"" + "popupTipPicker": { + "message": "要素選択モードに入る", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"インラインスクリプト", - "description":"" + "popupTipLog": { + "message": "ログを開く", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"ファーストパーティースクリプト", - "description":"" + "popupTipReport": { + "message": "このサイト上での問題を報告", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"サードパーティースクリプト", - "description":"" + "popupTipNoPopups": { + "message": "このサイトに対するポップアップブロックの有効/無効をすべて切り替えます", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"サードパーティーフレーム", - "description":"" + "popupTipNoPopups1": { + "message": "クリックするとこのサイトのポップアップをすべてブロックします", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"接続したドメイン", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "クリックするとこのサイトのポップアップをすべてブロックしなくなります", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} \/ {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "このサイトに対する大きなメディア要素のブロックの有効/無効を切り替えます", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"作成", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "クリックするとこのサイトの大きなメディア要素をブロックします", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"選択", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "クリックするとこのサイトの大きなメディア要素をブロックしなくなります", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"終了", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "このサイトに対する整形フィルタリングの有効/無効を切り替えます", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"プレビュー", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "クリックするとこのサイトでの整形フィルタリングを無効にします", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"ネットフィルター", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "クリックするとこのサイトでの整形フィルタリングを有効にします", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"要素隠蔽フィルタ", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "このサイトに対するリモートフォントのブロックの有効/無効を切り替えます", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"クリック、Ctrl+クリック", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "クリックするとこのサイトのリモートフォントをブロックします", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"要素をブロック", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "クリックするとこのサイトのリモートフォントをブロックしなくなります", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"ブロックされた要素の設置場所全てを非表示にする", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "クリックするとこのサイトの JavaScript を無効にします", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"ブロックされたリクエスト数をアイコンに表示する", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "クリックするとこのサイトの JavaScript は無効にならなくなります", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"ツールチップを無効にする", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "ポップアップウィンドウ", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"コンテキストメニューを適切な場合に使用する", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "大きなメディア要素", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"uBlock₀を優しい色使いにする", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "整形フィルタリング", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"クラウドストレージのサポートを有効にする", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "リモートフォント", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"私は上級者です (※必ず読んでください<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"先読みを無効にする (ブロックされたネットワークへの接続を防止するため)", - "description":"English: " + "popupMoreButton_v2": { + "message": "さらに表示", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"ハイパーリンクの監査/指針を無効にする", - "description":"English: " + "popupLessButton_v2": { + "message": "折りたたむ", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"ローカルIPアドレスの漏洩をもたらすWebRTCを防止する", - "description":"English: " + "popupTipGlobalRules": { + "message": "グローバルルール: この列のルールはすべてのサイトに適用されます。", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"デフォルトの動作", - "description":"" + "popupTipLocalRules": { + "message": "ローカルルール: この列のルールは現在のサイトだけに適用されます。\nローカルルールはグローバルルールを上書きします。", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"これらのデフォルトの動作は、サイトごとに上書きできます", - "description":"" + "popupTipSaveRules": { + "message": "クリックすると変更を確定します。", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"要素隠蔽フィルタを無効にする", - "description":"" + "popupTipRevertRules": { + "message": "クリックすると変更を元に戻します。", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"{{input:number}} kB より大きいメディア要素をブロックする", - "description":"" + "popupAnyRulePrompt": { + "message": "すべて", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"リモートフォントをブロックする", - "description":"" + "popupImageRulePrompt": { + "message": "画像", + "description": "" }, - "settingsStorageUsed":{ - "message":"使用中のストレージ: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "サードパーティ", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"最後の復元:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "サードパーティ CSS/画像", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"最後のバックアップ:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "インラインスクリプト", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} ネットワークフィルタ+{{cosmeticFilterCount}} 要素隠蔽フィルタ:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "ファーストパーティスクリプト", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{total}}個中{{used}}使用", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "サードパーティスクリプト", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"フィルターリストを自動更新する", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "サードパーティフレーム", + "description": "" }, - "3pUpdateNow":{ - "message":"今すぐ更新", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "接続したドメイン数", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"全キャッシュを削除", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} 件 ({{total}} 件中)", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"要素隠蔽フィルタを解析、施行する。", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "バージョン", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      このオプションはAdblock Plus適合の “要素遮蔽”フィルター<\/a>の解析と施行を有効にします。これらのフィルターは表面的で、ネットリクエストベースのフィルタリングエンジンでブロックできない視覚的に迷惑な要素をウェブページ上で隠す物です。<\/p>

      この機能を有効にするとuBlock₀の使用メモリーを増やします。<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "スクリプト", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"要素隠蔽フィルタを無視します", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "フレーム", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      要素隠蔽フィルタは、ほぼすべてのウェブサイトに適用することができるフィルタです。

      これはuBlock₀によって効率的に処理されますが、特に大規模で長期運営されている一部のウェブページ上ではメモリやCPUの処理に時間がかかる可能性があります。

      このオプションを有効にすると、要素隠蔽フィルタの処理結果としてウェブページに追加されたメモリやCPUの処理時間を減らし、uBlock₀自体のメモリ使用量を軽減できます。

      低スペックの環境では、このオプションを有効にすることを推奨します。", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "作成", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"ブロックされたホストの一覧表示", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "選択", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"適用", - "description":"English: Apply changes" + "pickerQuit": { + "message": "終了", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"広告", - "description":"English: Ads" + "pickerPreview": { + "message": "プレビュー", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"プライバシー", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "ネットワークフィルター", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"ウイルス", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "整形フィルター", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"ソーシャル", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "クリック、Ctrl+クリック", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"多目的", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "要素をブロック...", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"地域、言語", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "ブロックした要素のプレースホルダーを非表示にする", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"カスタム", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "ブロックしたリクエストの数をアイコンに表示する", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"URL1つにつき1行です。‘!’ が先頭にある行は無視されます。無効なURLもそのまま無視されます。", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "ツールチップを無効にする", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"解析", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "状況に合わせてコンテキストメニューを活用する", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"キャッシュを削除", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "色覚多様性に配慮した色を使用する", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"新しいバージョンが使用可能です", - "description":"English: new version available" + "settingsAppearance": { + "message": "外観", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"古いバージョンです", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "テーマ", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"最終更新: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "カスタムアクセントカラー", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"一つのフィルターにつき一行です。フィルターはただのホストネームでもAdblock Plus適合のフィルターでも構いません。‘!’ですでに固定されている行は無視されます。", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "クラウドストレージのサポートを有効にする", + "description": "" }, - "1pImport":{ - "message":"インポートと追加", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "私は上級者です", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"エクスポート", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "先読み機能を無効にする (ブロックしているネットワークリクエストへの接続を完全に防ぐため)", + "description": "English: " }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "ハイパーリンクの監査を無効にする", + "description": "English: " }, - "1pApplyChanges":{ - "message":"変更を適用", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "WebRTC によるローカル IP アドレスの漏洩を防ぐ", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"恒久的なルール", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "既定の動作", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"一時的なルール", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "以下の既定の動作はサイトごとに上書きできます", + "description": "" }, - "rulesRevert":{ - "message":"元に戻す", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "整形フィルタリングを無効にする", + "description": "" }, - "rulesCommit":{ - "message":"コミット", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "{{input}} KB より大きいメディア要素をブロックする", + "description": "" }, - "rulesEdit":{ - "message":"編集", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "リモートフォントをブロックする", + "description": "" }, - "rulesEditSave":{ - "message":"保存", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "JavaScript を無効にする", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"破棄", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "CSP レポートをブロックする", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"ファイルからインポート", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "CNAME クローキングを解除する", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"ファイルへエクスポート", - "description":"" + "settingsAdvanced": { + "message": "高度な設定", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "技術に詳しいユーザーのみを対象にした機能です", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"ダイナミックフィルタリングルールのリスト", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "高度な設定", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"ルールの書き方: source destination type action<\/code> (詳しい説明<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "前回の復元:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"uBlock₀が無効になるホスト名の一覧です。1行につき1つのエントリとなっており、無効なホスト名は無視されます。", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "前回のバックアップ:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"インポートと追加", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} 件のネットワークフィルター + {{cosmeticFilterCount}} 件の整形フィルター:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"エクスポート", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{total}} 件中 {{used}} 件使用", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "フィルターリストを自動更新する", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"変更を適用", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "今すぐ更新", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"タイプ", - "description":"English: Type" + "3pPurgeAll": { + "message": "キャッシュをすべて削除", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"ドメイン", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "整形フィルターを解析して適用する", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "整形フィルターは、ネットワークリクエストに基づいたフィルタリングエンジンではブロックできない、邪魔とみなされる視覚的要素をウェブページ上から隠すという機能を果たします。", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"フィルター", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "汎用整形フィルターを無視する", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"全て", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "汎用整形フィルターとは、すべてのウェブサイトに適用することを目的とした整形フィルターです。このオプションを有効にすると、汎用整形フィルターを処理する結果としてウェブページに加わる、メモリーと CPU のオーバーヘッドが削減されます。\n\n性能の低い端末ではこのオプションを有効にすることをお勧めします。", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"バックグラウンド通信", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "フィルターリストをすべて読み込むまで、ネットワークアクティビティを停止する", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"絞り込み", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "ブロックしたホストの一覧", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"ログの最大件数", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "変更を適用", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"コンテキスト:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "内製", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"タイプ: ", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "広告", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"ダイナミックURLフィルタリング", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "プライバシー", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"静的フィルタリング", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "マルウェアからの保護、セキュリティ", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"ネットワークリクエストが {{type}} である場合に、{{br}}URLアドレスが {{url}} と一致し、{{br}}{{origin}} を発信源としている場合は {{action}} をします。{{br}}{{importance}} が存在する場合は例外フィルターと一致させます。", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "SNS ウィジェット", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"ブロック", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "クッキー通知", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"許可", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "迷惑系", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"タイプ \"{{type}}\"", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "多目的", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"任意の種類", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "地域・言語", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"{{origin}} から", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "カスタム", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"全体", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "インポート...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"例外", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "1 行につき 1 つの URL です。無効な URL はそのまま無視されます。", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"非例外", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "期限切れです。", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"静的フィルター {{filter}} が見つかりました:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "中身を表示します", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"バージョン更新履歴 (Change log)", - "description":"English: Change log" + "3pLastUpdate": { + "message": "最終更新: {{ago}}。\nクリックすると強制的に更新できます。", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "更新中...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"サポート", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "ネットワークエラーが発生したため、リソースを更新できませんでした。", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"ソースコード (GPLバージョン3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "信頼できないソースからフィルターを追加しないでください。", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"貢献者達", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "自分のカスタムフィルターを有効化", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"ファイルにバックアップ...", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "信頼が必要なカスタムフィルターを許可する", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "インポートと追加", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"ファイルから復元...", - "description":"English: Restore from file..." + "1pExport": { + "message": "エクスポート", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"初期設定にリセット", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"{{time}}のバックアップデータを使用して全ての設定を上書きした後、uBlock₀が再起動します。\n\nバックアップデータを使用して既存の全ての設定の上書きしますか?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "変更を適用", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"データが無効、または読み込みができませんでした", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "永続ルール", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"全ての設定が消去された後、uBlock₀が再起動します。\n\n初期設定にリセットしますか?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "一時ルール", + "description": "header" }, - "errorCantConnectTo":{ - "message":"{{url}}に接続できません", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "元に戻す", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: 以下のURLをカスタムフィルターに追加しますか?\n\nタイトル: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "確定", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"1分前", - "description":"English: a minute ago" + "rulesEdit": { + "message": "編集", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} 分前", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "保存", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"1時間前", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "破棄", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} 時間前", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "ファイルからインポート...", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"1日前", - "description":"English: a day ago" + "rulesExport": { + "message": "ファイルへエクスポート", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} 日前", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"ダッシュボードを表示", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "動的フィルタリングルールの一覧です。", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"ネットワークリクエストログを表示", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "ルールの構文: 発信源 通信先 タイプ アクション (詳しい解説)", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"オフ", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "並べ替え:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Originは、以下のページの読み込みを防いでいます:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "ルールの種類", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"以下のフィルターによる", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "発信源", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"パラメーター未指定", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "通信先", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"次のフィルターで見つかりました:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "[信頼するサイト] では uBlock Origin を無効にするウェブページを指定します。1 行につき 1 つです。", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"戻る", - "description":"English: Go back" + "whitelistImport": { + "message": "インポートと追加", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"このウィンドウを閉じる", - "description":"English: Close this window" + "whitelistExport": { + "message": "エクスポート", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"{{hostname}}の厳格なブロックを無効にする", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "my-ublock-trusted-sites_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"一時的", - "description":"English: Temporarily" + "whitelistApply": { + "message": "変更を適用", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"恒久的", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "タイプ", + "description": "English: Type" }, - "cloudPush":{ - "message":"クラウドストレージにエクスポート", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "ドメイン", + "description": "English: Domain" }, - "cloudPull":{ - "message":"クラウドストレージからインポート", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"クラウドストレージからインポートし、現在の設定と合併させます", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "フィルター", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "すべて", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"このデバイスの名前:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "バックグラウンド通信", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"適用", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "現在のタブ", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"元に戻す", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "タブを再読み込みします", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"バイト", - "description":"" + "loggerDomInspectorTip": { + "message": "DOM インスペクターの表示/非表示を切り替えます", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"一時的に大部分のメディア要素を許可", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "ポップアップパネルの表示/非表示を切り替えます", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"これは最後のエントリである必要があります", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: ログ", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "ログを消去します", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "ログの出力を中断します (以後のデータはすべて破棄)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "ログの出力を再開します", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "ログの絞り込みの有効/無効を切り替えます", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "出力するログを絞り込む", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "ログ絞り込みオプション", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "除外", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "フィルタリングした", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "ブロックした", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "許可した", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "変更した", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "ファーストパーティ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "サードパーティ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "詳細", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "フィルター", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "フィルターリスト", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "ルール", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "コンテキスト", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "ルートコンテキスト", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "パーティ種別", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "タイプ", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL ルール", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "コンテキスト:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "タイプ:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "静的フィルター", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "一致する例外フィルター {{importance}}{{br}}{{url}} に URL アドレスが一致し{{br}}{{origin}} 発信された{{br}}{{type}} のネットワークリクエストを {{action}} する。", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "ブロック", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "許可", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "タイプ “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "任意のタイプ", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "“{{origin}}” から", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "任意のサイトから", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "がない場合", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "に関係なく", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "この静的フィルター {{filter}} を含むフィルターリスト:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "この静的フィルターは現在有効なフィルターリストのどれにも含まれていません", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "以下の 3 つの条件から 1 つでも外れたログは自動的に破棄されます:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "過去 {{input}} 分間のログを保持する", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "1 つのタブにつき最大 {{input}} ページの読み込みを保持する", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "1 つのタブにつき最大 {{input}} 件のログを保持する", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "展開表示モードではログ 1 件につき {{input}} 行で表示する", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "非表示にする列:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} 時刻", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} フィルター/ルール", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} コンテキスト", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} パーティ種別", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "リスト形式", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "表形式", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "テキスト形式", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown 形式", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "開く", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "新しい報告を作成", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "似た報告を探す", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "ドキュメント", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "uBlock Origin のすべての機能については uBlock/wiki のドキュメントをお読みください。", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "質問とサポート", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "質問への回答などのヘルプやサポートは /r/uBlockOrigin の subreddit で提供しています。", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "フィルターの問題 / ウェブサイトが正しく動作しない", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "特定のウェブサイトで起きるフィルターの問題は uBlockOrigin/uAssets の Issue トラッカーに報告してください。GitHub のアカウントが必要です。", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "重要: 似た機能を持つブロッカーを uBlock Origin と併用することは控えてください。特定のウェブサイトでフィルターの問題を引き起こすことがあります。", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "ヒント: フィルターリストが最新か確認しましょう。ログはフィルターに関連する問題の原因を調査するための第一のツールです。", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "バグ報告", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "uBlock Origin 自体の問題は uBlockOrigin/uBlock-issue の Issue トラッカーに報告してください。GitHub のアカウントが必要です。", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "トラブルシューティング情報", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "以下の技術情報はボランティアが問題解決の手助けをするときに役立つことがあります。", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "フィルターの問題を報告する", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "重複した報告によってボランティアに負担をかけないように、問題がすでに報告されていないか確認してください。", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "フィルターリストは毎日更新されます。まず最新のフィルターリストで問題が修正されていないか確認してください。", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "問題のあるページを再読み込みしても問題がまだ残っているか確認してください。", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "ウェブページのアドレス:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "ウェブページは...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- エントリーを選択する --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "広告またはその消し残りを表示します", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "オーバーレイなど邪魔なものがあります", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "uBlock Origin を検出します", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "プライバシーに関連する問題があります", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "uBlock Origin を有効にすると誤動作します", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "勝手にタブやウィンドウを開きます", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "悪質ソフトやフィッシングへの誘導", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "ウェブページに“NSFW” (閲覧注意、“Not Safe For Work”) とラベルをつける", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "プライバシーポリシー", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "更新履歴", + "description": "" + }, + "aboutCode": { + "message": "ソースコード (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "貢献者", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "ソースコード", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "翻訳", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "フィルターリスト", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "外部依存関係 (GPLv3 と両立):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO の内製フィルターリストは以下の CDN に無料でホストしています:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "フィルターリストの更新が必要なときにはランダムに選択した CDN を使用します", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "ファイルにバックアップ...", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "ファイルから復元...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "初期設定にリセット...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "すべての設定を {{time}} にバックアップしたデータを使用して上書きした後、uBlock₀ が再起動します。\n\nバックアップデータを使用して既存の設定をすべて上書きしますか?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "データが無効、または読み込みができませんでした", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "すべての設定を削除した後、uBlock₀ が再起動します。\n\nuBlock₀ を初期設定にリセットしますか?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "ネットワークエラー: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "購読", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "1 分前", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} 分前", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "1 時間前", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} 時間前", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "1 日前", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} 日前", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "ダッシュボードを表示", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "ログを表示", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "オフ", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "ブロックしたページ", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin は、 以下のサイトの読み込みを防止しました:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "以下のフィルターと一致したためです:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "パラメーターなし", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "このフィルターを含むフィルターリスト:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "戻る", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "このウィンドウを閉じる", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "今後このサイトに関する警告を表示しない", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "{{hostname}} への厳格なブロッキングを無効にする", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "一時的", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "永続的", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "続行する", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "ブロックしたページは別のサイトへリダイレクトしようとしています。続行すると次の URL へ移動します: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "理由:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "悪意のある", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "トラッカー", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "悪い評判", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "クラウドストレージにエクスポートします", + "description": "tooltip" + }, + "cloudPull": { + "message": "クラウドストレージからインポートします", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "クラウドストレージからインポートして現在の設定に統合します", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "この端末の名前:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "警告! 以下の高度な設定の変更は自己責任で行ってください。", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "送信", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "変更を適用", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "元に戻す", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "バイト", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "フレーム内の要素をブロック...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "フィルターリストを購読...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "大きなメディア要素を一時的に許可", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "ソースを表示…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "ショートカットキーを入力", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "スクロールの同期/非同期を切り替えます", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "クリップボードにコピー", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "すべて選択", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "整形フィルタリングの有効/無効を切り替える", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "JavaScript の切り替え", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "ブロッキングモードを緩和する", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "ストレージ使用量: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "クリックして読み込む", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "エラー: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "ブラウザー起動時に正しくフィルターできませんでした。\nページを再読み込みしてください。", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/ka/messages.json b/src/_locales/ka/messages.json new file mode 100644 index 0000000000000..f5ad8bfc1219f --- /dev/null +++ b/src/_locales/ka/messages.json @@ -0,0 +1,1314 @@ +{ + "extName": { + "message": "uBlock Origin", + "description": "extension name." + }, + "extShortDesc": { + "message": "როგორც იქნა, მძლავრი და შედეგიანი რეკლამების შემზღუდავი. ზოგავს CPU-ს და მეხსიერებას.", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "dashboardName": { + "message": "uBlock₀ — სამართავი დაფა", + "description": "English: uBlock₀ — Dashboard" + }, + "dashboardUnsavedWarning": { + "message": "გაფრთხილება! ცვლილებები არ შენახულა", + "description": "A warning in the dashboard when navigating away from unsaved changes" + }, + "dashboardUnsavedWarningStay": { + "message": "დარჩენა", + "description": "Label for button to prevent navigating away from unsaved changes" + }, + "dashboardUnsavedWarningIgnore": { + "message": "უგულებელყოფა", + "description": "Label for button to ignore unsaved changes" + }, + "settingsPageName": { + "message": "პარამეტრები", + "description": "appears as tab name in dashboard" + }, + "3pPageName": { + "message": "სხვა ფილტრები", + "description": "appears as tab name in dashboard" + }, + "1pPageName": { + "message": "ჩემი ფილტრები", + "description": "appears as tab name in dashboard" + }, + "rulesPageName": { + "message": "ჩემი წესები", + "description": "appears as tab name in dashboard" + }, + "whitelistPageName": { + "message": "გამონაკლისები", + "description": "appears as tab name in dashboard" + }, + "shortcutsPageName": { + "message": "მალსახმობები", + "description": "appears as tab name in dashboard" + }, + "statsPageName": { + "message": "uBlock₀ — აღმრიცხავი", + "description": "Title for the logger window" + }, + "aboutPageName": { + "message": "შესახებ", + "description": "appears as tab name in dashboard" + }, + "supportPageName": { + "message": "მხარდაჭერა", + "description": "appears as tab name in dashboard" + }, + "assetViewerPageName": { + "message": "uBlock₀ — მასალების ნახვა", + "description": "Title for the asset viewer page" + }, + "advancedSettingsPageName": { + "message": "გაფართოებული პარამეტრები", + "description": "Title for the advanced settings page" + }, + "popupPowerSwitchInfo": { + "message": "დაწკაპებით: ჩაირთვება/გამოირთვება uBlock ამ საიტზე.\n\nCtrl+დაწკაპებით: გამოირთვება uBlock მხოლოდ ამ გვერდზე.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + }, + "popupPowerSwitchInfo1": { + "message": "დაწკაპეთ, რომ გაითიშოს uBlock₀ ამ საიტისთვის.\n\nCtrl+დაწკაპებით uBlock₀ მხოლოდ ამ გვერდზე გაითიშება.", + "description": "Message to be read by screen readers" + }, + "popupPowerSwitchInfo2": { + "message": "დაწკაპეთ, რომ ჩაირთოს uBlock₀ ამ საიტისთვის.", + "description": "Message to be read by screen readers" + }, + "popupBlockedRequestPrompt": { + "message": "შეზღუდული მოთხოვნები", + "description": "English: requests blocked" + }, + "popupBlockedOnThisPagePrompt": { + "message": "ამ გვერდზე", + "description": "English: on this page" + }, + "popupBlockedStats": { + "message": "{{count}} ანუ {{percent}}%", + "description": "Example: 15 (13%)" + }, + "popupBlockedSinceInstallPrompt": { + "message": "დაყენების შემდგომ", + "description": "English: since install" + }, + "popupOr": { + "message": "ანუ", + "description": "English: or" + }, + "popupBlockedOnThisPage_v2": { + "message": "შეზღუდული ამ გვერდზე", + "description": "For the new mobile-friendly popup design" + }, + "popupBlockedSinceInstall_v2": { + "message": "შეზღუდული დაყენების შემდგომ", + "description": "For the new mobile-friendly popup design" + }, + "popupDomainsConnected_v2": { + "message": "დაკავშირებული დომენები", + "description": "For the new mobile-friendly popup design" + }, + "popupTipDashboard": { + "message": "სამართავის გახსნა", + "description": "English: Click to open the dashboard" + }, + "popupTipZapper": { + "message": "ნაწილების ამოჭრა", + "description": "Tooltip for the element-zapper icon in the popup panel" + }, + "popupTipPicker": { + "message": "ნაწილების შერჩევა", + "description": "English: Enter element picker mode" + }, + "popupTipLog": { + "message": "აღმრიცხავის გახსნა", + "description": "Tooltip used for the logger icon in the panel" + }, + "popupTipReport": { + "message": "ამ საიტზე ხარვეზის მოხსენება", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipNoPopups": { + "message": "ამ საიტზე ყველა ამომხტომის შეზღუდვის ჩამრთველი", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups1": { + "message": "დაწკაპეთ, რომ ყველა ამომხტომი ფანჯარა შეიზღუდოს ამ საიტზე", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2": { + "message": "დაწკაპეთ, რომ ამომხტომი ფანჯრები აღარ შეიზღუდოს ამ საიტზე", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoLargeMedia": { + "message": "ამ საიტზე დიდი მედიაფაილების შეზღუდვის ჩამრთველი", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia1": { + "message": "დაწკაპეთ, რომ დიდი მედიაფაილები შეიზღუდოს ამ საიტზე", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2": { + "message": "დაწკაპეთ, რომ დიდი მედიაფაილები აღარ შეიზღუდოს ამ საიტზე", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoCosmeticFiltering": { + "message": "გარეგნული ნაწილების ფილტრის ჩამრთველი", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering1": { + "message": "დაწკაპეთ გარეგნული ნაწილების ფილტრის გასათიშად ამ საიტზე", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2": { + "message": "დაწკაპეთ გარეგნული ნაწილების გასაფილტრად ამ საიტზე", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoRemoteFonts": { + "message": "ვებშრიფტების შეზღუდვის ჩართვა/გამორთვა ამ საიტზე", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts1": { + "message": "დაწკაპეთ, რომ ვებშრიფტები შეიზღუდოს ამ საიტზე", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts2": { + "message": "დაწკაპეთ, რომ ვებშრიფტები აღარ შეიზღუდოს ამ საიტზე", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoScripting1": { + "message": "დაწკაპეთ, რომ გაითიშოს JavaScript ამ საიტზე", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupTipNoScripting2": { + "message": "დაწკაპეთ, რომ აღარ გაითიშოს JavaScript ამ საიტზე", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupNoPopups_v2": { + "message": "ამომხტომი ფანჯრები", + "description": "Caption for the no-popups per-site switch" + }, + "popupNoLargeMedia_v2": { + "message": "დიდი მედიაფაილები", + "description": "Caption for the no-large-media per-site switch" + }, + "popupNoCosmeticFiltering_v2": { + "message": "გარეგნული გაფილტვრა", + "description": "Caption for the no-cosmetic-filtering per-site switch" + }, + "popupNoRemoteFonts_v2": { + "message": "ვებშრიფტები", + "description": "Caption for the no-remote-fonts per-site switch" + }, + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" + }, + "popupMoreButton_v2": { + "message": "ვრცლად", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton_v2": { + "message": "მოკლედ", + "description": "Label to be used to hide popup panel sections" + }, + "popupTipGlobalRules": { + "message": "გლობალური წესები: ეს სვეტი არის წესებისთვის, რომლებიც მოქმედებს ყველა საიტზე.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." + }, + "popupTipLocalRules": { + "message": "ლოკალური წესები: ეს სვეტი არის წესებისთვის, რომლებიც მოქმედებს მხოლოდ მიმდინარე საიტზე.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." + }, + "popupTipSaveRules": { + "message": "დაწკაპეთ ცვლილებების მუდმივად შენახვისთვის.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." + }, + "popupTipRevertRules": { + "message": "დააწკაპუნეთ შეტანილი ცვლილებების გაუქმებისთვის.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + }, + "popupAnyRulePrompt": { + "message": "ყველა", + "description": "" + }, + "popupImageRulePrompt": { + "message": "სურათები", + "description": "" + }, + "popup3pAnyRulePrompt": { + "message": "მესამე მხარე", + "description": "" + }, + "popup3pPassiveRulePrompt": { + "message": "მესამე მხრის css/ნახატები", + "description": "" + }, + "popupInlineScriptRulePrompt": { + "message": "ხაზოვანი სკრიპტები", + "description": "" + }, + "popup1pScriptRulePrompt": { + "message": "1-ლი მხრის სკრიპტები", + "description": "" + }, + "popup3pScriptRulePrompt": { + "message": "მე-3 მხრის სკრიპტები", + "description": "" + }, + "popup3pFrameRulePrompt": { + "message": "მე-3 მხრის ჩარჩოები", + "description": "" + }, + "popupHitDomainCountPrompt": { + "message": "დაკავშირებული დომენები", + "description": "appears in popup" + }, + "popupHitDomainCount": { + "message": "{{total}}-დან {{count}}", + "description": "appears in popup" + }, + "popupVersion": { + "message": "ვერსია", + "description": "Example of use: Version 1.26.4" + }, + "popup3pScriptFilter": { + "message": "სკრიპტი", + "description": "Appears as an option to filter out firewall rows" + }, + "popup3pFrameFilter": { + "message": "ჩარჩო", + "description": "Appears as an option to filter out firewall rows" + }, + "pickerCreate": { + "message": "შექმნა", + "description": "English: Create" + }, + "pickerPick": { + "message": "გადარჩევა", + "description": "English: Pick" + }, + "pickerQuit": { + "message": "გამოსვლა", + "description": "English: Quit" + }, + "pickerPreview": { + "message": "შეთვალიერება", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + }, + "pickerNetFilters": { + "message": "ქსელის ფილტრები", + "description": "English: header for a type of filter in the element picker dialog" + }, + "pickerCosmeticFilters": { + "message": "გარეგნული ფილტრები", + "description": "English: Cosmetic filters" + }, + "pickerCosmeticFiltersHint": { + "message": "Click, Ctrl + დაწკაპუნება", + "description": "English: Click, Ctrl-click" + }, + "pickerContextMenuEntry": { + "message": "ამ ნაწილის შეზღუდვა…", + "description": "An entry in the browser's contextual menu" + }, + "settingsCollapseBlockedPrompt": { + "message": "შეზღუდული ნაწილების ადგილის შემავსებლის დამალვა", + "description": "English: Hide placeholders of blocked elements" + }, + "settingsIconBadgePrompt": { + "message": "შეზღუდული მოთხოვნების რაოდენობის ჩვენება ხატულაზე", + "description": "English: Show the number of blocked requests on the icon" + }, + "settingsTooltipsPrompt": { + "message": "მინიშნებების გათიშვა", + "description": "A checkbox in the Settings pane" + }, + "settingsContextMenuPrompt": { + "message": "კონტექსტური მენიუს გამოყენება, როდესაც ეს ხელსაყრელია", + "description": "English: Make use of context menu where appropriate" + }, + "settingsColorBlindPrompt": { + "message": "ფერთა მორგება სუსტად მხედველთათვის", + "description": "English: Color-blind friendly" + }, + "settingsAppearance": { + "message": "იერსახე", + "description": "Section for controlling user interface appearance" + }, + "settingsThemeLabel": { + "message": "თემა", + "description": "Label for checkbox to enable a custom dark theme" + }, + "settingsThemeAccent0Label": { + "message": "სასურველი შეფერილობა", + "description": "Label for checkbox to pick an accent color" + }, + "settingsCloudStorageEnabledPrompt": { + "message": "ღრუბლოვანი მეხსიერების მხარდაჭერის ჩართვა", + "description": "" + }, + "settingsAdvancedUserPrompt": { + "message": "მე ვარ გამოცდილი მომხმარებელი (აუცილებლად წასაკითხი)", + "description": "Checkbox to let user access advanced, technical features" + }, + "settingsPrefetchingDisabledPrompt": { + "message": "წინასწარი ჩატვირთვის გათიშვა (კავშირის არიდება ქსელის შეზღუდული მოთხოვნებისთვის)", + "description": "English: " + }, + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "ბმულებით სარგებლობისას აღრიცხვის არიდება", + "description": "English: " + }, + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "WebRTC-ით შიდა IP-მისამართის გამჟღავნების აღკვეთა", + "description": "English: " + }, + "settingPerSiteSwitchGroup": { + "message": "ნაგულისხმევი მითითებები", + "description": "" + }, + "settingPerSiteSwitchGroupSynopsis": { + "message": "ეს ნაგულისხმევი მითითებები შესაძლებელია შეიცვალოს ცალკეული საიტისთვის", + "description": "" + }, + "settingsNoCosmeticFilteringPrompt": { + "message": "გარეგნული ნაწილების გაფილტვრის გათიშვა", + "description": "" + }, + "settingsNoLargeMediaPrompt": { + "message": "მედიაფაილების შეზღუდვა, რომლებიც აჭარბებს {{input:number}} კბაიტს", + "description": "" + }, + "settingsNoRemoteFontsPrompt": { + "message": "ვებშრიფტების შეზღუდვა", + "description": "" + }, + "settingsNoScriptingPrompt": { + "message": "გაითიშოს JavaScript", + "description": "The default state for the per-site no-scripting switch" + }, + "settingsNoCSPReportsPrompt": { + "message": "CSP-მოხსენებების აკრძალვა", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" + }, + "settingsUncloakCnamePrompt": { + "message": "დადგენილი სახელების გამოაშკარავება", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" + }, + "settingsAdvanced": { + "message": "გაფართოებული", + "description": "Section for controlling advanced-user settings" + }, + "settingsAdvancedSynopsis": { + "message": "შესაძლებლობები მხოლოდ ტექნიკური მომხმარებლებისთვის", + "description": "Description of section controlling advanced-user settings" + }, + "settingsAdvancedUserSettings": { + "message": "გაფართოებული პარამეტრები", + "description": "For the tooltip of a link which gives access to advanced settings" + }, + "settingsLastRestorePrompt": { + "message": "ბოლო აღდგენა:", + "description": "English: Last restore:" + }, + "settingsLastBackupPrompt": { + "message": "ბოლო მარქაფი:", + "description": "English: Last backup:" + }, + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} ქსელის ფილტრი + {{cosmeticFilterCount}} გარეგნული ნაწილების ფილტრი:", + "description": "Appears at the top of the _3rd-party filters_ pane" + }, + "3pListsOfBlockedHostsPerListStats": { + "message": "{{total}}-იდან გამოიყენება {{used}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "3pAutoUpdatePrompt1": { + "message": "ფილტრების წესების თვითგანახლება", + "description": "A checkbox in the _3rd-party filters_ pane" + }, + "3pUpdateNow": { + "message": "ახლავე განახლება", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pPurgeAll": { + "message": "მარაგის გასუფთავება", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pParseAllABPHideFiltersPrompt1": { + "message": "გარეგნული ნაწილების ფილტრების დამუშავება და გამოყენება", + "description": "English: Parse and enforce Adblock+ element hiding filters." + }, + "3pParseAllABPHideFiltersInfo": { + "message": "გარეგნული ფილტრები, ჩვეულებრივ, ვებგვერდზე იმ ხილული ნაწილების დასამალად გამოიყენება, რომლებზეც ქსელში მოთხოვნის შემზღუდავი ფილტრები ვერ მოქმედებს.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + }, + "3pIgnoreGenericCosmeticFilters": { + "message": "გარეგნული საერთო ფილტრების უგულებელყოფა", + "description": "This will cause uBO to ignore all generic cosmetic filters." + }, + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "გარეგნული საერთო ფილტრებია, რომლებიც ყველა ვებსაიტზე მოქმედებს. ამ პარამეტრის ჩართვით კი თავიდან აიცილებთ გარეგნული საერთო ფილტრებით მეხსიერებისა და პროცესორის ზედმეტ დატვირთვას.\n\nამ პარამეტრის ჩართვა სასურველია სუსტ მოწყობილობებზე.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." + }, + "3pSuspendUntilListsAreLoaded": { + "message": "ქსელის მოქმედებების გადავადება ყველა ფილტრის ჩატვირთვამდე", + "description": "A checkbox in the 'Filter lists' pane" + }, + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" + }, + "3pApplyChanges": { + "message": "ცვლილებების ასახვა", + "description": "English: Apply changes" + }, + "3pGroupDefault": { + "message": "ჩაშენებული", + "description": "Filter lists section name" + }, + "3pGroupAds": { + "message": "რეკლამები", + "description": "Filter lists section name" + }, + "3pGroupPrivacy": { + "message": "პირადულობა", + "description": "Filter lists section name" + }, + "3pGroupMalware": { + "message": "მავნე დომენები", + "description": "Filter lists section name" + }, + "3pGroupSocial": { + "message": "სოცქსელების ნაწილები", + "description": "Filter lists section name" + }, + "3pGroupCookies": { + "message": "ცნობები ფუნთუშების შესახებ", + "description": "Filter lists section name" + }, + "3pGroupAnnoyances": { + "message": "შემაწუხებელი შიგთავსი", + "description": "Filter lists section name" + }, + "3pGroupMultipurpose": { + "message": "უნივერსალური", + "description": "Filter lists section name" + }, + "3pGroupRegions": { + "message": "რეგიონები, ენები", + "description": "Filter lists section name" + }, + "3pGroupCustom": { + "message": "საკუთარი სიები", + "description": "Filter lists section name" + }, + "3pImport": { + "message": "შემოტანა...", + "description": "The label for the checkbox used to import external filter lists" + }, + "3pExternalListsHint": { + "message": "თითოეული URL ცალკეულ ხაზზე. არამართებული URL-ბმულები უგულებელყოფილი იქნება გაუფრთხილებლად.", + "description": "Short information about how to use the textarea to import external filter lists by URL" + }, + "3pExternalListObsolete": { + "message": "მოძველებული", + "description": "used as a tooltip for the out-of-date icon beside a list" + }, + "3pViewContent": { + "message": "შიგთავსის ნახვა", + "description": "used as a tooltip for eye icon beside a list" + }, + "3pLastUpdate": { + "message": "ბოლო განახლება: {{ago}}.\nდააწკაპეთ ახლავე გასაახლებლად.", + "description": "used as a tooltip for the clock icon beside a list" + }, + "3pUpdating": { + "message": "ახლდება...", + "description": "used as a tooltip for the spinner icon beside a list" + }, + "3pNetworkError": { + "message": "ქსელის შეცდომის შედეგად, შიგთავსის განახლება ვერ მოხერხდა.", + "description": "used as a tooltip for error icon beside a list" + }, + "1pTrustWarning": { + "message": "ნუ დაამატებთ ფილტრებს არასანდო წყაროებიდან.", + "description": "Warning against copy-pasting filters from random sources" + }, + "1pEnableMyFiltersLabel": { + "message": "საკუთარი ფილტრების ამოქმედება", + "description": "Label for the checkbox use to enable/disable 'My filters' list" + }, + "1pTrustMyFiltersLabel": { + "message": "ნების დართვა მორგებული ფილტრებისთვის, რომლებიც ნდობას ითხოვს", + "description": "Label for the checkbox use to trust the content of 'My filters' list" + }, + "1pImport": { + "message": "შემოტანა და დამატება", + "description": "Button in the 'My filters' pane" + }, + "1pExport": { + "message": "შენახვა", + "description": "Button in the 'My filters' pane" + }, + "1pExportFilename": { + "message": "ჩემი-უცვლელი-ublock-ფილტრები_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" + }, + "1pApplyChanges": { + "message": "ცვლილებების ასახვა", + "description": "English: Apply changes" + }, + "rulesPermanentHeader": { + "message": "მუდმივი წესები", + "description": "header" + }, + "rulesTemporaryHeader": { + "message": "დროებითი წესები", + "description": "header" + }, + "rulesRevert": { + "message": "დაბრუნება", + "description": "This will remove all temporary rules" + }, + "rulesCommit": { + "message": "მიბარება", + "description": "This will persist temporary rules" + }, + "rulesEdit": { + "message": "შეცვლა", + "description": "Will enable manual-edit mode (textarea)" + }, + "rulesEditSave": { + "message": "შენახვა", + "description": "Will save manually-edited content and exit manual-edit mode" + }, + "rulesEditDiscard": { + "message": "გაუქმება", + "description": "Will discard manually-edited content and exit manual-edit mode" + }, + "rulesImport": { + "message": "ფაილიდან შემოტანა...", + "description": "" + }, + "rulesExport": { + "message": "ფაილში შენახვა", + "description": "Button in the 'My rules' pane" + }, + "rulesDefaultFileName": { + "message": "ჩემი-ublock-ცვალებადი-წესები_{{datetime}}.txt", + "description": "default file name to use" + }, + "rulesHint": { + "message": "თქვენი ცვალებადი ფილტრების წესები.", + "description": "English: List of your dynamic filtering rules." + }, + "rulesFormatHint": { + "message": "წესის აგებულება: წყარო დანიშნულება მოთხოვნის სახე მოქმედება (მასალები სრულად).", + "description": "English: dynamic rule syntax and full documentation." + }, + "rulesSort": { + "message": "დალაგება:", + "description": "English: label for sort option." + }, + "rulesSortByType": { + "message": "წესის სახეობა", + "description": "English: a sort option for list of rules." + }, + "rulesSortBySource": { + "message": "წყარო", + "description": "English: a sort option for list of rules." + }, + "rulesSortByDestination": { + "message": "დანიშნულება", + "description": "English: a sort option for list of rules." + }, + "whitelistPrompt": { + "message": "გამონაკლისებში მითითებულ ვებგვერდებზე uBlock Origin გამოირთვება. თითო ჩანაწერი ცალკეულ ხაზზე.", + "description": "A concise description of the 'Trusted sites' pane." + }, + "whitelistImport": { + "message": "შემოტანა და დამატება", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExport": { + "message": "შენახვა", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExportFilename": { + "message": "ჩემი-ublock-გამონაკლისები_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" + }, + "whitelistApply": { + "message": "ცვლილებების ასახვა", + "description": "English: Apply changes" + }, + "logRequestsHeaderType": { + "message": "სახეობა", + "description": "English: Type" + }, + "logRequestsHeaderDomain": { + "message": "დომენი", + "description": "English: Domain" + }, + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" + }, + "logRequestsHeaderFilter": { + "message": "ფილტრი", + "description": "English: Filter" + }, + "logAll": { + "message": "ყველა", + "description": "Appears in the logger's tab selector" + }, + "logBehindTheScene": { + "message": "ფარული მოთხოვნები", + "description": "Pretty name for behind-the-scene network requests" + }, + "loggerCurrentTab": { + "message": "მიმდინარე ჩანართი", + "description": "Appears in the logger's tab selector" + }, + "loggerReloadTip": { + "message": "ჩანართის შიგთავსის ხელახლა ჩატვირთვა", + "description": "Tooltip for the reload button in the logger page" + }, + "loggerDomInspectorTip": { + "message": "DOM-დამკვირვებლის ჩამრთველი", + "description": "Tooltip for the DOM inspector button in the logger page" + }, + "loggerPopupPanelTip": { + "message": "ამომხტომი არეს ჩამრთველი", + "description": "Tooltip for the popup panel button in the logger page" + }, + "loggerInfoTip": { + "message": "uBlock-Origin-ცნობარი: აღმრიცხავი", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "აღმრიცხავის გასუფთავება", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "აღმრიცხავის შეჩერება (მიღებული მონაცემების მოცილება)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "აღრიცხვის გაგრძელება", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "აღმრიცხავის გამორჩევის ჩამრთველი", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "აღრიცხული ჩანაწერების გამორჩევა", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "აღრიცხულის გამორჩევის პარამეტრები", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "განურჩევლად", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "საგულისხმო", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "შეზღუდული", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "დაშვებული", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "ჩასწორებული", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "მონახულებული", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "გარეშე მხარის", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "ვრცლად", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "ფილტრი", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "ფილტრების სია", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "წესი", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "კონტექსტი", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "ძირეული კონტექსტი", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "მხარე", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "სახეობა", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "მისამართი", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "ცვალებადი URL ფილტრები", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "კონტექსტი:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "სახეობა:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "უცვლელი ფილტრები", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{type}} ქსელის მოთხოვნების {{action}} {{br}}რომლის URL მისამართიც შეესაბამება ბმულს {{url}} {{br}}და რომლის წყაროცაა {{origin}},{{br}}{{importance}}, როცა არსებობს შესაბამისი გამონაკლისი.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "შეზღუდვა", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "დაშვება", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "„{{type}}“ სახის", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "ნებისმიერი სახის", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "„{{origin}}“", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "ნებისმიერი", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "გარდა იმ შემთხვევისა", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "იმ შემთხვევაშიც კი", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "უცვლელი ფილტრი {{filter}} ნაპოვნია სიაში:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "უცვლელი ფილტრი ვერ მოიძებნა ამჟამად გამოყენებულ ფილტრებში", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "აღრიცხული ჩანაწერი, რომელიც არ აკმაყოფილებს ქვემოთ მოცემულ სამივე პირობას, ავტომატურად ამოიშლება:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "ბოლო {{input}} წუთის ჩანაწერების დატოვება", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "არაუმეტეს {{input}} გვერდის ჩატვირთვის დატოვება თითოეულ ჩანართზე", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "არაუმეტეს {{input}} ჩანაწერის დატოვება თითოეულ ჩანართში", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "თითოეული ჩანაწერისთვის {{input}} ხაზის გამოყენება, შვეულად ჩამოშლის რეჟიმში", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "სვეტების დამალვა:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} დრო", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} ფილტრი/წესი", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} კონტექსტი", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} მხარე", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "სია", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "ცხრილი", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "მარტივი", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "გაფორმებული", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "გახსნა", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "შექმენით ახალი მოსხენება", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "იპოვეთ მსგავსი მოხსენებები", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "მასალები", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "დამატებითი მასალებისთვის იხილეთ uBlock/wiki, რომ უკეთ გაიცნოთ uBlock Origin და მისი შესაძლებლობები.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "შეკითხვები და დახმარება", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "კითხვებზე პასუხისა და სხვა სახის მხარდაჭერის მისაღებად ეწვიეთ Reddit-განყოფილებას /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "ფილტრის ხარვეზი/გაუმართაობა საიტზე", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "ცალკეულ საიტზე ფილტრების ხარვეზების მოსახსენებლად გამოიყენეთ uBlockOrigin/uAssets ხარვეზების აღსარიცხავი. დაგჭირდებათ GitHub-ანგარიში.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "ყურადღება: ეცადეთ, არ გამოიყენოთ uBlock Origin და სხვა მსგავსი შემზღუდავები ერთდროულად, ვინაიდან წარმოიქმნება ფილტრების ხარვეზები ცალკეულ საიტებზე.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "რჩევა: გადაამოწმეთ, რომ ფილტრები განახლებულია. აღმრიცხავი ხელსაწყო მთავარი საშუალებაა ფილტრების ხარვეზების გამოსავლენად.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "ხარვეზის მოხსენება", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "ხარვეზების მოხსენებისთვის, რომლის წყაროცაა თავად uBlock Origin, გამოიყენეთ uBlockOrigin/uBlock-issue ხარვეზების აღსარიცხავი. დაგჭირდებათ GitHub-ანგარიში.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "მონაცემები ხარვეზის მოსაგვარებლად", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "ქვემოთ მოცემულია ტექნიკური ინფორმაცია, რომელიც გამოადგებათ მოხალისეებს, უკეთ დაგეხმარონ ხარვეზის აღმოფხვრაში.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "ფილტრის ხარვეზის მოხსენება", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "მოხალისეები რომ არ მოცდნენ ერთნაირი მოსხენებების ნახვით, გთოხვთ გადაამოწმოთ, უკვე ხომ არაა გაგზავნილი საჩივარი ამ ხარვეზზე.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "ფილტრთა სიები ახლდება ყოველდღე. გადაამოწმეთ, ხარვეზი ხომ არ გამოსწორებულა უახლეს სიებში.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "შეამოწმეთ, გაახლებით ხომ არ გამოსწორდა ხარვეზიანი ვებგვერდი. ", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "ვებგვერდის მისამართი", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "ვებგვერდი...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- შეარჩიეთ --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "აჩვენებს რეკლამებს ან მის ნარჩენებს", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "ადებს შემაწუხებელ შრეებსა და მისთანებს", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "ამჩნევს, რომ uBlock Origin ჩართულია", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": " პირადულობის დაცვის ხარვეზებითაა", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "ფუჭდება, როცა uBlock Origin ჩართულია", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "ხსნის არასასურველ ჩანართებს ან ფანჯრებს", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "გადადის მავნე, თაღლითურ შიგთავსზე", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "გვერდი მოინიშნოს, როგორც „NSFW“ („შეუსაბამო“)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "პირადულობის დებულება", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "ცვლილებათა ჟურნალი", + "description": "" + }, + "aboutCode": { + "message": "წყაროს კოდი (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "მოხალისეები", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "პირველწყარო კოდი", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "თარგმანები", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "ფილტრების სიები", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "ცალკეული დაქვემდებარებული პროექტები (GPLv3-თან თავსებადი):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO საკუთარ ფილტრებს ღიად ათავსებს მოცემულ CDN-ებზე:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "CDN შეირჩევა შემთხვევითობით ფილტრების განახლების დროს", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "ფაილში დამარქაფება", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "ჩემი-ublock-მარქაფი_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "აღდგენა ფაილიდან...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "ნაგულისხმევ პარამეტრებზე დაბრუნება...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "თქვენს ყველა პარამეტრს გადაეწერება {{time}} დროინდელი დამარქაფებული მონაცემები და uBlock₀ გაეშვება ხელახლა.\n\nნამდვილად გსურთ არსებული პარამეტრების დამარქაფებული მონაცემებით ჩანაცვლება?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "მონაცემები ვერ იკითხება, ან დაზიანებულია", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "თქვენ მიერ მითითებული ყველა პარამეტრი წაიშლება და uBlock₀ გაეშვება ხელახლა.\n\nნამდვილად გსურთ დაბრუნდეს uBlock₀ ნაგულისხმევ პარამეტრებზე?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "ქსელის შეცდომა: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "გამოწერა", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "ერთი წუთის წინ", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} წუთის წინ", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "ერთი საათის წინ", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} საათის წინ", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "ერთი დღის წინ", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} დღის წინ", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "ხელსაწყოების გვერდის ჩვენება", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "აღრიცხვის ჩვენება", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "გამორთული", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "გვერდი შეიზღუდა", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin ზღუდავს მოცემული გვერდის ჩატვირთვას:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "აღნიშნული ფილტრის მიხედვით:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "პარამეტრების გარეშე", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "შეიცავს:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "უკან დაბრუნება", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "ფანჯრის დახურვა", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "მომავალში გაფრთხილების გარეშე ამ საიტზე", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "მკაცრი შეზღუდვის მოხსნა საიტისთვის: {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "დროებით", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "მუდმივად", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "მაინც გადასვლა", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "ეს შეზღუდული გვერდი ცდილობს სხვა საიტზე გადაყვანას. თუ განაგრძობთ, პირდაპირ გაიხსნება: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "მიზეზი:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "მავნებელი", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "მეთვალყურე", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "სახელგატეხილი", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "ღრუბლოვან საცავში შენახვა", + "description": "tooltip" + }, + "cloudPull": { + "message": "ღრუბლოვანი საცავიდან გადმოტანა", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "ღრუბლოვანი საცავიდან გადმოტანა და არსებულ პარამეტრებთან მისადაგება", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "ამ მოწყობილობის დასახელება:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "გაფრთხილება! გაფართოებული პარამეტრების ჩასწორების შედეგებზე თავად იქნებით პასუხისმგებელი.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "მიღება", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "ცვლილებების ასახვა", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "დაბრუნება", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "ბაიტი", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "ნაწილების შეზღუდვა ჩარჩოში...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "ფილტრის სიის გამოწერა...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "დიდი მედიაფაილების დროებით დაშვება", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "პირველწყარო კოდის ნახვა…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "მალსახმობის მითითება", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "ჩაკეტილად გადაადგილების ჩამრთველი", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "ასლის აღება", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "ყველას მონიშვნა", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "გარეგნული ფილტრის ჩამრთველი", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "JavaScript – გადამრთველი", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "მსუბუქი შეზღუდვის რეჟიმი", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "გამოყენებული მოცულობა: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "კბ", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "მბ", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "გბ", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "დაწკაპეთ ჩასატვირთად", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "შეცდომა: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "სათანადოდ ვერ გაიფილტრა ბრაუზერის ჩართვისას.\nახლიდან გახსენით გვერდი უკეთ გასაფილტრად.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" + } +} diff --git a/src/_locales/kk/messages.json b/src/_locales/kk/messages.json new file mode 100644 index 0000000000000..ab2427eb1c1d0 --- /dev/null +++ b/src/_locales/kk/messages.json @@ -0,0 +1,1314 @@ +{ + "extName": { + "message": "uBlock Origin", + "description": "extension name." + }, + "extShortDesc": { + "message": "Жарнамаларды жақсы өшіретін Addon'дардың бірі. Компьютердің қуатың аз алады.", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "dashboardName": { + "message": "uBlock₀ — Орнату", + "description": "English: uBlock₀ — Dashboard" + }, + "dashboardUnsavedWarning": { + "message": "Сізде сақталмаған параметрлер бар!", + "description": "A warning in the dashboard when navigating away from unsaved changes" + }, + "dashboardUnsavedWarningStay": { + "message": "Қалу", + "description": "Label for button to prevent navigating away from unsaved changes" + }, + "dashboardUnsavedWarningIgnore": { + "message": "Өшіру", + "description": "Label for button to ignore unsaved changes" + }, + "settingsPageName": { + "message": "Баптаулар", + "description": "appears as tab name in dashboard" + }, + "3pPageName": { + "message": "3-ші жақты сүзгілер", + "description": "appears as tab name in dashboard" + }, + "1pPageName": { + "message": "Менің сүзгілерім", + "description": "appears as tab name in dashboard" + }, + "rulesPageName": { + "message": "Менің ережелерім", + "description": "appears as tab name in dashboard" + }, + "whitelistPageName": { + "message": "Рұқсат тізімі", + "description": "appears as tab name in dashboard" + }, + "shortcutsPageName": { + "message": "Жапсырм-р", + "description": "appears as tab name in dashboard" + }, + "statsPageName": { + "message": "uBlock₀ — Журналшы", + "description": "Title for the logger window" + }, + "aboutPageName": { + "message": "Осы туралы", + "description": "appears as tab name in dashboard" + }, + "supportPageName": { + "message": "Қолдау", + "description": "appears as tab name in dashboard" + }, + "assetViewerPageName": { + "message": "uBlock₀ — Активтерді қарау", + "description": "Title for the asset viewer page" + }, + "advancedSettingsPageName": { + "message": "Кеңейтілген баптаулар", + "description": "Title for the advanced settings page" + }, + "popupPowerSwitchInfo": { + "message": "Жай басу: осы сайт үшін uBlock₀ өшіріңіз / қосыңыз.\n\nCtrl+басу: тек осы бетте uBlock₀ өшіріңіз.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + }, + "popupPowerSwitchInfo1": { + "message": "Осы сайт үшін uBlock₀ өшіру үшін басыңыз\n\nТек осы бетте uBlock₀ өшіру үшін Ctrl+Басу.", + "description": "Message to be read by screen readers" + }, + "popupPowerSwitchInfo2": { + "message": "Осы сайт үшін uBlock₀ қосу үшін басыңыз.", + "description": "Message to be read by screen readers" + }, + "popupBlockedRequestPrompt": { + "message": "сұраным блокталды", + "description": "English: requests blocked" + }, + "popupBlockedOnThisPagePrompt": { + "message": "бұл парақта", + "description": "English: on this page" + }, + "popupBlockedStats": { + "message": "{{count}} немесе {{percent}}%", + "description": "Example: 15 (13%)" + }, + "popupBlockedSinceInstallPrompt": { + "message": "орнатылғаннан бастап", + "description": "English: since install" + }, + "popupOr": { + "message": "немесе", + "description": "English: or" + }, + "popupBlockedOnThisPage_v2": { + "message": "Жарнамалар жойылды", + "description": "For the new mobile-friendly popup design" + }, + "popupBlockedSinceInstall_v2": { + "message": "Орнатудан бастап құлыптаулы", + "description": "For the new mobile-friendly popup design" + }, + "popupDomainsConnected_v2": { + "message": "Домендар қосылды", + "description": "For the new mobile-friendly popup design" + }, + "popupTipDashboard": { + "message": "uBlock₀-ты орнату", + "description": "English: Click to open the dashboard" + }, + "popupTipZapper": { + "message": "Элементтің режимін енгізу", + "description": "Tooltip for the element-zapper icon in the popup panel" + }, + "popupTipPicker": { + "message": "Элемент таңдау режиміне өту", + "description": "English: Enter element picker mode" + }, + "popupTipLog": { + "message": "Журналды ашу", + "description": "Tooltip used for the logger icon in the panel" + }, + "popupTipReport": { + "message": "Осы вебсайттағы мәселе жайлы хабарлау", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipNoPopups": { + "message": "Осы сайт үшін барлық попаптарды бұғаттау", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups1": { + "message": "Мына сайттағы барлық қалқымалы терезелерді бұғаттау үшін басыңыз", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2": { + "message": "Мына сайттағы барлық қалқымалы терезелерді бұғаттамау үшін басыңыз", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoLargeMedia": { + "message": "Мына сайттағы үлкен медиа элементтерді бұғаттауын қосу/сөндіру", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia1": { + "message": "Мына сайттағы үлкен медиа элементтерді бұғаттауын қосу үшін басыңыз", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2": { + "message": "Мына сайттағы үлкен медиа элементтерді бұғаттауын өшіру үшін басыңыз", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoCosmeticFiltering": { + "message": "Осы сайт үшін косметикалық сүзуді қосу/өшіру", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering1": { + "message": "Мына сайт үшін косметикалық сүзуді өшіру үшін басыңыз", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2": { + "message": "Мына сайт үшін косметикалық сүзуді қосу үшін басыңыз", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoRemoteFonts": { + "message": "Осы сайт үшін қашықтан қосылған қаріптерді қосу/өшіру", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts1": { + "message": "Мына сайттағы қашықтан қосылған қаріптерді бұғаттау үшін басыңыз", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts2": { + "message": "Мына сайттағы қашықтан қосылған қаріптерді бұғаттамау үшін басыңыз", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoScripting1": { + "message": "Осы сайт үшін JavaScript-ты өшіру үшін басыңыз", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupTipNoScripting2": { + "message": "Осы сайт үшін JavaScript-ты өшірмеу үшін басыңыз", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupNoPopups_v2": { + "message": "Қалқымалы терезелер", + "description": "Caption for the no-popups per-site switch" + }, + "popupNoLargeMedia_v2": { + "message": "Large media elements", + "description": "Caption for the no-large-media per-site switch" + }, + "popupNoCosmeticFiltering_v2": { + "message": "Cosmetic filtering", + "description": "Caption for the no-cosmetic-filtering per-site switch" + }, + "popupNoRemoteFonts_v2": { + "message": "Remote fonts", + "description": "Caption for the no-remote-fonts per-site switch" + }, + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" + }, + "popupMoreButton_v2": { + "message": "More", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton_v2": { + "message": "Less", + "description": "Label to be used to hide popup panel sections" + }, + "popupTipGlobalRules": { + "message": "Global rules: this column is for rules which apply to all sites.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." + }, + "popupTipLocalRules": { + "message": "Local rules: this column is for rules which apply to the current site only.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." + }, + "popupTipSaveRules": { + "message": "Click to make your changes permanent.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." + }, + "popupTipRevertRules": { + "message": "Click to revert your changes.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + }, + "popupAnyRulePrompt": { + "message": "барлығы", + "description": "" + }, + "popupImageRulePrompt": { + "message": "суреттер", + "description": "" + }, + "popup3pAnyRulePrompt": { + "message": "3-ші жақты", + "description": "" + }, + "popup3pPassiveRulePrompt": { + "message": "3-ші жақты css/суреттер", + "description": "" + }, + "popupInlineScriptRulePrompt": { + "message": "inline scripts", + "description": "" + }, + "popup1pScriptRulePrompt": { + "message": "1st-party scripts", + "description": "" + }, + "popup3pScriptRulePrompt": { + "message": "3rd-party scripts", + "description": "" + }, + "popup3pFrameRulePrompt": { + "message": "3rd-party frames", + "description": "" + }, + "popupHitDomainCountPrompt": { + "message": "domains connected", + "description": "appears in popup" + }, + "popupHitDomainCount": { + "message": "{{count}} out of {{total}}", + "description": "appears in popup" + }, + "popupVersion": { + "message": "Version", + "description": "Example of use: Version 1.26.4" + }, + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" + }, + "popup3pFrameFilter": { + "message": "frame", + "description": "Appears as an option to filter out firewall rows" + }, + "pickerCreate": { + "message": "Жасау", + "description": "English: Create" + }, + "pickerPick": { + "message": "Таңдау", + "description": "English: Pick" + }, + "pickerQuit": { + "message": "Шығу", + "description": "English: Quit" + }, + "pickerPreview": { + "message": "Алдын-ала қарау", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + }, + "pickerNetFilters": { + "message": "Network filters", + "description": "English: header for a type of filter in the element picker dialog" + }, + "pickerCosmeticFilters": { + "message": "Cosmetic filters", + "description": "English: Cosmetic filters" + }, + "pickerCosmeticFiltersHint": { + "message": "Шерту, Ctrl-шерту", + "description": "English: Click, Ctrl-click" + }, + "pickerContextMenuEntry": { + "message": "Элементті блоктау", + "description": "An entry in the browser's contextual menu" + }, + "settingsCollapseBlockedPrompt": { + "message": "Hide placeholders of blocked elements", + "description": "English: Hide placeholders of blocked elements" + }, + "settingsIconBadgePrompt": { + "message": "Show the number of blocked requests on the icon", + "description": "English: Show the number of blocked requests on the icon" + }, + "settingsTooltipsPrompt": { + "message": "Disable tooltips", + "description": "A checkbox in the Settings pane" + }, + "settingsContextMenuPrompt": { + "message": "Make use of context menu where appropriate", + "description": "English: Make use of context menu where appropriate" + }, + "settingsColorBlindPrompt": { + "message": "Color-blind friendly", + "description": "English: Color-blind friendly" + }, + "settingsAppearance": { + "message": "Appearance", + "description": "Section for controlling user interface appearance" + }, + "settingsThemeLabel": { + "message": "Theme", + "description": "Label for checkbox to enable a custom dark theme" + }, + "settingsThemeAccent0Label": { + "message": "Custom accent color", + "description": "Label for checkbox to pick an accent color" + }, + "settingsCloudStorageEnabledPrompt": { + "message": "Enable cloud storage support", + "description": "" + }, + "settingsAdvancedUserPrompt": { + "message": "I am an advanced user", + "description": "Checkbox to let user access advanced, technical features" + }, + "settingsPrefetchingDisabledPrompt": { + "message": "Disable pre-fetching (to prevent any connection for blocked network requests)", + "description": "English: " + }, + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Disable hyperlink auditing", + "description": "English: " + }, + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Prevent WebRTC from leaking local IP addresses", + "description": "English: " + }, + "settingPerSiteSwitchGroup": { + "message": "Default behavior", + "description": "" + }, + "settingPerSiteSwitchGroupSynopsis": { + "message": "These default behaviors can be overridden on a per-site basis", + "description": "" + }, + "settingsNoCosmeticFilteringPrompt": { + "message": "Disable cosmetic filtering", + "description": "" + }, + "settingsNoLargeMediaPrompt": { + "message": "Block media elements larger than {{input}} KB", + "description": "" + }, + "settingsNoRemoteFontsPrompt": { + "message": "Block remote fonts", + "description": "" + }, + "settingsNoScriptingPrompt": { + "message": "Disable JavaScript", + "description": "The default state for the per-site no-scripting switch" + }, + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" + }, + "settingsUncloakCnamePrompt": { + "message": "Uncloak canonical names", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" + }, + "settingsAdvanced": { + "message": "Advanced", + "description": "Section for controlling advanced-user settings" + }, + "settingsAdvancedSynopsis": { + "message": "Features suitable only for technical users", + "description": "Description of section controlling advanced-user settings" + }, + "settingsAdvancedUserSettings": { + "message": "advanced settings", + "description": "For the tooltip of a link which gives access to advanced settings" + }, + "settingsLastRestorePrompt": { + "message": "Last restore:", + "description": "English: Last restore:" + }, + "settingsLastBackupPrompt": { + "message": "Last backup:", + "description": "English: Last backup:" + }, + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:", + "description": "Appears at the top of the _3rd-party filters_ pane" + }, + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} used out of {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "3pAutoUpdatePrompt1": { + "message": "Auto-update filter lists", + "description": "A checkbox in the _3rd-party filters_ pane" + }, + "3pUpdateNow": { + "message": "Update now", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pPurgeAll": { + "message": "Purge all caches", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pParseAllABPHideFiltersPrompt1": { + "message": "Parse and enforce cosmetic filters", + "description": "English: Parse and enforce Adblock+ element hiding filters." + }, + "3pParseAllABPHideFiltersInfo": { + "message": "Cosmetic filters serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the network request-based filtering engines.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + }, + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignore generic cosmetic filters", + "description": "This will cause uBO to ignore all generic cosmetic filters." + }, + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." + }, + "3pSuspendUntilListsAreLoaded": { + "message": "Suspend network activity until all filter lists are loaded", + "description": "A checkbox in the 'Filter lists' pane" + }, + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" + }, + "3pApplyChanges": { + "message": "Өзерістерді іске асыру", + "description": "English: Apply changes" + }, + "3pGroupDefault": { + "message": "Built-in", + "description": "Filter lists section name" + }, + "3pGroupAds": { + "message": "Жарнамалар", + "description": "Filter lists section name" + }, + "3pGroupPrivacy": { + "message": "Жекелік", + "description": "Filter lists section name" + }, + "3pGroupMalware": { + "message": "Malware protection, security", + "description": "Filter lists section name" + }, + "3pGroupSocial": { + "message": "Social widgets", + "description": "Filter lists section name" + }, + "3pGroupCookies": { + "message": "Cookie notices", + "description": "Filter lists section name" + }, + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "Filter lists section name" + }, + "3pGroupMultipurpose": { + "message": "Multipurpose", + "description": "Filter lists section name" + }, + "3pGroupRegions": { + "message": "Regions, languages", + "description": "Filter lists section name" + }, + "3pGroupCustom": { + "message": "Custom", + "description": "Filter lists section name" + }, + "3pImport": { + "message": "Import…", + "description": "The label for the checkbox used to import external filter lists" + }, + "3pExternalListsHint": { + "message": "One URL per line. Invalid URLs will be silently ignored.", + "description": "Short information about how to use the textarea to import external filter lists by URL" + }, + "3pExternalListObsolete": { + "message": "Out of date.", + "description": "used as a tooltip for the out-of-date icon beside a list" + }, + "3pViewContent": { + "message": "view content", + "description": "used as a tooltip for eye icon beside a list" + }, + "3pLastUpdate": { + "message": "Last update: {{ago}}.\nClick to force an update.", + "description": "used as a tooltip for the clock icon beside a list" + }, + "3pUpdating": { + "message": "Updating…", + "description": "used as a tooltip for the spinner icon beside a list" + }, + "3pNetworkError": { + "message": "A network error prevented the resource from being updated.", + "description": "used as a tooltip for error icon beside a list" + }, + "1pTrustWarning": { + "message": "Do not add filters from untrusted sources.", + "description": "Warning against copy-pasting filters from random sources" + }, + "1pEnableMyFiltersLabel": { + "message": "Enable my custom filters", + "description": "Label for the checkbox use to enable/disable 'My filters' list" + }, + "1pTrustMyFiltersLabel": { + "message": "Allow custom filters requiring trust", + "description": "Label for the checkbox use to trust the content of 'My filters' list" + }, + "1pImport": { + "message": "Import and append…", + "description": "Button in the 'My filters' pane" + }, + "1pExport": { + "message": "Export…", + "description": "Button in the 'My filters' pane" + }, + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" + }, + "1pApplyChanges": { + "message": "Apply changes", + "description": "English: Apply changes" + }, + "rulesPermanentHeader": { + "message": "Permanent rules", + "description": "header" + }, + "rulesTemporaryHeader": { + "message": "Temporary rules", + "description": "header" + }, + "rulesRevert": { + "message": "Қайтару", + "description": "This will remove all temporary rules" + }, + "rulesCommit": { + "message": "Commit", + "description": "This will persist temporary rules" + }, + "rulesEdit": { + "message": "Түзету", + "description": "Will enable manual-edit mode (textarea)" + }, + "rulesEditSave": { + "message": "Сақтау", + "description": "Will save manually-edited content and exit manual-edit mode" + }, + "rulesEditDiscard": { + "message": "Елемеу", + "description": "Will discard manually-edited content and exit manual-edit mode" + }, + "rulesImport": { + "message": "Файлдан импорттау...", + "description": "" + }, + "rulesExport": { + "message": "Файлға экспорттау", + "description": "Button in the 'My rules' pane" + }, + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" + }, + "rulesHint": { + "message": "List of your dynamic filtering rules.", + "description": "English: List of your dynamic filtering rules." + }, + "rulesFormatHint": { + "message": "Rule syntax: source destination type action (full documentation).", + "description": "English: dynamic rule syntax and full documentation." + }, + "rulesSort": { + "message": "Sort:", + "description": "English: label for sort option." + }, + "rulesSortByType": { + "message": "Rule type", + "description": "English: a sort option for list of rules." + }, + "rulesSortBySource": { + "message": "Source", + "description": "English: a sort option for list of rules." + }, + "rulesSortByDestination": { + "message": "Destination", + "description": "English: a sort option for list of rules." + }, + "whitelistPrompt": { + "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line.", + "description": "A concise description of the 'Trusted sites' pane." + }, + "whitelistImport": { + "message": "Import and append…", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExport": { + "message": "Экспорт", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" + }, + "whitelistApply": { + "message": "Өзерістерді іске асыру", + "description": "English: Apply changes" + }, + "logRequestsHeaderType": { + "message": "Түрі", + "description": "English: Type" + }, + "logRequestsHeaderDomain": { + "message": "Домен", + "description": "English: Domain" + }, + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" + }, + "logRequestsHeaderFilter": { + "message": "Сүзгі", + "description": "English: Filter" + }, + "logAll": { + "message": "Барлығы", + "description": "Appears in the logger's tab selector" + }, + "logBehindTheScene": { + "message": "Tabless", + "description": "Pretty name for behind-the-scene network requests" + }, + "loggerCurrentTab": { + "message": "Current tab", + "description": "Appears in the logger's tab selector" + }, + "loggerReloadTip": { + "message": "Reload the tab content", + "description": "Tooltip for the reload button in the logger page" + }, + "loggerDomInspectorTip": { + "message": "Toggle the DOM inspector", + "description": "Tooltip for the DOM inspector button in the logger page" + }, + "loggerPopupPanelTip": { + "message": "Toggle the popup panel", + "description": "Tooltip for the popup panel button in the logger page" + }, + "loggerInfoTip": { + "message": "uBlock Origin wiki: The logger", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Clear logger", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Журналды кідірту (барлық кіріс деректерін алып тастау)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Журналды тоқтата тұру", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Журнал тіркеушісі сүзгісін қосу", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "сүзгі журналының мазмұны", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Журнал тіркесімін сүзу параметрлері", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Жоқ:", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "бұғату", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "рұқсаты", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "modified", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "1-ші тарап", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "3-і тарап", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Егжей", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Сүзгі", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Сүзгілер тізімі", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Ереже", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Контекст", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Түбірлік контекст", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Көңілділік", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Түрі", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL ережесі", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Контекст:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Түрі:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Статикалық сүзгі", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} қай URL мекен-жайы {{url}} {{br}} сәйкес келетін және {{Origin}}, {{br}} {{маңыздылығы) қай URL мекен-жайы сәйкес келетін {{type}} {{br}} желілік сұраулары сәйкес ерекше жағдай сүзгісі.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Бұғату", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Рұқсат ету", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "type “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "any type", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "from “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "from anywhere", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "except when", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "even if", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Static filter {{filter}} found in:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Static filter could not be found in any of the currently enabled filter lists", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Preserve entries from the last {{input}} minutes", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Preserve at most {{input}} page loads per tab", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Preserve at most {{input}} entries per tab", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Use {{input}} lines per entry in vertically expanded mode", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Hide columns:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Time", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filter/rule", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Context", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Partyness", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "List", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Table", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Plain", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Open", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Create new report on GitHub", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Find similar reports on GitHub", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Documentation", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Read the documentation at uBlock/wiki to learn about all of uBlock Origin's features.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Questions and support", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Answers to questions and other kinds of help support is provided on the subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filter issues/website is broken", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Important: Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tips: Be sure your filter lists are up to date. The logger is the primary tool to diagnose filter-related issues.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Bug report", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Report issues with uBlock Origin itself to the uBlockOrigin/uBlock-issue issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Troubleshooting Information", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported. Note: clicking the button will cause the page's origin to be sent to GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verify that the issue still exists after reloading the problematic web page.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the web page:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The web page…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBlock Origin is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the web page as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Privacy policy", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Changelog", + "description": "" + }, + "aboutCode": { + "message": "Бастапқы код (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Салымшылар", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Бастапқы код", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Аудармашылар", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Тізімдерді сүзу", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Сыртқы тәуелділіктер (GPLv3 үйлесімді):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO's own filter lists are freely hosted on the following CDNs:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "A randomly picked CDN is used when a filter list needs to be updated.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Файлға сақтық көшірме жасау", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Файлдан қалпына келтіру...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Әдепкі параметрлерге қайтару...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Барлық параметрлер {{time}} күні сақтық көшірмесі жасалған деректерді пайдаланып жазылады және uBlock₀ қайта іске қосылады.\n\nСақтық көшірме жасалған деректерді пайдаланып, барлық қолданыстағы параметрлерді қайта жазу керек пе?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Дата оқуға сай емес (жарамсыз)", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Барлық параметрлер жойылып, uBlock₀ қайта қосылады.\n\nUBlock₀ зауыттық параметрлерге қайтарылсын ба?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Желілік қате: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Жазылу", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "бір минут бұрын", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} минут бұрын", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "бір сағат бұрын", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} сағат бұрын", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "бір күн бұрын", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} күн бұрын", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Орнату-ды көрсету", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Logger-ді көрсету", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "сөнд.", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Page blocked", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin келесі парақтың жүктелуіне жол бермеді:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Келесі сүзгіге байланысты:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "параметрсіз", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Мында табылды:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Артқа", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Терезені жабу", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "{{Hostname}} үшін қатаң блоктауды өшіру", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Уақытша", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Тұрақты", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Proceed", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Бұлтты жадқа экспорттау", + "description": "tooltip" + }, + "cloudPull": { + "message": "Бұлт қоймасынан импорттау", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Бұлтты сақтау қоймасынан импорттаңыз және ағымдағы параметрлермен біріктіру", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Девайстың аты:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Ескерту! Өзіңіздің тәуекеліңізбен осы кеңейтілген параметрлерді өзгертіңіз.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Жіберу", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Өзгерістерді қолдану", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Қайтару", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "байт", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Block element in frame…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Subscribe to filter list…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Үлкен медиа элементтеріне уақытша рұқсат беру", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "View source code…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Жарлық теріңіз", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Құлыпталған айналдыруды қосу", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Аралық сақтағышқа көшіру", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Select all", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Toggle cosmetic filtering", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Toggle JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Бөгеу режимі", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "{{value}} {{unit}} қолданылды.", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "КБ", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "МБ", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "ГБ", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Click to load", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Errors: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" + } +} diff --git a/src/_locales/kn/messages.json b/src/_locales/kn/messages.json new file mode 100644 index 0000000000000..72f80be871d55 --- /dev/null +++ b/src/_locales/kn/messages.json @@ -0,0 +1,1314 @@ +{ + "extName": { + "message": "ಯುಬ್ಲಾಕ್", + "description": "extension name." + }, + "extShortDesc": { + "message": "ಕೊನೆಗೆ, ಒಂದು ದಕ್ಷ ನಿರ್ಬಂಧಕ. ಮಿತವಾದ ಸಿಪಿಯೂ ಹಾಗು ಮೆಮೊರಿ ಬಳಿಕೇಒಂದಿಗೆ .", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "dashboardName": { + "message": "uBlock₀ - ಡ್ಯಾಶ್ಬೋರ್ಡು", + "description": "English: uBlock₀ — Dashboard" + }, + "dashboardUnsavedWarning": { + "message": "ಎಚ್ಚರಿಕೆ! ನೀವು ಉಳಿಸದ ಬದಲಾವಣೆಗಳನ್ನು ಹೊಂದಿದ್ದೀರಿ", + "description": "A warning in the dashboard when navigating away from unsaved changes" + }, + "dashboardUnsavedWarningStay": { + "message": "ಇಲ್ಲೇ ಇರು", + "description": "Label for button to prevent navigating away from unsaved changes" + }, + "dashboardUnsavedWarningIgnore": { + "message": "ನಿರ್ಲಕ್ಷಿಸು", + "description": "Label for button to ignore unsaved changes" + }, + "settingsPageName": { + "message": "ಸೆಟ್ಟಿಂಗ್ಸ್", + "description": "appears as tab name in dashboard" + }, + "3pPageName": { + "message": "೩ನೇ ವ್ಯಕ್ತಿ ಶೋಧಕಗಳು", + "description": "appears as tab name in dashboard" + }, + "1pPageName": { + "message": "ನನ್ನ ಶೋಧಕಗಳು", + "description": "appears as tab name in dashboard" + }, + "rulesPageName": { + "message": "ನನ್ನ ನಿಯಮಗಳು", + "description": "appears as tab name in dashboard" + }, + "whitelistPageName": { + "message": "ವೈಟ್ ಲಿಸ್ಟ್", + "description": "appears as tab name in dashboard" + }, + "shortcutsPageName": { + "message": "ಶಾರ್ಟ್‌ಕಟ್‌ಗಳು", + "description": "appears as tab name in dashboard" + }, + "statsPageName": { + "message": "uBlock₀ — ಲಾಗರ್", + "description": "Title for the logger window" + }, + "aboutPageName": { + "message": "ಕುರಿತು", + "description": "appears as tab name in dashboard" + }, + "supportPageName": { + "message": "ಬೆಂಬಲ", + "description": "appears as tab name in dashboard" + }, + "assetViewerPageName": { + "message": "uBlock₀ — ಆಸ್ತಿ ವೀಕ್ಷಕ", + "description": "Title for the asset viewer page" + }, + "advancedSettingsPageName": { + "message": "ಸುಧಾರಿತ ಆಯ್ಕೆಗಳು", + "description": "Title for the advanced settings page" + }, + "popupPowerSwitchInfo": { + "message": "ಕ್ಲಿಕ್: ಈ ಜಾಲತಾಣಕ್ಕೆ ನಿಷ್ಕ್ರಿಯ/ಸಕ್ರಿಯಗೊಳಿಸಲು.\nಕಂಟ್ರೋಲ್ + ಕ್ಲಿಕ್: ಈ ಜಾಲತಾಣಕ್ಕೆ ಮಾತ್ರ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + }, + "popupPowerSwitchInfo1": { + "message": "ಈ ಸೈಟ್‌ಗಾಗಿ uBlock₀ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ.\n\nಈ ಪುಟದಲ್ಲಿ ಮಾತ್ರ uBlock₀ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು Ctrl+ಕ್ಲಿಕ್ ಮಾಡಿ.", + "description": "Message to be read by screen readers" + }, + "popupPowerSwitchInfo2": { + "message": "ಈ ಸೈಟ್‌ಗಾಗಿ uBlock₀ ಸಕ್ರಿಯಗೊಳಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ.", + "description": "Message to be read by screen readers" + }, + "popupBlockedRequestPrompt": { + "message": "ಬೇಡಿಕೆಗಳನ್ನು ತಡೆಹಿಡಿಯಲಾಗಿದೆ", + "description": "English: requests blocked" + }, + "popupBlockedOnThisPagePrompt": { + "message": "ಈ ಪುಟದಲ್ಲಿ", + "description": "English: on this page" + }, + "popupBlockedStats": { + "message": "{{count}} ಅಥವಾ {{percent}}%", + "description": "Example: 15 (13%)" + }, + "popupBlockedSinceInstallPrompt": { + "message": "ಅನುಸ್ಥಾಪಿಸಿದ ಈಚೆಗೆ", + "description": "English: since install" + }, + "popupOr": { + "message": "ಅಥವಾ", + "description": "English: or" + }, + "popupBlockedOnThisPage_v2": { + "message": "ಈ ಪುಟದಲ್ಲಿ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ", + "description": "For the new mobile-friendly popup design" + }, + "popupBlockedSinceInstall_v2": { + "message": "ಸ್ಥಾಪಿಸಿದಾಗಿನಿಂದ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ", + "description": "For the new mobile-friendly popup design" + }, + "popupDomainsConnected_v2": { + "message": "ಸಂಪರ್ಕಳಗಿಸಿದ ಡೊಮೈನುಗಳು ", + "description": "For the new mobile-friendly popup design" + }, + "popupTipDashboard": { + "message": "ಡ್ಯಾಶ್ಬೋರ್ಡ ತೆರೆಯಲು ಕ್ಲಿಕಿಸಿ", + "description": "English: Click to open the dashboard" + }, + "popupTipZapper": { + "message": "Element zapper ಮೋಡ್ ಅನ್ನು ಬಳಸಿ", + "description": "Tooltip for the element-zapper icon in the popup panel" + }, + "popupTipPicker": { + "message": "ಅಂಶ ಆಯ್ವಿಕೆ ಕ್ರಮಕ್ಕೆ ದಾಖಲಾಗಿ", + "description": "English: Enter element picker mode" + }, + "popupTipLog": { + "message": "ಲಾಗರ್ ತೆರೆಯಿರಿ", + "description": "Tooltip used for the logger icon in the panel" + }, + "popupTipReport": { + "message": "ublock origin ಗೆ ಸಂಬಂಧಿಸಿದ ಈ ವೆಬ್‌ಸೈಟ್‌ನಲ್ಲಿ ಸಮಸ್ಯೆಯನ್ನು ವರದಿ ಮಾಡಿ", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipNoPopups": { + "message": "ಈ ಜಾಲತಾಣದ ಎಲ್ಲಾ ಪಾಪ್ಅಪ್ ಗಳ ನಿರ್ಬಂಧವನ್ನು ಟಾಗಲ್ ಮಾಡಿ", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups1": { + "message": "ಈ ಸೈಟ್‌ನಲ್ಲಿ ಎಲ್ಲಾ ಪಾಪ್‌ಅಪ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2": { + "message": "ಈ ಸೈಟ್‌ನಲ್ಲಿ ಇನ್ನು ಮುಂದೆ ಎಲ್ಲಾ ಪಾಪ್‌ಅಪ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸದಿರಲು ಕ್ಲಿಕ್ ಮಾಡಿ", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoLargeMedia": { + "message": "ಈ ಸೈಟ್‌ಗಾಗಿ ದೊಡ್ಡ ಮಾಧ್ಯಮ ಅಂಶಗಳ ನಿರ್ಬಂಧಿಸುವಿಕೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia1": { + "message": "ಈ ಸೈಟ್‌ಗಾಗಿ ದೊಡ್ಡ ಮಾಧ್ಯಮ ಅಂಶಗಳ ನಿರ್ಬಂಧಿಸುವಿಕೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoCosmeticFiltering": { + "message": "ಈ ಜಾಲತಾಣಕ್ಕೆ ಕಾಸ್ಮೆಟಿಕ್ ಫಿಲ್ಟರಿಂಗನ್ನು ಟಾಗಲ್ ಮಾಡಿ", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering1": { + "message": "ಈ ಸೈಟ್‌ನಲ್ಲಿ ಕಾಸ್ಮೆಟಿಕ್ ಫಿಲ್ಟರಿಂಗ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ.", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2": { + "message": "ಈ ಸೈಟ್‌ನಲ್ಲಿ ಕಾಸ್ಮೆಟಿಕ್ ಫಿಲ್ಟರಿಂಗ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ.", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoRemoteFonts": { + "message": "ಈ ಜಾಲತಾಣಕ್ಕೆ ದೂರಸ್ಥ ಅಕ್ಷರಶೈಲಿಯ ನಿರ್ಬಂಧವನ್ನು ಟಾಗಲ್ ಮಾಡಿ", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts1": { + "message": "Click to block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts2": { + "message": "Click to no longer block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoScripting1": { + "message": "ಈ ಸೈಟ್‌ನಲ್ಲಿ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupTipNoScripting2": { + "message": "Click to no longer disable JavaScript on this site", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupNoPopups_v2": { + "message": "ಪಾಪ್-ಅಪ್ ವಿಂಡೋ", + "description": "Caption for the no-popups per-site switch" + }, + "popupNoLargeMedia_v2": { + "message": "ದೊಡ್ಡ ಮಾಧ್ಯಮ ಅಂಶಗಳು", + "description": "Caption for the no-large-media per-site switch" + }, + "popupNoCosmeticFiltering_v2": { + "message": "ಕಾಸ್ಮೆಟಿಕ್ ಫಿಲ್ಟರಿಂಗ್", + "description": "Caption for the no-cosmetic-filtering per-site switch" + }, + "popupNoRemoteFonts_v2": { + "message": "Remote fonts", + "description": "Caption for the no-remote-fonts per-site switch" + }, + "popupNoScripting_v2": { + "message": "ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್", + "description": "Caption for the no-scripting per-site switch" + }, + "popupMoreButton_v2": { + "message": "ಅಧಿಕ", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton_v2": { + "message": "ಕಡಿಮೆ", + "description": "Label to be used to hide popup panel sections" + }, + "popupTipGlobalRules": { + "message": "Global rules: this column is for rules which apply to all sites.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." + }, + "popupTipLocalRules": { + "message": "Local rules: this column is for rules which apply to the current site only.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." + }, + "popupTipSaveRules": { + "message": "ಶಾಶ್ವತ ಬದಲಾವಣೆಗಳನ್ನು ಮಾಡಲು ಕ್ಲಿಕ್ ಮಾಡಿ", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." + }, + "popupTipRevertRules": { + "message": "ನಿಮ್ಮ ಬದಲಾವಣೆಗಳನ್ನು ಹಿಂತಿರುಗಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + }, + "popupAnyRulePrompt": { + "message": "ಎಲ್ಲಾ", + "description": "" + }, + "popupImageRulePrompt": { + "message": "ಚಿತ್ರಗಳು", + "description": "" + }, + "popup3pAnyRulePrompt": { + "message": "೩ನೇ ವ್ಯಕ್ತಿ", + "description": "" + }, + "popup3pPassiveRulePrompt": { + "message": "೩ನೇ ವ್ಯಕ್ತಿ ಸಿಎಸ್ಸೇಸು/ಚಿತ್ರಗಳು", + "description": "" + }, + "popupInlineScriptRulePrompt": { + "message": "ಒಳಸಾಲಿನ ಸ್ಕ್ರಿಪ್ಟುಗಳು", + "description": "" + }, + "popup1pScriptRulePrompt": { + "message": "೧ನೇ ವ್ಯಕ್ತಿ ಸ್ಕ್ರಿಪ್ಟುಗಳು", + "description": "" + }, + "popup3pScriptRulePrompt": { + "message": "೩ನೇ ವ್ಯಕ್ತಿ ಸ್ಕ್ರಿಪ್ಟುಗಳು", + "description": "" + }, + "popup3pFrameRulePrompt": { + "message": "೩ನೇ ವ್ಯಕ್ತಿ ಫ್ರೇಮುಗಳು", + "description": "" + }, + "popupHitDomainCountPrompt": { + "message": "ಸಂಪರ್ಕ ಹೊಂದಿರುವ ಡೊಮೈನ್ಗಳು", + "description": "appears in popup" + }, + "popupHitDomainCount": { + "message": "{{total}} ರಲ್ಲಿ {{count}}", + "description": "appears in popup" + }, + "popupVersion": { + "message": "ಆವೃತ್ತಿ", + "description": "Example of use: Version 1.26.4" + }, + "popup3pScriptFilter": { + "message": "ಸ್ಕ್ರಿಪ್ಟ್", + "description": "Appears as an option to filter out firewall rows" + }, + "popup3pFrameFilter": { + "message": "ಫ್ರೇಮ್", + "description": "Appears as an option to filter out firewall rows" + }, + "pickerCreate": { + "message": "ರಚಿಸಿ", + "description": "English: Create" + }, + "pickerPick": { + "message": "ಆಯ್ಕೆ", + "description": "English: Pick" + }, + "pickerQuit": { + "message": "ತ್ಯಜಿಸಿ", + "description": "English: Quit" + }, + "pickerPreview": { + "message": "ಮುನ್ನೋಟ", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + }, + "pickerNetFilters": { + "message": "ನಿವ್ವಳ ಫಿಲ್ಟರುಗಳು", + "description": "English: header for a type of filter in the element picker dialog" + }, + "pickerCosmeticFilters": { + "message": "ಕಾಸ್ಮೆಟಿಕ್ ಫಿಲ್ಟರುಗಳು", + "description": "English: Cosmetic filters" + }, + "pickerCosmeticFiltersHint": { + "message": "ಕ್ಲಿಕ್, ಕಂಟ್ರೋಲ್-ಕ್ಲಿಕ್", + "description": "English: Click, Ctrl-click" + }, + "pickerContextMenuEntry": { + "message": "ಭಾಗ ತಡೆಹಿಡಿಯಿರಿ", + "description": "An entry in the browser's contextual menu" + }, + "settingsCollapseBlockedPrompt": { + "message": "ನಿರ್ಬಂಧಿಸಿದ ಭಾಗಗಳಿರುವ ಪ್ಲೇಸ್ಹೋಲ್ಡರ್ಸ್ ಮರೆಮಾಡಿ", + "description": "English: Hide placeholders of blocked elements" + }, + "settingsIconBadgePrompt": { + "message": "Show the number of blocked requests on the icon", + "description": "English: Show the number of blocked requests on the icon" + }, + "settingsTooltipsPrompt": { + "message": "Disable tooltips", + "description": "A checkbox in the Settings pane" + }, + "settingsContextMenuPrompt": { + "message": "Make use of context menu where appropriate", + "description": "English: Make use of context menu where appropriate" + }, + "settingsColorBlindPrompt": { + "message": "ಬಣ್ಣ ಅಂಧತೆ ಉಪಯುಕ್ತ", + "description": "English: Color-blind friendly" + }, + "settingsAppearance": { + "message": "ನೋಟ", + "description": "Section for controlling user interface appearance" + }, + "settingsThemeLabel": { + "message": "ಥೀಮ್", + "description": "Label for checkbox to enable a custom dark theme" + }, + "settingsThemeAccent0Label": { + "message": "Custom accent color", + "description": "Label for checkbox to pick an accent color" + }, + "settingsCloudStorageEnabledPrompt": { + "message": "Enable cloud storage support", + "description": "" + }, + "settingsAdvancedUserPrompt": { + "message": "ನಾನು ಮುಂದುವರಿದ ಬಳಕೆದಾರ", + "description": "Checkbox to let user access advanced, technical features" + }, + "settingsPrefetchingDisabledPrompt": { + "message": "Disable pre-fetching (to prevent any connection for blocked network requests)", + "description": "English: " + }, + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Disable hyperlink auditing", + "description": "English: " + }, + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Prevent WebRTC from leaking local IP addresses", + "description": "English: " + }, + "settingPerSiteSwitchGroup": { + "message": "Default behavior", + "description": "" + }, + "settingPerSiteSwitchGroupSynopsis": { + "message": "These default behaviors can be overridden on a per-site basis", + "description": "" + }, + "settingsNoCosmeticFilteringPrompt": { + "message": "Disable cosmetic filtering", + "description": "" + }, + "settingsNoLargeMediaPrompt": { + "message": "Block media elements larger than {{input}} KB", + "description": "" + }, + "settingsNoRemoteFontsPrompt": { + "message": "Block remote fonts", + "description": "" + }, + "settingsNoScriptingPrompt": { + "message": "ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ", + "description": "The default state for the per-site no-scripting switch" + }, + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" + }, + "settingsUncloakCnamePrompt": { + "message": "Uncloak canonical names", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" + }, + "settingsAdvanced": { + "message": "ಉನ್ನತ ಸಂಯೋಜನೆಗಳು", + "description": "Section for controlling advanced-user settings" + }, + "settingsAdvancedSynopsis": { + "message": "Features suitable only for technical users", + "description": "Description of section controlling advanced-user settings" + }, + "settingsAdvancedUserSettings": { + "message": "ಮು೦ದುವರಿದ ಸೆಟ್ಟಿಂಗ್ಸ್", + "description": "For the tooltip of a link which gives access to advanced settings" + }, + "settingsLastRestorePrompt": { + "message": "Last restore:", + "description": "English: Last restore:" + }, + "settingsLastBackupPrompt": { + "message": "ಕೊನೆಯ ಬ್ಯಾಕಪ್:", + "description": "English: Last backup:" + }, + "3pListsOfBlockedHostsPrompt": { + "message": "ಕೆಳಗಿನ ಫೈಲಟ್ರ್ಪಟ್ಟಿಗೆಯಿಂದ {{netFilterCount}} ನೆಟ್ವರ್ಕ್ ಫಿಲ್ಟರ್ಗಳು + {{cosmeticfiltercount}} ಕಾಸ್ಮೆಟಿಕ್ ಶೋಧಕಗಳು ಕ್ರಿಯಾಶೀಲವಾಗಿದೆ:", + "description": "Appears at the top of the _3rd-party filters_ pane" + }, + "3pListsOfBlockedHostsPerListStats": { + "message": "{{total}} ರಿಂದ {{used}} ಬಳಸಲುಗುವುತಿದೆ ", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "3pAutoUpdatePrompt1": { + "message": "ಶೋಧಕ ಪಟ್ಟಿಗಳನ್ನು ಸ್ವಯಂ ನವೀಕರಿಸಿ.", + "description": "A checkbox in the _3rd-party filters_ pane" + }, + "3pUpdateNow": { + "message": "ಈಗ ನವೀಕರಿಸಿ", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pPurgeAll": { + "message": "Purge all caches", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pParseAllABPHideFiltersPrompt1": { + "message": "Parse and enforce cosmetic filters", + "description": "English: Parse and enforce Adblock+ element hiding filters." + }, + "3pParseAllABPHideFiltersInfo": { + "message": "Cosmetic filters serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the network request-based filtering engines.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + }, + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignore generic cosmetic filters", + "description": "This will cause uBO to ignore all generic cosmetic filters." + }, + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." + }, + "3pSuspendUntilListsAreLoaded": { + "message": "Suspend network activity until all filter lists are loaded", + "description": "A checkbox in the 'Filter lists' pane" + }, + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" + }, + "3pApplyChanges": { + "message": "ಬದಲಾವಣೆಗಳನ್ನು ಅನ್ವಯಿಸಿ", + "description": "English: Apply changes" + }, + "3pGroupDefault": { + "message": "Built-in", + "description": "Filter lists section name" + }, + "3pGroupAds": { + "message": "ಜಾಹಿರಾತು", + "description": "Filter lists section name" + }, + "3pGroupPrivacy": { + "message": "ಗೌಪ್ಯತೆ", + "description": "Filter lists section name" + }, + "3pGroupMalware": { + "message": "ಮಾಲ್ವೇರ್ ರಕ್ಷಣೆ, ಭದ್ರತೆ", + "description": "Filter lists section name" + }, + "3pGroupSocial": { + "message": "Social widgets", + "description": "Filter lists section name" + }, + "3pGroupCookies": { + "message": "Cookie notices", + "description": "Filter lists section name" + }, + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "Filter lists section name" + }, + "3pGroupMultipurpose": { + "message": "ಬಹುಪಯೋಗಿ", + "description": "Filter lists section name" + }, + "3pGroupRegions": { + "message": "ಪ್ರದೇಶಗಳು, ಭಾಷೆಗಳು", + "description": "Filter lists section name" + }, + "3pGroupCustom": { + "message": "ಇಚ್ಛೆಯ", + "description": "Filter lists section name" + }, + "3pImport": { + "message": "ಆಮದು...", + "description": "The label for the checkbox used to import external filter lists" + }, + "3pExternalListsHint": { + "message": "One URL per line. Invalid URLs will be silently ignored.", + "description": "Short information about how to use the textarea to import external filter lists by URL" + }, + "3pExternalListObsolete": { + "message": "ಹಳೆಯದಾಗಿದೆ", + "description": "used as a tooltip for the out-of-date icon beside a list" + }, + "3pViewContent": { + "message": "ವಿಷಯವನ್ನು ವೀಕ್ಷಿಸಿ", + "description": "used as a tooltip for eye icon beside a list" + }, + "3pLastUpdate": { + "message": "Last update: {{ago}}.\nClick to force an update.", + "description": "used as a tooltip for the clock icon beside a list" + }, + "3pUpdating": { + "message": "ಸೇರಿಸಲಾಗುತ್ತಿದೆ...", + "description": "used as a tooltip for the spinner icon beside a list" + }, + "3pNetworkError": { + "message": "A network error prevented the resource from being updated.", + "description": "used as a tooltip for error icon beside a list" + }, + "1pTrustWarning": { + "message": "Do not add filters from untrusted sources.", + "description": "Warning against copy-pasting filters from random sources" + }, + "1pEnableMyFiltersLabel": { + "message": "Enable my custom filters", + "description": "Label for the checkbox use to enable/disable 'My filters' list" + }, + "1pTrustMyFiltersLabel": { + "message": "Allow custom filters requiring trust", + "description": "Label for the checkbox use to trust the content of 'My filters' list" + }, + "1pImport": { + "message": "ಆಮದಿಸಿ ಸೇರ್ಪಡಿಸು...", + "description": "Button in the 'My filters' pane" + }, + "1pExport": { + "message": "ರಫ್ತು...", + "description": "Button in the 'My filters' pane" + }, + "1pExportFilename": { + "message": "ನನ್ನ-ublock-ಸ್ಥಿರ-ಶೋಧಕಗಳು_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" + }, + "1pApplyChanges": { + "message": "ಬದಲಾವಣೆಗಳನ್ನು ಅನ್ವಯಿಸಿ", + "description": "English: Apply changes" + }, + "rulesPermanentHeader": { + "message": "ಶಾಶ್ವತ ನಿಯಮಗಳು", + "description": "header" + }, + "rulesTemporaryHeader": { + "message": "ತಾತ್ಕಾಲಿಕ ನಿಯಮಗಳು", + "description": "header" + }, + "rulesRevert": { + "message": "ಹಿಂತಿರುಗಿಸಿ", + "description": "This will remove all temporary rules" + }, + "rulesCommit": { + "message": "ಕಮಿಟ್", + "description": "This will persist temporary rules" + }, + "rulesEdit": { + "message": "ತಿದ್ದಿ ", + "description": "Will enable manual-edit mode (textarea)" + }, + "rulesEditSave": { + "message": "ಉಳಿಸು", + "description": "Will save manually-edited content and exit manual-edit mode" + }, + "rulesEditDiscard": { + "message": "ತ್ಯಜಿಸಿ", + "description": "Will discard manually-edited content and exit manual-edit mode" + }, + "rulesImport": { + "message": "ಫೈಲಿಂದ ಆಮದಿಸು...\n", + "description": "" + }, + "rulesExport": { + "message": "Export to file…", + "description": "Button in the 'My rules' pane" + }, + "rulesDefaultFileName": { + "message": "ನನ್ನ-ublock-ಡೈನಾಮಿಕ್-ಫಿಲ್ಟರ್-ನಿಯಮಗಳು_{{datetime}}.txt", + "description": "default file name to use" + }, + "rulesHint": { + "message": "List of your dynamic filtering rules.", + "description": "English: List of your dynamic filtering rules." + }, + "rulesFormatHint": { + "message": "Rule syntax: source destination type action (full documentation).", + "description": "English: dynamic rule syntax and full documentation." + }, + "rulesSort": { + "message": "Sort:", + "description": "English: label for sort option." + }, + "rulesSortByType": { + "message": "ನಿಯಮದ ಪ್ರಕಾರ", + "description": "English: a sort option for list of rules." + }, + "rulesSortBySource": { + "message": "ಮೂಲ", + "description": "English: a sort option for list of rules." + }, + "rulesSortByDestination": { + "message": "ಗಮ್ಯಸ್ಥಾನ", + "description": "English: a sort option for list of rules." + }, + "whitelistPrompt": { + "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line.", + "description": "A concise description of the 'Trusted sites' pane." + }, + "whitelistImport": { + "message": "ಆಮದಿಸಿ ಸೇರ್ಪಡಿಸು", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExport": { + "message": "ರಫ್ತು...\n", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExportFilename": { + "message": "ನನ್ನ-ublock-ವಿಶ್ವಾಸಾರ್ಹ-ಸೈಟ್ಗಳು_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" + }, + "whitelistApply": { + "message": "ಬದಲಾವಣೆಗಳನ್ನು ಅನ್ವಯಿಸಿ", + "description": "English: Apply changes" + }, + "logRequestsHeaderType": { + "message": "ವಿಧ", + "description": "English: Type" + }, + "logRequestsHeaderDomain": { + "message": "ಡೊಮೇನ್", + "description": "English: Domain" + }, + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" + }, + "logRequestsHeaderFilter": { + "message": "ಫಿಲ್ಟರ್", + "description": "English: Filter" + }, + "logAll": { + "message": "ಎಲ್ಲಾ", + "description": "Appears in the logger's tab selector" + }, + "logBehindTheScene": { + "message": "Tabless", + "description": "Pretty name for behind-the-scene network requests" + }, + "loggerCurrentTab": { + "message": "ಪ್ರಸ್ತುತ ಟ್ಯಾಬ್", + "description": "Appears in the logger's tab selector" + }, + "loggerReloadTip": { + "message": "Reload the tab content", + "description": "Tooltip for the reload button in the logger page" + }, + "loggerDomInspectorTip": { + "message": "Toggle the DOM inspector", + "description": "Tooltip for the DOM inspector button in the logger page" + }, + "loggerPopupPanelTip": { + "message": "Toggle the popup panel", + "description": "Tooltip for the popup panel button in the logger page" + }, + "loggerInfoTip": { + "message": "uBlock Origin wiki: The logger", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Clear logger", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Pause logger (discard all incoming data)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Unpause logger", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Toggle logger filtering", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filter logger content", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Logger filtering options", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "ಅಲ್ಲದ ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "blocked", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "ಅನುಮತಿಸಲಾಗಿದೆ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "modified", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "1st-party", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "3rd-party", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "ವಿವರಗಳು", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "ಫಿಲ್ಟರ್", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "ಫಿಲ್ಟರ್ ಪಟ್ಟಿ", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "ನಿಯಮ", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Context", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Root context", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Partyness", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "ವಿಧ", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL ನಿಯಮ ", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Context:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "ವಿಧ:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Static filter", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "ನಿರ್ಬಂಧಿಸು", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "ಅನುಮತಿಸು", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "type “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "any type", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "\"{{origin}} \"ಇಂದಾ", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "from anywhere", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "except when", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "even if", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Static filter {{filter}} found in:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Static filter could not be found in any of the currently enabled filter lists", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Preserve entries from the last {{input}} minutes", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Preserve at most {{input}} page loads per tab", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Preserve at most {{input}} entries per tab", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Use {{input}} lines per entry in vertically expanded mode", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Hide columns:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} ಗಂಟೆ", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filter/rule", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Context", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Partyness", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "List", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Table", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "ಸಾದಾ", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "ತೆರೆ", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Create new report on GitHub", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Find similar reports on GitHub", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Documentation", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Read the documentation at uBlock/wiki to learn about all of uBlock Origin's features.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Questions and support", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Answers to questions and other kinds of help support is provided on the subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filter issues/website is broken", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Important: Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tips: Be sure your filter lists are up to date. The logger is the primary tool to diagnose filter-related issues.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Bug report", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Report issues with uBlock Origin itself to the uBlockOrigin/uBlock-issue issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Troubleshooting Information", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported. Note: clicking the button will cause the page's origin to be sent to GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verify that the issue still exists after reloading the problematic web page.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the web page:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The web page…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBlock Origin is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the web page as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "ಗೌಪ್ಯತಾ ನೀತಿ\n", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "ಬದಲಾವಣೆಗಳು", + "description": "" + }, + "aboutCode": { + "message": "Source code (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "ನೀಡುಗರು", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "ಮೂಲ ಕೊಡ್", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "ಅನುವಾದ", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "ಫಿಲ್ಟರ್ ಪಟ್ಟಿಗಳು", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "External dependencies (GPLv3-compatible):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO's own filter lists are freely hosted on the following CDNs:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "A randomly picked CDN is used when a filter list needs to be updated.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Back up to file…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Restore from file…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Reset to default settings…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "The data could not be read or is invalid", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Network error: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "ಫಿಲ್ಟರ್ ಪಟ್ಟಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "ಒಂದು ನಿಮಿಷದ ಹಿಂದೆ", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} ನಿಮಿಷದ ಹಿಂದೆ", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "ಒಂದು ತಾಸಿನ ಹಿಂದೆ", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} ತಾಸಿನ ಹಿಂದೆ", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "ಒಂದು ದಿನದ ಹಿಂದೆ", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} ದಿನದ ಹಿಂದೆ", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Show Dashboard", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Show Logger", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "ಆಫ್", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Page blocked", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin ಈ ಕೆಳಗಿನ ಪುಟವನ್ನು ಲೋಡ್ ಮಾಡುವುದನ್ನು ತಡೆಯುತ್ತದೆ:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "This happened because of the following filter:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "without parameters", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "The filter has been found in:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "ಹಿಂದೆ ಹೋಗಿ", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "ಈ ವಿಂಡೋವನ್ನು ಮುಚ್ಚಿ", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Disable strict blocking for {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "ತಾತ್ಕಾಲಿಕವಾಗಿ", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "ಶಾಶ್ವತವಾಗಿ", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Proceed", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Export to cloud storage", + "description": "tooltip" + }, + "cloudPull": { + "message": "Import from cloud storage", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Import from cloud storage and merge with current settings", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "ಈ ಸಾಧನದ ಹೆಸರು:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Warning! Change these advanced settings at your own risk.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "ಸಲ್ಲಿಸಿ", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "ಬದಲಾವಣೆಗಳನ್ನು ಅನ್ವಯಿಸಿ", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "ಹಿಂತಿರುಗಿಸಿ", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "ಬೈಟ್ಗಳು", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Block element in frame…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Subscribe to filter list…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Temporarily allow large media elements", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "View source code…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Type a shortcut", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Toggle locked scrolling", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Copy to clipboard", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Select all", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Toggle cosmetic filtering", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Toggle JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Relax blocking mode", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "ಉಪಯೊಗಿಸುತಿರುವ ಸಂಗ್ರಹಣೆ: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Click to load", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Errors: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" + } +} diff --git a/src/_locales/ko/messages.json b/src/_locales/ko/messages.json index 1138cd3ac018a..2e7063907b659 100644 --- a/src/_locales/ko/messages.json +++ b/src/_locales/ko/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"이 부가 기능은 효율적인 차단기입니다. CPU와 메모리에 주는 부담이 적습니다.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "이 부가 기능은 효율적인 차단기입니다. CPU와 메모리에 주는 부담이 적습니다.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — 대쉬보드", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — 대시보드", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"설정", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "경고: 저장되지 않은 변경 사항이 있습니다!", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"보조 필터", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "취소", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"내 필터", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "무시", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"내 규칙", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "설정", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"제외 목록", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "필터 목록", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — 로그", - "description":"Title for the logger window" + "1pPageName": { + "message": "내 필터", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"정보", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "내 규칙", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"클릭: 이 사이트에서 uBlock₀을 켜고 끕니다.\n\nCtrl+클릭: 이 페이지에서 uBlock₀을 끕니다.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "제외 목록", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"요청 차단됨", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "단축키", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"이 페이지에서", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — 로그", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}}개 \/ {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "정보", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"설치된 이후", - "description":"English: since install" + "supportPageName": { + "message": "지원", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"\/", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Asset 뷰어", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"클릭하여 대쉬보드 열기", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "고급 설정", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"구성 요소 선택기 모드로 진입", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "클릭: 이 사이트에서 uBlock₀을 켜고 끕니다.\n\nCtrl+클릭: 이 페이지에서 uBlock₀을 끕니다.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"로그로 이동", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "클릭: 이 사이트에서 uBlock₀을 비활성화합니다.\nCtrl+클릭: 이 페이지에서만 uBlock₀을 비활성화합니다.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"이 사이트에서 팝업 차단 토글", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "클릭하여 이 사이트에서 uBlock₀ 을 켭니다.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"이 사이트에서만 적용되는 대형 미디어 구성요소 차단 기능을 켜고 끕니다.", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "요청 차단됨", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"이 사이트에서 시각적 필터링 토글", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "이 페이지에서", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"이 사이트에서 글꼴조정 차단 토글", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}}개 / {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"공용 규칙: 이 열은 모든 사이트에 적용되는 규칙 열 입니다.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "설치된 이후", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"로컬 규칙: 이 열은 현재 사이트만 적용되는 규칙 열 입니다.\n로컬 규칙은 공용 규칙보다 우선권을 가지고 있습니다.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "또는", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"클릭하여 변경사항을 저장합니다.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "이 페이지에서 차단됨", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"클릭하여 변경사항 적용을 되돌립니다.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "설치 후 차단됨", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"전체", - "description":"" + "popupDomainsConnected_v2": { + "message": "도메인 연결됨", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"이미지", - "description":"" + "popupTipDashboard": { + "message": "클릭하여 대시보드 열기", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"보조 필터", - "description":"" + "popupTipZapper": { + "message": "구성 요소 선택기 모드로 진입", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"보조 CSS\/이미지", - "description":"" + "popupTipPicker": { + "message": "구성 요소 선택기 모드로 진입", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"인라인 스크립트", - "description":"" + "popupTipLog": { + "message": "로그로 이동", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"주 스크립트", - "description":"" + "popupTipReport": { + "message": "이 사이트의 문제 신고", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"보조 스크립트", - "description":"" + "popupTipNoPopups": { + "message": "이 사이트에서 팝업 차단 토글", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"보조 프레임", - "description":"" + "popupTipNoPopups1": { + "message": "클릭하여 이 사이트에서 모든 팝업을 차단합니다", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"도메인 연결됨", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "클릭하여 이 사이트에서 팝업 차단을 해제합니다", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{total}}개 중 {{count}}개", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "이 사이트에서만 적용되는 대용량 미디어 요소 차단 기능을 켜고 끕니다", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"생성", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "클릭하여 이 사이트에서 대용량 미디어를 차단합니다", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"선택", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "클릭하여 이 사이트에서 대용량 미디어 차단을 해제합니다", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"종료", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "이 사이트에서 요소 숨김 필터링 토글", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"미리보기", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "클릭하여 이 사이트에서 요소 숨김 필터링을 끕니다", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"넷 필터", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "클릭하여 이 사이트에서 요소 숨김 필터링을 켭니다", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"표면 필터", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "이 사이트에서 외부 폰트 차단 토글", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"클릭, Ctrl-클릭", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "클릭하여 이 사이트에서 외부 폰트를 차단합니다", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"구성 요소 차단", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "클릭하여 이 사이트에서 외부 폰트 차단을 해제합니다", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"차단된 구성 요소의 자리 감추기", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "클릭하여 이 사이트에서 JavaScript를 비활성화합니다", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"차단된 요청 개수를 아이콘에 표시", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "클릭하여 이 사이트에서 JavaScript를 활성화합니다", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"툴팁 비활성화", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "팝업 창", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"컨텍스트 메뉴를 상황에 맞게 사용", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "대용량 미디어 요소", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"색맹 최적화", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "요소 숨김 필터링", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"클라우드 저장소 활성화", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "외부 폰트", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"고급 사용자 모드 (필수로 읽어보세요.<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"프리-페칭 비활성화 (차단된 네트워크 요청에 대해 모든 접속요청 방지)", - "description":"English: " + "popupMoreButton_v2": { + "message": "더 보기", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"하이퍼링크 검사 비활성화", - "description":"English: " + "popupLessButton_v2": { + "message": "간단히", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"WebRTC로부터 로컬 IP 주소 유출을 방지", - "description":"English: " + "popupTipGlobalRules": { + "message": "공용 규칙: 이 열은 모든 사이트에 적용되는 규칙 열 입니다.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"기본 동작", - "description":"" + "popupTipLocalRules": { + "message": "로컬 규칙: 이 열은 현재 사이트만 적용되는 규칙 열 입니다.\n로컬 규칙은 공용 규칙보다 우선권을 가지고 있습니다.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"이 기본 동작들은 사이트 별로 정의 할 수 있습니다.", - "description":"" + "popupTipSaveRules": { + "message": "클릭하여 변경사항을 저장합니다.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"표면 필터 비활성화", - "description":"" + "popupTipRevertRules": { + "message": "클릭하여 변경사항 적용을 되돌립니다.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"{{input:number}} KB 보다 큰 미디어 구성요소 차단", - "description":"" + "popupAnyRulePrompt": { + "message": "전체", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"글꼴 조종 차단", - "description":"" + "popupImageRulePrompt": { + "message": "이미지", + "description": "" }, - "settingsStorageUsed":{ - "message":"스토리지 사용량: {{value}} 바이트", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "서드 파티 필터", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"최근 복원:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "서드 파티 CSS/이미지", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"최근 백업:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "인라인 스크립트", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} 네트워크 필터 + {{cosmeticFilterCount}} 표면 필터:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "스크립트", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{total}}개 중 {{used}}개 사용 중", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "서드 파티 스크립트", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"필터 목록 자동 업데이트", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "서드 파티 프레임", + "description": "" }, - "3pUpdateNow":{ - "message":"지금 업데이트", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "도메인 연결됨", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"모든 캐시 제거", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{total}}개 중 {{count}}개", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"표면 필터 분석 및 적용", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "버전", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      이 옵션은 애드블록 플러스-호환 “구성 요소 감추기” 필터<\/a>를 분석하고 적용하는 것을 활성화합니다. 이 필터는 기본적으로 웹 페이지에서 시각적 방해 요소들을 숨기는 역할을 하며, 네트워크 요청에 기반한 필터링 엔진에서 차단될 수 없습니다.<\/p>

      이 기능을 활성화하면 uBlock₀<\/i>의 메모리 사용량이 증가합니다.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "스크립트", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"전체적 표면 필터 무시", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "프레임", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      전체적 표면 필터들은 방문하는 모든 사이트에 적용하는 표면 필터입니다.

      uBlock₀는 이를 효율적으로 적용하지만, 전체적 표면 필터들은 사이트의 크기와 유지시간에 따라 확연할 정도의 메모리 및 CPU 오버헤드를 줄 수 있습니다.

      이 옵션을 활성화하면 전체적 표면 필터 적용으로 메모리 및 CPU 오버헤드를 제거하고, uBlock₀ 자체의 메모리 사용량도 줄입니다.

      저전력 기기에 사용하는 것을 권장합니다.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "생성", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"차단된 호스트 목록", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "선택", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"변경사항 적용", - "description":"English: Apply changes" + "pickerQuit": { + "message": "종료", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"광고", - "description":"English: Ads" + "pickerPreview": { + "message": "미리보기", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"개인정보", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "네트워크 필터", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"멀웨어 도메인", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "요소 숨김 필터", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"소셜", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "클릭, Ctrl-클릭", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"다목적", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "구성 요소 차단", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"지역, 언어", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "차단된 요소의 자리 감추기", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"사용자 지정", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "차단된 요청 개수를 아이콘에 표시", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"한 줄에 한 개의 URL을 입력하세요. 시작 부분이 ‘!’ 로 시작되면 무시됩니다. 존재하지 않는 URL은 자동으로 무시됩니다.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "툴팁 비활성화", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"분석", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "컨텍스트 메뉴를 상황에 맞게 사용", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"캐시 제거", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "색맹 접근성 향상", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"최신 버전 존재", - "description":"English: new version available" + "settingsAppearance": { + "message": "표시", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"구버전", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "테마", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"마지막 업데이트: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "사용자 지정 강조 색상", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"한 줄에 한 개의 필터를 입력하세요. 필터는 순수 호스트이름, 혹은 Adblock Plus-호환 필터가 될 수 있습니다. 시작 부분이 ‘!’ 로 시작되면 무시됩니다.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "클라우드 저장소 활성화", + "description": "" }, - "1pImport":{ - "message":"가져오기 및 추가하기", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "저는 고급 사용자입니다", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"내보내기", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "프리-페칭 비활성화 (차단된 네트워크 요청에 대해 모든 접속요청 방지)", + "description": "English: " }, - "1pExportFilename":{ - "message":"ublock-고정필터_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "하이퍼링크 검사 비활성화", + "description": "English: " }, - "1pApplyChanges":{ - "message":"변경사항 적용", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "WebRTC로부터 로컬 IP 주소 유출을 방지", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"영구 규칙", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "기본 동작", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"임시 규칙", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "이 기본 동작들은 사이트 별로 정의 할 수 있습니다.", + "description": "" }, - "rulesRevert":{ - "message":"되돌리기", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "요소 숨김 필터 비활성화", + "description": "" }, - "rulesCommit":{ - "message":"제출", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "{{input:number}} KB 보다 큰 미디어 구성요소 차단", + "description": "" }, - "rulesEdit":{ - "message":"편집", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "외부 폰트 차단", + "description": "" }, - "rulesEditSave":{ - "message":"저장", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "JavaScript 비활성화", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"취소", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "CSP 보고서 차단", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"파일로부터 불러오기...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "표준 이름 잠금 해제", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"파일로 내보내기...", - "description":"" + "settingsAdvanced": { + "message": "고급", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"ublock-동적규칙_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "전문적인 사용자에게만 권장되는 설정입니다.", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"동적 필터링 규칙 목록입니다.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "고급 설정", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"규칙 문법: 소스 페이지, 필터링 대상, 필터링할 타입, 적용할 조치<\/code> (전체 설명서<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "최근 복원:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"목록에 있는 호스트들은 uBlock₀에서 비활성화됩니다. 한 줄에 한 개씩 입력하세요. 존재하지 않는 호스트는 자동으로 무시됩니다.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "최근 백업:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"가져오기 및 추가하기", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} 네트워크 필터 + {{cosmeticFilterCount}} 요소 숨김 필터:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"내보내기", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{total}}개 중 {{used}}개 사용 중", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"ublock-제외목록_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "필터 목록 자동 업데이트", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"변경사항 적용", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "지금 업데이트", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"유형", - "description":"English: Type" + "3pPurgeAll": { + "message": "모든 캐시 제거", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"도메인", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "요소 숨김 필터 분석 및 적용", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "요소 숨김 필터링은 네트워크 요청 차단 방식으로는 막을 수 없는, 웹 페이지 내의 시각적으로 거슬리는 요소들을 숨기는 역할을 합니다.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"필터", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "범용 요소 숨김 필터 무시", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"전체", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "범용 요소 숨김 필터는 모든 웹사이트에 공통적으로 적용되는 필터입니다. 이 옵션을 활성화하면 범용 요소 숨김 필터링을 처리하는 과정에서 발생하는 웹 페이지의 메모리 및 CPU 부하를 제거할 수 있습니다.\n\n사양이 낮은 기기에서는 이 옵션을 활성화하는 것을 권장합니다.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"숨겨진 구성 요소", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "모든 필터 목록을 불러올 때까지 네트워크 일시 중단", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"필터 로그 항목", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "차단된 호스트 목록", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"로그 항목의 최대 갯수", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "변경사항 적용", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"페이지:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "기본 내장", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"유형:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "광고", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"동적 URL 필터링", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "개인정보 보호", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"고정 필터링", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "멀웨어 및 보안", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"네트워크 요청이 {{type}} 일 경우,{{br}}URL 주소가 {{url}} 와 일치하고{{br}}{{origin}} 에서 비롯 되었을 경우 {{action}} 한다.{{br}}그리고 다음 예외 필터와 일치할 경우 {{importance}} 한다.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "소셜 위젯", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"차단", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "쿠키 공지", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"허용", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "방해 요소", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"\"{{type}}\" 종류", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "다목적", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"모든 종류", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "지역 및 언어", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"\"{{origin}}\"", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "사용자 지정", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"전체", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "불러오기..", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"예외 처리", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "한 줄에 한 개의 URL을 입력하세요. 존재하지 않는 URL은 자동으로 무시됩니다.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"비 예외 처리", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "구버전", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"{{filter}} 에서 찾은 고정 필터:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "내용 보기", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"변경사항", - "description":"English: Change log" + "3pLastUpdate": { + "message": "마지막 업데이트: {{ago}}\n업데이트하려면 여기를 클릭하세요.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"위키", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "업데이트 중...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"지원", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "네트워크 오류로 인해 리소스가 업데이트되지 못했습니다.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"소스 코드 (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "신뢰할 수 없는 출처의 필터를 추가하지 마십시오.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"기여자", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "내 사용자 정의 필터 활성화", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"파일로 백업하기", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "신뢰가 필요한 사용자 정의 필터 허용", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"ublock-백업_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "가져오기 및 추가하기", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"파일로부터 복원하기...", - "description":"English: Restore from file..." + "1pExport": { + "message": "내보내기", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"기본 설정으로 초기화...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "ublock-고정필터_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"모든 설정은 {{time}}에 백업된 데이터에 덮어씌워지며, uBlock₀이 재시작됩니다.\n\n모든 존재하는 설정을 백업 데이터로 덮어씌우시겠습니까?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "변경사항 적용", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"데이터를 읽을 수 없거나 잘못되었습니다.", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "영구 규칙", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"모든 설정이 제거되며, uBlock₀이 재시작됩니다.\n\nuBlock₀의 설정을 처음 설정으로 초기화하시겠습니까?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "임시 규칙", + "description": "header" }, - "errorCantConnectTo":{ - "message":"{{url}}에 연결할 수 없습니다.", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "되돌리기", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: 선택한 URL을 사용자 지정 필터 목록에 추가하시겠습니까?\n\n제목: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "제출", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"1 분 전", - "description":"English: a minute ago" + "rulesEdit": { + "message": "편집", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} 분 전", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "저장", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"1 시간 전", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "취소", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} 시간 전", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "파일로부터 불러오기...", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"1 일 전", - "description":"English: a day ago" + "rulesExport": { + "message": "파일로 내보내기...", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} 일 전", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "ublock-동적규칙_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"대쉬보드 보기", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "동적 필터링 규칙 목록입니다.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"로그 보기", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "규칙 문법: 소스 페이지, 필터링 대상, 필터링할 타입, 적용할 조치 (전체 설명서).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"끄기", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "분류:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin이 다음 페이지를 로드하는것을 방지했습니다:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "규칙 유형", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"다음 필터로 인해 방지됨", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "소스", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"제외 매개 변수", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "목표", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"다음 필터에서 찾음:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "목록에 있는 호스트들은 uBlock₀에서 비활성화됩니다. 한 줄에 한 개씩 입력하세요. 존재하지 않는 호스트는 자동으로 무시됩니다.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"돌아가기", - "description":"English: Go back" + "whitelistImport": { + "message": "가져오기 및 추가하기", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"이 창을 닫기", - "description":"English: Close this window" + "whitelistExport": { + "message": "내보내기", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"{{hostname}}에서 엄격 차단기능 끄기", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "ublock-제외목록_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"이번만", - "description":"English: Temporarily" + "whitelistApply": { + "message": "변경사항 적용", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"항상", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "유형", + "description": "English: Type" }, - "cloudPush":{ - "message":"클라우드 저장소로 내보내기", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "도메인", + "description": "English: Domain" }, - "cloudPull":{ - "message":"클라우드 저장소로부터 가져오기", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"클라우드 저장소의 설정 불러오기 및 현재 설정과 통합", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "필터", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "전체", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"현재 기기의 이름:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "숨겨진 구성 요소", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"제출", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "현재 탭", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"되돌리기", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "탭 내용 새로고침", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"바이트", - "description":"" + "loggerDomInspectorTip": { + "message": "DOM 속성 검사기 토글", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"이번만 대형 미디어 구성요소 허용", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "팝업 패널 토글", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin 위키: 로거", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "로거 초기화", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "로거 일시중지 (들어오는 모든 데이터 무시)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "로거 일시중지 해제", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "로거 필터링 토글", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "필터 로그 항목", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "로거 필터링 옵션", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "제외", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "차단됨", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "허용됨", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "수정됨", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "퍼스트 파티", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "서드 파티", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "상세정보", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "필터", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "필터 목록", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "규칙", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "컨텍스트", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "최상위 컨텍스트", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "파티", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "유형", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "동적 URL 필터링", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "페이지:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "유형:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "고정 필터링", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "네트워크 요청이 {{type}} 일 경우,{{br}}URL 주소가 {{url}} 와 일치하고{{br}}{{origin}} 에서 비롯되었을 경우 {{action}} 한다.{{br}}그리고 다음 예외 필터와 일치할 경우 {{importance}} 한다.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "차단", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "허용", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "\"{{type}}\" 종류", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "모든 종류", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "\"{{origin}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "전체", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "예외 처리", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "비 예외 처리", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "{{filter}} 에서 찾은 고정 필터:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "현재 활성화된 필터 목록에서 정적 필터를 찾을 수 없습니다", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "아래의 세 가지 조건을 모두 충족하지 않는 항목은 자동으로 삭제됩니다.", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "최근 {{input}} 분의 항목 유지", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "탭 당 최대 {{input}} 페이지로드 유지", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "탭 당 최대 {{input}} 항목 유지", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "수직 확장 모드에서 항목 당 {{input}} 줄 사용", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "숨긴 열:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} 시간", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} 필터/규칙", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} 컨텍스트", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} 파티", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "목록", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "테이블", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "일반", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "마크다운", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "열기", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "새 신고 생성", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "유사한 신고 탐색", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "문서", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "uBlock/wiki의 문서를 읽고 uBlock Origin의 모든 기능에 대해 알아보세요.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "질문 및 지원", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "질문에 대한 답변 및 기타 도움 지원은 /r/uBlockOrigin 서브레딧에서 제공됩니다.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "필터 문제/웹사이트가 망가짐", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "특정 웹사이트에서 발생하는 필터 문제는 uBlockOrigin/uAssets 이슈 트래커에 보고해주세요. GitHub 계정이 필요합니다", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "중요: uBlock Origin과 유사한 목적의 다른 차단기를 함께 사용하지 마세요. 일부 웹사이트에서 필터 문제가 발생할 수 있습니다.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "팁: 필터 목록이 최신 버전인지 확인하세요. 로거는 필터 관련 문제를 진단하는 데에 사용되는 기본적인 도구입니다.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "오류 신고", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "uBlock Origin 자체에 대한 이슈는 uBlockOrigin/uBlock-issue 이슈 트래커에 보고해주세요. GitHub 계정이 필요합니다.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "문제 해결 정보", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "다음은 자원봉사자들이 문제를 해결을 돕는 데 유용할 수 있는 기술적인 정보입니다.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "필터 문제 신고", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "자원봉사자들이 중복 신고로 인해 부담을 겪지 않도록, 해당 문제가 이미 신고되지는 않았는지 확인해주시기 바랍니다. 중요: 버튼을 클릭하면 페이지의 출처가 GitHub로 전송됩니다.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "필터 목록은 매일 업데이트됩니다. 최신 필터 목록에서 문제가 이미 해결되었는지 확인해 주세요.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "문제가 있는 웹페이지를 새로고침한 후에도 문제가 여전히 발생하는지 확인해 주세요.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "웹 페이지의 주소:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "웹 페이지가...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- 주제 선택 --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "광고나 광고 흔적을 보여줍니다", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "오버레이나 기타 성가신 요소를 보여줍니다", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "uBlock Origin 사용을 감지합니다", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "개인정보 보호 관련 이슈가 있습니다", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "uBlock Origin을 켜면 깨집니다", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "원치 않는 탭이나 창을 엽니다", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "악성코드, 피싱으로 유도합니다", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "웹 페이지를 “NSFW” (“Not Safe For Work”)로 분류", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "개인정보 처리방침", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "변경사항", + "description": "" + }, + "aboutCode": { + "message": "소스 코드 (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "기여자", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "소스 코드", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "번역", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "필터 목록", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "외부 종속성 (GPLv3 호환):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "아래 CDN에서 uBO의 필터 목록을 무료로 호스팅해 줍니다:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "필터 목록을 업데이트할 때 무작위로 선택된 CDN이 쓰입니다.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "파일로 백업하기", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "ublock-백업_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "파일로부터 복원하기...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "기본 설정으로 초기화...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "모든 설정은 {{time}}에 백업된 데이터에 덮어씌워지며, uBlock₀이 재시작됩니다.\n\n모든 존재하는 설정을 백업 데이터로 덮어씌우시겠습니까?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "데이터를 읽을 수 없거나 잘못되었습니다.", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "모든 설정이 제거되며, uBlock₀이 재시작됩니다.\n\nuBlock₀의 설정을 처음 설정으로 초기화하시겠습니까?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "네트워크 오류: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "구독", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "1분 전", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}}분 전", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "1시간 전", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}}시간 전", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "1일 전", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}}일 전", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "대시보드 보기", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "로그 보기", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "끄기", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "페이지 차단됨", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin이 다음 페이지를 로드하는것을 방지했습니다:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "다음 필터로 인해 방지됨", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "제외 매개 변수", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "다음 필터에서 찾음:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "돌아가기", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "이 창을 닫기", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "더 이상 이 사이트에 대해 경고 하지 않기", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "{{hostname}}에서 엄격 차단기능 끄기", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "일시적으로", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "항상", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "계속", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "차단된 페이지에서 다른 사이트로 이동하려 합니다. 계속하시면, {{url}} 주소로 바로 이동합니다.", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "사유:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "악성", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "추적기", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "낮은 평판", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "클라우드 저장소로 내보내기", + "description": "tooltip" + }, + "cloudPull": { + "message": "클라우드 저장소로부터 가져오기", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "클라우드 저장소의 설정 불러오기 및 현재 설정과 통합", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "현재 기기의 이름:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "경고! 고급 옵션을 변경하여 발생하는 문제는 사용자에게 있습니다.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "제출", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "변경사항 적용", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "되돌리기", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "바이트", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "프레임 내 구성 요소 차단", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "필터 목록 구독...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "일시적으로 대용량 미디어 요소 허용", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "소스 코드 보기…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "단축키를 입력하세요", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "스크롤 잠금 토글", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "클립보드에 복사", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "모두 선택", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "요소 숨김 필터링 토글", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "JavaScript 토글", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "차단 모드 완화", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "스토리지 사용량: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "불러오려면 클릭하기", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "오류: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "브라우저 시작 시 필터링을 제대로 수행할 수 없습니다.\n정확한 필터링을 위해 페이지를 새로고침해주세요.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/lt/messages.json b/src/_locales/lt/messages.json index fdc1f1fbac1d0..15f3a90ba263a 100644 --- a/src/_locales/lt/messages.json +++ b/src/_locales/lt/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Pagaliau, efektyvus blokatorius, neapkraunantis nei procesoriaus, nei darbinės atminties.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Pagaliau, efektyvus blokatorius, neapkraunantis nei procesoriaus, nei darbinės atminties.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Prietaisų skydas", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Prietaisų skydas", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Nustatymai", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Dėmesio! Turite neišsaugotų pakeitimų", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"3-iųjų šalių filtrai", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Pasilikti", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Mano filtrai", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ignoruoti", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Mano taisyklės", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Nustatymai", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Išimtys", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filtrų sąrašai", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Žurnalas", - "description":"Title for the logger window" + "1pPageName": { + "message": "Mano filtrai", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Apie", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Mano taisyklės", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Spustelėjimas: įjungti\/išjungti uBlock₀ šiam puslapiui.\n\nVald+spustelėjimas: išjungti uBlock₀ tik šiam puslapiui.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Išimtys", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"blokuotos užklausos", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Nuorodos", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"šiame puslapyje", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Žurnalas", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} arba {{percent}} %", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Apie", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"nuo įdiegimo", - "description":"English: since install" + "supportPageName": { + "message": "Pagalba", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"arba", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — resursų žiūryklė", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Spustelėkite prietaisų skydui atverti", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Sudėtingesni nustatymai", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Atverti elementų parinkimo veikseną", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Spustelėjimas: įjungti/išjungti uBlock₀ šiam puslapiui.\n\nVald+spustelėjimas: išjungti uBlock₀ tik šiam puslapiui.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Atverti žurnalą", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Spustelėkite, kad išjungtumėte uBlock₀ šiai svetainei.\n\nVald+spustelėkite, kad išjungtumėte uBlock₀ tik šiam puslapiui.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Perjungti visų iškylančiųjų langų blokavimą šiame puslapyje", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Spustelėkite, kad įjungtumėte uBlock₀ šiai svetainei.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Perjungti didelių medijos elementų blokavimą šiame puslapyje", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "blokuotos užklausos", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Perjungti kosmetinį filtravimą šiame puslapyje", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "šiame puslapyje", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Perjungti nuotolinių šriftų blokavimą šiame puslapyje", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} arba {{percent}} %", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Globalios taisyklės: ši skiltis skirta visiems puslapiams taikomoms taisyklėms.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "nuo įdiegimo", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Vietinės taisyklės: ši skiltis skirta dabartiniam puslapiui taikomoms taisyklėms.\nVietinės taisyklės nustelbia globalias.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "arba", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Spauskite pakeitimams padaryti pastoviais.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Blokuojama šiame puslapyje", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Spauskite pakeitimams atstatyti.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Užblokuota nuo įdiegimo", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"visi", - "description":"" + "popupDomainsConnected_v2": { + "message": "Prijungti domenai", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"vaizdai", - "description":"" + "popupTipDashboard": { + "message": "Atverti prietaisų skydą", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"trečios šalies", - "description":"" + "popupTipZapper": { + "message": "Atverti elementų trynimo veikseną", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"3-ios šalies css\/paveikslai", - "description":"" + "popupTipPicker": { + "message": "Atverti elementų parinkimo veikseną", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"įterptieji scenarijai", - "description":"" + "popupTipLog": { + "message": "Atverti žurnalą", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"1-os šalies scenarijai", - "description":"" + "popupTipReport": { + "message": "Pranešti apie problemą šioje svetainėje", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"3-ios šalies scenarijai", - "description":"" + "popupTipNoPopups": { + "message": "Perjungti visų iškylančiųjų langų blokavimą šiame puslapyje", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"3-ios šalies rėmeliai", - "description":"" + "popupTipNoPopups1": { + "message": "Spustelėkite visų iškylančių langų blokavimui šioje svetainėje", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"jungtasi prie sričių", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Spustelėkite visų iškylančių langų neblokavimui šioje svetainėje", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} iš {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Perjungti didelių medijos elementų blokavimą šiame puslapyje", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Sukurti", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Spustelėkite didelių medijos elementų blokavimui šioje svetainėje", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Parinkti", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Spustelėkite didelių medijos elementų neblokavimui šioje svetainėje", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Baigti", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Perjungti kosmetinį filtravimą šiame puslapyje", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Peržiūra", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Spustelėkite kosmetinių filtrų išjungimui šioje svetainėje", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Tinklo filtrai", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Spustelėkite kosmetinių filtrų įjungimui šioje svetainėje", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Kosmetiniai filtrai", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Perjungti nuotolinių šriftų blokavimą šiame puslapyje", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Spustelėjimas, Vald-spustelėjimas", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Spustelėkite nutolusių šriftų blokavimui šioje svetainėje", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Blokuoti elementą", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Spustelėkite nutolusių šriftų neblokavimui šioje svetainėje", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Slėpti blokuotų elementų rezervuotą vietą", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Spustelėkite JavaScript išjungimui šioje svetainėje", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Rodyti blokuotų užklausų skaičių piktogramoje", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Spustelėkite JavaScript įjungimui šioje svetainėje", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Išjungti paaiškinimus", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Iškylantysis langas", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Kur tinka, naudoti kontekstinį meniu", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Dideli medijos elementai", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Draugiškas neskiriantiems spalvų", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Kosmetinis filtravimas", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Įjungti nuotolinės saugyklos palaikymą", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Nuotoliniai šriftai", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Aš esu patyręs naudotojas (Privaloma perskaityti<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Išjungti išankstinį gavimą (visiems blokuotų tinklo užklausų prisijungimams išvengti)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Daugiau", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Išjungti saitų auditą\/signalizavimą", - "description":"English: " + "popupLessButton_v2": { + "message": "Mažiau", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Neleisti WebRTC atskleisti vietinio IP adreso", - "description":"English: " + "popupTipGlobalRules": { + "message": "Globalios taisyklės: ši skiltis skirta visiems puslapiams taikomoms taisyklėms.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Numatytoji elgsena", - "description":"" + "popupTipLocalRules": { + "message": "Vietinės taisyklės: ši skiltis skirta dabartiniam puslapiui taikomoms taisyklėms.\nVietinės taisyklės nustelbia globalias.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Šios numatytosios elgsenos gali būti nustelbtos kiekvienam puslapiui atskirai", - "description":"" + "popupTipSaveRules": { + "message": "Spauskite pakeitimams padaryti pastoviais.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Išjungti kosmetinius filtrus", - "description":"" + "popupTipRevertRules": { + "message": "Spauskite pakeitimams atstatyti.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Blokuoti medijos elementus didesnius nei {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "visi", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blokuoti nuotolinius šriftus", - "description":"" + "popupImageRulePrompt": { + "message": "vaizdai", + "description": "" }, - "settingsStorageUsed":{ - "message":"Naudojama vietos: {{value}} baitų", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "trečios šalies", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Paskutinis atkūrimas:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "3-ios šalies CSS/paveikslai", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Paskutinė atsarginė kopija:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "įterptieji scenarijai", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"Tinklo filtrų ({{netFilterCount}}) + kosmetinių filtrų ({{cosmeticFilterCount}}) iš:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "1-os šalies scenarijai", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"naudojama {{used}} iš {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "3-ios šalies scenarijai", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Automatiškai atnaujinti filtrų sąrašus.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "3-ios šalies rėmeliai", + "description": "" }, - "3pUpdateNow":{ - "message":"Atnaujinti dabar", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "jungtasi prie sričių", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Valyti visus podėlius", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} iš {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Analizuoti ir taikyti kosmetinius filtrus.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Versija", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Ši nuostata įjungia Su Adblock Plus suderinamų „elementų slėpimo“ filtrų<\/a> analizę ir taikymą. Šie filtrai iš esmės yra kosmetiniai, jie naudojami tinklalapio elementams, kurie yra laikomi vaizdiniais nepatogumais ir kurių negalima užblokuoti tinklo užklausomis paremtais filtrais, paslėpti.<\/p>

      Šios nuostatos įjungimas padidina uBlock₀ atminties naudojimą.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "Skriptas", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignoruoti daugybinius kosmetinius filtrus.", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "frame", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Daugybiniai kosmetiniai filtrai yra tokie kosmetiniai filtrai, kurie taikomi visoms svetainėms.

      Nors uBlock₀ juos apdoroja efektyviai, daugybiniai kosmetiniai filtrai vis tiek gali prisidėti prie pamatuojamo atminties ir procesoriaus panaudojimo kai kuriose svetainėse, ypač didelėse ir ilgai gyvuojančiose.

      Šio nustatymo įjungimas sumažins atminties ir procesoriaus naudojimą, kurį sukelia svetainės dėl daugybinių kosmetinių filtrų apdorojimo, bei sumažins bendrą uBlock₀ atminties naudojimą.

      Rekomenduojama įjungti šį nustatymą mažiau galinguose įrenginiuose.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Sukurti", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Blokuotų serverių sąrašas", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Parinkti", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Taikyti pakeitimus", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Baigti", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Reklamos", - "description":"English: Ads" + "pickerPreview": { + "message": "Peržiūra", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Privatumas", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Tinklo filtrai", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Kenksmingos sritys", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Kosmetiniai filtrai", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Socialiniai", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Spustelėjimas, Vald-spustelėjimas", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Univarsalūs", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Blokuoti elementą", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Regionai, kalbos", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Slėpti blokuotų elementų rezervuotą vietą", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Adaptuoti", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Rodyti blokuotų užklausų skaičių piktogramoje", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Vienas URL eilutėje. Eilutės pradėtos „!“ bus ignoruotos. Neteisingi URL bus tyliai ignoruoti.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Išjungti paaiškinimus", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Analizuoti", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Kur tinka, naudoti kontekstinį meniu", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"valyti podėlį", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Draugiškas neskiriantiems spalvų", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"prieinama nauja versija", - "description":"English: new version available" + "settingsAppearance": { + "message": "Išvaizda", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"pasenęs", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Tema", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Paskutinis atnaujinimas: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Custom accent color", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Vienas filtras eilutėje. Filtras gali būti paprastas serverio adresas, arba su Adblock Plus suderinamas filtras. Eilutės pradėtos „!“ bus ignoruotos. ", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Įjungti nuotolinės saugyklos palaikymą", + "description": "" }, - "1pImport":{ - "message":"Importuoti ir papildyti", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Aš esu patyręs naudotojas (privaloma perskaityti)", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Eksportuoti", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Išjungti išankstinį gavimą (visiems blokuotų tinklo užklausų prisijungimams išvengti)", + "description": "English: " }, - "1pExportFilename":{ - "message":"mano-ublock-statiniai-filtrai_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Išjungti saitų auditą", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Taikyti pakeitimus", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Neleisti WebRTC atskleisti vietinio IP adreso", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Pastovios taisyklės", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Numatytoji elgsena", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Laikinos taisyklės", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Šios numatytosios elgsenos gali būti nustelbtos kiekvienam puslapiui atskirai", + "description": "" }, - "rulesRevert":{ - "message":"Atstatyti", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Išjungti kosmetinius filtrus", + "description": "" }, - "rulesCommit":{ - "message":"Pritaikyti", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Blokuoti medijos elementus didesnius nei {{input}} kB", + "description": "" }, - "rulesEdit":{ - "message":"Redaguoti", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Blokuoti nuotolinius šriftus", + "description": "" }, - "rulesEditSave":{ - "message":"Įrašyti", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Išjungti JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Atmesti", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Blokuoti CSP ataskaitas", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Importuoti iš failo...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Uncloak canonical names", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Eksportuoti į failą", - "description":"" + "settingsAdvanced": { + "message": "Papildomi nustatymai", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"mano-ublock-dinaminės-taisyklės_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Features suitable only for technical users", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Dinaminių filtravimo taisyklių sąrašas.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "sudėtingesni nustatymai", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Taisyklės sintaksė: šaltinis paskirtis tipas veiksmas<\/code> (dokumentacija<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Paskutinis atkūrimas:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Serverių sąrašas, kuriems uBlock₀ bus išjungtas. Vienas įrašas eilutėje. Neteisingi serverių vardai bus tyliai ignoruoti.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Paskutinė atsarginė kopija:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Importuoti ir papildyti", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "Tinklo filtrų ({{netFilterCount}}) + kosmetinių filtrų ({{cosmeticFilterCount}}) iš:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Eksportuoti", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "naudojama {{used}} iš {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"mano-ublock-išimtys_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Automatiškai atnaujinti filtrų sąrašus.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Taikyti pakeitimus", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Atnaujinti dabar", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Tipas", - "description":"English: Type" + "3pPurgeAll": { + "message": "Valyti visus podėlius", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Sritis", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Analizuoti ir taikyti kosmetinius filtrus.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "

      Ši nuostata įjungia Su Adblock Plus suderinamų „elementų slėpimo“ filtrų analizę ir taikymą. Šie filtrai iš esmės yra kosmetiniai, jie naudojami tinklalapio elementams, kurie yra laikomi vaizdiniais nepatogumais ir kurių negalima užblokuoti tinklo užklausomis paremtais filtrais, paslėpti.

      Šios nuostatos įjungimas padidina uBlock₀ atminties naudojimą.

      ", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filtras", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignoruoti daugybinius kosmetinius filtrus.", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Visos", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

      Daugybiniai kosmetiniai filtrai yra tokie kosmetiniai filtrai, kurie taikomi visoms svetainėms.

      Nors uBlock₀ juos apdoroja efektyviai, daugybiniai kosmetiniai filtrai vis tiek gali prisidėti prie pamatuojamo atminties ir procesoriaus panaudojimo kai kuriose svetainėse, ypač didelėse ir ilgai gyvuojančiose.

      Šio nustatymo įjungimas sumažins atminties ir procesoriaus naudojimą, kurį sukelia svetainės dėl daugybinių kosmetinių filtrų apdorojimo, bei sumažins bendrą uBlock₀ atminties naudojimą.

      Rekomenduojama įjungti šį nustatymą mažiau galinguose įrenginiuose.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Užkulisiai", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Suspend network activity until all filter lists are loaded", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"filtruoti žurnalo įrašus", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Blokuotų serverių sąrašas", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Didžiausias žurnalo įrašų skaičius", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Taikyti pakeitimus", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Kontekstas:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Įtaisyti", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tipas:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Reklamos", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Dinaminis URL filtravimas", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Privatumas", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Statinis filtravimas", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Kenksmingos sritys", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} {{type}} tinklo užklausas, {{br}}kur URL adresas atitinka {{url}} {{br}}ir kurios kyla {{origin}},{{br}}{{importance}} yra atitinkantis išimties filtras.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Social widgets", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blokuoti", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Cookie notices", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Leisti", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Erzinimas", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"„{{type}}“ tipo", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Univarsalūs", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"bet kokio tipo", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Regionai, kalbos", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"iš „{{origin}}“", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Adaptuoti", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"bet kur", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Importuoti...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"išskyrus kai", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Vienas URL eilutėje. Neteisingi URL bus tyliai ignoruoti.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"net jei", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Pasenęs.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statinis filtras {{filter}} rastas:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "peržiūrėti turinį", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Pakeitimų žurnalas", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Paskutinis atnaujinimas: {{ago}}.\nIeškoti atnaujinimo.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Viki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Atnaujinama...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Palaikymas", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Tinklo klaida sutrukdė atnaujinti resursą.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Pirminis tekstas (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Do not add filters from untrusted sources.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Talkininkai", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Enable my custom filters", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Padaryti atsarginę kopiją į failą", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Allow custom filters requiring trust", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"mano-ublock-atsarginė_kopija_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Importuoti ir papildyti", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Atkurti iš failo...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Eksportuoti", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Atkurti numatytuosius nustatymus...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "mano-ublock-statiniai-filtrai_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Visi jūsų nustatymai bus perrašyti naudojant duomenis iš {{time}} atsarginės kopijos, o uBlock₀ bus perleistas.\n\nPerrašyti visus nustatymus naudojant atsarginės kopijos duomenis?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Taikyti pakeitimus", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Nepavyko nuskaityti duomenų arba jie neteisingi", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Pastovios taisyklės", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Visi jūsų nustatymai bus pašalinti, o uBlock₀ bus perleistas.\n\nAtkurti uBlock₀ pradinius nustatymus?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Laikinos taisyklės", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Nepavyko prisijungti prie {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Atstatyti", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Pridėti šį URL į jūsų adaptuotų filtrų sąrašą?\n\nPavadinimas: „{{title}}“\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Pritaikyti", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"prieš minutę", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Redaguoti", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"prieš {{value}} min.", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Įrašyti", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"prieš valandą", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Atmesti", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"prieš {{value}} val.", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Importuoti iš failo...", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"prieš dieną", - "description":"English: a day ago" + "rulesExport": { + "message": "Eksportuoti į failą", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"prieš {{value}} d.", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "mano-ublock-dinaminės-taisyklės_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Rodyti prietaisų skydą", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Dinaminių filtravimo taisyklių sąrašas.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Rodyti žurnalą", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Taisyklės sintaksė: šaltinis paskirtis tipas veiksmas (dokumentacija).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"išjungta", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Rikiuoti pagal:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin neleido įkelti šio puslapio:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Taisyklės tipas", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Dėl šio filtro", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Šaltinis", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"be parametrų", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Tikslas", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Rasta:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Baltojo sąrašo direktyvos nurodo, kurioms svetainėms uBlock Origin turėtų būti išjungtas. Vienas įrašas eilutėje. Neteisingos direktyvos bus tyliai ignoruotos ir užkomentuotos.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Grįžti", - "description":"English: Go back" + "whitelistImport": { + "message": "Importuoti ir papildyti", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Užverti langą", - "description":"English: Close this window" + "whitelistExport": { + "message": "Eksportuoti", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Išjungti griežtą {{hostname}} blokavimą", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "mano-ublock-išimtys_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Laikinai", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Taikyti pakeitimus", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Negrįžtamai", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Tipas", + "description": "English: Type" }, - "cloudPush":{ - "message":"Eksportuoti į nuotolinę saugyklą", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Sritis", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Importuoti iš nuotolinės saugyklos", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Importuoti iš nuotolinės saugyklos ir sulieti su dabartiniais nustatymais", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filtras", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Visos", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Šio įrenginio vardas:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Užkulisiai", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Pateikti", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Dabartinė kortelė", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Atstatyti", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Įkelti kortelės turinį iš naujo", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"baitai", - "description":"" + "loggerDomInspectorTip": { + "message": "Įjungti / išjungti DOM tyriklį", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Laikinai leisti didelius medijos elementus", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Įjungti/išjungti iššokantį langą", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "„uBlock Origin“ viki: žurnalas", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Valyti žurnalą", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Pristabdyti žurnalą (atmesti visus gaunamus duomenis)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Tęsti žurnalą", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Įjungti / išjungti žurnalo filtravimą", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filtruoti žurnalo įrašus", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Žurnalo filtravimo nuostatos", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Ne", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "užblokuota", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "leidžiama", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "modifikuota", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "1-oji šalis", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "3-ioji šalis", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Išsamiau", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filtras", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Filtrų sąrašas", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Taisyklė", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Kontekstas", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Šakninis kontekstas", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Partyness", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Tipas", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL taisyklė", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Kontekstas:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Tipas:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Statinis filtravimas", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} {{type}} tinklo užklausas, {{br}}kur URL adresas atitinka {{url}} {{br}}ir kurios kyla {{origin}},{{br}}{{importance}} yra atitinkantis išimties filtras.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Blokuoti", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Leisti", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "„{{type}}“ tipo", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "bet kokio tipo", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "iš „{{origin}}“", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "bet kur", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "išskyrus kai", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "net jei", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Statinis filtras {{filter}} rastas:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Statinis filtras {{filter}} nerastas jokiame dabar įjungtame filtrų sąraše", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Loggerio įrašai, kurie neatitinka visų trijų žemiau esančių sąlygų bus automatiškai panaikinami", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Išsaugoti įrašus ne senesnius kaip {{input}} min.", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Preserve at most {{input}} page loads per tab", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Preserve at most {{input}} entries per tab", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Use {{input}} lines per entry in vertically expanded mode", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Hide columns:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Time", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filter/rule", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Context", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Partyness", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Sąrašas", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Lentelė", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Neformatuotas", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Atidaryti", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Sukurti naują ataskaitą", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Rasti panašias ataskaitas", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Dokumentacija", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Read the documentation at uBlock/wiki to learn about all of uBlock Origin's features.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Klausimai ir pagalba", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Answers to questions and other kinds of help support is provided on the subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filter issues/website is broken", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Important: Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tips: Be sure your filter lists are up to date. The logger is the primary tool to diagnose filter-related issues.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Klaidos pranešimas", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Report issues with uBlock Origin itself to the uBlockOrigin/uBlock-issue issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Troubleshooting Information", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported. Note: clicking the button will cause the page's origin to be sent to GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verify that the issue still exists after reloading the problematic web page.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the web page:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The web page…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBlock Origin is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the web page as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Privatumo politika", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Pakeitimų žurnalas", + "description": "" + }, + "aboutCode": { + "message": "Pirminis tekstas (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Talkininkai", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Programinis kodas", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Vertimai", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Filtrų sąrašai", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Išorinės priklausomybės (suderinamos su „GPLv3“):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO's own filter lists are freely hosted on the following CDNs:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "A randomly picked CDN is used when a filter list needs to be updated.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Padaryti atsarginę kopiją į failą", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "mano-ublock-atsarginė_kopija_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Atkurti iš failo...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Atkurti numatytuosius nustatymus...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Visi jūsų nustatymai bus perrašyti naudojant duomenis iš {{time}} atsarginės kopijos, o uBlock₀ bus perleistas.\n\nPerrašyti visus nustatymus naudojant atsarginės kopijos duomenis?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Nepavyko nuskaityti duomenų arba jie neteisingi", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Visi jūsų nustatymai bus pašalinti, o uBlock₀ bus perleistas.\n\nAtkurti uBlock₀ pradinius nustatymus?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Tinklo klaida: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Prenumeruoti", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "prieš minutę", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "prieš {{value}} min.", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "prieš valandą", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "prieš {{value}} val.", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "prieš dieną", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "prieš {{value}} d.", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Rodyti prietaisų skydą", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Rodyti žurnalą", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "išjungta", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Puslapis užblokuotas", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin neleido įkelti šio puslapio:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Dėl šio filtro", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "be parametrų", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Rasta:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Grįžti", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Užverti langą", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Išjungti griežtą {{hostname}} blokavimą", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Laikinai", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Negrįžtamai", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Tęsti", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Eksportuoti į nuotolinę saugyklą", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importuoti iš nuotolinės saugyklos", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importuoti iš nuotolinės saugyklos ir sulieti su dabartiniais nustatymais", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Šio įrenginio vardas:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Įspėjimas! Keiskite šiuos sudėtingesnius nustatymus savo rizika.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Pateikti", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Taikyti pakeitimus", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Atstatyti", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "baitai", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Block element in frame…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Subscribe to filter list…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Laikinai leisti didelius medijos elementus", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "View source code…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Įveskite nuorodą", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Toggle locked scrolling", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Kopijuoti į iškarpinę", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Žymėti viską", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Toggle cosmetic filtering", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Toggle JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Relax blocking mode", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Storage used: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Click to load", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Klaidos: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/lv/messages.json b/src/_locales/lv/messages.json index 10aabe3dbc6db..c884504ae9d68 100644 --- a/src/_locales/lv/messages.json +++ b/src/_locales/lv/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Beidzot, efektīvs bloķētājs. Nepārslogo procesoru un atmiņu.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Beidzot, efektīvs bloķētājs. Nepārslogo procesoru un atmiņu.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Vadības panelis", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Vadības panelis", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Iestatījumi", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Uzmanību! Ir nesaglabātas izmaiņas", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Trešo pušu filtri", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Palikt", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Mani filtri", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Neņemt vērā", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Mani noteikumi", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Iestatījumi", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Atļautais saraksts", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Trešo pušu filtri", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Tīkla pieprasījumu žurnāls", - "description":"Title for the logger window" + "1pPageName": { + "message": "Mani filtri", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Par", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Mani noteikumi", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Klikšķis: atslēgt\/ieslēgt uBlock₀ šajā vietnē.\n\nCtrl+klikšķis: atslēgt uBlock₀ tikai šai lapai.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Uzticamas vietnes", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"bloķētie pieprasījumi", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Īsceļi", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"šajā lapā", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Tīkla pieprasījumu žurnāls", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} vai {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Par", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"kopš instalācijas brīža", - "description":"English: since install" + "supportPageName": { + "message": "Atbalsts", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"vai", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — līdzekļu skatītājs", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Noklikšķiniet, lai atvērtu vadības paneli", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Papildu iestatījumi", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Ienākt elementa atlasītāju režīmā", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Klikšķis: atslēgt/ieslēgt uBlock₀ šajā vietnē.\n\nCtrl+klikšķis: atslēgt uBlock₀ tikai šai lapai.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Doties uz pieprasījumu žurnālu", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Noklikšķināt, lai atslēgtu uBlock₀ šajā vietnē.\n\nCtrl + klikšķis, lai atslēgtu uBlock₀ tikai šajā lapā.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Pārslēgt uznirstošo logu bloķēšanu šajā vietnē", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Klikšķināt, lai šajā vietnē iespējotu uBlock₀.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Pārslēgt lielu multivides elementu bloķēšanu šajā vietnē", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "bloķētie pieprasījumi", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Pārslēgt kosmētisko filtrēšanu šajā vietnē", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "šajā lapā", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Pārslēgt ārējo fontu bloķēšanu šajā vietnē", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} vai {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Globālie ierobežojumi: šī kolonna paredzēta ierobežojumiem, kas attieksies uz visām mājaslapām.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "kopš instalācijas brīža", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Vietējie ierobežojumi: šī kolonna paredzēta ierobežojumiem, kas attieksies tikai uz konkrēto mājaslapu.\nVietējie ierobežojumi pārraksta globālos ierobežojumus.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "vai", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Nokliķšķināt šeit, lai saglabātu izmaiņas.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Aizturētas šajā lapā", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Noklikšķināt šeit, lai atceltu izmaiņas.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Pavisam aizturētas", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"Visi", - "description":"" + "popupDomainsConnected_v2": { + "message": "Savienotie domēni", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"attēli", - "description":"" + "popupTipDashboard": { + "message": "Atvērt vadības paneli", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"No trešajām pusēm", - "description":"" + "popupTipZapper": { + "message": "Ieiet elementa dzēšanas režīmā", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"3rd-party css\/attēli", - "description":"" + "popupTipPicker": { + "message": "Ienākt elementa atlasītāju režīmā", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"inline skripti", - "description":"" + "popupTipLog": { + "message": "Atvērt pieprasījumu žurnālu", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"1st-party skripti", - "description":"" + "popupTipReport": { + "message": "Ziņot par nepilnību šajā vietnē", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"3rd-party skripti", - "description":"" + "popupTipNoPopups": { + "message": "Pārslēgt uznirstošo logu bloķēšanu šajā vietnē", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"3rd-party freimi", - "description":"" + "popupTipNoPopups1": { + "message": "Klikšķināt, lai šajā vietnē aizturētu uznirstošos logus", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"savienotie domēni", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Klikšķināt, lai šajā vietnē vairs neaizturētu uznirstošos logus", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} no {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Pārslēgt lielu multivides elementu bloķēšanu šajā vietnē", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Izveidot", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Klikšķināt, lai šajā vietnē aizturētu lielas informācijas nesēju daļas", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Izvēlēties", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Klikšķināt, lai neaizturētu lielas informācijas nesēju daļas", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Iziet", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Pārslēgt kosmētisko filtrēšanu šajā vietnē", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Priekšskatījums", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Klikšķināt, lai šajā vietnē atspējotu vizuālo aizturēšanu", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Resursu filtri", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Klikšķināt, lai šajā vietnē iespējotu vizuālo aizturēšanu", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Vizuālie filtri", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Pārslēgt ārējo fontu bloķēšanu šajā vietnē", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Click, Ctrl-click", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Klikšķināt, lai šajā vietnē aizturētu attālos fontus", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Bloķēt elementu", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Klikšķināt, lai šajā vietnē vairs neaizturēt attālos fontus", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Paslēpt vietu no bloķētā elementa", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Klikšķināt, lai šajā vietnē atspējotu JavaScript", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Parādīt bloķēto pieprasījumu skaitu uz ikonas", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Klikšķināt, lai šajā vietnē vairs neatspējotu JavaScript", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Atslēgt rīka padomus (tooltips)", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Uznirstošie logi", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Izmantot konteksta izvēlni vajadzības gadījumā", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Lielas informācijas nesēju daļas", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Daltoniķiem draudzīgs", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Vizuālā aizturēšana", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Aktivizēt mākoņdatu glabāšanas atbalstu", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Attālinātie fonti", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Es esmu pieredzējis lietotājs (Vēlams izlasīt<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Atslēgt pirmsielādi (lai novērstu bloķētus tīkla pieprasījumus)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Vairāk", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Atslēgt tīmekļa saišu izsekošanu", - "description":"English: " + "popupLessButton_v2": { + "message": "Mazāk", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Novērst savas IP adreses noplūdi ar WebRTC", - "description":"English: " + "popupTipGlobalRules": { + "message": "Globālie ierobežojumi: šī kolonna paredzēta ierobežojumiem, kas attieksies uz visām mājaslapām.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Noklusējuma darbība", - "description":"" + "popupTipLocalRules": { + "message": "Vietējie ierobežojumi: šī kolonna paredzēta ierobežojumiem, kas attieksies tikai uz konkrēto mājaslapu.\nVietējie ierobežojumi pārraksta globālos ierobežojumus.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Šos uzstādījumus var mainīt katrai vietnei atsevišķi", - "description":"" + "popupTipSaveRules": { + "message": "Nokliķšķināt šeit, lai saglabātu izmaiņas.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Atslēgt kosmētiskos filtrus", - "description":"" + "popupTipRevertRules": { + "message": "Klikšķināt, lai atceltu izmaiņas.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Bloķēt multivides elementus kas lielāki par {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "Visi", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Bloķēt ārējos fontus", - "description":"" + "popupImageRulePrompt": { + "message": "attēli", + "description": "" }, - "settingsStorageUsed":{ - "message":"Izmantotais krātuves lielums: {{value}} baiti", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "No trešajām pusēm", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Pēdējā atjaunošana veikta:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "trešo pušu CSS/attēli", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Pēdējā rezerves kopija:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "inline skripti", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} tīkla filtri + {{cosmeticFilterCount}} kosmētikas filtri no:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "1st-party skripti", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} izmanto no {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "3rd-party skripti", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Automātiski atjaunināt filtra sarakstus.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "3rd-party freimi", + "description": "" }, - "3pUpdateNow":{ - "message":"Atjaunināt tūlīt", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "savienotie domēni", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Visas kešatmiņas iztīrīšana", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} no {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Apstrādāt un izpildīt kosmētikas filtrus.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Versija", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Šī opcija iespējo apstrādāt un ieviest ar Adblock Plus saderīgus “elementu paslēpšanas”<\/a> filtrus. Šie filtri ir būtībā kosmētiski, tie kalpo, lai paslēptu tīmekļa lapu elementus, kas tiek uzskatīti par vizuālu traucējumu, un kas nevar būt nobloķēti ar pieprasījumu balstītu filtrēšanas programmu.<\/p>

      Šī līdzekļa iespējošana palielina uBlock₀<\/i> izmantojamās atmiņas daudzumu.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "skripts", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignore generic cosmetic filters", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "rāmis", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites.

      Though handled efficiently by uBlock₀, generic cosmetic filters may still contribute measurable memory and CPU overhead on some web pages, especially for large and long-lived ones.

      Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters, and also lower the memory footprint of uBlock₀ itself.

      It is recommended to enable this option on less powerful devices.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Izveidot", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Bloķēto hostu saraksti", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Izvēlēties", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Lietot izmaiņas", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Iziet", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Reklāmas", - "description":"English: Ads" + "pickerPreview": { + "message": "Priekšskatījums", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Konfidencialitāte", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Resursu filtri", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Ļaundabīgo programmu domēni", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Vizuālie filtri", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Sociālie tīkli", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Click, Ctrl-click", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Daudzfunkcionālie", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Bloķēt elementu…", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Reģionālie, valodas", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Paslēpt vietu no bloķētā elementa", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Lietotāja", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Parādīt bloķēto pieprasījumu skaitu uz ikonas", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Vienu URL katrā rindiņā. Rindiņas, kuras sākas ar ‘!’ tiks ignorētas. Nederīgs URL tiks ignorēts bez brīdinājuma.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Atslēgt rīka padomus (tooltips)", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Apstrādāt", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Izmantot konteksta izvēlni vajadzības gadījumā", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"iztīrīt kešatmiņu", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Daltoniķiem draudzīgs", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"pieejama jauna versija", - "description":"English: new version available" + "settingsAppearance": { + "message": "Izskats", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"novecojis", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Izskats", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Pēdējo reizi atjaunināts: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Pielāgota izcēluma krāsa", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Vienu filtru katrā rindā. Filtrs var būt vienkārši resursa adrese, vai saderīgs ar Adblock Plus filtrs. Rindiņas, kuras sākas ar ‘!’ tiks ignorētas.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Aktivizēt mākoņdatu glabāšanas atbalstu", + "description": "" }, - "1pImport":{ - "message":"Importēt un pievienot", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Es esmu pieredzējis lietotājs (Vēlams izlasīt)", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Eksportēt", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Atslēgt pirmsielādi (lai novērstu bloķētus tīkla pieprasījumus)", + "description": "English: " }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Atslēgt tīmekļa saišu izsekošanu", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Lietot izmaiņas", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Novērst savas IP adreses noplūdi ar WebRTC", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Pastāvīgie noteikumi", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Noklusējuma darbība", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Pagaidu noteikumi", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Šos uzstādījumus var mainīt katrai vietnei atsevišķi", + "description": "" }, - "rulesRevert":{ - "message":"Atgriezt", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Atslēgt kosmētiskos filtrus", + "description": "" }, - "rulesCommit":{ - "message":"Ieviest", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Aizturēt informācijas nesēju daļas, kas ir lielākas par {{input}} KB", + "description": "" }, - "rulesEdit":{ - "message":"Rediģēt", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Bloķēt ārējos fontus", + "description": "" }, - "rulesEditSave":{ - "message":"Saglabāt", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Atspējot JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Atsacīties", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Bloķēt CSP atskaites", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Importēt no faila...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Atslēpt kanoniskos nosaukumus", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Eksportēt uz failu...", - "description":"" + "settingsAdvanced": { + "message": "Paplašināti", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Iespējas, kas piemērotas tikai tehniskiem lietotājiem.", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Dinamisko filtrēšanas noteikumu saraksts.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "papildu iestatījumi", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Noteikumu sintakse: avots mērķis tips rīcība<\/code> (pilna dokumentācija<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Pēdējā atjaunošana veikta:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Saraksts ar interneta resursiem, kuriem tiks atslēgts uBlock₀. Viens ieraksts katrā rindiņā. Nederīgi interneta resursu nosaukumi tiks ignorēti bez brīdinājuma.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Pēdējā rezerves kopija:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Importēt un pievienot", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} tīkla filtri + {{cosmeticFilterCount}} kosmētikas filtri no:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Eksportēt", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} izmanto no {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Automātiski atjaunināt filtra sarakstus.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Lietot izmaiņas", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Atjaunināt tūlīt", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Tips", - "description":"English: Type" + "3pPurgeAll": { + "message": "Visas kešatmiņas iztīrīšana", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Domēns", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Apstrādāt un izpildīt kosmētikas filtrus.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "

      Šī opcija iespējo apstrādāt un ieviest ar Adblock Plus saderīgus “elementu paslēpšanas” filtrus. Šie filtri ir būtībā kosmētiski, tie kalpo, lai paslēptu tīmekļa lapu elementus, kas tiek uzskatīti par vizuālu traucējumu, un kas nevar būt nobloķēti ar pieprasījumu balstītu filtrēšanas programmu.

      Šī līdzekļa iespējošana palielina uBlock₀ izmantojamās atmiņas daudzumu.

      ", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filtrs", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Neņemt vērā vispārīgos kosmētiskos aizturētājus", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Viss", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Vispārīgie kosmētiskie aizturētāji ir tādi kosmētiskie aizturētāji, kurus paredzēts pielietot visās tīmekļvietnēs. Šīs iespējas iespējošana novērsīs tīmekļa lapām pievienoto atmiņas un CPU virstēriņu kā vispārīgo kosmētisko aizturētāju apstrādāšanas iznākumu.\n\nIr ieteicams iespējot šo iespēju mazāk jaudīgās ierīcēs.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Aizkulisēs", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Atlikt tīkla darbības, līdz visi aizturēšanas saraksti ir ielādēti.", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"žurnāla ierakstu filtrs", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Bloķēto hostu saraksti", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Žurnāla ierakstu maksimālais skaits", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Lietot izmaiņas", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Konteksts:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Iebūvētie", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tips:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Reklāmas", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Dinamiskā URL filtrēšana", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Konfidencialitāte", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Statiskā filtrēšana", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Aizsardzība pret ļaunprātīgām (inficētas vai satur vīrusus) vietnēm, drošība", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} tīkla pieprasījumiem {{type}} {{br}}kuru URL adrese satur {{url}} {{br}}un kas nāk no {{origin}},{{br}}{{importance}} ir atbilstošs izņēmumu filtrs.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Sabiedriskās ekrānvadīklas", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Bloķēt", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Sīkdatņu paziņojumi", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Atļaut", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Traucējoši elementi", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tips “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Daudzfunkcionālie", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"jebkurš tips", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Reģionālie, valodas", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"no “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Lietotāja", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"no jebkuras vietas", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Ievietot…", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"izņemot gadījumus, kad", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Viens URL katrā rindā. Nederīgi URL netiks ņemti vērā.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"pat ja", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Novecojis.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statiskais filtrs {{filter}} atrasts:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "skatīt saturu", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Izmaiņu žurnāls", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Pēdējo reizi atjaunināts: {{ago}}.\nNoklikšķiniet, lai atjauninātu.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Atjaunina…", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Support", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Tīkla kļūda neļāva atjaunināt resursu.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Pirmkods (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Nevajag pievienot filtrus no neuzticamiem avotiem.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Atbalstītāji", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Iespējot manas pielāgotās atlases", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Saglabāt iestatījumus failā", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Ļaut pielāgotas atlases, kas pieprasa uzticēšanos", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Importēt un pievienot", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Atjaunot iestatījumus no faila...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Izgūt…", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Iestatīt noklusējuma iestatījumus...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Tiks pārrakstīti visi iestatījumi izmantojot datus, kas saglabāti {{time}}, un µBlock₀ tiks restartēts. Pārrakstīt visus esošos iestatījumus, izmantojot rezerves kopiju?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Lietot izmaiņas", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Datus nevar nolasīt vai tie nav derīgi", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Pastāvīgie noteikumi", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Tiks atcelti visi Jūsu iestatījumi, un uBlock₀ tiks restartēts. \nAtjaunot rūpnīcas iestatījumus?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Pagaidu noteikumi", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Nevar izveidot savienojumu ar {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Atgriezt", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Pievienot sekojošo URL Jūsu lietotāja filtru sarakstiem?\n\nNosaukums: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Ieviest", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"pirms minūtes", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Rediģēt", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"pirms {{value}} minūtēm", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Saglabāt", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"pirms stundas", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Atsacīties", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"pirms {{value}} stundām", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Ievietot no datnes…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"vakar", - "description":"English: a day ago" + "rulesExport": { + "message": "Izgūt datnē…", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"pirms {{value}} dienām", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Parādīt Vadības paneli", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Dinamisko filtrēšanas noteikumu saraksts.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Parādīt tīkla pieprasījumu žurnālu", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Noteikumu sintakse: avots mērķis tips rīcība (pilna dokumentācija).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"izslēgts", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Kārtot:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock₀ novērsa šo lapu no ielādes:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Nosacījuma veids", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Sakarā ar šādu filtru", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Avots", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"bez parametriem", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Mērķis", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Atrodas:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Saraksts ar interneta resursiem, kuriem tiks atslēgts uBlock Origin. Viens ieraksts katrā rindiņā. Nederīgi interneta resursu nosaukumi tiks ignorēti bez brīdinājuma.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Doties atpakaļ", - "description":"English: Go back" + "whitelistImport": { + "message": "Importēt un pievienot", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Aizvērt šo logu", - "description":"English: Close this window" + "whitelistExport": { + "message": "Izgūt…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Atslēgt satura bloķēšanu saitnei {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Pagaidu", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Lietot izmaiņas", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Paliekoši", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Tips", + "description": "English: Type" }, - "cloudPush":{ - "message":"Eksports uz mākoņdatu glabātuvi", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Domēns", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Imports no mākoņdatu glabātuves", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Importēt no mākoņdatu glabātuves un apvienot ar pašreizējiem iestatījumiem", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filtrs", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Viss", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Šīs ierīces nosaukums:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Aizkulisēs", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Iesniegt", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Šī cilne", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Atgriezt", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Pārlādēt cilnes saturu", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"baiti", - "description":"" + "loggerDomInspectorTip": { + "message": "Pārslēgt DOM pārlūku", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Īslaicīgi atļaut lielos multivides elementus", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Pārslēgt uznirstošo paneli", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"Šim ierakstam ir jābūt pēdējam", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: žurnāls", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Iztīrīt žurnālu", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Apturēt žurnalēšanu (atmest visus ienākošos datus)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Atsākt žurnālus", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Pārslēgt žurnāla atlasi", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "žurnāla ierakstu filtrs", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Žurnāla atlases iespējas", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Nav", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "aizturēts", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "atļauts", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "mainīts", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "Pirmā puse", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "Trešā puse", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Izklāsts", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filtrs", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Filtru saraksts", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Nosacījums", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Konteksts", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Saknes konteksts", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Ballīte", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Veids", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "Vietnes URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Dinamiskā URL filtrēšana", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Konteksts:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Tips:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Statiskā filtrēšana", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} tīkla pieprasījumiem {{type}} {{br}}kuru URL adrese satur {{url}} {{br}}un kas nāk no {{origin}},{{br}}{{importance}} ir atbilstošs izņēmumu filtrs.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Bloķēt", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Atļaut", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "tips “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "jebkurš tips", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "no “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "no jebkuras vietas", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "izņemot gadījumus, kad", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "pat ja", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Statiskais filtrs {{filter}} atrasts:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Nemainīgs aizturētājs netika atrasts nevienā no pašreiz iespējotajiem aizturēšanas sarakstiem", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Žurnāla ieraksti, kas neatbilsts visiem trim zemāk esošajiem nosacījumiem, tiks atmesti:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Saglabāt pēdējo {{input}} minūšu ierakstus", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Saglabāt ne vairāk kā {{input}} lapu ielādes cilnē", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Saglabāt ne vairāk kā {{input}} ierakstus cilnē", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Izmantot {{input}} rindas ierakstam stateniski izvērstā skatā", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Paslēpt kolonnas:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Laiks", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} aizturētājs/nosacījums", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Konteksts", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Ballīte", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Saraksts", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tabula", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Vienkāršs", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Atvērt", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Izveidot jaunu ziņojumu", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Meklēt līdzīgus ziņojumus", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Dokumentācija", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Dokumentāciju var lasīt uBlock/wiki, lai uzzinātu par visām uBlock Origin iespējām.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Jautājumi un atbalsts", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Atbildes uz jautājumiem un cita veida atbalsts tiek sniegts /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Aizturēšanas nepilnības/nedarbojas vietne", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Par aizturēšanas nepilnībām noteiktās vietnēs var ziņot nepilnību uzskaitē uBlockOrigin/uAssets.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Svarīgi: ir jāizvairās no līdzīgu aizturētāju izmantošanas vienlaicīgi ar uBlock Origin, jo tas var radīt aizturēšanas kļūmes noteiktās vietnēs.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Ieteikums: jāpārliecinās, ka aizturēšanas saraksti ir atjaunināti. Žurnāls ir galvenais rīks, lai noteiktu ar aizturēšanu saistītas kļūmes.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Nepilnību ziņojums", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Par uBlock Origin nepilnībām jāziņo uBlockOrigin/uBlock-issue.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Kļūmju noteikšanas informācija", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Zemāk ir tehniskā informācija, kas var būt noderīga, kad brīvprātīgie mēģinās palīdzēt atrisināt sarežģījumus.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Ziņot par aizturētāja nepilnībām", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Lai izvairītos no brīvprātīgo noslogošanas ar ziņojumiem, kas atkārtojas, lūgums pārbaudīt, vai par šādu nepilnību jau ir ziņots.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Aizturēšanas saraksti tiek atjaunināti ik dienu. Jāpārliecinās, vai nepilnība jau nav novērsta visjaunākajos aizturēšanas sarakstos.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Jāpārliecinās, vai nepilnība joprojām pastāv pēc tīmekļa vietnes ar sarežģījumiem pārlādēšanas.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Tīmekļa lapas adrese:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Tīmekļa lapa…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Atlasīt ierakstu --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Rāda reklāmas vai to paliekas", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Ir pārklājumi vai citas neērtības", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Nosaka uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Ir ar privātumu saistītas nebūšanas", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Salūzt, kad uBlock Origin ir iespējots", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Atver nevēlamas cilnes vai logus", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Noved pie slitkas programmatūras, pikšķerēšanas", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Iezīmēt tīmekļa lapu kā \"NSFW\" (\"Not Safe for Work (nav droša darbam))", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Privātuma nosacījumi", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Izmaiņu žurnāls", + "description": "" + }, + "aboutCode": { + "message": "Pirmkods (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Atbalstītāji", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Pirmkods", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Tulkojumi", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Filtru saraksti", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Ārējās atkarības (GPLv3 saderīgas):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO pašu aizturēšanas saraksti ir brīvi pieejami šajos SPT (satura piegādes tīklos):", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Nejauši izvēlēts SPT tiks izmantots, kad būs jāatjaunina aizturēšanas saraksts.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Saglabāt iestatījumus failā", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Atjaunot iestatījumus no faila...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Atgriezt noklusējuma iestatījumus…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Tiks pārrakstīti visi iestatījumi izmantojot datus, kas saglabāti {{time}}, un µBlock₀ tiks restartēts. Pārrakstīt visus esošos iestatījumus, izmantojot rezerves kopiju?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Datus nevar nolasīt vai tie nav derīgi", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Tiks atcelti visi Jūsu iestatījumi, un uBlock₀ tiks restartēts. \nAtjaunot rūpnīcas iestatījumus?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Tīkla kļūda: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Abonēt", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "pirms minūtes", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "pirms {{value}} minūtēm", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "pirms stundas", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "pirms {{value}} stundām", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "vakar", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "pirms {{value}} dienām", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Parādīt Vadības paneli", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Parādīt tīkla pieprasījumu žurnālu", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "izslēgts", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Lapa aizturēta", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock₀ novērsa šo lapu no ielādes:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Sakarā ar šādu filtru", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "bez parametriem", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Atrodas:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Doties atpakaļ", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Aizvērt šo logu", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Vairs nebrīdināt par šo vietni", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Atslēgt satura bloķēšanu saitnei {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Pagaidu", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Paliekoši", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Turpināt", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Aizturētā lapa veic pārvirzīšanu uz citu vietni. Ja izvēlēsies turpināt, nonāksi uzreiz šeit: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Iemesls:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Ļaunprātīgas darbības", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Izsekotājs", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Slikta slava", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Eksports uz mākoņdatu glabātuvi", + "description": "tooltip" + }, + "cloudPull": { + "message": "Imports no mākoņdatu glabātuves", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importēt no mākoņdatu glabātuves un apvienot ar pašreizējiem iestatījumiem", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Šīs ierīces nosaukums:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Brīdinājums! Mainiet šos iestatījumus uz savu atbildību.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Iesniegt", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Lietot izmaiņas", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Atgriezt", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "baiti", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Aizturēt elementu rāmī…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Abonēt filtru sarakstu…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Īslaicīgi atļaut lielos multivides elementus", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Skatīt pirmkodu…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Ievadīt saīsni", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Pārslēgt slēgto ritināšanu", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Kopēt starpliktuvē", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Atlasīt visu", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Pārslēgt kosmētisko atlasi", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Pārslēgt JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Atslābinātais aizturēšanas režīms", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Izmantotais krātuves lielums: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Klikšķināt, lai ielādētu", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Kļūdas: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Nevarēja pienācīgi aizturēt pārlūka palaišanas laikā.\nJāpārlādē lapa, lai nodrošinātu pienācīgu aizturēšanu.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Šim ierakstam ir jābūt pēdējam", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/mk/messages.json b/src/_locales/mk/messages.json new file mode 100644 index 0000000000000..d6981beae583c --- /dev/null +++ b/src/_locales/mk/messages.json @@ -0,0 +1,1314 @@ +{ + "extName": { + "message": "uBlock Origin", + "description": "extension name." + }, + "extShortDesc": { + "message": "Конечно, ефикасен блокер. Лесен на CPU и меморија.", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "dashboardName": { + "message": "uBlock₀ — Табла", + "description": "English: uBlock₀ — Dashboard" + }, + "dashboardUnsavedWarning": { + "message": "Предупредување! Имате неснимени промени", + "description": "A warning in the dashboard when navigating away from unsaved changes" + }, + "dashboardUnsavedWarningStay": { + "message": "Остани", + "description": "Label for button to prevent navigating away from unsaved changes" + }, + "dashboardUnsavedWarningIgnore": { + "message": "Игнорирај", + "description": "Label for button to ignore unsaved changes" + }, + "settingsPageName": { + "message": "Подесувања", + "description": "appears as tab name in dashboard" + }, + "3pPageName": { + "message": "Филтер листи", + "description": "appears as tab name in dashboard" + }, + "1pPageName": { + "message": "Мои филтери", + "description": "appears as tab name in dashboard" + }, + "rulesPageName": { + "message": "Мои правила", + "description": "appears as tab name in dashboard" + }, + "whitelistPageName": { + "message": "Верувани сајтови", + "description": "appears as tab name in dashboard" + }, + "shortcutsPageName": { + "message": "Кратенки", + "description": "appears as tab name in dashboard" + }, + "statsPageName": { + "message": "uBlock₀ — Логови", + "description": "Title for the logger window" + }, + "aboutPageName": { + "message": "За", + "description": "appears as tab name in dashboard" + }, + "supportPageName": { + "message": "Поддршка", + "description": "appears as tab name in dashboard" + }, + "assetViewerPageName": { + "message": "uBlock₀ — Прегледувач на средства", + "description": "Title for the asset viewer page" + }, + "advancedSettingsPageName": { + "message": "Напредни подесувања", + "description": "Title for the advanced settings page" + }, + "popupPowerSwitchInfo": { + "message": "Кликнете: деактивирајте/активирајте uBlock₀ за оваа страница.\n\nCtrl+клик: деактивирајте uBlock₀ само на оваа страница.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + }, + "popupPowerSwitchInfo1": { + "message": "Кликнете за да го деактивирате uBlock₀ за оваа страница.\n\nCtrl+кликнете за да го деактивирате uBlock₀ само на оваа страница.", + "description": "Message to be read by screen readers" + }, + "popupPowerSwitchInfo2": { + "message": "Кликнете за да го активирате uBlock₀ за оваа страница.", + "description": "Message to be read by screen readers" + }, + "popupBlockedRequestPrompt": { + "message": "побарувања блокирани", + "description": "English: requests blocked" + }, + "popupBlockedOnThisPagePrompt": { + "message": "на оваа страница", + "description": "English: on this page" + }, + "popupBlockedStats": { + "message": "{{count}} или {{percent}}%", + "description": "Example: 15 (13%)" + }, + "popupBlockedSinceInstallPrompt": { + "message": "од инсталирање", + "description": "English: since install" + }, + "popupOr": { + "message": "или", + "description": "English: or" + }, + "popupBlockedOnThisPage_v2": { + "message": "Блокирани на оваа страна", + "description": "For the new mobile-friendly popup design" + }, + "popupBlockedSinceInstall_v2": { + "message": "Блокирани од инсталирање", + "description": "For the new mobile-friendly popup design" + }, + "popupDomainsConnected_v2": { + "message": "Домени конектирани", + "description": "For the new mobile-friendly popup design" + }, + "popupTipDashboard": { + "message": "Отворија ја таблата", + "description": "English: Click to open the dashboard" + }, + "popupTipZapper": { + "message": "Влези во елемент западник мод", + "description": "Tooltip for the element-zapper icon in the popup panel" + }, + "popupTipPicker": { + "message": "Влези во елемент одбирач мод", + "description": "English: Enter element picker mode" + }, + "popupTipLog": { + "message": "Отвоери го логерот", + "description": "Tooltip used for the logger icon in the panel" + }, + "popupTipReport": { + "message": "Пријави проблем на оваа веб-страница", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipNoPopups": { + "message": "Промени ја блокадата на сите поп-упи за оваа страница", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups1": { + "message": "Кликни да блокираш сите попапи на оваа страница", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2": { + "message": "Кликнете за да не блокирате повеќе сите поп-упи на оваа страница", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoLargeMedia": { + "message": "Промени ја блокадата на големите медиумски елементи за оваа страница", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia1": { + "message": "Кликнете за да блокирате големи медиумски елементи на оваа страница", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2": { + "message": "Кликнете за да не блокирате повеќе големи медиумски елементи на оваа страница", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoCosmeticFiltering": { + "message": "Промени го козметичкото филтрирање за оваа страница", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering1": { + "message": "Кликнете да го исклучите козметичките филтри на оваа страна", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2": { + "message": "Кликнете да го уклучите козметичките филтри на оваа страна", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoRemoteFonts": { + "message": "Промени ја блокадата на далечински фонтови за оваа страница", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts1": { + "message": "Кликнете за да блокирате далечински фонтови на оваа страница", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts2": { + "message": "Кликнете за да не блокирате повеќе далечински фонтови на оваа страница", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoScripting1": { + "message": "Кликнете за да се блокира JavaScript на оваа страна", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupTipNoScripting2": { + "message": "Кликнете за да не се блокира JavaScript на оваа страна повеќе", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupNoPopups_v2": { + "message": "Поп-ап прозорец", + "description": "Caption for the no-popups per-site switch" + }, + "popupNoLargeMedia_v2": { + "message": "Големи медија елемнти", + "description": "Caption for the no-large-media per-site switch" + }, + "popupNoCosmeticFiltering_v2": { + "message": "Козметичко филтрирање", + "description": "Caption for the no-cosmetic-filtering per-site switch" + }, + "popupNoRemoteFonts_v2": { + "message": "Далечни фонтови", + "description": "Caption for the no-remote-fonts per-site switch" + }, + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" + }, + "popupMoreButton_v2": { + "message": "Повеќе", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton_v2": { + "message": "Помалку", + "description": "Label to be used to hide popup panel sections" + }, + "popupTipGlobalRules": { + "message": "Глобални правила: оваа колона е за правила што се однесуваат на сите сајтови.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." + }, + "popupTipLocalRules": { + "message": "Локални правила: оваа колона е за правила што се однесуваат само на моменталниот сајт.\nЛокални правила надминуваат глобални правила.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." + }, + "popupTipSaveRules": { + "message": "Кликни да ги снимиш твоите промени трајно", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." + }, + "popupTipRevertRules": { + "message": "Кликни да ги повратиш твоите промени", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + }, + "popupAnyRulePrompt": { + "message": "сите", + "description": "" + }, + "popupImageRulePrompt": { + "message": "слики", + "description": "" + }, + "popup3pAnyRulePrompt": { + "message": "Трети лица", + "description": "" + }, + "popup3pPassiveRulePrompt": { + "message": "Трети лица css/слики", + "description": "" + }, + "popupInlineScriptRulePrompt": { + "message": "внатрешни скрипти", + "description": "" + }, + "popup1pScriptRulePrompt": { + "message": "Самострани скрипти", + "description": "" + }, + "popup3pScriptRulePrompt": { + "message": "Други страни скрипти", + "description": "" + }, + "popup3pFrameRulePrompt": { + "message": "3rd-party фрејмови", + "description": "" + }, + "popupHitDomainCountPrompt": { + "message": "домени конектирани", + "description": "appears in popup" + }, + "popupHitDomainCount": { + "message": "{{count}} од {{total}}", + "description": "appears in popup" + }, + "popupVersion": { + "message": "Верзија", + "description": "Example of use: Version 1.26.4" + }, + "popup3pScriptFilter": { + "message": "скрипта", + "description": "Appears as an option to filter out firewall rows" + }, + "popup3pFrameFilter": { + "message": "рамка", + "description": "Appears as an option to filter out firewall rows" + }, + "pickerCreate": { + "message": "Создади", + "description": "English: Create" + }, + "pickerPick": { + "message": "Одбери", + "description": "English: Pick" + }, + "pickerQuit": { + "message": "Исклучи", + "description": "English: Quit" + }, + "pickerPreview": { + "message": "Прегледај", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + }, + "pickerNetFilters": { + "message": "Мрежни филтери", + "description": "English: header for a type of filter in the element picker dialog" + }, + "pickerCosmeticFilters": { + "message": "Козметичко филтрирање", + "description": "English: Cosmetic filters" + }, + "pickerCosmeticFiltersHint": { + "message": "Клик, Контрол-клик", + "description": "English: Click, Ctrl-click" + }, + "pickerContextMenuEntry": { + "message": "Блокирај елемент...", + "description": "An entry in the browser's contextual menu" + }, + "settingsCollapseBlockedPrompt": { + "message": "Скријте ги местата за блокирани елементи", + "description": "English: Hide placeholders of blocked elements" + }, + "settingsIconBadgePrompt": { + "message": "Покажувај ја бројката на блокирани барања на иконата", + "description": "English: Show the number of blocked requests on the icon" + }, + "settingsTooltipsPrompt": { + "message": " Исклучи ги советите", + "description": "A checkbox in the Settings pane" + }, + "settingsContextMenuPrompt": { + "message": "Искористете го контекстуалното мени каде што е соодветно", + "description": "English: Make use of context menu where appropriate" + }, + "settingsColorBlindPrompt": { + "message": "Користи бои за слепоболност", + "description": "English: Color-blind friendly" + }, + "settingsAppearance": { + "message": "Изглед", + "description": "Section for controlling user interface appearance" + }, + "settingsThemeLabel": { + "message": "Тема", + "description": "Label for checkbox to enable a custom dark theme" + }, + "settingsThemeAccent0Label": { + "message": "Прилагодена боја на акцентот", + "description": "Label for checkbox to pick an accent color" + }, + "settingsCloudStorageEnabledPrompt": { + "message": "Уклучи поддршка за складирање во облак", + "description": "" + }, + "settingsAdvancedUserPrompt": { + "message": "Јас сум напреден корисник (потребно читање)", + "description": "Checkbox to let user access advanced, technical features" + }, + "settingsPrefetchingDisabledPrompt": { + "message": "Деактивирајте пред-фаќање (за да се спречат било какви врски за блокирани мрежни барања)", + "description": "English: " + }, + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Деактивирајте проверка на хиперврски", + "description": "English: " + }, + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Спречете WebRTC да ги открие локалните IP адреси", + "description": "English: " + }, + "settingPerSiteSwitchGroup": { + "message": "Стандардно однесување", + "description": "" + }, + "settingPerSiteSwitchGroupSynopsis": { + "message": "Овие стандардни однесувања можат да се променат на база на сајт", + "description": "" + }, + "settingsNoCosmeticFilteringPrompt": { + "message": "Исклучи козметичо филтрирање", + "description": "" + }, + "settingsNoLargeMediaPrompt": { + "message": "Блокирај медија елементи поголеми од {{input}} КБ", + "description": "" + }, + "settingsNoRemoteFontsPrompt": { + "message": "Блокирај далечни фонтови", + "description": "" + }, + "settingsNoScriptingPrompt": { + "message": "Исклучи JavaScript", + "description": "The default state for the per-site no-scripting switch" + }, + "settingsNoCSPReportsPrompt": { + "message": "Блокирајте CSP извештаи", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" + }, + "settingsUncloakCnamePrompt": { + "message": "Откријте канонски имиња", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" + }, + "settingsAdvanced": { + "message": "Напредно", + "description": "Section for controlling advanced-user settings" + }, + "settingsAdvancedSynopsis": { + "message": "Функции погодни само за технички корисници", + "description": "Description of section controlling advanced-user settings" + }, + "settingsAdvancedUserSettings": { + "message": "напредни подесувања", + "description": "For the tooltip of a link which gives access to advanced settings" + }, + "settingsLastRestorePrompt": { + "message": "Последно ресторирање:", + "description": "English: Last restore:" + }, + "settingsLastBackupPrompt": { + "message": "Последно снимено:", + "description": "English: Last backup:" + }, + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} мрежни филтери + {{cosmeticFilterCount}} козметичи филтери од:", + "description": "Appears at the top of the _3rd-party filters_ pane" + }, + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} користени од {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "3pAutoUpdatePrompt1": { + "message": "Авто-ажурирање филтер листи", + "description": "A checkbox in the _3rd-party filters_ pane" + }, + "3pUpdateNow": { + "message": "Апдејтирај сега", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pPurgeAll": { + "message": "Исчисти сите кешови", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pParseAllABPHideFiltersPrompt1": { + "message": "Парсирајте и спроведете козметички филтри", + "description": "English: Parse and enforce Adblock+ element hiding filters." + }, + "3pParseAllABPHideFiltersInfo": { + "message": "Козметичките филтри служат за сокривање на елементи во веб-страница кои се сметаат за визуелна непријатност, и кои не можат да се блокираат со мрежните мотори за филтрирање базирани на барања.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + }, + "3pIgnoreGenericCosmeticFilters": { + "message": "Игнорирајте генералистички козметички филтри", + "description": "This will cause uBO to ignore all generic cosmetic filters." + }, + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Генералистичките козметички филтри се оние козметички филтри што се наменети да се применуваат на сите веб-страници. Вклучувањето на оваа опција ќе ја елиминира оптовареноста на меморијата и ЦПУ-то додадена на веб-страниците како резултат на обработката на генералистичките козметички филтри.\n\nСе препорачува да се вклучи оваа опција на помалку моќни уреди.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." + }, + "3pSuspendUntilListsAreLoaded": { + "message": "Суспендирајте ја мрежната активност додека не се вчитат сите листи со филтри", + "description": "A checkbox in the 'Filter lists' pane" + }, + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" + }, + "3pApplyChanges": { + "message": "Примени измени", + "description": "English: Apply changes" + }, + "3pGroupDefault": { + "message": "Вградено", + "description": "Filter lists section name" + }, + "3pGroupAds": { + "message": "Реклами", + "description": "Filter lists section name" + }, + "3pGroupPrivacy": { + "message": "Приватност", + "description": "Filter lists section name" + }, + "3pGroupMalware": { + "message": "Домени на малвер", + "description": "Filter lists section name" + }, + "3pGroupSocial": { + "message": "Социјални widgets", + "description": "Filter lists section name" + }, + "3pGroupCookies": { + "message": "Известија за колачиња", + "description": "Filter lists section name" + }, + "3pGroupAnnoyances": { + "message": "Досадни", + "description": "Filter lists section name" + }, + "3pGroupMultipurpose": { + "message": "Многуцелно", + "description": "Filter lists section name" + }, + "3pGroupRegions": { + "message": "Региони, јазици", + "description": "Filter lists section name" + }, + "3pGroupCustom": { + "message": "Прилагодено", + "description": "Filter lists section name" + }, + "3pImport": { + "message": "Импортирај...", + "description": "The label for the checkbox used to import external filter lists" + }, + "3pExternalListsHint": { + "message": "Еден УРЛ по линија. Неважечки УРЛи ќе бидат игнорирани во тишина.", + "description": "Short information about how to use the textarea to import external filter lists by URL" + }, + "3pExternalListObsolete": { + "message": "Застарени.", + "description": "used as a tooltip for the out-of-date icon beside a list" + }, + "3pViewContent": { + "message": "прегледајте содржина", + "description": "used as a tooltip for eye icon beside a list" + }, + "3pLastUpdate": { + "message": "Последно обновување: {{ago}}.\nКликнете за да принудите обновување.", + "description": "used as a tooltip for the clock icon beside a list" + }, + "3pUpdating": { + "message": "Ажурирање...", + "description": "used as a tooltip for the spinner icon beside a list" + }, + "3pNetworkError": { + "message": "Мрежна грешка ја спречи обновата на ресурсот.", + "description": "used as a tooltip for error icon beside a list" + }, + "1pTrustWarning": { + "message": "Не додавајте филтри од ненадежни извори.", + "description": "Warning against copy-pasting filters from random sources" + }, + "1pEnableMyFiltersLabel": { + "message": "Вклучете ги моите прилагодени филтри", + "description": "Label for the checkbox use to enable/disable 'My filters' list" + }, + "1pTrustMyFiltersLabel": { + "message": "Дозволете прилагодени филтри што бараат доверба", + "description": "Label for the checkbox use to trust the content of 'My filters' list" + }, + "1pImport": { + "message": "Внеси и додај", + "description": "Button in the 'My filters' pane" + }, + "1pExport": { + "message": "Ескпортирај", + "description": "Button in the 'My filters' pane" + }, + "1pExportFilename": { + "message": "мои-ублок-статични-филтери_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" + }, + "1pApplyChanges": { + "message": "Применете ги промените", + "description": "English: Apply changes" + }, + "rulesPermanentHeader": { + "message": "Постојани правила", + "description": "header" + }, + "rulesTemporaryHeader": { + "message": "Привремени правила", + "description": "header" + }, + "rulesRevert": { + "message": "Поврати", + "description": "This will remove all temporary rules" + }, + "rulesCommit": { + "message": "Изврши", + "description": "This will persist temporary rules" + }, + "rulesEdit": { + "message": "Уреди", + "description": "Will enable manual-edit mode (textarea)" + }, + "rulesEditSave": { + "message": "Сними", + "description": "Will save manually-edited content and exit manual-edit mode" + }, + "rulesEditDiscard": { + "message": "Отфрли", + "description": "Will discard manually-edited content and exit manual-edit mode" + }, + "rulesImport": { + "message": "Внеси од фајл", + "description": "" + }, + "rulesExport": { + "message": "Изнеси во фајл", + "description": "Button in the 'My rules' pane" + }, + "rulesDefaultFileName": { + "message": "мои_ублок_динамични_правила_{{datetime}}.txt", + "description": "default file name to use" + }, + "rulesHint": { + "message": "Листа од твоите динамични филтер правила", + "description": "English: List of your dynamic filtering rules." + }, + "rulesFormatHint": { + "message": "Синтакса на правило: извор дестинација тип акција (целосна документација).", + "description": "English: dynamic rule syntax and full documentation." + }, + "rulesSort": { + "message": "Подреди:", + "description": "English: label for sort option." + }, + "rulesSortByType": { + "message": "Тип на правило", + "description": "English: a sort option for list of rules." + }, + "rulesSortBySource": { + "message": "Извор", + "description": "English: a sort option for list of rules." + }, + "rulesSortByDestination": { + "message": "Дестинација", + "description": "English: a sort option for list of rules." + }, + "whitelistPrompt": { + "message": "Директивите за доверливи веб-страници одредуваат на кои веб-страници uBlock Origin треба да биде исклучен. Еден внос по ред.", + "description": "A concise description of the 'Trusted sites' pane." + }, + "whitelistImport": { + "message": "Внеси и додади", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExport": { + "message": "Експортирај", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExportFilename": { + "message": "моите_ублок_верувани_сајтови_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" + }, + "whitelistApply": { + "message": "Примени ги измените", + "description": "English: Apply changes" + }, + "logRequestsHeaderType": { + "message": "Тип", + "description": "English: Type" + }, + "logRequestsHeaderDomain": { + "message": "Домен", + "description": "English: Domain" + }, + "logRequestsHeaderURL": { + "message": "УРЛ", + "description": "English: URL" + }, + "logRequestsHeaderFilter": { + "message": "Филтер", + "description": "English: Filter" + }, + "logAll": { + "message": "Сите", + "description": "Appears in the logger's tab selector" + }, + "logBehindTheScene": { + "message": "Без табови", + "description": "Pretty name for behind-the-scene network requests" + }, + "loggerCurrentTab": { + "message": "Сегашен таб", + "description": "Appears in the logger's tab selector" + }, + "loggerReloadTip": { + "message": "Понови ја содржината на табот", + "description": "Tooltip for the reload button in the logger page" + }, + "loggerDomInspectorTip": { + "message": "Вклучи/исклучи DOM инспектор", + "description": "Tooltip for the DOM inspector button in the logger page" + }, + "loggerPopupPanelTip": { + "message": "Вклучи/исклучи панелот за поп-уп", + "description": "Tooltip for the popup panel button in the logger page" + }, + "loggerInfoTip": { + "message": "uBlock Origin вики: Логер", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Исчисти логови", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Паузирај логови (отфрли влезни податоци)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Продолжи логирање", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Вклучи/исклучи филтрирање на логерот", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "филтрирајте ја содржината на логерот", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Опции за филтрирање на логерот", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Не", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "блокиран", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "Дозволен", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "модифицирано", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "1ва-партија", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "3та-партија", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Детали", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Филтер", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Филтер листа", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Правило", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Контекст", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Корен контекст", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Партија", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Тип", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "УРЛ", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "УРЛ правило", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Контекст: ", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Тип:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Статичен филтер", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} мрежни барана од {{type}} {{br}} кои УРЛ адреси одговараат на {{url}} {{br}}кои доаѓаат од {{origin}},{{br}}{{importance}} има соодветен филтер за исклучоци.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Блокирај", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Дозволи", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "тип \"{{type}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "било кој тип", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "од \"{{origin}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "од било каде", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "освен кога", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "иако ", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Статичен филтер {{filter}} најден во:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Статичкиот филтер не може да биде најден во ниедна од моментално овозможените листи со филтри.", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Записите во логерот кои не ги исполнуваат сите три услови подолу автоматски ќе бидат игнорирани:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Зачувајте записи од последните {{input}} минути", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Зачувајте најмногу {{input}} вчитувања на страници по таб", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Зачувајте најмногу {{input}} записи по таб", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Користете {{input}} редови по запис во вертикално проширен режим", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Скријте колони:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Време", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Филтер/правило", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} контекст", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Партија", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Листа\n", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Табла", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Обично", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Маркдаун", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Отвори", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Создај нова пријава", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Најди слични пријави", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Документација", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Прочитајте ја документацијата на uBlock/wiki за да научите за сите функции на uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Прашања и поддршка", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Одговори на прашања и други видови поддршка се обезбедени на subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Проблеми со филтрирањето/веб-страницата е расипана", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Пријавете проблеми со филтрите за специфични веб-страници на uBlockOrigin/uAssets issue tracker. Потребен е GitHub профил.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Важно: Избегнувајте да користите други блокатори со слична намена заедно со uBlock Origin, бидејќи тоа може да предизвика проблеми со филтрањето на специфични веб-страници.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Совети: Проверете дали вашите листи со филтри се ажурирани. Логерот е главниот алат за дијагностицирање на проблемите поврзани со филтрите.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Пријава за грешка", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Пријавете проблеми со самиот uBlock Origin на uBlockOrigin/uBlock-issue issue tracker. Потребен е GitHub профил.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Информации за решавање проблеми", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Подолу е техничка информација која може да биде корисна кога волонтерите се обидуваат да ви помогнат да решите проблем.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Пријави проблем со филтерот", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "За да се избегне оптоварување на волонтерите со дупликат пријави, ве молиме проверете дека проблемот веќе не е пријавен.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Листите со филтри се обновуваат дневно. Осигурајте се дека вашиот проблем веќе не е решен во најновите листи со филтри.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Проверете дали проблемот сè уште постои по повторно вчитување на проблематичната веб-страница.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Адреса на веб-страницата:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Веб-страницата…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Изберете внос --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Покажува реклами или остатоци од реклами", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Има преOverlayи или други непријатности", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Детектира uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Има проблеми поврзани со приватноста", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Има многу проблеми кога е вклучен uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Отвора непожелни табови или прозорци", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Води до злонамерен софтвер, фишинг", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Означи ја веб-страницата како “NSFW” (“Не е безбедно за работа”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Политика на приватност", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Дневник на промена", + "description": "" + }, + "aboutCode": { + "message": "Сорс Код (ГПЛв3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Соработници", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Сорс код", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Преведувања", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Филтер листи", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Надворешни зависности (компатибилни со GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Листите со филтри на uBO се одвиваат слободно на следните CDN-ови:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Се користи случајно одбран CDN кога е потребно да се обнови листата со филтри.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Направи резервна копија во датотека…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "мој-ублок-бекап_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Врати од датотека…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Врати на подразбирање…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Сите ваши поставки ќе бидат надминати со податоците направени на {{time}}, и uBlock₀ ќе се рестартира.\n\nДали сакате да го надминете сите постоечки поставки со резервираните податоци?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Податоците не можат да бидат прочитани или се невалидни", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Сите ваши поставки ќе бидат отстранети, и uBlock₀ ќе се рестартира.\n\nДали сакате да го ресетирате uBlock₀ на фабрички поставки?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Мрежна грешка: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Пријави се", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "пред една минута", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "пред {{value}} минути", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "пред саат време", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "пред {{value}} саати", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "пред еден ден", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "пред {{value}} дена", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Покажи Дешборд", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Покажи Логер", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "исклучи", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Страницата е блокирана", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin го спречи вчитувањето на следната страница:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Поради следниот филтер:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "без параметри", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Најдено во:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Оди назад", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Затвори го прозорецот", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Не ми предупредувај повторно за оваа веб-страница", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Исклучи строго блокирање за {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Повремено", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Трајно", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Продолжи", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Блокираната страница сака да ве пренасочи на друга веб-страница. Ако изберете да продолжите, директно ќе навигирате до: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Извези во облачно складиште", + "description": "tooltip" + }, + "cloudPull": { + "message": "Импортирај од облачно складиште", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Импортирај од облачно складиште и спои со тековните поставки", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Име на уред:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Предупредување! Менувањето на овие напредни поставки е на ваша сопствена одговорност.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Испрати", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Примени ги измените", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Поврати", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "бајтови", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Блокирај елемент во рамката…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Пријави се на списокот со филтри…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Привремено дозволи големи медиумски елементи", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Прикажи изворен код…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Внесете кратенка", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Промени заклучување на скролувањето", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Копирај во табла со исечоци", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Избери сè", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Промени козметичко филтрирање", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Промени JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Релаксиран мод на блокирање", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Место вземено: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "КБ", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "МБ", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "ГБ", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Кликнете за да вчитате", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Грешки: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Не можеше да се филтрира правилно при стартување на прелистувачот. Повторно вчитате ја страницата за да осигурите правилно филтрирање.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" + } +} diff --git a/src/_locales/ml/messages.json b/src/_locales/ml/messages.json new file mode 100644 index 0000000000000..29db607005447 --- /dev/null +++ b/src/_locales/ml/messages.json @@ -0,0 +1,1314 @@ +{ + "extName": { + "message": "uBlock Origin", + "description": "extension name." + }, + "extShortDesc": { + "message": "അവസാനം, ഒരു കാര്യക്ഷമമായ ബ്ലോക്കര്‍. ലഘുവായ CPU, memory ഉപയോഗം.", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "dashboardName": { + "message": "യുബ്ലോക്ക്ഒ - ഡാഷ്ബോര്‍ഡ്", + "description": "English: uBlock₀ — Dashboard" + }, + "dashboardUnsavedWarning": { + "message": "മുന്നറിയിപ്പ്! നിങ്ങൾക്ക് സംരക്ഷിക്കാത്ത മാറ്റങ്ങളുണ്ട്", + "description": "A warning in the dashboard when navigating away from unsaved changes" + }, + "dashboardUnsavedWarningStay": { + "message": "താമസിക്കുക", + "description": "Label for button to prevent navigating away from unsaved changes" + }, + "dashboardUnsavedWarningIgnore": { + "message": "അവഗണിക്കുക", + "description": "Label for button to ignore unsaved changes" + }, + "settingsPageName": { + "message": "ക്രമീകരണം", + "description": "appears as tab name in dashboard" + }, + "3pPageName": { + "message": "തേര്‍ഡ് പാര്‍ട്ടി ഫില്‍ട്ടറുകള്‍", + "description": "appears as tab name in dashboard" + }, + "1pPageName": { + "message": "എന്‍റെ ഫില്‍ട്ടറുകള്‍", + "description": "appears as tab name in dashboard" + }, + "rulesPageName": { + "message": "എന്‍റെ നിയമങ്ങള്‍", + "description": "appears as tab name in dashboard" + }, + "whitelistPageName": { + "message": "വൈറ്റ് ലിസ്റ്റ്", + "description": "appears as tab name in dashboard" + }, + "shortcutsPageName": { + "message": "കുറുക്കുവഴികൾ", + "description": "appears as tab name in dashboard" + }, + "statsPageName": { + "message": "യുബ്ലോക്ക്ഒ - നെറ്റ്‌വര്‍ക്ക് അപേക്ഷാ ലോഗ്", + "description": "Title for the logger window" + }, + "aboutPageName": { + "message": "ഇതിനെ കുറിച്ച്", + "description": "appears as tab name in dashboard" + }, + "supportPageName": { + "message": "സഹായം ", + "description": "appears as tab name in dashboard" + }, + "assetViewerPageName": { + "message": "uBlock₀ - അസറ്റ് വ്യൂവർ", + "description": "Title for the asset viewer page" + }, + "advancedSettingsPageName": { + "message": "വിപുലമായ ക്രമീകരണങ്ങൾ", + "description": "Title for the advanced settings page" + }, + "popupPowerSwitchInfo": { + "message": "ക്ലിക്ക്: ഈ സൈറ്റില്‍ യുബ്ലോക്ക്ഒ ഡിസേബിള്‍/എനെബിള്‍ ചെയ്യാന്‍.\nCtrl + ക്ലിക്ക്: ഈ പേജില്‍ യുബ്ലോക്ക്ഒ ഡിസേബിള്‍/എനെബിള്‍ ചെയ്യാന്‍.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + }, + "popupPowerSwitchInfo1": { + "message": "ഈ സൈറ്റിനായി uBlock₀ പ്രവർത്തനരഹിതമാക്കാൻ ക്ലിക്കുചെയ്യുക.\n\nഈ പേജിൽ മാത്രം uBlock₀ പ്രവർത്തനരഹിതമാക്കാൻ Ctrl + ക്ലിക്കുചെയ്യുക.", + "description": "Message to be read by screen readers" + }, + "popupPowerSwitchInfo2": { + "message": "ഈ സൈറ്റിനായി uBlock₀ പ്രവർത്തനക്ഷമമാക്കാൻ ക്ലിക്കുചെയ്യുക.", + "description": "Message to be read by screen readers" + }, + "popupBlockedRequestPrompt": { + "message": "അപേക്ഷകള്‍ ബ്ലോക്ക്‌ ചെയ്യപ്പെട്ടു", + "description": "English: requests blocked" + }, + "popupBlockedOnThisPagePrompt": { + "message": "ഈ പേജില്‍", + "description": "English: on this page" + }, + "popupBlockedStats": { + "message": "{{count}} അല്ലെങ്കില്‍ {{percent}}%", + "description": "Example: 15 (13%)" + }, + "popupBlockedSinceInstallPrompt": { + "message": "ഇന്‍സ്റ്റാളിനു ശേഷം", + "description": "English: since install" + }, + "popupOr": { + "message": "അല്ലെങ്കില്‍", + "description": "English: or" + }, + "popupBlockedOnThisPage_v2": { + "message": "ഈ പേജിൽ തടഞ്ഞു", + "description": "For the new mobile-friendly popup design" + }, + "popupBlockedSinceInstall_v2": { + "message": "ഇൻസ്റ്റാളുചെയ്‌തതിനുശേഷം തടഞ്ഞു", + "description": "For the new mobile-friendly popup design" + }, + "popupDomainsConnected_v2": { + "message": "ഡൊമെയ്‌നുകൾ കണക്റ്റുചെയ്‌തു", + "description": "For the new mobile-friendly popup design" + }, + "popupTipDashboard": { + "message": "ഡാഷ്ബോര്‍ഡ് തുറക്കാന്‍ ക്ലിക്ക് ചെയ്യുക", + "description": "English: Click to open the dashboard" + }, + "popupTipZapper": { + "message": "ഘടക സപ്പർ മോഡ് നൽകുക", + "description": "Tooltip for the element-zapper icon in the popup panel" + }, + "popupTipPicker": { + "message": "എലമെന്‍ഡ് പിക്കര്‍ മോഡില്‍ കടക്കുക", + "description": "English: Enter element picker mode" + }, + "popupTipLog": { + "message": "അപേക്ഷാ ലോഗിലേക്ക് പോകുക", + "description": "Tooltip used for the logger icon in the panel" + }, + "popupTipReport": { + "message": "ഈ വെബ്‌സൈറ്റിൽ ഉള്ള പ്രശ്നങ്ങൾ അറിയിക്കുക ", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipNoPopups": { + "message": "ഈ സൈറ്റിലെ എല്ലാ പോപ്‌അപ്പുകളും ബ്ലോക്ക്‌ ചെയ്യുന്നത് ടോഗ്ഗിള്‍ ചെയ്യുക", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups1": { + "message": "ഈ സൈറ്റിലെ എല്ലാ പോപ്പ്അപ്പുകളും തടയാൻ ക്ലിക്കുചെയ്യുക", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2": { + "message": "ഈ സൈറ്റിലെ എല്ലാ പോപ്പ്അപ്പുകളും മേലിൽ തടയാൻ ക്ലിക്കുചെയ്യുക", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoLargeMedia": { + "message": "ഈ സൈറ്റിനായി വലിയ മീഡിയ ഘടകങ്ങളുടെ തടയൽ ടോഗിൾ ചെയ്യുക", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia1": { + "message": "ഈ സൈറ്റിലെ വലിയ മീഡിയ ഘടകങ്ങൾ തടയാൻ ക്ലിക്കുചെയ്യുക", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2": { + "message": "ഈ സൈറ്റിലെ വലിയ മീഡിയ ഘടകങ്ങളെ മേലിൽ തടയാൻ ക്ലിക്കുചെയ്യുക", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoCosmeticFiltering": { + "message": "ഈ സൈറ്റില്‍ സൗന്ദര്യ ഫില്‍ട്ടറുകള്‍ ടോഗ്ഗിള്‍ ചെയ്യുക", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering1": { + "message": "ഈ സൈറ്റിൽ കോസ്മെറ്റിക് ഫിൽ‌ട്ടറിംഗ് അപ്രാപ്‌തമാക്കാൻ ക്ലിക്കുചെയ്യുക", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2": { + "message": "ഈ സൈറ്റിൽ കോസ്മെറ്റിക് ഫിൽ‌ട്ടറിംഗ് പ്രാപ്തമാക്കുന്നതിന് ക്ലിക്കുചെയ്യുക", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoRemoteFonts": { + "message": "ഈ സൈറ്റില്‍ റിമോട്ട് ഫോണ്ടുകള്‍ ബ്ലോക്ക് ചെയ്യുന്നത് ടോഗ്ഗിള്‍ ചെയ്യുക", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts1": { + "message": "ഈ സൈറ്റിലെ വിദൂര ഫോണ്ടുകൾ തടയാൻ ക്ലിക്കുചെയ്യുക", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts2": { + "message": "ഈ സൈറ്റിൽ വിദൂര ഫോണ്ടുകൾ മേലിൽ തടയാൻ ക്ലിക്കുചെയ്യുക", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoScripting1": { + "message": "ഈ സൈറ്റിൽ JavaScript അപ്രാപ്തമാക്കാൻ ക്ലിക്കുചെയ്യുക", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupTipNoScripting2": { + "message": "ഈ സൈറ്റിൽ‌ ഇനിമുതൽ‌ JavaScript അപ്രാപ്‌തമാക്കുന്നതിന് ക്ലിക്കുചെയ്യുക", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupNoPopups_v2": { + "message": "പോപ്പ്-അപ്പ് വിൻഡോകൾ", + "description": "Caption for the no-popups per-site switch" + }, + "popupNoLargeMedia_v2": { + "message": "വലിയ മീഡിയ ഘടകങ്ങൾ", + "description": "Caption for the no-large-media per-site switch" + }, + "popupNoCosmeticFiltering_v2": { + "message": "കോസ്മെറ്റിക് ഫിൽട്ടറിംഗ്", + "description": "Caption for the no-cosmetic-filtering per-site switch" + }, + "popupNoRemoteFonts_v2": { + "message": "വിദൂര ഫോണ്ടുകൾ", + "description": "Caption for the no-remote-fonts per-site switch" + }, + "popupNoScripting_v2": { + "message": "ജാവാസ്ക്രിപ്റ്റ്", + "description": "Caption for the no-scripting per-site switch" + }, + "popupMoreButton_v2": { + "message": "കൂടുതൽ", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton_v2": { + "message": "കുറവ്", + "description": "Label to be used to hide popup panel sections" + }, + "popupTipGlobalRules": { + "message": "ആഗോള നിയമങ്ങൾ: ഈ കോളത്തിലെ നിയമങ്ങൾ എല്ലാ സൈറ്റുകളിലും പ്രയോഗിക്കുന്ന നിയമങ്ങള് ആണ്.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." + }, + "popupTipLocalRules": { + "message": "പ്രാദേശിക നിയമങ്ങൾ: ഈ കോളത്തിലെ നിയമങ്ങൾ നിലവിലെ സൈറ്റിലെ മാത്രം പ്രയോഗിക്കുന്ന.\nപ്രാദേശിക നിയമങ്ങൾ ആഗോള നിയമങ്ങൾ അതിലംഘിച്ച് പ്രവർത്തിക്കുന്നതായിരിക്കും.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." + }, + "popupTipSaveRules": { + "message": "നിങ്ങളുടെ മാറ്റങ്ങൾ സ്ഥിരപെടുത്താന്‍ ക്ലിക്കുചെയ്യുക.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." + }, + "popupTipRevertRules": { + "message": "നിങ്ങളുടെ മാറ്റങ്ങൾ പഴയപടി ആകാന്‍ ക്ലിക്കുചെയ്യുക.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + }, + "popupAnyRulePrompt": { + "message": "എല്ലാം", + "description": "" + }, + "popupImageRulePrompt": { + "message": "ചിത്രങ്ങള്‍", + "description": "" + }, + "popup3pAnyRulePrompt": { + "message": "തേര്‍ഡ് പാര്‍ട്ടി", + "description": "" + }, + "popup3pPassiveRulePrompt": { + "message": "മൂന്നാം പാര്‍ട്ടി സിഎസ്എസ്/ ചിത്രങ്ങള്‍", + "description": "" + }, + "popupInlineScriptRulePrompt": { + "message": "ഇന്‍ലൈന്‍ സ്ക്രിപ്റ്റുകള്‍", + "description": "" + }, + "popup1pScriptRulePrompt": { + "message": "ഫസ്റ്റ് പാര്‍ട്ടി സ്ക്രിപ്റ്റുകള്‍", + "description": "" + }, + "popup3pScriptRulePrompt": { + "message": "തേര്‍ഡ് പാര്‍ട്ടി സ്ക്രിപ്റ്റുകള്‍", + "description": "" + }, + "popup3pFrameRulePrompt": { + "message": "തേര്‍ഡ് പാര്‍ട്ടി ഫ്രെയിമുകള്‍", + "description": "" + }, + "popupHitDomainCountPrompt": { + "message": "കണക്റ്റ് ചെയ്യപ്പെട്ട ഡൊമൈനുകള്‍", + "description": "appears in popup" + }, + "popupHitDomainCount": { + "message": "{{total}} ല്‍ നിന്നും {{count}}", + "description": "appears in popup" + }, + "popupVersion": { + "message": "പതിപ്പ്", + "description": "Example of use: Version 1.26.4" + }, + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" + }, + "popup3pFrameFilter": { + "message": "frame", + "description": "Appears as an option to filter out firewall rows" + }, + "pickerCreate": { + "message": "ക്രിയേറ്റ് ചെയ്യുക", + "description": "English: Create" + }, + "pickerPick": { + "message": "പിക്ക് ചെയ്യുക", + "description": "English: Pick" + }, + "pickerQuit": { + "message": "പുറത്ത് കടക്കുക", + "description": "English: Quit" + }, + "pickerPreview": { + "message": "പ്രിവ്യൂ", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + }, + "pickerNetFilters": { + "message": "നെറ്റ് ഫില്‍ട്ടറുകള്‍", + "description": "English: header for a type of filter in the element picker dialog" + }, + "pickerCosmeticFilters": { + "message": "സൗന്ദര്യ ഫില്‍ട്ടറുകള്‍", + "description": "English: Cosmetic filters" + }, + "pickerCosmeticFiltersHint": { + "message": "ക്ലിക്ക്, Ctrl - ക്ലിക്ക്", + "description": "English: Click, Ctrl-click" + }, + "pickerContextMenuEntry": { + "message": "എലമെന്‍ഡ് ബ്ലോക്ക് ചെയ്യുക", + "description": "An entry in the browser's contextual menu" + }, + "settingsCollapseBlockedPrompt": { + "message": "ബ്ലോക്ക് ചെയ്യപ്പെട്ട എലമെന്‍ഡുകള്‍ക്ക് പകരമായുള്ള പ്ലയ്സ്ഹോള്‍ഡറുകള്‍ മറയ്ക്കുക", + "description": "English: Hide placeholders of blocked elements" + }, + "settingsIconBadgePrompt": { + "message": "ഐക്കണില്‍ ബ്ലോക്ക് ചെയ്യപ്പെട്ട അപേക്ഷകളുടെ എണ്ണം കാണിക്കുക", + "description": "English: Show the number of blocked requests on the icon" + }, + "settingsTooltipsPrompt": { + "message": "ടൂള്ടിപ്പ് പ്രവർത്തനരഹിതമാക്കുക", + "description": "A checkbox in the Settings pane" + }, + "settingsContextMenuPrompt": { + "message": "ആവശ്യമായ ഇടങ്ങളില്‍ കോണ്‍ടെക്സ്റ്റ്‌ മെനു ഉപയോഗിക്കുക", + "description": "English: Make use of context menu where appropriate" + }, + "settingsColorBlindPrompt": { + "message": "വർണ്ണാന്ധതാ സൗഹാര്‍ദ്ദപരമായത്", + "description": "English: Color-blind friendly" + }, + "settingsAppearance": { + "message": "Appearance", + "description": "Section for controlling user interface appearance" + }, + "settingsThemeLabel": { + "message": "Theme", + "description": "Label for checkbox to enable a custom dark theme" + }, + "settingsThemeAccent0Label": { + "message": "Custom accent color", + "description": "Label for checkbox to pick an accent color" + }, + "settingsCloudStorageEnabledPrompt": { + "message": "ക്ലൌഡ് സ്റ്റോറെജ് സപ്പോര്‍ട്ട് എനേബിള്‍ ചെയ്യുക", + "description": "" + }, + "settingsAdvancedUserPrompt": { + "message": "ഞാന്‍ ഒരു അഡ്വാന്‍സ്ഡ് യൂസര്‍ ആണ് ( വായിക്കേണ്ടത്)", + "description": "Checkbox to let user access advanced, technical features" + }, + "settingsPrefetchingDisabledPrompt": { + "message": "പ്രീ-ഫെച്ചിംഗ് ഡിസേബിള്‍ ചെയ്യുക (ബ്ലോക്ക് ചെയ്ത നെറ്റ്‌വര്‍ക്ക് അപേക്ഷകള്‍ക്ക് കണക്ഷന്‍ ലഭിക്കുന്നത് തടയുന്നതിന്)", + "description": "English: " + }, + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "ഹൈപര്‍ ലിങ്ക് ഓഡിറ്റിങ്ങ്/ബീക്കന്‍ ഡിസേബിള്‍ ചെയ്യുക", + "description": "English: " + }, + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "വെബ്‌ആര്‍ടിസി ലോക്കല്‍ ഐ പി അഡ്രസുകള്‍ ലീക്ക് ചെയ്യുന്നത് തടയുക", + "description": "English: " + }, + "settingPerSiteSwitchGroup": { + "message": "സ്ഥിര രീതി", + "description": "" + }, + "settingPerSiteSwitchGroupSynopsis": { + "message": "ഓരോ സ്ഥിരസ്ഥിതി അടിസ്ഥാനത്തിലും ഈ സ്ഥിരസ്ഥിതി പെരുമാറ്റങ്ങൾ അസാധുവാക്കാനാകും", + "description": "" + }, + "settingsNoCosmeticFilteringPrompt": { + "message": "കോസ്മെറ്റിക് ഫിൽട്ടറിംഗ് പ്രവർത്തനരഹിതമാക്കുക", + "description": "" + }, + "settingsNoLargeMediaPrompt": { + "message": "മീഡിയ ഘടകങ്ങളെക്കാൾ വലുത് തടയുക {{input}} KB", + "description": "" + }, + "settingsNoRemoteFontsPrompt": { + "message": "വിദൂര ഫോണ്ടുകൾ തടയുക", + "description": "" + }, + "settingsNoScriptingPrompt": { + "message": "ജാവാസ്ക്രിപ്റ്റ് അപ്രാപ്തമാക്കുക", + "description": "The default state for the per-site no-scripting switch" + }, + "settingsNoCSPReportsPrompt": { + "message": "സി‌എസ്‌പി റിപ്പോർട്ടുകൾ തടയുക", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" + }, + "settingsUncloakCnamePrompt": { + "message": "കാനോനിക്കൽ പേരുകൾ അൺലോക്ക് ചെയ്യുക", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" + }, + "settingsAdvanced": { + "message": "വിപുലമായ ക്രമീകരണങ്ങൾ", + "description": "Section for controlling advanced-user settings" + }, + "settingsAdvancedSynopsis": { + "message": "Features suitable only for technical users", + "description": "Description of section controlling advanced-user settings" + }, + "settingsAdvancedUserSettings": { + "message": "വിപുലമായ ക്രമീകരണങ്ങൾ", + "description": "For the tooltip of a link which gives access to advanced settings" + }, + "settingsLastRestorePrompt": { + "message": "അവസാന റീസ്റ്റോര്‍:", + "description": "English: Last restore:" + }, + "settingsLastBackupPrompt": { + "message": "അവസാന ബാക്ക്അപ്:", + "description": "English: Last backup:" + }, + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} നെറ്റ്‌വര്‍ക്ക് ഫില്‍ട്ടറുകള്‍ + {{cosmeticFilterCount}} സൗന്ദര്യ ഫില്‍ട്ടറുകള്‍ ഇവിടെ നിന്നും:", + "description": "Appears at the top of the _3rd-party filters_ pane" + }, + "3pListsOfBlockedHostsPerListStats": { + "message": "{{total}} ല്‍ നിന്നും {{used}} ഉപയോഗിക്കുന്നു", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "3pAutoUpdatePrompt1": { + "message": "ഫില്‍ട്ടര്‍ ലിസ്റ്റുകള്‍ ഓട്ടോ-അപ്ഡേറ്റ് ചെയ്യുക.", + "description": "A checkbox in the _3rd-party filters_ pane" + }, + "3pUpdateNow": { + "message": "ഇപ്പോള്‍ അപ്ഡേറ്റ് ചെയ്യുക", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pPurgeAll": { + "message": "ക്യാഷ് ശുദ്ധീകരിക്കുക", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pParseAllABPHideFiltersPrompt1": { + "message": "ശുദ്ധീകരിച്ച് സൗന്ദര്യ ഫില്‍ട്ടറുകള്‍ എന്‍ഫോര്‍സ് ചെയ്യുക.", + "description": "English: Parse and enforce Adblock+ element hiding filters." + }, + "3pParseAllABPHideFiltersInfo": { + "message": "ഒരു വിഷ്വൽ ശല്യമെന്ന് കരുതപ്പെടുന്നതും നെറ്റ്‌വർക്ക് അഭ്യർത്ഥന അടിസ്ഥാനമാക്കിയുള്ള ഫിൽട്ടറിംഗ് എഞ്ചിനുകൾക്ക് തടയാൻ കഴിയാത്തതുമായ ഒരു വെബ് പേജിലെ ഘടകങ്ങൾ മറയ്ക്കാൻ കോസ്മെറ്റിക് ഫിൽട്ടറുകൾ സഹായിക്കുന്നു.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + }, + "3pIgnoreGenericCosmeticFilters": { + "message": "ജനറിക് കോസ്മെറ്റിക് ഫിൽട്ടറുകൾ അവഗണിക്കുക", + "description": "This will cause uBO to ignore all generic cosmetic filters." + }, + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "എല്ലാ വെബ് സൈറ്റുകളിലും പ്രയോഗിക്കാൻ ഉദ്ദേശിക്കുന്ന കോസ്മെറ്റിക് ഫിൽട്ടറുകളാണ് ജനറിക് കോസ്മെറ്റിക് ഫിൽട്ടറുകൾ. ഈ ഓപ്ഷൻ പ്രവർത്തനക്ഷമമാക്കുന്നത് ജനറിക് കോസ്മെറ്റിക് ഫിൽട്ടറുകൾ കൈകാര്യം ചെയ്യുന്നതിന്റെ ഫലമായി വെബ് പേജുകളിൽ ചേർത്ത മെമ്മറിയും സിപിയു ഓവർഹെഡും ഇല്ലാതാക്കും.\n\nശക്തി കുറഞ്ഞ ഉപകരണങ്ങളിൽ ഈ ഓപ്‌ഷൻ പ്രവർത്തനക്ഷമമാക്കാൻ ശുപാർശ ചെയ്യുന്നു.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." + }, + "3pSuspendUntilListsAreLoaded": { + "message": "Suspend network activity until all filter lists are loaded", + "description": "A checkbox in the 'Filter lists' pane" + }, + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" + }, + "3pApplyChanges": { + "message": "മാറ്റങ്ങള്‍ അപ്ലേ ചെയ്യുക", + "description": "English: Apply changes" + }, + "3pGroupDefault": { + "message": "അന്തർനിർമ്മിതം", + "description": "Filter lists section name" + }, + "3pGroupAds": { + "message": "പരസ്യങ്ങള്‍", + "description": "Filter lists section name" + }, + "3pGroupPrivacy": { + "message": "സ്വകാര്യത", + "description": "Filter lists section name" + }, + "3pGroupMalware": { + "message": "മാല്‍വെയര്‍ ഡൊമൈനുകള്‍", + "description": "Filter lists section name" + }, + "3pGroupSocial": { + "message": "Social widgets", + "description": "Filter lists section name" + }, + "3pGroupCookies": { + "message": "Cookie notices", + "description": "Filter lists section name" + }, + "3pGroupAnnoyances": { + "message": "ശല്യപ്പെടുത്തലുകൾ", + "description": "Filter lists section name" + }, + "3pGroupMultipurpose": { + "message": "മള്‍ട്ടിപര്‍പ്പസ്", + "description": "Filter lists section name" + }, + "3pGroupRegions": { + "message": "പ്രാദേശികം, ഭാഷകള്‍", + "description": "Filter lists section name" + }, + "3pGroupCustom": { + "message": "കസ്റ്റം", + "description": "Filter lists section name" + }, + "3pImport": { + "message": "ഇറക്കുമതി ചെയ്യുക ...", + "description": "The label for the checkbox used to import external filter lists" + }, + "3pExternalListsHint": { + "message": "ഒരു വരിയില്‍ ഒരു യുആര്‍എല്‍ എന്ന രീതിയില്‍. ‘!’ എന്നിവയില്‍ തുടങ്ങുന്ന വരികള്‍ ഇഗ്നോര്‍ ചെയ്യപ്പെടും. ഇന്‍വാലിഡ്‌ ആയ യുആര്‍എല്ലുകള്‍ നിശബ്ദമായി ഇഗ്നോര്‍ ചെയ്യപ്പെടും.", + "description": "Short information about how to use the textarea to import external filter lists by URL" + }, + "3pExternalListObsolete": { + "message": "കാലഹരണപ്പെട്ടത്", + "description": "used as a tooltip for the out-of-date icon beside a list" + }, + "3pViewContent": { + "message": "ഉള്ളടക്കം കാണുക", + "description": "used as a tooltip for eye icon beside a list" + }, + "3pLastUpdate": { + "message": "അവസാന അപ്ഡേറ്റ്:{{ago}}", + "description": "used as a tooltip for the clock icon beside a list" + }, + "3pUpdating": { + "message": "അപ്‌ഡേറ്റുചെയ്യുന്നു...", + "description": "used as a tooltip for the spinner icon beside a list" + }, + "3pNetworkError": { + "message": "ഒരു നെറ്റ്‌വർക്ക് പിശക് ഉറവിടം അപ്‌ഡേറ്റുചെയ്യുന്നതിൽ നിന്ന് തടഞ്ഞു.", + "description": "used as a tooltip for error icon beside a list" + }, + "1pTrustWarning": { + "message": "Do not add filters from untrusted sources.", + "description": "Warning against copy-pasting filters from random sources" + }, + "1pEnableMyFiltersLabel": { + "message": "Enable my custom filters", + "description": "Label for the checkbox use to enable/disable 'My filters' list" + }, + "1pTrustMyFiltersLabel": { + "message": "Allow custom filters requiring trust", + "description": "Label for the checkbox use to trust the content of 'My filters' list" + }, + "1pImport": { + "message": "ഇമ്പോര്‍ട്ടും കൂട്ടിചേര്‍ക്കലും ചെയ്യുക", + "description": "Button in the 'My filters' pane" + }, + "1pExport": { + "message": "എക്സ്പോര്‍ട്ട്‌", + "description": "Button in the 'My filters' pane" + }, + "1pExportFilename": { + "message": "എന്‍റെ-യുബ്ലോക്ക്-സ്റ്റാറ്റിക്ക്-ഫില്‍ട്ടറുകള്‍_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" + }, + "1pApplyChanges": { + "message": "മാറ്റങ്ങള്‍ അപ്ലേ ചെയ്യുക", + "description": "English: Apply changes" + }, + "rulesPermanentHeader": { + "message": "സ്ഥിര നിയമങ്ങള്‍", + "description": "header" + }, + "rulesTemporaryHeader": { + "message": "താല്‍ക്കാലിക നിയമങ്ങള്‍", + "description": "header" + }, + "rulesRevert": { + "message": "റിവേര്‍ട്ട്", + "description": "This will remove all temporary rules" + }, + "rulesCommit": { + "message": "കമ്മിറ്റ്", + "description": "This will persist temporary rules" + }, + "rulesEdit": { + "message": "എഡിറ്റ്‌", + "description": "Will enable manual-edit mode (textarea)" + }, + "rulesEditSave": { + "message": "സേവ്", + "description": "Will save manually-edited content and exit manual-edit mode" + }, + "rulesEditDiscard": { + "message": "കളയുക", + "description": "Will discard manually-edited content and exit manual-edit mode" + }, + "rulesImport": { + "message": "ഫയലില്‍ നിന്നും ഇമ്പോര്‍ട്ട് ചെയ്യുക...", + "description": "" + }, + "rulesExport": { + "message": "ഫയലിലേക്ക് എക്സ്പോര്‍ട്ട്‌ ചെയ്യുക", + "description": "Button in the 'My rules' pane" + }, + "rulesDefaultFileName": { + "message": "എന്‍റെ-യുബ്ലോക്ക്-ഡൈനാമിക്-നിയമങ്ങള്‍_{{datetime}}.txt", + "description": "default file name to use" + }, + "rulesHint": { + "message": "താങ്കളുടെ ഡൈനാമിക് ഫില്‍റ്റര്‍ നിയമങ്ങളുടെ ലിസ്റ്റ്.", + "description": "English: List of your dynamic filtering rules." + }, + "rulesFormatHint": { + "message": "നിയമത്തിന്‍റെ സിന്‍റ്റാക്സ്‌: സോര്‍സ് ഡെസ്റ്റിനേഷന്‍ ടൈപ്പ് ആക്ഷന്‍ ( മുഴുനീള പ്രമാണം).", + "description": "English: dynamic rule syntax and full documentation." + }, + "rulesSort": { + "message": "അടുക്കുക:", + "description": "English: label for sort option." + }, + "rulesSortByType": { + "message": "റൂൾ തരം", + "description": "English: a sort option for list of rules." + }, + "rulesSortBySource": { + "message": "ഉറവിടം", + "description": "English: a sort option for list of rules." + }, + "rulesSortByDestination": { + "message": "ലക്ഷ്യസ്ഥാനം", + "description": "English: a sort option for list of rules." + }, + "whitelistPrompt": { + "message": "യുബ്ലോക്ക്ഒ ഡിസേബിള്‍ ചെയ്യപ്പെടേണ്ട ഹോസ്റ്റ് നെയിമുകള്‍. ഒരു വരിയില്‍ ഒരു എന്‍ട്രി എന്ന രീതിയില്‍ ചേര്‍ക്കുക. ഇന്‍വാലിഡ്‌ ഹോസ്റ്റ് നെയിമുകള്‍ നിശബ്ദമായി ഇഗ്നോര്‍ ചെയ്യപെടും.", + "description": "A concise description of the 'Trusted sites' pane." + }, + "whitelistImport": { + "message": "ഇമ്പോര്‍ട്ടും കൂട്ടിചേര്‍ക്കലും ചെയ്യുക", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExport": { + "message": "എക്സ്പോര്‍ട്ട്‌", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExportFilename": { + "message": "എന്‍റെ-യുബ്ലോക്ക്-വൈറ്റ്ലിസ്റ്റ്_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" + }, + "whitelistApply": { + "message": "മാറ്റങ്ങള്‍ അപ്ലേ ചെയ്യുക", + "description": "English: Apply changes" + }, + "logRequestsHeaderType": { + "message": "ടൈപ്പ്", + "description": "English: Type" + }, + "logRequestsHeaderDomain": { + "message": "ഡൊമൈന്‍", + "description": "English: Domain" + }, + "logRequestsHeaderURL": { + "message": "യുആര്‍എല്‍", + "description": "English: URL" + }, + "logRequestsHeaderFilter": { + "message": "ഫില്‍ട്ടര്‍", + "description": "English: Filter" + }, + "logAll": { + "message": "എല്ലാം", + "description": "Appears in the logger's tab selector" + }, + "logBehindTheScene": { + "message": "സീനിനു പിന്നില്‍", + "description": "Pretty name for behind-the-scene network requests" + }, + "loggerCurrentTab": { + "message": "നിലവിലെ ടാബ്", + "description": "Appears in the logger's tab selector" + }, + "loggerReloadTip": { + "message": "ടാബ് ഉള്ളടക്കം വീണ്ടും ലോഡുചെയ്യുക", + "description": "Tooltip for the reload button in the logger page" + }, + "loggerDomInspectorTip": { + "message": "DOM ഇൻസ്പെക്ടർ ടോഗിൾ ചെയ്യുക", + "description": "Tooltip for the DOM inspector button in the logger page" + }, + "loggerPopupPanelTip": { + "message": "പോപ്പ്അപ്പ് പാനൽ ടോഗിൾ ചെയ്യുക", + "description": "Tooltip for the popup panel button in the logger page" + }, + "loggerInfoTip": { + "message": "uBlock ഉറവിട വിക്കി: ലോഗർ", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "ലോഗർ മായ്‌ക്കുക", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "ലോഗർ താൽക്കാലികമായി നിർത്തുക (ഇൻകമിംഗ് ഡാറ്റയെല്ലാം ഉപേക്ഷിക്കുക)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "ലോഗർ അൺപോസ് ചെയ്യുക", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "ലോഗർ ഫിൽട്ടറിംഗ് ടോഗിൾ ചെയ്യുക", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "ലോഗ് എന്‍ട്രി ഫില്‍ട്ടര്‍ ചെയ്യുക", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "ലോഗർ ഫിൽട്ടറിംഗ് ഓപ്ഷനുകൾ", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "അല്ല", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "തടഞ്ഞു", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "അനുവദനീയമാണ്", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "തിരുത്തപ്പെട്ടത്", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "ഒന്നാം കക്ഷി", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "തേര്‍ഡ് പാര്‍ട്ടി", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "വിശദാംശങ്ങൾ", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "ഫിൽട്ടർ ചെയ്യുക", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "ലിസ്റ്റ് ഫിൽട്ടർ ചെയ്യുക", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "ഭരണം", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "സന്ദർഭം", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "റൂട്ട് സന്ദർഭം", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "പാർട്ടിത്വം", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "തരം", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL\n", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "ഡൈനാമിക് യുആര്‍എല്‍ ഫില്‍ട്ടറിങ്ങ്", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "കോണ്‍ടെക്സ്റ്റ്:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "ടൈപ്പ്:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "സ്റ്റാറ്റിക് ഫില്‍ട്ടറിങ്ങ്", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "URL {{action}} നെറ്റ്വർക്ക് അഭ്യർത്ഥനകൾ {{type}} {{br}} ഏത് URL വിലാസം പൊരുത്തപ്പെടുന്നു {{url}} {{br}}, ഒപ്പം {{origin}}, {{br}} {{importance}} an പൊരുത്തപ്പെടുന്ന ഒഴിവാക്കൽ ഫിൽട്ടർ ഉണ്ട്.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "ബ്ലോക്ക്‌ ചെയ്യുക", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "അനുവദിക്കുക", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "ടൈപ്പ് \"{{type}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "ഏതു ടൈപ്പും", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "\"{{origin}}\"ല്‍ നിന്നും", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "എവിടെ നിന്നും", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "അങ്ങിനെ അല്ലെങ്കില്‍", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "എന്നിരുന്നാലും", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "സ്റ്റാറ്റിക് ഫില്‍ട്ടര്‍ {{filter}} ഇതില്‍ കണ്ടെത്തി:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "നിലവിൽ പ്രവർത്തനക്ഷമമാക്കിയ ഏതെങ്കിലും ഫിൽട്ടർ ലിസ്റ്റുകളിൽ സ്റ്റാറ്റിക് ഫിൽട്ടർ കണ്ടെത്താൻ കഴിഞ്ഞില്ല", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "ചുവടെയുള്ള മൂന്ന് നിബന്ധനകളും പാലിക്കാത്ത ലോഗർ എൻ‌ട്രികൾ സ്വപ്രേരിതമായി നിരസിക്കപ്പെടും:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "അവസാന {{input}} മിനിറ്റുകളിൽ നിന്ന് എൻട്രികൾ സംരക്ഷിക്കുക", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "ഒരു ടാബിന് പരമാവധി {{input}} പേജ് ലോഡുകൾ സംരക്ഷിക്കുക", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "ഒരു ടാബിന് പരമാവധി {{input}} എൻ‌ട്രികൾ സംരക്ഷിക്കുക", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "ലംബമായി വികസിപ്പിച്ച മോഡിൽ ഓരോ എൻട്രിക്കും {{input}} വരികൾ ഉപയോഗിക്കുക", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "നിരകൾ മറയ്‌ക്കുക:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} സമയം", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} ഫിൽട്ടർ / റൂൾ", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}}സന്ദർഭം", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} പാർട്ടിത്വം", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "പട്ടിക", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "മേശ", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "പ്ലെയിൻ", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "മാർക്ക്ഡ .ൺ", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "തുറക്കുക", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "പുതിയ റിപ്പോർട്ട് നിർമ്മിക്കുക", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "സമാനമായ റിപോർട്ടുകൾ കാണുക", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "പ്രമാണീകരണം", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Read the documentation at uBlock/wiki to learn about all of uBlock Origin's features.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Questions and support", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Answers to questions and other kinds of help support is provided on the subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filter issues/website is broken", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Important: Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tips: Be sure your filter lists are up to date. The logger is the primary tool to diagnose filter-related issues.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Bug report", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Report issues with uBlock Origin itself to the uBlockOrigin/uBlock-issue issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Troubleshooting Information", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported. Note: clicking the button will cause the page's origin to be sent to GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verify that the issue still exists after reloading the problematic web page.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the web page:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The web page…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBlock Origin is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the web page as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "സ്വകാര്യതാ നയം", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "മാറ്റങ്ങളുടെ ലോഗ്", + "description": "" + }, + "aboutCode": { + "message": "സോര്‍സ് കോഡ് (ജിപിഎല്‍വി3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "കോണ്‍ട്രിബ്യൂട്ടര്‍മാര്‍", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "സോഴ്സ് കോഡ്", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "വിവർത്തനങ്ങൾ", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "ലിസ്റ്റുകൾ ഫിൽട്ടർ ചെയ്യുക", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "ബാഹ്യ ഡിപൻഡൻസികൾ (GPLv3- അനുയോജ്യമാണ്):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO- യുടെ സ്വന്തം ഫിൽട്ടർ ലിസ്റ്റുകൾ ഇനിപ്പറയുന്നവയിൽ സ്വതന്ത്രമായി ഹോസ്റ്റുചെയ്യുന്നു CDNs:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "ഒരു ഫിൽട്ടർ ലിസ്റ്റ് അപ്ഡേറ്റ് ചെയ്യേണ്ടിവരുമ്പോൾ ക്രമരഹിതമായി തിരഞ്ഞെടുത്ത CDN ഉപയോഗിക്കുന്നു", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "ഫയലിലേക്ക് ബാക്അപ്", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "എന്‍റെ-യുബ്ലോക്ക്-ബാക്ക്അപ്_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "ഫയലില്‍ നിന്നും റീസ്റ്റോര്‍ ചെയ്യുക...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "ഡീഫാള്‍ട്ട് സെറ്റിംഗ്സിലേക്ക് റീസ്റ്റോര്‍ ചെയ്യുക...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "{{time}}ല്‍ ബാക്ക്അപ് ചെയ്യപ്പെട്ട ഡേറ്റ ഉപയോഗിച്ച് താങ്കളുടെ എല്ലാ സെറ്റിംഗ്സും ഓവര്‍ റൈറ്റ് ചെയ്യപ്പെടും. അതിനു ശേഷം യുബ്ലോക്ക്‌ഒ റീസ്റ്റാര്‍ട്ട്‌ ചെയ്യപ്പെടും.\n\nനിലവിലുള്ള എല്ലാ സെറ്റിങ്ങുകളും ഓവര്‍റൈറ്റ് ചെയ്യട്ടെയോ?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "ഡേറ്റ വായിക്കാന്‍ ഒക്കുന്നില്ല അല്ലെങ്കില്‍ അത് ഇന്‍വാലിഡ്‌ ആണ്", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "എല്ലാ സെറ്റിങ്ങുകളും റിമൂവ് ചെയ്യപ്പെടും. അതിനു ശേഷം യുബ്ലോക്ക്ഒ റീസ്റ്റാര്‍ട്ട്‌ ചെയ്യപ്പെടും.\n\nയുബ്ലോക്ക്ഒ-യെ ഫാക്ടറി സെറ്റിങ്ങുകളിലേക്ക് റീസെറ്റ് ചെയ്യട്ടെയോ?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "{{url}} എന്നതിലേക്ക് കണക്റ്റ് ചെയ്യാനാകുന്നില്ല", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "സബ്‌സ്‌ക്രൈബുചെയ്യുക", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "ഒരു മിനിറ്റ് മുന്‍പ്", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} മിനിറ്റുകള്‍ മുന്‍പ്", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "ഒരു മണിക്കൂര്‍ മുന്‍പ്", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} മണിക്കൂറുകള്‍ മുന്‍പ്", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "ഒരു ദിവസം മുന്‍പ്", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} ദിവസങ്ങള്‍ക്ക്മുന്‍പ്", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "ഡാഷ്ബോര്‍ഡ് കാണിക്കുക", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "ലോഗ്ഗര്‍ കാണിക്കുക", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "ഓഫ്", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Page blocked", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "താഴെ പറയുന്ന പേജ് ലോഡ് ചെയ്യുന്നത് യുബ്ലോക്ക് ഒറിജിന്‍ തടഞ്ഞിരിക്കുന്നു:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "ഈ ഫില്‍റ്റര്‍ കാരണം", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "പാരാമീറ്ററുകള്‍ ഇല്ലാതെ", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "ഇതില്‍ കണ്ടെത്തി:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "പിന്നിലേക്ക്‌ പോകുക", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "ഈ വിന്‍ഡോ ക്ലോസ് ചെയ്യുക", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "{{hostname}}ലേക്ക് കര്‍ശന ബ്ലോക്കിംഗ് ഡിസേബിള്‍ ചെയ്യുക", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "താല്‍ക്കാലികമായി", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "സ്ഥിരമായി", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Proceed", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "ക്ലൌഡ് സ്റ്റോറേജിലേക്ക് എക്സ്പോര്‍ട്ട്‌ ചെയ്യുക", + "description": "tooltip" + }, + "cloudPull": { + "message": "ക്ലൌഡ് സ്റ്റോറേജില്‍ നിന്ന് ഇമ്പോര്‍ട്ട് ചെയ്യുക", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "ക്ലൗഡ് സംഭരനിയില്‍ നിന്ന് ഇറക്കുമതി ചെയ്ത് നിലവിലെ ക്രമീകരണത്തില്‍ ലയിപ്പിക്കും", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "ഈ ഉപകരണത്തിന്‍റെ പേര്:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "മുന്നറിയിപ്പ്! നിങ്ങളുടെ സ്വന്തം ഉത്തരവാദിത്തത്തിൽ ഈ നൂതന ക്രമീകരണങ്ങൾ മാറ്റുക.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "സബ്മിറ്റ്", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "മാറ്റങ്ങൾ വരുത്തു", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "റിവേര്‍ട്ട്", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "ബൈറ്റുകള്‍", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "ഫ്രെയിമിലെ ഘടകം തടയുക ...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "ഫിൽട്ടർ ലിസ്റ്റിലേക്ക് സബ്സ്ക്രൈബ് ചെയ്യുക ...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "താൽക്കാലികമായി വലിയ മീഡിയ അനുവദിക്കുക", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "View source code…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "ഒരു കുറുക്കുവഴി ടൈപ്പുചെയ്യുക", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "ലോക്കുചെയ്‌ത സ്ക്രോളിംഗ് ടോഗിൾ ചെയ്യുക", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "ക്ലിപ്പ്ബോർഡിലേയ്ക്ക് പകർത്തുക", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Select all", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Toggle cosmetic filtering", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Toggle JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "തടയൽ മോഡ് വിശ്രമിക്കുക", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "ഉപയോഗിച്ച സംഭരണം: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "കെ.ബി.", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "എം.ബി.", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "ജി.ബി.", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "ലോഡുചെയ്യാൻ ക്ലിക്കുചെയ്യുക", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Errors: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" + } +} diff --git a/src/_locales/mr/messages.json b/src/_locales/mr/messages.json index cbb88e1cf3b70..9c954e37c1778 100644 --- a/src/_locales/mr/messages.json +++ b/src/_locales/mr/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"शेवटी, एक कार्यक्षम ब्लॉकर क्रोमियम आधारित ब्राउझरांसाठी. सीपीयू आणि मेमरी वर सोपे जातो.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "शेवटी, एक कार्यक्षम ब्लॉकर क्रोमियम आधारित ब्राउझरांसाठी. सीपीयू आणि मेमरी वर सोपे जातो.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"म्यूब्लॉक — डैशबोर्ड", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "म्यूब्लॉक — डैशबोर्ड", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"सेटिंग्ज", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Warning: you have unsaved changes!", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"तृतीय-पक्ष फिल्टर", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Stay here", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"आपले फिल्टर", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ignore", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"माझे नियम", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "सेटिंग्ज", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"श्वेतसूची", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "तृतीय-पक्ष फिल्टर", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — लॉगर", - "description":"Title for the logger window" + "1pPageName": { + "message": "आपले फिल्टर", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"माहिती", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "माझे नियम", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"क्लिक करा : या साइटसाठी म्यूब्लॉक अक्षम\/सक्षम.\n\nCtrl+क्लिक करा: फक्त या पृष्ठावर म्यूब्लॉक अक्षम.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "श्वेतसूची", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"विनंत्या अवरोधित", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Shortcuts", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"या पृष्ठावर", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — लॉगर", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} किंवा {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "माहिती", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"स्थापने पासून", - "description":"English: since install" + "supportPageName": { + "message": "Support", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"किंवा", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Asset viewer", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"डॅशबोर्ड उघडण्यासाठी क्लिक करा", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "प्रगत सेटिंग्ज", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"घटक निवडक मोड प्रविष्ट करा", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "क्लिक करा : या साइटसाठी म्यूब्लॉक अक्षम/सक्षम.\n\nCtrl+क्लिक करा: फक्त या पृष्ठावर म्यूब्लॉक अक्षम.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"विनंती लॉग ला जा", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Ctrl क्लिक करा फक्त या साइटवर म्यूब्लॉक बंद करण्यासाठी.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"या साइटसाठी सर्व पॉपअप अवरोधित करणे टॉगल करा", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Ctrl क्लिक करा फक्त या साइटवर म्यूब्लॉक चालू करण्यासाठी.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"या साइटसाठी मोठ्या माध्यम घटक अवरोधित करणे टॉगल करा", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "विनंत्या अवरोधित", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"या साइटसाठी कॉस्मेटिक फिल्टरिंग टॉगल करा", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "या पृष्ठावर", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Toggle the blocking of remote fonts for this site", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} किंवा {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Global rules: this column is for rules which apply to all sites.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "स्थापने पासून", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "किंवा", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Click to make your changes permanent.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Blocked on this page", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Click to revert your changes.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Blocked since install", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"सर्व", - "description":"" + "popupDomainsConnected_v2": { + "message": "Domains connected", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"चित्रे", - "description":"" + "popupTipDashboard": { + "message": "डॅशबोर्ड उघडण्यासाठी क्लिक करा", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"3rd-party", - "description":"" + "popupTipZapper": { + "message": "Enter element zapper mode", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"3rd-party css\/images", - "description":"" + "popupTipPicker": { + "message": "घटक निवडक मोड प्रविष्ट करा", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"inline scripts", - "description":"" + "popupTipLog": { + "message": "विनंती लॉग ला जा", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"1st-party scripts", - "description":"" + "popupTipReport": { + "message": "Report an issue on this website", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"3rd-party scripts", - "description":"" + "popupTipNoPopups": { + "message": "या साइटसाठी सर्व पॉपअप अवरोधित करणे टॉगल करा", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"3rd-party frames", - "description":"" + "popupTipNoPopups1": { + "message": "Click to block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"domains connected", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Click to no longer block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} पैकी {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "या साइटसाठी मोठ्या माध्यम घटक अवरोधित करणे टॉगल करा", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"निर्माण करा", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Click to block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"निवडा", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"बाहेर पडा", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "या साइटसाठी कॉस्मेटिक फिल्टरिंग टॉगल करा", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Preview", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Click to disable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"नेट फिल्टर", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Click to enable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"उटणे फिल्टर", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Toggle the blocking of remote fonts for this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Ctrl - क्लिक करा", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Click to block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"घटक अवरोधित करा", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Click to no longer block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"अवरोधित घटकाचे प्लेसहोल्डर लपवा", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Click to disable JavaScript on this site", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"अवरोधित विनंत्यांची संख्या चिन्हावर दाखवा", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Click to no longer disable JavaScript on this site", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Disable tooltips", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Pop-up windows", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"जेथे योग्य तेथे संदर्भ मेनू याचा वापर करा", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Large media elements", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Color-blind friendly", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Cosmetic filtering", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Enable cloud storage support", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Remote fonts", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"I am an advanced user (Required reading<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Disable pre-fetching (to prevent any connection for blocked network requests)", - "description":"English: " + "popupMoreButton_v2": { + "message": "More", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Disable hyperlink auditing", - "description":"English: " + "popupLessButton_v2": { + "message": "Less", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Prevent WebRTC from leaking local IP addresses", - "description":"English: " + "popupTipGlobalRules": { + "message": "Global rules: this column is for rules which apply to all sites.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Default behavior", - "description":"" + "popupTipLocalRules": { + "message": "Local rules: this column is for rules which apply to the current site only.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"These default behaviors can be overridden on a per-site basis", - "description":"" + "popupTipSaveRules": { + "message": "Click to make your changes permanent.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Disable cosmetic filtering", - "description":"" + "popupTipRevertRules": { + "message": "Click to revert your changes.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Block media elements larger than {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "सर्व", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Block remote fonts", - "description":"" + "popupImageRulePrompt": { + "message": "चित्रे", + "description": "" }, - "settingsStorageUsed":{ - "message":"Storage used: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "तृतीय पक्ष", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"अखेरचे पुनर्संचयित:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "तृतीय पक्षी css/चित्रे", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Last backup:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "inline scripts", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} नेटवर्क फिल्टर + {{cosmeticFilterCount}} उटणे फिल्टर :", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "1st-party scripts", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} वापरले {{total}} पैकी", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "3rd-party scripts", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"स्वयं-अद्यतन फिल्टर यादी.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "3rd-party frames", + "description": "" }, - "3pUpdateNow":{ - "message":"आता अद्यतनित करा", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "domains connected", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"सर्व कॅशे साफ करा", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} पैकी {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"उटणे फिल्टरना विश्लेषित करा आणि त्यांची अंमलबजावणी करा.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Version", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      हा पर्याय अद्ब्लोक प्लस सुसंगत “घटक लपवणारे” फिल्टर<\/a>चे विश्लेषण आणि अंमलबजावणी सक्षम करतो. हे फिल्टर मूलत: उटणे आहेत, ते वेब पृष्ठावर घटक लपवतात जें व्हिज्युअल उपद्रव असल्याचे मानण्यात येतात आणि जे निव्वळ विनंती-आधारित फिल्टरिंग इंजिनद्वारे अवरोधित करणे शक्य नाही.<\/p>

      हे वैशिष्ट्य सक्षम केले तरम्यूब्लॉकचे<\/i> मेमरी पावलाचा ठसा वाढतो.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignore generic cosmetic filters", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "frame", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites.

      Though handled efficiently by uBlock₀, generic cosmetic filters may still contribute measurable memory and CPU overhead on some web pages, especially for large and long-lived ones.

      Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters, and also lower the memory footprint of uBlock₀ itself.

      It is recommended to enable this option on less powerful devices.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "निर्माण करा", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"उअवरोधित होस्ट यांची सूची", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "निवडा", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"बदल लागू करा", - "description":"English: Apply changes" + "pickerQuit": { + "message": "बाहेर पडा", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"जाहिराती", - "description":"English: Ads" + "pickerPreview": { + "message": "Preview", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"गोपनीयता", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "नेट फिल्टर", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"मालवेअर डोमेन", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "उटणे फिल्टर", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"सामाजिक", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Ctrl - क्लिक करा", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"बहुउद्देशीय", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "घटक अवरोधित करा", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"विभाग , भाषा", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "अवरोधित घटकाचे प्लेसहोल्डर लपवा", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"सानुकूल", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "अवरोधित विनंत्यांची संख्या चिन्हावर दाखवा", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"प्रति ओळ एक युआरएल. ओळी सह प्रिफिक्स ‘!’ कढे दुर्लक्ष केले जाईल. अवैध युआरएल शांतपणे दुर्लक्ष केले जाईल.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Disable tooltips", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"लागू करा", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "जेथे योग्य तेथे संदर्भ मेनू याचा वापर करा", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":" कॅशे साफ करा", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Color-blind friendly", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"नवीन आवृत्ती उपलब्ध आहे", - "description":"English: new version available" + "settingsAppearance": { + "message": "Appearance", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"कालबाह्य", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Theme", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Last update: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Custom accent color", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"प्रति ओळ एक फिल्टर. फिल्टर एक साधे होस्ट नावाचा असू शकतो, किंवा एक अद्ब्लोक प्लस सुसंगत फिल्टर असू शकतो. ओळी सह प्रिफिक्स ‘!’ कढे दुर्लक्ष केले जाईल.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Enable cloud storage support", + "description": "" }, - "1pImport":{ - "message":"आयात आणि समावेश करा", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "I am an advanced user", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"निर्यात करा", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Disable pre-fetching (to prevent any connection for blocked network requests)", + "description": "English: " }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Disable hyperlink auditing", + "description": "English: " }, - "1pApplyChanges":{ - "message":"बदल लागू करा", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Prevent WebRTC from leaking local IP addresses", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"स्थायी नियम", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Default behavior", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"अस्थायी नियम", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "These default behaviors can be overridden on a per-site basis", + "description": "" }, - "rulesRevert":{ - "message":"Revert", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Disable cosmetic filtering", + "description": "" }, - "rulesCommit":{ - "message":"Commit", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Block media elements larger than {{input}} KB", + "description": "" }, - "rulesEdit":{ - "message":"संपादित करा", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Block remote fonts", + "description": "" }, - "rulesEditSave":{ - "message":"Save", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Disable JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Discard", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Import from file...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Uncloak canonical names", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Export to file", - "description":"" + "settingsAdvanced": { + "message": "Advanced", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Features suitable only for technical users", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"List of your dynamic filtering rules.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "प्रगत सेटिंग्ज", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Rule syntax: source destination type action<\/code> (full documentation<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "अखेरचे पुनर्संचयित:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"आपली होस्ट नावांची यादी ज्याचासाठी म्यूब्लॉक अक्षम केले जाईल. प्रति ओळ एक प्रविष्टी. अवैध होस्ट नावांकडे शांतपणे दुर्लक्ष केले जाईल.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "अंतिम बॅकअप:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"आयात आणि समावेश करा", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} नेटवर्क फिल्टर + {{cosmeticFilterCount}} उटणे फिल्टर :", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"निर्यात करा", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} वापरले {{total}} पैकी", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "स्वयं-अद्यतन फिल्टर यादी.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"बदल लागू करा", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "आता अद्यतनित करा", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"प्रकार", - "description":"English: Type" + "3pPurgeAll": { + "message": "सर्व कॅशे साफ करा", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"डोमेन", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "उटणे फिल्टरना विश्लेषित करा आणि त्यांची अंमलबजावणी करा.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"यूआरएल", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "

      हा पर्याय अद्ब्लोक प्लस सुसंगत “घटक लपवणारे” फिल्टरचे विश्लेषण आणि अंमलबजावणी सक्षम करतो. हे फिल्टर मूलत: उटणे आहेत, ते वेब पृष्ठावर घटक लपवतात जें व्हिज्युअल उपद्रव असल्याचे मानण्यात येतात आणि जे निव्वळ विनंती-आधारित फिल्टरिंग इंजिनद्वारे अवरोधित करणे शक्य नाही.

      हे वैशिष्ट्य सक्षम केले तरम्यूब्लॉकचे मेमरी पावलाचा ठसा वाढतो.

      ", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"फिल्टर", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignore generic cosmetic filters", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"All", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Behind the scene", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Suspend network activity until all filter lists are loaded", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"filter log entries", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "उअवरोधित होस्ट यांची सूची", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Maximum number of log entries", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "बदल लागू करा", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Context:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Built-in", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Type:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "जाहिराती", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Dynamic URL filtering", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "गोपनीयता", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Static filtering", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "मालवेअर डोमेन", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Social widgets", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Block", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Cookie notices", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Allow", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "चिडवणाऱ्या गोष्टी", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"type “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "बहुउद्देशीय", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"any type", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "विभाग , भाषा", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"from “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "सानुकूल", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"from anywhere", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Import…", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"except when", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "प्रति ओळ एक युआरएल. ओळी सह प्रिफिक्स ‘!’ कढे दुर्लक्ष केले जाईल. अवैध युआरएल शांतपणे दुर्लक्ष केले जाईल.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"even if", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "कालबाह्य", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Static filter {{filter}} found in:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "view content", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"बदल नोंदी", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Last update: {{ago}}.\nClick to force an update.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Updating…", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Support", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "A network error prevented the resource from being updated.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"स्त्रोत कोड (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Do not add filters from untrusted sources.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"सहभागी", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Enable my custom filters", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"फाइल वर बॅकअप करा...", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Allow custom filters requiring trust", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "आयात आणि समावेश करा", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"फाइल पासून पुनर्संचयित करा...", - "description":"English: Restore from file..." + "1pExport": { + "message": "निर्यात करा", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"मुळापासून सुरू करा...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"आपले सर्व सेटिंग्ज ना खोडून {{time}} चा बॅकअप डेटा वापरला जाईल, आणि म्यूब्लॉक रीस्टार्ट होईल.\n\nसर्व विद्यमान सेटिंग्ज ना खोडून बॅकअप डेटा वापरावे का?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "बदल लागू करा", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"The data could not be read or is invalid", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "स्थायी नियम", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"आपले सर्व सेटिंग्ज पुसले जातील, आणि म्यूब्लॉक रीस्टार्ट होईल .\n\nम्यूब्लॉक ला फॉक्टोरी सेटिंग्ज ला रीसेट करावे का?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "अस्थायी नियम", + "description": "header" }, - "errorCantConnectTo":{ - "message":"{{url}} ला कनेक्ट करण्यात अक्षम", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "मागे जा", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Commit", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"a minute ago", - "description":"English: a minute ago" + "rulesEdit": { + "message": "संपादित करा", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minutes ago", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Save", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"an hour ago", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Discard", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} hours ago", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Import from file…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"a day ago", - "description":"English: a day ago" + "rulesExport": { + "message": "Export to file…", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} days ago", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Show Dashboard", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "List of your dynamic filtering rules.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Show Logger", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Rule syntax: source destination type action (full documentation).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"off", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Sort:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin has prevented the following page from loading:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Rule type", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Because of the following filter", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Source", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"without parameters", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Destination", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Found in:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "आपली होस्ट नावांची यादी ज्याचासाठी म्यूब्लॉक अक्षम केले जाईल. प्रति ओळ एक प्रविष्टी. अवैध होस्ट नावांकडे शांतपणे दुर्लक्ष केले जाईल.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Go back", - "description":"English: Go back" + "whitelistImport": { + "message": "आयात आणि समावेश करा", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Close this window", - "description":"English: Close this window" + "whitelistExport": { + "message": "निर्यात करा", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Disable strict blocking for {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "my-ublock-trusted-sites_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Temporarily", - "description":"English: Temporarily" + "whitelistApply": { + "message": "बदल लागू करा", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Permanently", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "प्रकार", + "description": "English: Type" }, - "cloudPush":{ - "message":"Export to cloud storage", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "डोमेन", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Import from cloud storage", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "यूआरएल", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Import from cloud storage and merge with current settings", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "फिल्टर", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "All", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"This device name:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Tabless", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Submit", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Current tab", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Revert", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Reload the tab content", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"bytes", - "description":"" + "loggerDomInspectorTip": { + "message": "Toggle the DOM inspector", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Temporarily allow large media elements", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Toggle the popup panel", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: The logger", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Clear logger", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Pause logger (discard all incoming data)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Unpause logger", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Toggle logger filtering", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filter logger content", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Logger filtering options", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Not", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "blocked", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "allowed", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "modified", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "1st-party", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "3rd-party", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Details", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filter", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Filter list", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Rule", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Context", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Root context", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Partyness", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Type", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL rule", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Context:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Type:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Static filter", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Block", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Allow", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "type “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "any type", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "from “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "from anywhere", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "except when", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "even if", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Static filter {{filter}} found in:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Static filter could not be found in any of the currently enabled filter lists", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Preserve entries from the last {{input}} minutes", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Preserve at most {{input}} page loads per tab", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Preserve at most {{input}} entries per tab", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Use {{input}} lines per entry in vertically expanded mode", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Hide columns:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Time", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filter/rule", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Context", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Partyness", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "List", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Table", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Plain", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Open", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Create new report on GitHub", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Find similar reports on GitHub", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Documentation", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Read the documentation at uBlock/wiki to learn about all of uBlock Origin's features.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Questions and support", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Answers to questions and other kinds of help support is provided on the subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filter issues/website is broken", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Important: Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tips: Be sure your filter lists are up to date. The logger is the primary tool to diagnose filter-related issues.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Bug report", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Report issues with uBlock Origin itself to the uBlockOrigin/uBlock-issue issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Troubleshooting Information", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported. Note: clicking the button will cause the page's origin to be sent to GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verify that the issue still exists after reloading the problematic web page.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the web page:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The web page…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBlock Origin is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the web page as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Privacy policy", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "बदल नोंदी", + "description": "" + }, + "aboutCode": { + "message": "स्त्रोत कोड (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "सहभागी", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Source code", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Translations", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Filter lists", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "External dependencies (GPLv3-compatible):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO's own filter lists are freely hosted on the following CDNs:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "A randomly picked CDN is used when a filter list needs to be updated.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "फाइल वर बॅकअप करा...", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "फाइल पासून पुनर्संचयित करा...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "मुळापासून सुरू करा...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "आपले सर्व सेटिंग्ज ना खोडून {{time}} चा बॅकअप डेटा वापरला जाईल, आणि म्यूब्लॉक रीस्टार्ट होईल.\n\nसर्व विद्यमान सेटिंग्ज ना खोडून बॅकअप डेटा वापरावे का?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "The data could not be read or is invalid", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "आपले सर्व सेटिंग्ज पुसले जातील, आणि म्यूब्लॉक रीस्टार्ट होईल .\n\nम्यूब्लॉक ला फॉक्टोरी सेटिंग्ज ला रीसेट करावे का?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "{{url}} ला कनेक्ट करण्यात अक्षम", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Subscribe", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "a minute ago", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} minutes ago", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "an hour ago", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} hours ago", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "a day ago", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} days ago", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Show Dashboard", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Show Logger", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "off", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Page blocked", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin has prevented the following page from loading:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "This happened because of the following filter:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "without parameters", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "The filter has been found in:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Go back", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Close this window", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Disable strict blocking for {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Temporarily", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Permanently", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Proceed", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Export to cloud storage", + "description": "tooltip" + }, + "cloudPull": { + "message": "Import from cloud storage", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Import from cloud storage and merge with current settings", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "This device name:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Warning! Change these advanced settings at your own risk.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Submit", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Apply changes", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Revert", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Block element in frame…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Subscribe to filter list…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Temporarily allow large media elements", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "View source code…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Type a shortcut", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Toggle locked scrolling", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Copy to clipboard", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Select all", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Toggle cosmetic filtering", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Toggle JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Relax blocking mode", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Storage used: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Click to load", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Errors: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/ms/messages.json b/src/_locales/ms/messages.json new file mode 100644 index 0000000000000..9243a351261da --- /dev/null +++ b/src/_locales/ms/messages.json @@ -0,0 +1,1314 @@ +{ + "extName": { + "message": "uBlock Origin", + "description": "extension name." + }, + "extShortDesc": { + "message": "Akhirnya, penyekat yang cekap. Tidak membebankan CPU dan memori.", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "dashboardName": { + "message": "uBlock₀ — Papan pemuka", + "description": "English: uBlock₀ — Dashboard" + }, + "dashboardUnsavedWarning": { + "message": "Amaran! Anda mempunyai perubahan yang tidak disimpan", + "description": "A warning in the dashboard when navigating away from unsaved changes" + }, + "dashboardUnsavedWarningStay": { + "message": "Kekal", + "description": "Label for button to prevent navigating away from unsaved changes" + }, + "dashboardUnsavedWarningIgnore": { + "message": "Abaikan", + "description": "Label for button to ignore unsaved changes" + }, + "settingsPageName": { + "message": "Tetapan", + "description": "appears as tab name in dashboard" + }, + "3pPageName": { + "message": "Senarai penapis", + "description": "appears as tab name in dashboard" + }, + "1pPageName": { + "message": "Penapis saya", + "description": "appears as tab name in dashboard" + }, + "rulesPageName": { + "message": "Peraturan saya", + "description": "appears as tab name in dashboard" + }, + "whitelistPageName": { + "message": "Halaman dipercayai", + "description": "appears as tab name in dashboard" + }, + "shortcutsPageName": { + "message": "Pintasan", + "description": "appears as tab name in dashboard" + }, + "statsPageName": { + "message": "uBlock₀ — Catatan", + "description": "Title for the logger window" + }, + "aboutPageName": { + "message": "Mengenai", + "description": "appears as tab name in dashboard" + }, + "supportPageName": { + "message": "Sokongan", + "description": "appears as tab name in dashboard" + }, + "assetViewerPageName": { + "message": "uBlock₀ — Pertonton aset", + "description": "Title for the asset viewer page" + }, + "advancedSettingsPageName": { + "message": "Tetapan lanjut", + "description": "Title for the advanced settings page" + }, + "popupPowerSwitchInfo": { + "message": "Klik: tutup/aktifkan uBlock₀ untuk laman web ini.\n\nCtrl+klik: tutupkan uBlock₀ pada halaman ini sahaja.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + }, + "popupPowerSwitchInfo1": { + "message": "Kilk untuk nyahdayakan uBlock₀ untuk laman web ini.\n\nCtrl+klik untuk nyahdayakan uBlock₀ hanya di halaman ini.", + "description": "Message to be read by screen readers" + }, + "popupPowerSwitchInfo2": { + "message": "Klik untuk mendayakan uBlock₀ untuk laman web ini.", + "description": "Message to be read by screen readers" + }, + "popupBlockedRequestPrompt": { + "message": "permintaan dihalang", + "description": "English: requests blocked" + }, + "popupBlockedOnThisPagePrompt": { + "message": "pada halaman ini", + "description": "English: on this page" + }, + "popupBlockedStats": { + "message": "{{count}} atau {{percent}}%", + "description": "Example: 15 (13%)" + }, + "popupBlockedSinceInstallPrompt": { + "message": "sejak dipasang", + "description": "English: since install" + }, + "popupOr": { + "message": "atau", + "description": "English: or" + }, + "popupBlockedOnThisPage_v2": { + "message": "Disekat di halaman ini", + "description": "For the new mobile-friendly popup design" + }, + "popupBlockedSinceInstall_v2": { + "message": "Disekat sejak dipasang", + "description": "For the new mobile-friendly popup design" + }, + "popupDomainsConnected_v2": { + "message": "Domain telah dihubungkan", + "description": "For the new mobile-friendly popup design" + }, + "popupTipDashboard": { + "message": "Klik untuk membuka dashboard", + "description": "English: Click to open the dashboard" + }, + "popupTipZapper": { + "message": "Masuk mod pilihan elemen", + "description": "Tooltip for the element-zapper icon in the popup panel" + }, + "popupTipPicker": { + "message": "Memasuki mod pemetik elemen", + "description": "English: Enter element picker mode" + }, + "popupTipLog": { + "message": "Buka pengelog", + "description": "Tooltip used for the logger icon in the panel" + }, + "popupTipReport": { + "message": "Laporkan masalah tentang laman web ini", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipNoPopups": { + "message": "Togol penghalang untuk segala pop timbul laman ini", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups1": { + "message": "Klik untuk menyekat semua pop timbul di laman ini", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2": { + "message": "Klik untuk berhenti menyekat semua pop timbul di laman ini", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoLargeMedia": { + "message": "Togol penghalang semua elemen media besar untuk laman ini", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia1": { + "message": "Klik untuk menyekat elemen media yang besar di laman ini", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2": { + "message": "Klik untuk berhenti menyekat elemen media yang besar di laman ini", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoCosmeticFiltering": { + "message": "Togol penapis kosmetik untuk laman ini", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering1": { + "message": "Klik untuk mematikan penapisan kosmetik di laman ini", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2": { + "message": "Klik untuk mengaktifkan penapisan kosmetik di laman ini", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoRemoteFonts": { + "message": "Togol menyekat fon terpencil untuk laman web ini", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts1": { + "message": "Klik untuk menyekat fon jauh di laman ini", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts2": { + "message": "Klik untuk berhenti menyekat fon jauh di laman ini", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoScripting1": { + "message": "Klik untuk hilangkan keupayaan JavaScript di halaman ini", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupTipNoScripting2": { + "message": "Klik untuk berhenti hilangkan keupayaan JavaScript di halaman ini", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupNoPopups_v2": { + "message": "Tingkap timbul", + "description": "Caption for the no-popups per-site switch" + }, + "popupNoLargeMedia_v2": { + "message": "Unsur-unsur media besar", + "description": "Caption for the no-large-media per-site switch" + }, + "popupNoCosmeticFiltering_v2": { + "message": "Tapisan kosmetik", + "description": "Caption for the no-cosmetic-filtering per-site switch" + }, + "popupNoRemoteFonts_v2": { + "message": "Font tersendiri", + "description": "Caption for the no-remote-fonts per-site switch" + }, + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" + }, + "popupMoreButton_v2": { + "message": "Lagi", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton_v2": { + "message": "Kurangkan", + "description": "Label to be used to hide popup panel sections" + }, + "popupTipGlobalRules": { + "message": "Peraturan global: lajur ini adalah untuk peraturan yang dikuatkuasakan untuk semua laman.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." + }, + "popupTipLocalRules": { + "message": "Peraturan tempatan: lajur ini adalah untuk peraturan yang dikuatkuasakan untuk laman semasa sahaja.\nPeraturan tempatan menolak peraturan global.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." + }, + "popupTipSaveRules": { + "message": "Klik untuk membuat perubahan anda kekal.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." + }, + "popupTipRevertRules": { + "message": "Klik untuk memungkiri perubahan anda.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + }, + "popupAnyRulePrompt": { + "message": "semua", + "description": "" + }, + "popupImageRulePrompt": { + "message": "gambar", + "description": "" + }, + "popup3pAnyRulePrompt": { + "message": "pihak ketiga", + "description": "" + }, + "popup3pPassiveRulePrompt": { + "message": "CSS/imej pihak ketiga", + "description": "" + }, + "popupInlineScriptRulePrompt": { + "message": "Skrip dalam ayat", + "description": "" + }, + "popup1pScriptRulePrompt": { + "message": "Skrip parti pertama", + "description": "" + }, + "popup3pScriptRulePrompt": { + "message": "Skrip parti ke-3", + "description": "" + }, + "popup3pFrameRulePrompt": { + "message": "Kerangka parti ke-3", + "description": "" + }, + "popupHitDomainCountPrompt": { + "message": "Domain telah dihubungkan", + "description": "appears in popup" + }, + "popupHitDomainCount": { + "message": "{{count}} daripada {{total}}", + "description": "appears in popup" + }, + "popupVersion": { + "message": "Versi", + "description": "Example of use: Version 1.26.4" + }, + "popup3pScriptFilter": { + "message": "skrip", + "description": "Appears as an option to filter out firewall rows" + }, + "popup3pFrameFilter": { + "message": "kerangka", + "description": "Appears as an option to filter out firewall rows" + }, + "pickerCreate": { + "message": "Cipta", + "description": "English: Create" + }, + "pickerPick": { + "message": "Pilih", + "description": "English: Pick" + }, + "pickerQuit": { + "message": "Keluar", + "description": "English: Quit" + }, + "pickerPreview": { + "message": "Preview", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + }, + "pickerNetFilters": { + "message": "Penapis network", + "description": "English: header for a type of filter in the element picker dialog" + }, + "pickerCosmeticFilters": { + "message": "Penapis Kosmetik", + "description": "English: Cosmetic filters" + }, + "pickerCosmeticFiltersHint": { + "message": "Klik, Ctrl-klik", + "description": "English: Click, Ctrl-click" + }, + "pickerContextMenuEntry": { + "message": "Halang elemen", + "description": "An entry in the browser's contextual menu" + }, + "settingsCollapseBlockedPrompt": { + "message": "Sembunyikan simbol unsur-unsur yang disekat", + "description": "English: Hide placeholders of blocked elements" + }, + "settingsIconBadgePrompt": { + "message": "Tunjukkan nombor permintaan yang disekat di atas ikon", + "description": "English: Show the number of blocked requests on the icon" + }, + "settingsTooltipsPrompt": { + "message": "Menutupkan mesej bantuan", + "description": "A checkbox in the Settings pane" + }, + "settingsContextMenuPrompt": { + "message": "Gunakan menu konteks yang sesuai", + "description": "English: Make use of context menu where appropriate" + }, + "settingsColorBlindPrompt": { + "message": "Mesra buta warna", + "description": "English: Color-blind friendly" + }, + "settingsAppearance": { + "message": "Appearance", + "description": "Section for controlling user interface appearance" + }, + "settingsThemeLabel": { + "message": "Tema", + "description": "Label for checkbox to enable a custom dark theme" + }, + "settingsThemeAccent0Label": { + "message": "Custom accent color", + "description": "Label for checkbox to pick an accent color" + }, + "settingsCloudStorageEnabledPrompt": { + "message": "Membolehkan sokongan storan awangan", + "description": "" + }, + "settingsAdvancedUserPrompt": { + "message": "Saya adalah pengguna mahir (memerlukan pembacaan)", + "description": "Checkbox to let user access advanced, technical features" + }, + "settingsPrefetchingDisabledPrompt": { + "message": "Lumpuhkan pra-ambilan (untuk mengelakkan apa-apa sambungan untuk permintaan rangkaian yang disekat)", + "description": "English: " + }, + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Nyahaktifkan pengauditan hiperpautan", + "description": "English: " + }, + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Mencegah WebRTC dari membocorkan alamat IP tempatan", + "description": "English: " + }, + "settingPerSiteSwitchGroup": { + "message": "Kelakuan lalai", + "description": "" + }, + "settingPerSiteSwitchGroupSynopsis": { + "message": "Tingkah laku lalai ini boleh diatasi secara per-halaman", + "description": "" + }, + "settingsNoCosmeticFilteringPrompt": { + "message": "Lumpuhkan tapisan kosmetik", + "description": "" + }, + "settingsNoLargeMediaPrompt": { + "message": "Sekat unsur-unsur media yang lebih besar dari {{input}} KB", + "description": "" + }, + "settingsNoRemoteFontsPrompt": { + "message": "Sekat fon terpencil", + "description": "" + }, + "settingsNoScriptingPrompt": { + "message": "Lumpuhkan JavaScript", + "description": "The default state for the per-site no-scripting switch" + }, + "settingsNoCSPReportsPrompt": { + "message": "Sekat laporan CSP", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" + }, + "settingsUncloakCnamePrompt": { + "message": "Mendedahkan nama kanonik", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" + }, + "settingsAdvanced": { + "message": "Lanjutan", + "description": "Section for controlling advanced-user settings" + }, + "settingsAdvancedSynopsis": { + "message": "Features suitable only for technical users", + "description": "Description of section controlling advanced-user settings" + }, + "settingsAdvancedUserSettings": { + "message": "tetapan lanjutan", + "description": "For the tooltip of a link which gives access to advanced settings" + }, + "settingsLastRestorePrompt": { + "message": "Pemulihan lalu:", + "description": "English: Last restore:" + }, + "settingsLastBackupPrompt": { + "message": "Sandaran lalu:", + "description": "English: Last backup:" + }, + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} penapis rangkaian + {{cosmeticFilterCount}} penapis kosmetik dari:", + "description": "Appears at the top of the _3rd-party filters_ pane" + }, + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} digunakan dari {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "3pAutoUpdatePrompt1": { + "message": "Kemas kini auto senarai tapisan", + "description": "A checkbox in the _3rd-party filters_ pane" + }, + "3pUpdateNow": { + "message": "Kemas kini sekarang", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pPurgeAll": { + "message": "Bersihkan semua cache", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pParseAllABPHideFiltersPrompt1": { + "message": "Hurai dan kuatkuasakan tapisan kosmetik", + "description": "English: Parse and enforce Adblock+ element hiding filters." + }, + "3pParseAllABPHideFiltersInfo": { + "message": "Penapis kosmetik berkhidmat untuk menyembunyikan unsur-unsur dalam laman web yang disifatkan sebagai suatu gangguan visual, dan yang tidak mampu disekat oleh enjin tapisan berasaskan permintaan rangkaian.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + }, + "3pIgnoreGenericCosmeticFilters": { + "message": "Abaikan penapis kosmetik generik", + "description": "This will cause uBO to ignore all generic cosmetic filters." + }, + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Penapis kosmetik generik adalah penapis kosmetik itu mengubah kesemua laman web. Mendayakan tetapan ini akan mengurangkan penggunaan memori dan overhed CPU dari laman web sebagai hasil pengendalian penapis kosmetik generik.\n\nIa disyorkan untuk mengaktifkan tetapan ini untuk peranti yang lemah.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." + }, + "3pSuspendUntilListsAreLoaded": { + "message": "Gantung aktiviti rangkaian sehingga semua senarai penapis dimuatkan", + "description": "A checkbox in the 'Filter lists' pane" + }, + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" + }, + "3pApplyChanges": { + "message": "Terapkan perubahan", + "description": "English: Apply changes" + }, + "3pGroupDefault": { + "message": "Terbina dalam", + "description": "Filter lists section name" + }, + "3pGroupAds": { + "message": "Iklan", + "description": "Filter lists section name" + }, + "3pGroupPrivacy": { + "message": "Privasi", + "description": "Filter lists section name" + }, + "3pGroupMalware": { + "message": "Domain perisian hasad", + "description": "Filter lists section name" + }, + "3pGroupSocial": { + "message": "Widget sosial", + "description": "Filter lists section name" + }, + "3pGroupCookies": { + "message": "Notis kuki", + "description": "Filter lists section name" + }, + "3pGroupAnnoyances": { + "message": "Kejengkelan", + "description": "Filter lists section name" + }, + "3pGroupMultipurpose": { + "message": "Pelbagai guna", + "description": "Filter lists section name" + }, + "3pGroupRegions": { + "message": "Wilayah, bahasa", + "description": "Filter lists section name" + }, + "3pGroupCustom": { + "message": "Tersuai", + "description": "Filter lists section name" + }, + "3pImport": { + "message": "Import...", + "description": "The label for the checkbox used to import external filter lists" + }, + "3pExternalListsHint": { + "message": "Satu URL per garisan. URL yang tidak sah akan diabaikan secara senyap.", + "description": "Short information about how to use the textarea to import external filter lists by URL" + }, + "3pExternalListObsolete": { + "message": "Usang.", + "description": "used as a tooltip for the out-of-date icon beside a list" + }, + "3pViewContent": { + "message": "melihat kandungan", + "description": "used as a tooltip for eye icon beside a list" + }, + "3pLastUpdate": { + "message": "Kemaskini terakhir: {{ago}}.\nKlik untuk memaksa kemas kini.", + "description": "used as a tooltip for the clock icon beside a list" + }, + "3pUpdating": { + "message": "Sedang mengemaskini...", + "description": "used as a tooltip for the spinner icon beside a list" + }, + "3pNetworkError": { + "message": "Ralat rangkaian menghalang sumber dikemas kini..", + "description": "used as a tooltip for error icon beside a list" + }, + "1pTrustWarning": { + "message": "Jangan tambah penapis daripada sumber yang tidak dipercayai.", + "description": "Warning against copy-pasting filters from random sources" + }, + "1pEnableMyFiltersLabel": { + "message": "Dayakan penapis tersuai saya", + "description": "Label for the checkbox use to enable/disable 'My filters' list" + }, + "1pTrustMyFiltersLabel": { + "message": "Benarkan penapis tersuai yang memerlukan kepercayaan", + "description": "Label for the checkbox use to trust the content of 'My filters' list" + }, + "1pImport": { + "message": "Import dan melampirkan", + "description": "Button in the 'My filters' pane" + }, + "1pExport": { + "message": "Eksport", + "description": "Button in the 'My filters' pane" + }, + "1pExportFilename": { + "message": "my-ublock-static-filter _ {{datetime}}. txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" + }, + "1pApplyChanges": { + "message": "Terapkan perubahan", + "description": "English: Apply changes" + }, + "rulesPermanentHeader": { + "message": "Peraturan kekal", + "description": "header" + }, + "rulesTemporaryHeader": { + "message": "Peraturan sementara", + "description": "header" + }, + "rulesRevert": { + "message": "Bebalik", + "description": "This will remove all temporary rules" + }, + "rulesCommit": { + "message": "Keterikatan", + "description": "This will persist temporary rules" + }, + "rulesEdit": { + "message": "Edit", + "description": "Will enable manual-edit mode (textarea)" + }, + "rulesEditSave": { + "message": "Simpan", + "description": "Will save manually-edited content and exit manual-edit mode" + }, + "rulesEditDiscard": { + "message": "Batal", + "description": "Will discard manually-edited content and exit manual-edit mode" + }, + "rulesImport": { + "message": "Import dari fail...", + "description": "" + }, + "rulesExport": { + "message": "Eksport ke fail", + "description": "Button in the 'My rules' pane" + }, + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt\n", + "description": "default file name to use" + }, + "rulesHint": { + "message": "Senaraikan peraturan penapisan dinamik anda.", + "description": "English: List of your dynamic filtering rules." + }, + "rulesFormatHint": { + "message": "Sintaks peraturan: tindakan jenis tujuan sumber ( dokumentasi lengkap ).", + "description": "English: dynamic rule syntax and full documentation." + }, + "rulesSort": { + "message": "Susun:", + "description": "English: label for sort option." + }, + "rulesSortByType": { + "message": "Jenis peraturan", + "description": "English: a sort option for list of rules." + }, + "rulesSortBySource": { + "message": "Sumber", + "description": "English: a sort option for list of rules." + }, + "rulesSortByDestination": { + "message": "Destinasi", + "description": "English: a sort option for list of rules." + }, + "whitelistPrompt": { + "message": "Arahan laman web yang dipercayai menentukan halaman web mana uBlock Origin harus dilumpuhkan. Satu penyertaan setiap baris. Arahan tidak sah akan diam-diam diabaikan dan dikomentari.", + "description": "A concise description of the 'Trusted sites' pane." + }, + "whitelistImport": { + "message": "Import dan melampirkan", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExport": { + "message": "Eksport", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExportFilename": { + "message": "my-ublock-trusted-sites_{{datetime}}.txt\n", + "description": "The default filename to use for import/export purpose" + }, + "whitelistApply": { + "message": "Terapkan perubahan", + "description": "English: Apply changes" + }, + "logRequestsHeaderType": { + "message": "Jenis", + "description": "English: Type" + }, + "logRequestsHeaderDomain": { + "message": "Domain", + "description": "English: Domain" + }, + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" + }, + "logRequestsHeaderFilter": { + "message": "Penapis", + "description": "English: Filter" + }, + "logAll": { + "message": "Semua", + "description": "Appears in the logger's tab selector" + }, + "logBehindTheScene": { + "message": "Tanpa tab", + "description": "Pretty name for behind-the-scene network requests" + }, + "loggerCurrentTab": { + "message": "Tab semasa", + "description": "Appears in the logger's tab selector" + }, + "loggerReloadTip": { + "message": "Muat semula kandungan tab", + "description": "Tooltip for the reload button in the logger page" + }, + "loggerDomInspectorTip": { + "message": "Togol pemeriksa DOM", + "description": "Tooltip for the DOM inspector button in the logger page" + }, + "loggerPopupPanelTip": { + "message": "Togol panel pop timbul", + "description": "Tooltip for the popup panel button in the logger page" + }, + "loggerInfoTip": { + "message": "uBlock Origin wiki: Catatan", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Kosongkan catatan", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Jedakan catatan (singkirkan semua data masuk)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Nyahjeda catatan", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Togol penapis catatan", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "tapis kandungan catatan", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Pilihan tapisan catatan", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Bukan", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "disekat", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "dibenarkan", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "diubah suai", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "pihak pertama", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "pihak ketiga", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Butiran", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Penapis", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Senarai tapisan", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Peraturan", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Konteks", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Konteks akar", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Partyness", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Jenis", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Aturan URL", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Konteks:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Jenis:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Penapis statik", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} permintaan rangkaian {{type}} {{br}} alamat URL yang sesuai dengan {{url}} {{br}} dan mana yang berasal {{origin}}, {{br}} {{kepentingan} } ada penapis pengecualian yang sepadan.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Sekat", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Benarkan", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "jenis “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "pelbagai jenis", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "dari “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "dari mana-mana ", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "kecuali bila", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "walaupun", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Penapis statik {{filter}} terdapat di:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Penapis statik tidak dapat dijumpai dalam daftar penapis yang diaktifkan sekarang", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Entri logger yang tidak memenuhi ketiga-tiga syarat di bawah akan dibuang secara automatik:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Simpan entri dari {{input}} minit terakhir", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Simpan paling banyak {{input}} pemuatan halaman setiap tab", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Simpan paling banyak {{input}} entri setiap tab", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Gunakan baris {{input}} setiap entri dalam mod yang diluaskan secara menegak", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Sembunyikan lajur:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Masa", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Tapis / peraturan", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Konteks", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Kesopanan", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Senarai", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Jadual", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Kosong", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Penurunan harga", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Buka", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Cipta laporan baru", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Cari laporan yang serupa", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Pendokumenan", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Baca pendokumenan di uBlock/wiki untuk belajar tentang kesemua ciri-ciri uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Soalan dan sokongan", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Menjawab soalan dan pelbagai sokongan disediakan di subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Masalah penapisan/laman web rosak", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Laporkan masalah penapisan di laman web tertentu di uBlockOrigin/uAssets pengesan masalah. Memerlukan akaun GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Penting: Elakkan menggunakan penyekat-penyekat lain yang serupa dengan uBlock Origin, kerana ia menimbulkan masalah penapis di laman web tertentu.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tip: Pastikan senarai penapis kamu dikemaskinikan \tPencatat adalah peralatan utama untuk memeriksa masalah yang berkaitan penapis.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Laporan pepijat", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Laporkan masalah dengan uBlock Origin sendiri ke uBlockOrigin/uBlock-issue pengesan masalah. Memerlukan akaun GitHub.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Informasi Pencarisilapan", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Berikut adalah maklumat teknikal yang mungkin berguna ketika sukarelawan berusaha membantu anda menyelesaikan masalah.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Laporkan masalah berkaitan penapis", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Untuk menggelakkan bebanan penyumbang dengan laporan pendua, sila mengesahkan bahawa isu itu belum dilaporkan.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Senarai penapis dikemas kini setiap hari. Pastikan isu anda belum ditangani dalam senarai penapis terbaharu.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Sahkan bahawa isu itu masih wujud selepas memuat semula halaman web yang bermasalah.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Alamat laman web:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Laman web...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pilih entri --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Tunjuk iklan dan baki iklan tertinggal", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Mempunyai panel dan gangguan lain", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Mengesan uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Mempunyai masalah berkaitan privasi", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Rosak pabila uBlock Origin didayakan", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Membuka tab atau tetingkap yang tidak diingini", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Labelkan laman web itu sebagai \"NSFW\" (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Dasar privasi", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Catatan perubahan", + "description": "" + }, + "aboutCode": { + "message": "Kod sumber (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Penyumbang", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Kod sumber", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Terjemahan", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Senarai penapis", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Pergantungan luaran (serasi dengan GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Senarai penapis uBO sendiri dihoskan secara bebas di CDNs:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "CDN yang dipilih secara rawak digunakan apabila senarai penapis perlu dikemas kini", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Sandarkan ke fail", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt\n", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Pulihkan dari fail ...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Tetapkan semula ke tetapan lalai ...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Semua tetapan anda akan ditimpa menggunakan data yang disandarkan pada {{time}}, dan uBlock₀ akan dimulakan semula.\n\nMenimpa semua tetapan yang ada menggunakan data yang disandarkan?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Data tidak dapat dibaca atau tidak sah", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Semua tetapan anda akan dikeluarkan, dan uBlock₀ akan dimulakan semula.\n\nTetapkan semula uBlock₀ ke tetapan kilang?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Ralat rangkaian: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Langgan", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "seminit yang lalu", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} minit yang lalu", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "satu jam yang lalu", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} jam yang lalu", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "sehari yang lalu", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} hari yang lalu", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Tunjukkan Papan Pemuka", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Tunjukkan Pencatat", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "mati", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Halaman disekat", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin menghalang halaman berikut memuatkan:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Kerana penapis berikut:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "tanpa parameter", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Dijumpai di:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Kembali", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Tutup tetingkap ini", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Jangan beri amaran kepada saya lagi tentang laman web ini", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Lumpuhkan sekatan ketat untuk {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Sementara", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Kekal", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Teruskan", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Eksport ke storan awan", + "description": "tooltip" + }, + "cloudPull": { + "message": "Import dari storan awan", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Import dari storan awan dan gabungkan dengan tetapan semasa", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Nama peranti ini:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Amaran! Ubah tetapan lanjutan ini dengan risiko anda sendiri.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Hantar", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Terapkan perubahan", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Membalikkan", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bait", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Blok elemen dalam bingkai ...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Langgan ke senarai tapisan...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Biarkan sementara elemen media besar", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Lihat kod sumber…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Taipkan jalan pintas", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Togol tatal terkunci", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Salin ke papan keratan", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Pilih semua", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Togol penapis kosmetik", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Togol JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Tenang mod menyekat", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Storan yang digunakan: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Klik untuk memuatkan", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Ralat: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Tidak dapat menapis dengan betul semasa pelancaran pelayar. Muat semula halaman untuk memastikan penapisan yang betul.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" + } +} diff --git a/src/_locales/nb/messages.json b/src/_locales/nb/messages.json index f86792a4fecbd..da64d301aacdc 100644 --- a/src/_locales/nb/messages.json +++ b/src/_locales/nb/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Endelig en effektiv blokkeringsutvidelse. Lavt CPU- og minnebruk.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Endelig en effektiv blokkeringsutvidelse. Lavt CPU- og minnebruk.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Dashbord", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Dashbord", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Innstillinger", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Advarsel! Du har ulagrede endringer", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Tredjeparts filtre", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Bli her", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Mine filtre", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ignorer", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Mine regler", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Innstillinger", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Hviteliste", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filterlister", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Logg", - "description":"Title for the logger window" + "1pPageName": { + "message": "Mine filtre", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Om", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Mine regler", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Klikk: Deaktiver\/aktiver uBlock₀ for dette nettstedet.\n\nCtrl+klikk: Deaktiver uBlock₀ bare på denne siden.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Betrodde sider", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"forespørsler blokkert", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Snarveier", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"på denne siden", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Logg", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} eller {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Om", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"siden installering", - "description":"English: since install" + "supportPageName": { + "message": "Brukerstøtte", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"eller", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Ressursviser", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Klikk for å åpne dashbordet", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Avanserte innstillinger", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Åpne element-velgermodus", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Klikk: Deaktiver/aktiver uBlock₀ for dette nettstedet.\n\nCtrl+klikk: Deaktiver uBlock₀ bare på denne siden.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Åpne loggeren", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Klikk for å deaktivere uBlock₀ for dette nettstedet.\n\nCtrl+klikk for å deaktivere uBlock₀ bare på denne siden.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Slå av\/på blokkering av alle oppspretts-vinduer for dette nettstedet", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Klikk for å aktivere uBlock₀ for dette nettstedet.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Slå av\/på blokkering av store mediaelementer for dette nettstedet", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "forespørsler blokkert", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Slå av\/på kosmetisk filtrering for dette nettstedet", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "på denne siden", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Slå av\/på blokkering av eksterne skrifttyper for dette nettstedet", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Globale regler: Denne kolonnen er for regler som gjelder alle nettsteder.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "siden installering", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Lokale regler: Denne kolonnen er for regler som bare gjelder for det gjeldende nettstedet.\nLokale regler har prioritet foran globale regler.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "eller", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Klikk for å gjøre endringer permanente.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Blokkert på denne siden", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Klikk for å tilbakestille endringer.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Blokkert siden installering", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"alle", - "description":"" + "popupDomainsConnected_v2": { + "message": "Domener tilkoblet", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"bilder", - "description":"" + "popupTipDashboard": { + "message": "Åpne dashbordet", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"tredjepart", - "description":"" + "popupTipZapper": { + "message": "Gå til element­fjernings­modus", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"tredjeparts css\/bilder", - "description":"" + "popupTipPicker": { + "message": "Gå til element­velger­modus", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"integrerte skript", - "description":"" + "popupTipLog": { + "message": "Åpne loggen", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"førsteparts skript", - "description":"" + "popupTipReport": { + "message": "Rapporter om problem på dette nettstedet", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"tredjeparts skript", - "description":"" + "popupTipNoPopups": { + "message": "Slå av/på blokkering av alle oppspretts-vinduer for dette nettstedet", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"tredjeparts rammer", - "description":"" + "popupTipNoPopups1": { + "message": "Klikk for å blokkere alle oppspretts-vinduer på dette nettstedet", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"domener tilkoblet", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Klikk for å ikke lenger blokkere alle oppspretts-vinduer på dette nettstedet", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} av {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Slå av/på blokkering av store mediaelementer for dette nettstedet", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Opprett", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Klikk for å blokkere store mediaelementer på dette nettstedet", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Velg", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Klikk for å ikke lenger blokkere store mediaelementer på dette nettstedet", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Avslutt", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Slå av/på kosmetisk filtrering for dette nettstedet", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Forhåndsvis", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Klikk for å slå av kosmetisk filtrering på dette nettstedet", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Nettfiltre", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Klikk for å slå på kosmetisk filtrering på dette nettstedet", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Kosmetiske filtre", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Slå av/på blokkering av eksterne skrifttyper for dette nettstedet", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Klikk, Ctrl-klikk", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Klikk for å blokkere eksterne skrifttyper på dette nettstedet", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Blokker element", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Klikk for å ikke lenger blokkere eksterne skrifttyper på dette nettstedet", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Skjul blokkerte elementers plassholdere", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Klikk for å slå av JavaScript på dette nettstedet", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Vis antall blokkerte forespørsler på ikonet", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Klikk for å ikke lenger slå av JavaScript på dette nettstedet", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Deaktiver hjelpetekst (verktøytips)", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Oppspretts-vinduer", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Gjør bruk av høyreklikkmeny der det er hensiktsmessig", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Store media­elementer", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Fargeblind-vennlig", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Kosmetisk filtrering", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Aktiver støtte for nettlagring", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Eksterne skrifttyper", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Jeg er en avansert bruker (Nødvendig lesning<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Deaktiver forhåndshenting (for å hindre enhver tilkobling for blokkerte nettverksforespørsler)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Mer", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Deaktiver lenkesporing\/sporingsbilde", - "description":"English: " + "popupLessButton_v2": { + "message": "Mindre", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Hindre WebRTC i å lekke lokale IP-adresser", - "description":"English: " + "popupTipGlobalRules": { + "message": "Globale regler: Denne kolonnen er for regler som gjelder alle nettsteder.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Standard virkemåte", - "description":"" + "popupTipLocalRules": { + "message": "Lokale regler: Denne kolonnen er for regler som bare gjelder for det gjeldende nettstedet.\nLokale regler har prioritet foran globale regler.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Disse standard virkemåtene kan overstyres for hvert enkelt nettsted", - "description":"" + "popupTipSaveRules": { + "message": "Klikk for å gjøre endringer permanente.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Deaktiver kosmetisk filtrering", - "description":"" + "popupTipRevertRules": { + "message": "Klikk for å tilbakestille endringer.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Blokker mediaelementer større enn {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "alle", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blokker eksterne skrifttyper", - "description":"" + "popupImageRulePrompt": { + "message": "bilder", + "description": "" }, - "settingsStorageUsed":{ - "message":"Brukt lagringsplass: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "tredjepart", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Siste gjenoppretting:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "tredjeparts CSS/bilder", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Siste sikkerhetskopi:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "integrerte skript", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} nettverksfiltre + {{cosmeticFilterCount}} kosmetiske filtre fra:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "førsteparts skript", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} brukt av {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "tredjeparts skript", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Automatisk oppdatering av filterlister.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "tredjeparts rammer", + "description": "" }, - "3pUpdateNow":{ - "message":"Oppdater nå", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "domener tilkoblet", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Tøm alle hurtigbuffere", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} av {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Analyser og bruk kosmetiske filtre.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Versjon", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Dette alternativet aktiverer analyseringen og bruken av Adblock Plus-kompatible filtre for “elementskjuling”<\/a>. Disse filtrene er i hovedsak kosmetiske, de tjener den hensikt å skjule elementer i en nettside som anses for å være en visuell ulempe, og som ikke blokkeres av den nettforespørselsbaserte filtreringsmotoren.<\/p>

      Aktivering av denne funksjonen øker minnebruken til uBlock₀<\/i>.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "skript", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignorer generelle kosmetiske filtre.", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "ramme", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Generelle kosmetiske filtre er de kosmetiske filtrene som er ment å brukes på alle nettsteder.

      Selv om de håndteres effektivt av uBlock₀, kan generelle kosmetiske filtre likevel ende opp med å bidra til målbar ekstra minne- og prosessorbruk på noen nettsider, særlig de store og de som er åpne lenge.

      Aktivering av dette alternativet vil eliminere ekstra minne- og prosessorbruk på nettsider grunnet håndteringen av generelle kosmetiske filtre, og også redusere minnebruken til selve uBlock₀.

      Det anbefales å aktivere dette alternativet på mindre kraftige enheter.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Opprett", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lister over blokkerte verter", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Velg", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Bruk endringer", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Avslutt", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Reklame", - "description":"English: Ads" + "pickerPreview": { + "message": "Forhåndsvis", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Personvern", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Nettfiltre", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Domener med skadelig programvare", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Kosmetiske filtre", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Sosiale nettverk", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Klikk, Ctrl-klikk", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Multi-formål", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Blokker element…", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Regioner, språk", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Skjul blokkerte elementers plassholdere", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Egendefinert", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Vis antall blokkerte forespørsler på ikonet", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"En nettadresse per linje. Linjer med prefikset ‘!’ vil bli ignorert. Ugyldige nettadresser ignoreres stille.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Deaktiver hjelpetekst (verktøytips)", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Bruk", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Gjør bruk av høyreklikkmeny der det er hensiktsmessig", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"rens buffer", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Fargeblind-vennlig", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"ny versjon tilgjengelig", - "description":"English: new version available" + "settingsAppearance": { + "message": "Utseende", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"utgått på dato", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Tema", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Siste oppdatering: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Tilpasset aksentfarge", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Ett filter per linje. Et filter kan være et vanlig vertsnavn eller et Adblock Plus-kompatibelt filter. Linjer med prefikset ‘!’ vil bli ignorert.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Aktiver støtte for nettlagring", + "description": "" }, - "1pImport":{ - "message":"Importer og legg til", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Jeg er en avansert bruker", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Eksporter", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Deaktiver forhåndshenting (for å hindre enhver tilkobling for blokkerte nettverksforespørsler)", + "description": "English: " }, - "1pExportFilename":{ - "message":"mine-ublock-statiske-filtre_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Deaktiver lenkesporing", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Bruk endringer", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Hindre WebRTC i å lekke lokale IP-adresser", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Permanente regler", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Standard virkemåte", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Midlertidige regler", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Disse standard virkemåtene kan overstyres for hvert enkelt nettsted", + "description": "" }, - "rulesRevert":{ - "message":"Tilbakestill", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Deaktiver kosmetisk filtrering", + "description": "" }, - "rulesCommit":{ - "message":"Send", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Blokker mediaelementer større enn {{input}} KB", + "description": "" }, - "rulesEdit":{ - "message":"Rediger", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Blokker eksterne skrifttyper", + "description": "" }, - "rulesEditSave":{ - "message":"Lagre", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Deaktiver JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Forkast", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Blokker CSP-rapporter", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Importer fra fil", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "CNAME-avdekking", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Eksporter til fil", - "description":"" + "settingsAdvanced": { + "message": "Avansert", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"mine-ublock-dynamiske-regler_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Funksjoner kun egnet for tekniske brukere", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Liste over dine dynamiske filtreringsregler.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "Avanserte innstillinger", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Regelsyntaks: kilde destinasjon type handling<\/code> (full dokumentasjon<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Siste gjenoppretting:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Din liste over vertsnavn hvor uBlock₀ blir deaktivert. Én oppføring per linje. Ugyldige vertsnavn blir stille ignorert.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Siste sikkerhetskopi:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Importer og legg til", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} nettverksfiltre + {{cosmeticFilterCount}} kosmetiske filtre fra:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Eksporter", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} brukt av {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"min-ublock-hviteliste_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Automatisk oppdatering av filterlister", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Bruk endringer", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Oppdater nå", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Type", - "description":"English: Type" + "3pPurgeAll": { + "message": "Tøm alle hurtigbuffere", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Domene", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Analyser og bruk kosmetiske filtre", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"Nettadresse", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Kosmetiske filtre tjener den hensikt å skjule elementer i en nettside som anses for å være en visuell ulempe, og som ikke blokkeres av de nettverkforespørselsbaserte filtreringsmotorene.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignorer generelle kosmetiske filtre", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Alle", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Generelle kosmetiske filtre er de kosmetiske filtrene som er ment å brukes på alle nettsteder. Aktivering av dette alternativet vil eliminere ekstra minne- og prosessorbruk på nettsider grunnet håndteringen av generelle kosmetiske filtre.\n\nDet anbefales å aktivere dette alternativet på mindre kraftige enheter.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Bak kulissene", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Stans nettverksaktivitet inntil alle filterlister er lastet", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"filtrer loggoppføringer", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Maksimum antall loggoppføringer", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Bruk endringer", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Kontekst:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Innebygd", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Type:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Reklame", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Dynamisk adressefiltrering", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Personvern", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Statisk filtrering", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Beskyttelse mot skadelig programvare, sikkerhet", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} nettverksforespørsler av {{type}} {{br}}som matcher nettadressen {{url}} {{br}}og som stammer {{origin}},{{br}}{{importance}} det er et matchende unntaksfilter.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Sosiale moduler", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blokker", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Infokapselmeldinger", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Tillat", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Irritasjonsmomenter", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"type “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Multi-formål", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"enhver type", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Regioner, språk", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"fra “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Egendefinert", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"fra hvor som helst", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Importer…", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"unntatt når", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "En nettadresse per linje. Ugyldige nettadresser ignoreres stille.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"selv om", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Utgått på dato", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statisk filter {{filter}} funnet i:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "Vis innhold", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Endringslogg", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Siste oppdatering: {{ago}}.\nKlikk for å framtvinge en oppdatering.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Oppdaterer…", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Brukerstøtte", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "En nettverksfeil forhindret ressursen i å bli oppdatert.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Kildekode (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Ikke legg til filtre fra ikke-betrodde kilder.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Bidragsytere", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Aktiver mine egendefinerte filtre", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Sikkerhetskopier til fil", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Tillat egendefinerte filtre som krever tiltro", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"min-ublock-sikkerhetskopi_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Importer og legg til…", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Gjenopprett fra fil", - "description":"English: Restore from file..." + "1pExport": { + "message": "Eksporter…", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Tilbakestill til standardinnstillinger", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "mine-ublock-statiske-filtre_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Alle dine innstillinger vil bli overskrevet med data sikkerhetskopiert {{time}}, og uBlock₀ vil starte på nytt.\n\nOverskrive alle eksisterende innstillinger med sikkerhetskopierte data?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Bruk endringer", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Dataene kunne ikke leses eller er ugyldige", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Permanente regler", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Alle dine innstillinger blir fjernet, og uBlock₀ vil starte på nytt.\n\nTilbakestille uBlock₀ til opprinnelige innstillinger?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Midlertidige regler", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Kan ikke koble til {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Tilbakestill", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Legge til følgende nettadresse i din egendefinerte filterliste?\n\nTittel: \"{{title}}\"\nNettadresse: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Send", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"et minutt siden", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Rediger", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minutter siden", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Lagre", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"en time siden", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Forkast", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} timer siden", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Importer fra fil…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"en dag siden", - "description":"English: a day ago" + "rulesExport": { + "message": "Eksporter til fil…", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} dager siden", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "mine-ublock-dynamiske-regler_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Vis dashbord", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Liste over dine dynamiske filtreringsregler.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Vis loggeren", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Regelsyntaks: kilde destinasjon type handling (full dokumentasjon).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"av", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Sorter:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin har forhindret lasting av følgende side:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Regeltype", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"På grunn av følgende filter:", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Kilde", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"uten parametere", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Destinasjon", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Funnet i:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Direktivene for betrodde sider bestemmer hvilke nettsider uBlock Origin ikke skal være aktiv på. Én oppføring per linje.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Gå tilbake", - "description":"English: Go back" + "whitelistImport": { + "message": "Importer og legg til…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Lukk dette vinduet", - "description":"English: Close this window" + "whitelistExport": { + "message": "Eksporter…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Slå av streng (fullstendig) blokkering for {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "mine-ublock-betrodde-sider_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Midlertidig", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Bruk endringer", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Permanent", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Type", + "description": "English: Type" }, - "cloudPush":{ - "message":"Eksporter til nettlagring", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Domene", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Importer fra nettlagring", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "Nettadresse", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Importer fra nettlagring og slå sammen med gjeldende innstillinger", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Alle", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Denne enhets navn:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Faneløs", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Send", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Gjeldende fane", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Tilbakestill", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Last faneinnholdet på nytt", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"bytes", - "description":"" + "loggerDomInspectorTip": { + "message": "Slå av/på DOM-inspektør", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Tillat store mediaelementer midlertidig", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Slå av/på oppsprettspanelet", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: Loggen", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Tøm loggen", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Sett loggen i pausemodus (forkast alle innkommende data)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Gjenoppta logging", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Slå av/på loggfiltrering", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filtrer logginnhold", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Alternativer for loggfiltrering", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Ikke", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "hendelsesrik", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "blokkert", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "tillatt", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "endret", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "førstepart", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "tredjepart", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Detaljer", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filter", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Filterliste", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Regel", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Kontekst", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Rotkontekst", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Partsrelasjon", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Type", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "Nettadresse", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Nettadresseregel", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Kontekst:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Type:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Statisk filter", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} nettverksforespørsler av {{type}} {{br}}som matcher nettadressen {{url}} {{br}}og som stammer {{origin}},{{br}}{{importance}} det er et matchende unntaksfilter.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Blokker", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Tillat", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "type “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "enhver type", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "fra “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "fra hvor som helst", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "unntatt når", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "selv om", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Statisk filter {{filter}} funnet i:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Statisk filter ble ikke funnet i noen av filterlistene som er aktiverte nå", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Loggoppføringer som ikke oppfyller alle tre betingelser nedenfor blir automatisk forkastet:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Bevar oppføringer fra de siste {{input}} minuttene", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Bevar maksimalt {{input}} sideinnlastinger per fane", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Bevar maksimalt {{input}} oppføringer per fane", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Bruk {{input}} linjer per oppføring i vertikalt utvidet modus", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Skjul kolonner:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Tid", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filter/regel", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Kontekst", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Partsrelasjon", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Liste", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tabell", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Uformatert", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Åpne", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Opprett ny rapport på GitHub", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Finn lignende rapporter på GitHub", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Dokumentasjon", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Les dokumentasjonen på uBlock/wiki for å lære om alle uBlock Origins funksjoner.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Spørsmål og brukerstøtte", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Svar på spørsmål og andre typer hjelp er gitt på subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filterproblemer/nettside defekt", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Rapporter filterproblemer med bestemte nettsteder til uBlockOrigin/uAssets problemsporing. Krever en GitHub-konto.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Viktig: Unngå å bruke andre blokkerere med lignende formål sammen med uBlock Origin, da dette kan forårsake filterproblemer på bestemte nettsteder.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tips: Sørg for at filterlistene dine er oppdaterte. Loggen er primærverktøyet for å diagnostisere filterrelaterte problemer.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Feilrapport", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Rapporter problemer med selve uBlock Origin til uBlockOrigin/uBlock-issue problemsporing. Krever en GitHub-konto.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Problemløsingsinformasjon", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Nedenfor er teknisk informasjon som kan være nyttig når frivillige prøver å hjelpe deg med å løse et problem.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Rapporter om filterproblem", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "For å unngå å belaste de frivillige med dobbeltrapporter, må du kontrollere at problemet ikke allerede har blitt rapportert. Noter: ved å klikke på knappen vil sidens opprinnelse bli sendt til GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filterlister oppdateres daglig. Forsikre deg om at problemet ikke har blitt løst allerede i de nyeste filterlistene.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verifiser at problemet fremdeles eksisterer etter å ha lastet den problematiske nettsiden på nytt.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Nettsidens adresse:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Nettsiden…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Velg en type --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Viser reklame eller reklamerester", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Har overlegg eller andre ulemper", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detekterer uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Har personvernrelaterte problemer", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Fungerer ikke riktig når uBlock Origin er aktivert", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Åpner uønskede faner eller vinduer", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Fører til skadelig programvare og/eller phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Merk nettsiden som “NSFW” (“Not Safe For Work”) (advarsel mot sider med upassende innhold)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Personvernpraksis", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Endringslogg", + "description": "" + }, + "aboutCode": { + "message": "Kildekode (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Bidragsytere", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Kildekode", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Oversettelser", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Filterlister", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Eksterne avhengigheter (GPLv3-kompatible):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBlock Origins egne filterlister finnes fritt tilgjengelig hos følgende CDN-er:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "En tilfeldig valgt CDN blir brukt når en filterliste trenger å bli oppdatert.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Sikkerhetskopier til fil…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "min-ublock-sikkerhetskopi_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Gjenopprett fra fil…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Tilbakestill til standardinnstillinger…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Alle dine innstillinger vil bli overskrevet med data sikkerhetskopiert {{time}}, og uBlock₀ vil starte på nytt.\n\nOverskrive alle eksisterende innstillinger med sikkerhetskopierte data?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Dataene kunne ikke leses eller er ugyldige", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Alle dine innstillinger blir fjernet, og uBlock₀ vil starte på nytt.\n\nTilbakestille uBlock₀ til opprinnelige innstillinger?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Nettverksfeil: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Abonner", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "et minutt siden", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} minutter siden", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "en time siden", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} timer siden", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "en dag siden", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} dager siden", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Vis dashbord", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Vis logg", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "av", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Side blokkert", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin har forhindret lasting av følgende side:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "På grunn av følgende filter:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "uten parametere", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Funnet i:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Gå tilbake", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Lukk dette vinduet", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Ikke varsle igjen om dette nettstedet", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Slå av streng (fullstendig) blokkering for {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Midlertidig", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Permanent", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Fortsett", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Den blokkerte siden ønsker å omdirigere til et annet nettsted. Hvis du velger å fortsette, vil du navigere direkte til: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Grunn:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Ondsinnet", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Sporer", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Tvilsom", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Eksporter til nettlagring", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importer fra nettlagring", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importer fra nettlagring og slå sammen med gjeldende innstillinger", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Denne enhets navn:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Advarsel! Endringer av de avanserte innstillingene skjer på eget ansvar.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Send", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Bruk endringer", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Tilbakestill", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Blokker element i ramme…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Abonner på filterliste…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Tillat store mediaelementer midlertidig", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Vis kildekode…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Oppfør en snarvei", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Slå av/på låst rulling", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Kopier til utklippstavle", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Merk alt", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Slå av/på kosmetisk filtrering", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Slå av/på JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Lemp på blokkeringsmodus", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Brukt lagringsplass: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Klikk for å laste", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Feil: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Kan ikke filtrere riktig ved nettleseroppstart. Last siden på nytt for å sikre riktig filtrering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/nl/messages.json b/src/_locales/nl/messages.json index 8e22d3f70197c..6d19c6595e395 100644 --- a/src/_locales/nl/messages.json +++ b/src/_locales/nl/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Eindelijk, een efficiënte adblocker. Gebruikt weinig processorkracht en geheugen.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Eindelijk, een efficiënte blokker. Gebruikt weinig processorkracht en geheugen.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ – Dashboard", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ – Dashboard", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Instellingen", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Waarschuwing: niet-opgeslagen wijzigingen!", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Filters van derden", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Hier blijven", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Mijn filters", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Negeren", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Mijn regels", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Instellingen", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Whitelist", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filterlijsten", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ – Logger", - "description":"Title for the logger window" + "1pPageName": { + "message": "Mijn filters", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Over", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Mijn regels", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Klikken: uBlock₀ voor deze website in- of uitschakelen.\n\nCtrl+klikken: uBlock₀ alleen voor deze pagina uitschakelen.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Vertrouwde websites", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"geblokkeerde aanvragen", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Sneltoetsen", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"op deze pagina", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ – Logger", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} of {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Over", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"sinds installatie", - "description":"English: since install" + "supportPageName": { + "message": "Ondersteuning", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"of", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ – Middelenviewer", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Klik om het dashboard te openen", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Geavanceerde instellingen", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Elementkiezermodus openen", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Klikken: uBlock₀ voor deze website in- of uitschakelen.\n\nCtrl+klikken: uBlock₀ alleen voor deze pagina uitschakelen.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Logger openen", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Klik om uBlock₀ voor deze website uit te schakelen.\n\nCtrl+klik om uBlock₀ alleen op deze pagina uit te schakelen.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Alle pop-ups voor deze website in-\/uitschakelen", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Klik om uBlock₀ voor deze website in te schakelen.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Grote media-elementen voor deze website in-\/uitschakelen", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "geblokkeerde aanvragen", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Cosmetische filters voor deze website in-\/uitschakelen", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "op deze pagina", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Blokkeren van externe lettertypen voor deze website in-\/uitschakelen", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Algemene regels: deze kolom is voor regels die op alle websites van toepassing zijn.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "sinds installatie", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Lokale regels: deze kolom is voor regels die alleen op de huidige website van toepassing zijn.\nLokale regels hebben voorrang op algemene regels.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "of", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Klik om uw wijzigingen permanent te maken.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Geblokkeerd op deze pagina", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Klik om uw wijzigingen ongedaan te maken.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Geblokkeerd sinds installatie", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"alles", - "description":"" + "popupDomainsConnected_v2": { + "message": "Verbonden domeinen", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"afbeeldingen", - "description":"" + "popupTipDashboard": { + "message": "Dashboard openen", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"van derden", - "description":"" + "popupTipZapper": { + "message": "Element­wisser­modus openen", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"css\/afbeeldingen van derden", - "description":"" + "popupTipPicker": { + "message": "Element­kiezer­modus openen", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"inline scripts", - "description":"" + "popupTipLog": { + "message": "Logger openen", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"scripts van de webpagina", - "description":"" + "popupTipReport": { + "message": "Een probleem op deze website melden", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"scripts van derden", - "description":"" + "popupTipNoPopups": { + "message": "Alle pop-ups voor deze website in-/uitschakelen", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"frames van derden", - "description":"" + "popupTipNoPopups1": { + "message": "Klik om alle pop-ups op deze website te blokkeren", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"verbonden domeinen", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Klik om alle pop-ups op deze website niet meer te blokkeren", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} van {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Grote media-elementen voor deze website in-/uitschakelen", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Aanmaken", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Klik om grote media-elementen op deze website te blokkeren", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Kiezen", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Klik om grote media-elementen op deze website niet meer te blokkeren", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Afsluiten", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Cosmetische filters voor deze website in-/uitschakelen", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Voorbeeld", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Klik om cosmetische filters op deze website uit te schakelen", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Netwerkfilters", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Klik om cosmetische filters op deze website in te schakelen", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Cosmetische filters", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Blokkeren van externe lettertypen voor deze website in-/uitschakelen", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Klik, Ctrl-klik", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Klik om externe lettertypen op deze website te blokkeren", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Element blokkeren", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Klik om externe lettertypen op deze website niet meer te blokkeren", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Tijdelijke aanduidingen van geblokkeerde elementen verbergen", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Klik om JavaScript op deze website uit te schakelen", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Het aantal geblokkeerde aanvragen op het pictogram tonen", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Klik om JavaScript op deze website niet meer uit te schakelen", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Tooltips uitschakelen", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Pop-upvensters", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Waar mogelijk gebruikmaken van het contextmenu", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Grote media-elementen", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Vriendelijk voor kleurenblinden", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Cosmetische filters", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Ondersteuning voor cloudopslag inschakelen", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Externe lettertypen", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Ik ben een ervaren gebruiker (Lees dit eerst<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Vooraf ophalen uitschakelen (om verbindingen voor geblokkeerde netwerkaanvragen te voorkomen)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Meer", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Hyperlink auditing uitschakelen", - "description":"English: " + "popupLessButton_v2": { + "message": "Minder", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Het lekken van lokale IP-adressen via WebRTC voorkomen", - "description":"English: " + "popupTipGlobalRules": { + "message": "Algemene regels: deze kolom is voor regels die op alle websites van toepassing zijn.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Standaardgedrag", - "description":"" + "popupTipLocalRules": { + "message": "Lokale regels: deze kolom is voor regels die alleen op de huidige website van toepassing zijn.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Van deze standaardgedragingen kan per website worden afgeweken", - "description":"" + "popupTipSaveRules": { + "message": "Klik om uw wijzigingen permanent te maken.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Cosmetische filters uitschakelen", - "description":"" + "popupTipRevertRules": { + "message": "Klik om uw wijzigingen ongedaan te maken.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Media-elementen groter dan {{input:number}} kB blokkeren", - "description":"" + "popupAnyRulePrompt": { + "message": "alles", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Externe lettertypen blokkeren", - "description":"" + "popupImageRulePrompt": { + "message": "afbeeldingen", + "description": "" }, - "settingsStorageUsed":{ - "message":"Gebruikte opslagruimte: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "van derden", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Laatste terugzetactie:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "CSS/afbeeldingen van derden", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Laatste back-up:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "inline scripts", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} netwerkfilters + {{cosmeticFilterCount}} cosmetische filters van:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "scripts van de webpagina", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} van {{total}} gebruikt", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "scripts van derden", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Filterlijsten automatisch bijwerken", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "frames van derden", + "description": "" }, - "3pUpdateNow":{ - "message":"Nu bijwerken", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "verbonden domeinen", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Alle caches legen", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} van {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Cosmetische filters inlezen en toepassen", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Versie", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Deze optie schakelt het inlezen en toepassen van Adblock Plus-compatibele ‘elementverbergende’ filters<\/a> in. Deze filters zijn puur cosmetisch; ze verbergen elementen in de webpagina die visueel storend kunnen zijn en niet door de op netwerkaanvragen gebaseerde filterengine kunnen worden geblokkeerd.<\/p>

      Het inschakelen van deze functie verhoogt het geheugengebruik van uBlock₀.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Algemene cosmetische filters negeren", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "frame", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Algemene cosmetische filters zijn die cosmetische filters die zijn bedoeld om op alle websites te worden toegepast.

      Hoewel ze efficiënt door uBlock₀ worden verwerkt, kunnen algemene cosmetische filters op sommige webpagina’s toch bijdragen aan meetbare geheugen- en cpu-overhead, met name op grote pagina’s en die met een lange levensduur.

      Het inschakelen van deze optie elimineert de aan webpagina’s toegevoegde geheugen- en cpu-overhead als gevolg van het verwerken van algemene cosmetische filters, en verlaagt tevens het geheugengebruik van uBlock₀ zelf.

      Het wordt aanbevolen deze optie op minder krachtige apparaten in te schakelen.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Aanmaken", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lijst van geblokkeerde hosts", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Kiezen", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Wijzigingen toepassen", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Afsluiten", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Advertenties", - "description":"English: Ads" + "pickerPreview": { + "message": "Voorbeeld", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Privacy", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Netwerkfilters", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Malwaredomeinen", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Cosmetische filters", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Sociaal", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Klik, Ctrl-klik", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Multifunctioneel", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Element blokkeren…", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Gebieden, talen", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Aanduidingen van geblokkeerde elementen verbergen", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Aangepast", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Het aantal geblokkeerde aanvragen op het pictogram tonen", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Eén URL per regel. Regels beginnend met ‘!’ worden genegeerd. Ongeldige URL’s worden zonder mededeling genegeerd.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Tooltips uitschakelen", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Toepassen", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Contextmenu gebruiken waar mogelijk", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"cache legen", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Vriendelijk voor kleurenblinden", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"nieuwe versie beschikbaar", - "description":"English: new version available" + "settingsAppearance": { + "message": "Vormgeving", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"verouderd", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Thema", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Laatste update: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Aangepaste accentkleur", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Eén filter per regel. Een filter kan een gewone hostnaam of een Adblock Plus-compatibel filter zijn. Regels beginnend met ‘!’ worden genegeerd.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Ondersteuning voor cloudopslag inschakelen", + "description": "" }, - "1pImport":{ - "message":"Importeren en toevoegen", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Ik ben een ervaren gebruiker", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Exporteren", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Vooraf ophalen uitschakelen (om verbindingen voor geblokkeerde netwerkaanvragen te voorkomen)", + "description": "English: " }, - "1pExportFilename":{ - "message":"mijn-ublock-statische-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Hyperlink auditing uitschakelen", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Wijzigingen toepassen", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Het lekken van lokale IP-adressen via WebRTC voorkomen", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Permanente regels", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Standaardgedrag", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Tijdelijke regels", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Van deze standaardgedragingen kan per website worden afgeweken", + "description": "" }, - "rulesRevert":{ - "message":"Terugzetten", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Cosmetische filters uitschakelen", + "description": "" }, - "rulesCommit":{ - "message":"Vastleggen", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Media-elementen groter dan {{input}} KB blokkeren", + "description": "" }, - "rulesEdit":{ - "message":"Bewerken", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Externe lettertypen blokkeren", + "description": "" }, - "rulesEditSave":{ - "message":"Opslaan", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "JavaScript uitschakelen", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Annuleren", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "CSP-rapporten blokkeren", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Importeren uit bestand...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Canonieke namen onthullen", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Exporteren naar bestand...", - "description":"" + "settingsAdvanced": { + "message": "Geavanceerd", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"mijn-ublock-dynamische-regels_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Alleen voor technische gebruikers geschikte functies", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Lijst van uw dynamische filterregels.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "geavanceerde instellingen", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Regelsyntaxis: bron bestemming type actie<\/code> (volledige documentatie<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Laatste terugzetactie:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Uw lijst van hostnamen waarvoor uBlock₀ wordt uitgeschakeld. Eén vermelding per regel. Ongeldige hostnamen worden zonder mededeling genegeerd.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Laatste back-up:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Importeren en toevoegen", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} netwerkfilters + {{cosmeticFilterCount}} cosmetische filters van:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Exporteren", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} van de {{total}} gebruikt", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"mijn-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Filterlijsten automatisch bijwerken", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Wijzigingen toepassen", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Nu bijwerken", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Type", - "description":"English: Type" + "3pPurgeAll": { + "message": "Alle caches legen", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Domein", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Cosmetische filters inlezen en toepassen", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Cosmetische filters dienen voor het verbergen van elementen in een webpagina die visueel storend kunnen zijn en niet door de op netwerkaanvragen gebaseerde filter-engines kunnen worden geblokkeerd.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Algemene cosmetische filters negeren", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Alles", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Algemene cosmetische filters zijn die cosmetische filters die zijn bedoeld om op alle websites te worden toegepast. Het inschakelen van deze optie elimineert de aan webpagina’s toegevoegde geheugen- en cpu-overhead als gevolg van het verwerken van algemene cosmetische filters.\n\nHet wordt aanbevolen deze optie op minder krachtige apparaten in te schakelen.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Achter de schermen", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Netwerkactiviteit onderbreken totdat alle filterlijsten zijn geladen", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"logboekvermeldingen filteren", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Lijst van geblokkeerde hosts", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Maximale aantal logboekvermeldingen", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Wijzigingen toepassen", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Context:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Ingebouwd", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Soort:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Advertenties", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Dynamische URL-filtering", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Privacy", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Statische filtering", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Bescherming tegen malware, beveiliging", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"Netwerkaanvragen van {{type}} {{action}}{{br}}waarvan de URL overeenkomt met {{url}} {{br}}en die {{origin}} afkomstig zijn,{{br}}{{importance}} er een overeenkomstig uitzonderingsfilter bestaat.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Sociale widgets", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blokkeren", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Cookiemeldingen", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Toestaan", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Storende elementen", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"type ‘{{type}}’", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Multifunctioneel", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"elk type", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Gebieden, talen", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"van ‘{{origin}}’", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Aangepast", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"van overal", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Importeren…", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"behalve wanneer", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Eén URL per regel. Ongeldige URL’s worden zonder mededeling genegeerd.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"zelfs als", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Verouderd.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statisch filter {{filter}} gevonden in:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "inhoud weergeven", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Wijzigingenlogboek", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Laatst bijgewerkt: {{ago}}.\nKlik om een update af te dwingen.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Bijwerken…", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Ondersteuning", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Een netwerkfout heeft voorkomen dat de bron werd bijgewerkt.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Broncode (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Voeg geen filters van niet-vertrouwde bronnen toe.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Medewerkers", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Mijn aangepaste filters inschakelen", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Back-up maken naar bestand...", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Aangepaste filters die vertrouwen vereisen toestaan", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"mijn-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Importeren en toevoegen…", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Terugzetten uit bestand...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Exporteren…", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Standaardinstellingen terugzetten...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "mijn-ublock-statische-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Al uw instellingen zullen met back-upgegevens van {{time}} worden overschreven, en uBlock₀ zal worden herstart.\n\nWilt u alle bestaande instellingen met back-upgegevens overschrijven?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Wijzigingen toepassen", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"De gegevens konden niet worden gelezen of zijn ongeldig", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Permanente regels", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Al uw instellingen zullen worden verwijderd, waarna uBlock₀ wordt herstart.\n\nStandaardwaarden van uBlock₀ terugzetten?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Tijdelijke regels", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Kan niet verbinden met {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Terugzetten", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: de volgende URL aan uw lijsten met aangepaste filters toevoegen?\n\nTitel: ‘{{title}}’\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Vastleggen", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"een minuut geleden", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Bewerken", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minuten geleden", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Opslaan", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"een uur geleden", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Annuleren", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} uur geleden", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Importeren uit bestand…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"een dag geleden", - "description":"English: a day ago" + "rulesExport": { + "message": "Exporteren naar bestand…", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} dagen geleden", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "mijn-ublock-dynamische-regels_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Dashboard tonen", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Lijst van uw dynamische filterregels.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Logger tonen", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Regelsyntaxis: bron bestemming type actie (volledige documentatie).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"uitgeschakeld", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Sorteren:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock₀ heeft het laden van de volgende pagina voorkomen:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Regeltype", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Vanwege het volgende filter", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Bron", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"zonder parameters", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Bestemming", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Gevonden in:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "De vertrouwde-website-instructies schrijven voor op welke webpagina’s uBlock Origin dient te worden uitgeschakeld. Eén vermelding per regel.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Teruggaan", - "description":"English: Go back" + "whitelistImport": { + "message": "Importeren en toevoegen…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Dit venster sluiten", - "description":"English: Close this window" + "whitelistExport": { + "message": "Exporteren…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Strenge blokkering voor {{hostname}} uitschakelen", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "mijn-ublock-vertrouwde-websites_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Tijdelijk", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Wijzigingen toepassen", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Permanent", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Type", + "description": "English: Type" }, - "cloudPush":{ - "message":"Exporteren naar cloudopslag", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Domein", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Importeren uit cloudopslag", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Importeren uit cloudopslag en samenvoegen met huidige instellingen", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"... \n...", - "description":"" + "logAll": { + "message": "Alles", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Apparaatnaam:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Achter de schermen", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Verzenden", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Huidige tabblad", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Ongedaan maken", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "De tabbladinhoud vernieuwen", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"bytes", - "description":"" + "loggerDomInspectorTip": { + "message": "De DOM-inspector in-/uitschakelen", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Grote media-elementen tijdelijk toestaan", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Het pop-uppaneel in-/uitschakelen", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin-wiki: de logger", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Logger wissen", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Logger pauzeren (alle inkomende gegevens negeren)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Logger hervatten", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Loggerfiltering in-/uitschakelen", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "loggerinhoud filteren", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Opties voor loggerfiltering", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Niet", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "belangrijk", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "geblokkeerd", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "toegestaan", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "aangepast", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "huidige domein", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "van derden", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Details", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filter", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Filterlijst", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Regel", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Context", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Hoofdcontext", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "1e/3e partij", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Type", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL-regel", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Context:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Type:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Statisch filter", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "Netwerkaanvragen van {{type}} {{action}}{{br}}waarvan de URL overeenkomt met {{url}} {{br}}en die {{origin}} afkomstig zijn,{{br}}{{importance}} er een overeenkomstig uitzonderingsfilter bestaat.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "blokkeren", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "toestaan", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "type ‘{{type}}’", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "alle typen", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "van ‘{{origin}}’", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "van overal", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "behalve wanneer", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "zelfs als", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Statisch filter {{filter}} gevonden in:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Statisch filter kon niet in een van de momenteel ingeschakelde filterlijsten worden gevonden", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Loggervermeldingen die niet aan alle drie de onderstaande voorwaarden voldoen, worden automatisch genegeerd:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Vermeldingen van de laatste {{input}} minuten behouden", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Maximaal {{input}} paginalaadacties per tabblad behouden", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Maximaal {{input}} vermeldingen per tabblad behouden", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "{{input}} regels per vermelding in verticaal uitgevouwen modus gebruiken", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Kolommen verbergen:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Tijd", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filter/regel", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Context", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} 1e/3e partij", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Lijst", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tabel", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Plat", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Openen", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Nieuwe melding op GitHub maken", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Soortgelijke meldingen op GitHub zoeken", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Documentatie", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Lees de documentatie op uBlock/wiki voor meer info over alle functies van uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Vragen en ondersteuning", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Antwoorden op vragen en andere soorten ondersteuning worden geleverd op de subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filterproblemen/website werkt niet", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Meld filterproblemen met specifieke websites in de uBlockOrigin/uAssets-probleemtracker. Vereist een GitHub-account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Belangrijk: vermijd het gebruik van andere blokkers voor dezelfde doeleinden in combinatie met uBlock Origin, omdat dit op bepaalde websites problemen kan geven.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tips: zorg ervoor dat uw filterlijsten up-to-date zijn. De logger is het primaire hulpmiddel voor het analyseren van filtergerelateerde problemen.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Bugmelding", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Meld problemen met uBlock Origin zelf in de uBlockOrigin/uBlock-issue-probleemtracker. Vereist een GitHub-account.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Probleemoplossingsinformatie", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Hieronder bevindt zich technische informatie die handig kan zijn wanneer vrijwilligers u proberen te helpen bij het oplossen van een probleem.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Een filterprobleem melden", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Controleer of het probleem niet eerder is gemeld om te voorkomen dat vrijwilligers met dubbele meldingen worden belast. Noot: op de knop klikken zorgt ervoor dat de oorsprong van de pagina naar GitHub wordt verzonden.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filterlijsten worden dagelijks bijgewerkt. Controleer of uw probleem niet al in de meest recente filterlijsten is verholpen.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Controleer of het probleem nog steeds bestaat na vernieuwen van de problematische webpagina.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Adres van de webpagina:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "De webpagina…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Maak een keuze --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Toont advertenties of restanten", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Heeft overlappingen of andere ongemakken", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detecteert uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Heeft privacy-gerelateerde problemen", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Werkt niet als uBlock Origin is ingeschakeld", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opent ongewenste tabbladen of vensters", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leidt tot badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "De webpagina labelen als ‘NSFW’ (‘Not Safe For Work’)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Privacybeleid", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Wijzigingenlogboek", + "description": "" + }, + "aboutCode": { + "message": "Broncode (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Medewerkers", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Broncode", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Vertalingen", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Filterlijsten", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Externe afhankelijkheden (GPLv3-compatibel):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO’s eigen filterlijsten zijn gratis beschikbaar op de volgende CDN’s:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Als een filterlijst moet worden bijgewerkt, wordt een willekeurig gekozen CDN gebruikt.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Back-up maken naar bestand…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "mijn-ublock-back-up_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Terugzetten uit bestand…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Standaardinstellingen terugzetten…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Al uw instellingen zullen met back-upgegevens van {{time}} worden overschreven, en uBlock₀ zal worden herstart.\n\nWilt u alle bestaande instellingen met back-upgegevens overschrijven?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "De gegevens konden niet worden gelezen of zijn ongeldig", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Al uw instellingen zullen worden verwijderd, waarna uBlock₀ wordt herstart.\n\nStandaardinstellingen van uBlock₀ terugzetten?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Netwerkfout: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Abonneren", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "een minuut geleden", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} minuten geleden", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "een uur geleden", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} uur geleden", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "een dag geleden", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} dagen geleden", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Dashboard tonen", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Logger tonen", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "uitgeschakeld", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Pagina geblokkeerd", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin heeft het laden van de volgende pagina voorkomen:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Dit is gebeurd vanwege het volgende filter:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "zonder parameters", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Gevonden in:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Teruggaan", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Dit venster sluiten", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Mij niet meer waarschuwen over deze website", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Strenge blokkering voor {{hostname}} uitschakelen", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Tijdelijk", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Permanent", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Doorgaan", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "De geblokkeerde pagina wil u omleiden naar een andere website. Als u doorgaat, navigeert u rechtstreeks naar: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reden:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "kwaadwillend", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "berucht", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Exporteren naar cloudopslag", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importeren uit cloudopslag", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importeren uit cloudopslag en samenvoegen met huidige instellingen", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Naam van dit apparaat:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Waarschuwing! Wijzig deze geavanceerde instellingen op eigen risico.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Verzenden", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Wijzigingen toepassen", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Ongedaan maken", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Element in deelvenster blokkeren…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Abonneren op filterlijst…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Grote media-elementen tijdelijk toestaan", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Broncode weergeven…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Typ een sneltoets", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Vergrendeld scrollen in-/uitschakelen", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Kopiëren naar klembord", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Alles selecteren", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Cosmetische filters in-/uitschakelen", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "JavaScript in-/uitschakelen", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Blokkeringsmodus beperken", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Gebruikte opslagruimte: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Klik om te laden", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Fouten: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Kon niet goed filteren bij het starten van de browser. Vernieuw de pagina voor een juiste filtering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/oc/messages.json b/src/_locales/oc/messages.json new file mode 100644 index 0000000000000..e5000b4eda483 --- /dev/null +++ b/src/_locales/oc/messages.json @@ -0,0 +1,1314 @@ +{ + "extName": { + "message": "uBlock Origin", + "description": "extension name." + }, + "extShortDesc": { + "message": "Enfin un blocador eficaç. Sollicita pauc lo CPU e la memòria", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "dashboardName": { + "message": "uBlock₀ — Tablèu de bòrd", + "description": "English: uBlock₀ — Dashboard" + }, + "dashboardUnsavedWarning": { + "message": "Atencion ! Avètz de modificacions pas enregistradas", + "description": "A warning in the dashboard when navigating away from unsaved changes" + }, + "dashboardUnsavedWarningStay": { + "message": "Demorar", + "description": "Label for button to prevent navigating away from unsaved changes" + }, + "dashboardUnsavedWarningIgnore": { + "message": "Ignorar", + "description": "Label for button to ignore unsaved changes" + }, + "settingsPageName": { + "message": "Paramètres", + "description": "appears as tab name in dashboard" + }, + "3pPageName": { + "message": "Listas de filtre", + "description": "appears as tab name in dashboard" + }, + "1pPageName": { + "message": "Mos filtres", + "description": "appears as tab name in dashboard" + }, + "rulesPageName": { + "message": "Mas règlas", + "description": "appears as tab name in dashboard" + }, + "whitelistPageName": { + "message": "Lista blanca", + "description": "appears as tab name in dashboard" + }, + "shortcutsPageName": { + "message": "Acorchis", + "description": "appears as tab name in dashboard" + }, + "statsPageName": { + "message": "uBlock₀ — Jornals d’eveniments", + "description": "Title for the logger window" + }, + "aboutPageName": { + "message": "A prepaus", + "description": "appears as tab name in dashboard" + }, + "supportPageName": { + "message": "Assisténcia", + "description": "appears as tab name in dashboard" + }, + "assetViewerPageName": { + "message": "uBlock₀ — Visualizaira d’elements", + "description": "Title for the asset viewer page" + }, + "advancedSettingsPageName": { + "message": "Paramètres avançats", + "description": "Title for the advanced settings page" + }, + "popupPowerSwitchInfo": { + "message": "Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + }, + "popupPowerSwitchInfo1": { + "message": "Clicatz per desactivar uBlock₀ per aqueste site\n\nCtrl+Clic per desactivar uBlock₀ sonque per aquesta pagina", + "description": "Message to be read by screen readers" + }, + "popupPowerSwitchInfo2": { + "message": "Clicatz per activar uBlock₀ per aqueste site", + "description": "Message to be read by screen readers" + }, + "popupBlockedRequestPrompt": { + "message": "requèstas blocadas", + "description": "English: requests blocked" + }, + "popupBlockedOnThisPagePrompt": { + "message": "sus aquesta pagina", + "description": "English: on this page" + }, + "popupBlockedStats": { + "message": "{{count}} o {{percent}}%", + "description": "Example: 15 (13%)" + }, + "popupBlockedSinceInstallPrompt": { + "message": "dempuèi l’installacion", + "description": "English: since install" + }, + "popupOr": { + "message": "o", + "description": "English: or" + }, + "popupBlockedOnThisPage_v2": { + "message": "Blocats sus aquesta pagina", + "description": "For the new mobile-friendly popup design" + }, + "popupBlockedSinceInstall_v2": { + "message": "Blocats dempuèi l’installacion", + "description": "For the new mobile-friendly popup design" + }, + "popupDomainsConnected_v2": { + "message": "Domenis connectats", + "description": "For the new mobile-friendly popup design" + }, + "popupTipDashboard": { + "message": "Dobrir lo tablèu de bòrd", + "description": "English: Click to open the dashboard" + }, + "popupTipZapper": { + "message": "Passar en mòde Eliminador", + "description": "Tooltip for the element-zapper icon in the popup panel" + }, + "popupTipPicker": { + "message": "Passar en mòde Selector", + "description": "English: Enter element picker mode" + }, + "popupTipLog": { + "message": "Dobrir la visualizaira d’eveniments", + "description": "Tooltip used for the logger icon in the panel" + }, + "popupTipReport": { + "message": "Senhalar un problèma amb aqueste site web", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipNoPopups": { + "message": "Toggle the blocking of all popups for this site", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups1": { + "message": "Clicatz per blocar las fenèstras sorgissentas d’aqueste site", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2": { + "message": "Clicatz per blocar pas mai las fenèstras sorgissentas d’aqueste site", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoLargeMedia": { + "message": "Toggle the blocking of large media elements for this site", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia1": { + "message": "Clicatz per blocar los mèdias de granda talha d’aqueste site", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2": { + "message": "Clicatz per blocar pas mai los mèdias de granda talha d’aqueste site", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoCosmeticFiltering": { + "message": "Toggle cosmetic filtering for this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering1": { + "message": "Click to disable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2": { + "message": "Click to enable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoRemoteFonts": { + "message": "Toggle the blocking of remote fonts for this site", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts1": { + "message": "Clicatz per blocar las poliças distantas d’aqueste site", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts2": { + "message": "Clicatz per blocar pas mai las poliças distantas d’aqueste site", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoScripting1": { + "message": "Clicatz per desactivar JavaScript sus aqueste site", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupTipNoScripting2": { + "message": "Clicatz per quitar de desactivar JavaScript sus aqueste site", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupNoPopups_v2": { + "message": "Fenèstras sorgissentas", + "description": "Caption for the no-popups per-site switch" + }, + "popupNoLargeMedia_v2": { + "message": "Mèdias de granda talha", + "description": "Caption for the no-large-media per-site switch" + }, + "popupNoCosmeticFiltering_v2": { + "message": "Filtres cosmetics", + "description": "Caption for the no-cosmetic-filtering per-site switch" + }, + "popupNoRemoteFonts_v2": { + "message": "Poliças distantas", + "description": "Caption for the no-remote-fonts per-site switch" + }, + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" + }, + "popupMoreButton_v2": { + "message": "Mai", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton_v2": { + "message": "Mens", + "description": "Label to be used to hide popup panel sections" + }, + "popupTipGlobalRules": { + "message": "Global rules: this column is for rules which apply to all sites.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." + }, + "popupTipLocalRules": { + "message": "Local rules: this column is for rules which apply to the current site only.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." + }, + "popupTipSaveRules": { + "message": "Click to make your changes permanent.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." + }, + "popupTipRevertRules": { + "message": "Click to revert your changes.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + }, + "popupAnyRulePrompt": { + "message": "totes", + "description": "" + }, + "popupImageRulePrompt": { + "message": "imatges", + "description": "" + }, + "popup3pAnyRulePrompt": { + "message": "Tèrça partida", + "description": "" + }, + "popup3pPassiveRulePrompt": { + "message": "3rd-party CSS/images", + "description": "" + }, + "popupInlineScriptRulePrompt": { + "message": "scripts en una linha", + "description": "" + }, + "popup1pScriptRulePrompt": { + "message": "1st-party scripts", + "description": "" + }, + "popup3pScriptRulePrompt": { + "message": "3rd-party scripts", + "description": "" + }, + "popup3pFrameRulePrompt": { + "message": "3rd-party frames", + "description": "" + }, + "popupHitDomainCountPrompt": { + "message": "domenis connectats", + "description": "appears in popup" + }, + "popupHitDomainCount": { + "message": "{{count}} de {{total}}", + "description": "appears in popup" + }, + "popupVersion": { + "message": "Version", + "description": "Example of use: Version 1.26.4" + }, + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" + }, + "popup3pFrameFilter": { + "message": "frame", + "description": "Appears as an option to filter out firewall rows" + }, + "pickerCreate": { + "message": "Crear", + "description": "English: Create" + }, + "pickerPick": { + "message": "Causir", + "description": "English: Pick" + }, + "pickerQuit": { + "message": "Quitar", + "description": "English: Quit" + }, + "pickerPreview": { + "message": "Apercebut", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + }, + "pickerNetFilters": { + "message": "Filtres ret", + "description": "English: header for a type of filter in the element picker dialog" + }, + "pickerCosmeticFilters": { + "message": "Filtres cosmetics", + "description": "English: Cosmetic filters" + }, + "pickerCosmeticFiltersHint": { + "message": "Click, Ctrl-click", + "description": "English: Click, Ctrl-click" + }, + "pickerContextMenuEntry": { + "message": "Blocar un element...", + "description": "An entry in the browser's contextual menu" + }, + "settingsCollapseBlockedPrompt": { + "message": "Hide placeholders of blocked elements", + "description": "English: Hide placeholders of blocked elements" + }, + "settingsIconBadgePrompt": { + "message": "Show the number of blocked requests on the icon", + "description": "English: Show the number of blocked requests on the icon" + }, + "settingsTooltipsPrompt": { + "message": "Disable tooltips", + "description": "A checkbox in the Settings pane" + }, + "settingsContextMenuPrompt": { + "message": "Make use of context menu where appropriate", + "description": "English: Make use of context menu where appropriate" + }, + "settingsColorBlindPrompt": { + "message": "De bon usar pels daltonians", + "description": "English: Color-blind friendly" + }, + "settingsAppearance": { + "message": "Aparéncia", + "description": "Section for controlling user interface appearance" + }, + "settingsThemeLabel": { + "message": "Tèmas", + "description": "Label for checkbox to enable a custom dark theme" + }, + "settingsThemeAccent0Label": { + "message": "Personalizar la color afortida", + "description": "Label for checkbox to pick an accent color" + }, + "settingsCloudStorageEnabledPrompt": { + "message": "Enable cloud storage support", + "description": "" + }, + "settingsAdvancedUserPrompt": { + "message": "Soi un-a utilizaire-a avandat-ada", + "description": "Checkbox to let user access advanced, technical features" + }, + "settingsPrefetchingDisabledPrompt": { + "message": "Disable pre-fetching (to prevent any connection for blocked network requests)", + "description": "English: " + }, + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Disable hyperlink auditing", + "description": "English: " + }, + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Prevent WebRTC from leaking local IP addresses", + "description": "English: " + }, + "settingPerSiteSwitchGroup": { + "message": "Compòrtament per defaut", + "description": "" + }, + "settingPerSiteSwitchGroupSynopsis": { + "message": "These default behaviors can be overridden on a per-site basis", + "description": "" + }, + "settingsNoCosmeticFilteringPrompt": { + "message": "Disable cosmetic filtering", + "description": "" + }, + "settingsNoLargeMediaPrompt": { + "message": "Block media elements larger than {{input}} KB", + "description": "" + }, + "settingsNoRemoteFontsPrompt": { + "message": "Blocar las poliças distantas", + "description": "" + }, + "settingsNoScriptingPrompt": { + "message": "Desactivar JavaScript", + "description": "The default state for the per-site no-scripting switch" + }, + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" + }, + "settingsUncloakCnamePrompt": { + "message": "Uncloak canonical names", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" + }, + "settingsAdvanced": { + "message": "Avançat", + "description": "Section for controlling advanced-user settings" + }, + "settingsAdvancedSynopsis": { + "message": "Features suitable only for technical users", + "description": "Description of section controlling advanced-user settings" + }, + "settingsAdvancedUserSettings": { + "message": "paramètres avançats", + "description": "For the tooltip of a link which gives access to advanced settings" + }, + "settingsLastRestorePrompt": { + "message": "Darrièra restauracion :", + "description": "English: Last restore:" + }, + "settingsLastBackupPrompt": { + "message": "Darrièra salvagarda :", + "description": "English: Last backup:" + }, + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:", + "description": "Appears at the top of the _3rd-party filters_ pane" + }, + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} used out of {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "3pAutoUpdatePrompt1": { + "message": "Mesa a jorn auto de las listas", + "description": "A checkbox in the _3rd-party filters_ pane" + }, + "3pUpdateNow": { + "message": "Metre a jorn ara", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pPurgeAll": { + "message": "Purgar totes los caches", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pParseAllABPHideFiltersPrompt1": { + "message": "Parse and enforce cosmetic filters", + "description": "English: Parse and enforce Adblock+ element hiding filters." + }, + "3pParseAllABPHideFiltersInfo": { + "message": "Cosmetic filters serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the network request-based filtering engines.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + }, + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignore generic cosmetic filters", + "description": "This will cause uBO to ignore all generic cosmetic filters." + }, + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." + }, + "3pSuspendUntilListsAreLoaded": { + "message": "Suspend network activity until all filter lists are loaded", + "description": "A checkbox in the 'Filter lists' pane" + }, + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" + }, + "3pApplyChanges": { + "message": "Aplicar las modificacions", + "description": "English: Apply changes" + }, + "3pGroupDefault": { + "message": "Integrats", + "description": "Filter lists section name" + }, + "3pGroupAds": { + "message": "Publicitats", + "description": "Filter lists section name" + }, + "3pGroupPrivacy": { + "message": "Confidencialitat", + "description": "Filter lists section name" + }, + "3pGroupMalware": { + "message": "Domenis malfasents", + "description": "Filter lists section name" + }, + "3pGroupSocial": { + "message": "Social widgets", + "description": "Filter lists section name" + }, + "3pGroupCookies": { + "message": "Cookie notices", + "description": "Filter lists section name" + }, + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "Filter lists section name" + }, + "3pGroupMultipurpose": { + "message": "Multipurpose", + "description": "Filter lists section name" + }, + "3pGroupRegions": { + "message": "Regions, lengas", + "description": "Filter lists section name" + }, + "3pGroupCustom": { + "message": "Personalizat", + "description": "Filter lists section name" + }, + "3pImport": { + "message": "Importar...", + "description": "The label for the checkbox used to import external filter lists" + }, + "3pExternalListsHint": { + "message": "One URL per line. Invalid URLs will be silently ignored.", + "description": "Short information about how to use the textarea to import external filter lists by URL" + }, + "3pExternalListObsolete": { + "message": "Obsolèt.", + "description": "used as a tooltip for the out-of-date icon beside a list" + }, + "3pViewContent": { + "message": "veire contengut", + "description": "used as a tooltip for eye icon beside a list" + }, + "3pLastUpdate": { + "message": "Darrièra actualizacion : {{ago}}.\nClicar per forçar la mesa a jorn.", + "description": "used as a tooltip for the clock icon beside a list" + }, + "3pUpdating": { + "message": "Mesa a jorn...", + "description": "used as a tooltip for the spinner icon beside a list" + }, + "3pNetworkError": { + "message": "A network error prevented the resource from being updated.", + "description": "used as a tooltip for error icon beside a list" + }, + "1pTrustWarning": { + "message": "Do not add filters from untrusted sources.", + "description": "Warning against copy-pasting filters from random sources" + }, + "1pEnableMyFiltersLabel": { + "message": "Enable my custom filters", + "description": "Label for the checkbox use to enable/disable 'My filters' list" + }, + "1pTrustMyFiltersLabel": { + "message": "Allow custom filters requiring trust", + "description": "Label for the checkbox use to trust the content of 'My filters' list" + }, + "1pImport": { + "message": "Importar e apondre", + "description": "Button in the 'My filters' pane" + }, + "1pExport": { + "message": "Exportar", + "description": "Button in the 'My filters' pane" + }, + "1pExportFilename": { + "message": "mos-filtres-estatics-ublock_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" + }, + "1pApplyChanges": { + "message": "Aplicar las modificacions", + "description": "English: Apply changes" + }, + "rulesPermanentHeader": { + "message": "Règlas permanentas", + "description": "header" + }, + "rulesTemporaryHeader": { + "message": "Règlas temporàrias", + "description": "header" + }, + "rulesRevert": { + "message": "Revert", + "description": "This will remove all temporary rules" + }, + "rulesCommit": { + "message": "Commit", + "description": "This will persist temporary rules" + }, + "rulesEdit": { + "message": "Modificar", + "description": "Will enable manual-edit mode (textarea)" + }, + "rulesEditSave": { + "message": "Enregistrar", + "description": "Will save manually-edited content and exit manual-edit mode" + }, + "rulesEditDiscard": { + "message": "Anullar", + "description": "Will discard manually-edited content and exit manual-edit mode" + }, + "rulesImport": { + "message": "Import from file…", + "description": "" + }, + "rulesExport": { + "message": "Export to file…", + "description": "Button in the 'My rules' pane" + }, + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" + }, + "rulesHint": { + "message": "List of your dynamic filtering rules.", + "description": "English: List of your dynamic filtering rules." + }, + "rulesFormatHint": { + "message": "Rule syntax: source destination type action (full documentation).", + "description": "English: dynamic rule syntax and full documentation." + }, + "rulesSort": { + "message": "Triar :", + "description": "English: label for sort option." + }, + "rulesSortByType": { + "message": "Tipe de règla", + "description": "English: a sort option for list of rules." + }, + "rulesSortBySource": { + "message": "Font", + "description": "English: a sort option for list of rules." + }, + "rulesSortByDestination": { + "message": "Destinacion", + "description": "English: a sort option for list of rules." + }, + "whitelistPrompt": { + "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line.", + "description": "A concise description of the 'Trusted sites' pane." + }, + "whitelistImport": { + "message": "Import and append…", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExport": { + "message": "Exportar", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExportFilename": { + "message": "my-ublock-trusted-sites_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" + }, + "whitelistApply": { + "message": "Aplicar las modificacions", + "description": "English: Apply changes" + }, + "logRequestsHeaderType": { + "message": "Tipe", + "description": "English: Type" + }, + "logRequestsHeaderDomain": { + "message": "Domeni", + "description": "English: Domain" + }, + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" + }, + "logRequestsHeaderFilter": { + "message": "Filtre", + "description": "English: Filter" + }, + "logAll": { + "message": "Totes", + "description": "Appears in the logger's tab selector" + }, + "logBehindTheScene": { + "message": "Tabless", + "description": "Pretty name for behind-the-scene network requests" + }, + "loggerCurrentTab": { + "message": "Onglet actual", + "description": "Appears in the logger's tab selector" + }, + "loggerReloadTip": { + "message": "Reload the tab content", + "description": "Tooltip for the reload button in the logger page" + }, + "loggerDomInspectorTip": { + "message": "Toggle the DOM inspector", + "description": "Tooltip for the DOM inspector button in the logger page" + }, + "loggerPopupPanelTip": { + "message": "Toggle the popup panel", + "description": "Tooltip for the popup panel button in the logger page" + }, + "loggerInfoTip": { + "message": "uBlock Origin wiki: The logger", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Clear logger", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Pause logger (discard all incoming data)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Unpause logger", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Toggle logger filtering", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filter logger content", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Logger filtering options", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Not", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "blocat", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "autorizat", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "modificat", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "1st-party", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "3rd-party", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Detalhs", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filtre", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Lista de filtre", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Règla", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Contèxte", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Root context", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Partyness", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Tipe", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Règla d’URL", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Contèxte :", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Tipe :", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Static filter", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Blocar", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Autorizar", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "type “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "any type", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "from “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "from anywhere", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "except when", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "even if", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Static filter {{filter}} found in:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Static filter could not be found in any of the currently enabled filter lists", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Preserve entries from the last {{input}} minutes", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Preserve at most {{input}} page loads per tab", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Preserve at most {{input}} entries per tab", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Use {{input}} lines per entry in vertically expanded mode", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Hide columns:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Time", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filter/rule", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Context", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Partyness", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Lista", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tablèu", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Brut", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Dobrir", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Create new report on GitHub", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Find similar reports on GitHub", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Documentacion", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Read the documentation at uBlock/wiki to learn about all of uBlock Origin's features.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Questions and support", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Answers to questions and other kinds of help support is provided on the subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filter issues/website is broken", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Important: Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tips: Be sure your filter lists are up to date. The logger is the primary tool to diagnose filter-related issues.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Senhalament d’avarias", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Report issues with uBlock Origin itself to the uBlockOrigin/uBlock-issue issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Troubleshooting Information", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported. Note: clicking the button will cause the page's origin to be sent to GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verify that the issue still exists after reloading the problematic web page.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the web page:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The web page…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBlock Origin is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the web page as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Politica de confidencialitat", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Jornal de modificacions", + "description": "" + }, + "aboutCode": { + "message": "Còdi font (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Contributors", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Còdi font", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Traduccions", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Listas de filtres", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "External dependencies (GPLv3-compatible):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO's own filter lists are freely hosted on the following CDNs:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "A randomly picked CDN is used when a filter list needs to be updated.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Back up to file…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Restore from file…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Reset to default settings…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "The data could not be read or is invalid", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Network error: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "S'abonar", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "fa una minuta", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "fa {{value}} minutas", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "fa una ora", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "fa {{value}} oras", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "a un jorn", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "fa {{value}} jorns", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Show Dashboard", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Show Logger", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "off", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Pagina blocada", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin a empachat lo cargament de la pagina seguenta :", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "A causa del filtre seguent :", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "without parameters", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Trobat dins :", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Tornar", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Tampar aquesta fenèstra", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "M’assabentar pas mai per aqueste site", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Desactivar lo blocatge estric del domeni {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Temporàriament", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Permanentament", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Contunhar", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "La pagina blocada vòl redirigir cap a un autre site. Se causissètz de perseguir, aniretz dirèctament a : {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Export to cloud storage", + "description": "tooltip" + }, + "cloudPull": { + "message": "Import from cloud storage", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Import from cloud storage and merge with current settings", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Nom d’aqueste periferic :", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Warning! Change these advanced settings at your own risk.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Mandar", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Aplicar las modificacions", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Restablir", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "octets", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Block element in frame…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Subscribe to filter list…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Permetre temporàriament los elements mèdias larges", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "View source code…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Picar un acorchi", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Toggle locked scrolling", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Copiar al quichapapièrs", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Tot seleccionar", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Toggle cosmetic filtering", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Toggle JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Relax blocking mode", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Espaci emmagazinatge : {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "Ko", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "Mo", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "Go", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Clicatz per cargar", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Errors: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" + } +} diff --git a/src/_locales/pa/messages.json b/src/_locales/pa/messages.json new file mode 100644 index 0000000000000..3f3abba147e9c --- /dev/null +++ b/src/_locales/pa/messages.json @@ -0,0 +1,1314 @@ +{ + "extName": { + "message": "uBlock Origin", + "description": "extension name." + }, + "extShortDesc": { + "message": "ਆਖਰਕਾਰ ਪ੍ਰਭਾਵੀ ਬਲੌਕਰ ਹੈ। CPU ਅਤੇ ਮੈਮੋਰੀ ਲਈ ਸੌਖਾ।", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "dashboardName": { + "message": "uBlock₀ — ਡੈਸ਼ਬੋਰਡ", + "description": "English: uBlock₀ — Dashboard" + }, + "dashboardUnsavedWarning": { + "message": "ਸਾਵਧਾਨ! ਤੁਹਾਡੇ ਕੋਲ ਨਾ-ਸੰਭਾਲੀਆਂ ਤਬਦੀਲੀਆਂ ਹਨ", + "description": "A warning in the dashboard when navigating away from unsaved changes" + }, + "dashboardUnsavedWarningStay": { + "message": "ਰਹੋ", + "description": "Label for button to prevent navigating away from unsaved changes" + }, + "dashboardUnsavedWarningIgnore": { + "message": "ਅਣਡਿੱਠਾ", + "description": "Label for button to ignore unsaved changes" + }, + "settingsPageName": { + "message": "ਸੈਟਿੰਗਾਂ", + "description": "appears as tab name in dashboard" + }, + "3pPageName": { + "message": "ਫਿਲਟਰ ਸੂਚੀਆਂ", + "description": "appears as tab name in dashboard" + }, + "1pPageName": { + "message": "ਮੇਰੇ ਫਿਲਟਰ", + "description": "appears as tab name in dashboard" + }, + "rulesPageName": { + "message": "ਮੇਰੇ ਨਿਯਮ", + "description": "appears as tab name in dashboard" + }, + "whitelistPageName": { + "message": "ਭਰੋਸੇਯੋਗ ਸਾਈਟਾਂ", + "description": "appears as tab name in dashboard" + }, + "shortcutsPageName": { + "message": "ਸ਼ਾਰਟਕੱਟ", + "description": "appears as tab name in dashboard" + }, + "statsPageName": { + "message": "uBlock₀ — ਲੌਗਰ", + "description": "Title for the logger window" + }, + "aboutPageName": { + "message": "ਇਸ ਬਾਰੇ", + "description": "appears as tab name in dashboard" + }, + "supportPageName": { + "message": "ਸਹਿਯੋਗ", + "description": "appears as tab name in dashboard" + }, + "assetViewerPageName": { + "message": "uBlock₀ — ਸੰਪੱਤੀ ਦਰਸ਼ਕ", + "description": "Title for the asset viewer page" + }, + "advancedSettingsPageName": { + "message": "ਤਕਨੀਕੀ ਸੈਟਿੰਗਾਂ", + "description": "Title for the advanced settings page" + }, + "popupPowerSwitchInfo": { + "message": "ਕਲਿੱਕ: ਇਸ ਸਾਈਟ ਲਈ uBlock₀ ਨੂੰ ਅਸਮਰੱਥ/ਸਮਰੱਥ ਕਰੋ।\n\nCtrl+ਕਲਿੱਕ: ਸਿਰਫ਼ ਇਸ ਸਫ਼ੇ ਲਈ uBlock₀ ਨੂੰ ਅਸਮਰੱਥ/ਸਮਰੱਥ ਕਰੋ।", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + }, + "popupPowerSwitchInfo1": { + "message": "ਇਸ ਸਾਈਟ ਲਈ uBlock₀ ਨੂੰ ਅਸਮਰੱਥ/ਸਮਰੱਥ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ।\n\nਸਿਰਫ਼ ਇਸ ਸਫ਼ੇ ਲਈ uBlock₀ ਨੂੰ ਅਸਮਰੱਥ/ਸਮਰੱਥ ਕਰਨ ਲਈ Ctrl+ਕਲਿੱਕ ਕਰੋ।", + "description": "Message to be read by screen readers" + }, + "popupPowerSwitchInfo2": { + "message": "ਇਸ ਸਾਈਟ ਲਈ uBlock₀ ਸਮਰੱਥ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ।", + "description": "Message to be read by screen readers" + }, + "popupBlockedRequestPrompt": { + "message": "ਪਾਬੰਦੀ ਲਾਈਆਂ ਬੇਨਤੀਆਂ", + "description": "English: requests blocked" + }, + "popupBlockedOnThisPagePrompt": { + "message": "ਇਸ ਸਫ਼ੇ ਉੱਤੇ", + "description": "English: on this page" + }, + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 (13%)" + }, + "popupBlockedSinceInstallPrompt": { + "message": "ਇੰਸਟਾਲ ਕਰਨ ਤੋਂ ਬਾਅਦ", + "description": "English: since install" + }, + "popupOr": { + "message": "ਜਾਂ", + "description": "English: or" + }, + "popupBlockedOnThisPage_v2": { + "message": "ਇਸ ਸਫ਼ੇ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਏ", + "description": "For the new mobile-friendly popup design" + }, + "popupBlockedSinceInstall_v2": { + "message": "ਇੰਸਟਾਲ ਹੋਣ ਤੋਂ ਬਾਅਦ ਪਾਬੰਦੀ ਲਾਏ", + "description": "For the new mobile-friendly popup design" + }, + "popupDomainsConnected_v2": { + "message": "ਕਨੈਕਟ ਹੋਈਆਂ ਡੋਮੇਨਾਂ", + "description": "For the new mobile-friendly popup design" + }, + "popupTipDashboard": { + "message": "ਡੈਸ਼ਬੋਰਡ ਨੂੰ ਖੋਲ੍ਹੋ", + "description": "English: Click to open the dashboard" + }, + "popupTipZapper": { + "message": "Enter element zapper mode", + "description": "Tooltip for the element-zapper icon in the popup panel" + }, + "popupTipPicker": { + "message": "Enter element picker mode", + "description": "English: Enter element picker mode" + }, + "popupTipLog": { + "message": "ਲੌਗਰ ਖੋਲ੍ਹੋ", + "description": "Tooltip used for the logger icon in the panel" + }, + "popupTipReport": { + "message": "ਇਸ ਵੈੱਬਸਾਈਟ ਉੱਤੇ ਮਸਲੇ ਬਾਰੇ ਰਿਪੋਰਟ ਕਰੋ", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipNoPopups": { + "message": "ਇਸ ਸਾਈਟ ਲਈ ਸਾਰੇ ਪੌਪ-ਅੱਪ ਉੱਤੇ ਪਾਬੰਦੀਆਂ ਨੂੰ ਬਦਲੋ", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups1": { + "message": "ਇਸ ਸਾਈਟ ਲਈ ਸਾਰੇ ਪੌਪ-ਅੱਪ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਉਣ ਲਈ ਕਲਿੱਕ ਕਰੋ", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2": { + "message": "ਇਸ ਸਾਈਟ ਲਈ ਸਾਰੇ ਪੌਪ-ਅੱਪ ਉੱਤੇ ਪਾਬੰਦੀ ਨਾ ਲਾਉਣ ਲਈ ਕਲਿੱਕ ਕਰੋ", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoLargeMedia": { + "message": "ਇਸ ਸਾਈਟ ਲਈ ਵੱਡੇ ਮੀਡਿਆ ਭਾਗਾਂ ਉੱਤੇ ਪਾਬੰਦੀਆਂ ਨੂੰ ਬਦਲੋ", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia1": { + "message": "ਇਸ ਸਾਈਟ ਲਈ ਵੱਡੇ ਮੀਡੀਆ ਭਾਗਾਂ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਉਣ ਲਈ ਕਲਿੱਕ ਕਰੋ", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2": { + "message": "ਇਸ ਸਾਈਟ ਲਈ ਵੱਡੇ ਮੀਡੀਆ ਭਾਗਾਂ ਉੱਤੇ ਪਾਬੰਦੀ ਹਟਾਉਣ ਲਈ ਕਲਿੱਕ ਕਰੋ", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoCosmeticFiltering": { + "message": "ਇਸ ਸਾਈਟ ਲਈ ਦਿੱਖ ਫਿਲਟਰ ਕਰਨ ਨੂੰ ਬਦਲੋ", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering1": { + "message": "ਇਸ ਸਾਈਟ ਉੱਤੇ ਦਿੱਖ ਫਿਲਟਰ ਕਰਨ ਨੂੰ ਅਸਮਰੱਥ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2": { + "message": "ਇਸ ਸਾਈਟ ਉੱਤੇ ਦਿੱਖ ਫਿਲਟਰ ਕਰਨ ਨੂੰ ਸਮਰੱਥ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoRemoteFonts": { + "message": "ਇਸ ਸਾਈਟ ਲਈ ਰਿਮੋਟ ਫ਼ੌਂਟਾਂ ਉੱਤੇ ਪਾਬੰਦੀਆਂ ਨੂੰ ਬਦਲੋ", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts1": { + "message": "ਇਸ ਸਾਈਟ ਲਈ ਰਿਮੋਟ ਫ਼ੌਂਟਾਂ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਉਣ ਲਈ ਕਲਿੱਕ ਕਰੋ", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts2": { + "message": "ਇਸ ਸਾਈਟ ਲਈ ਰਿਮੋਟ ਫ਼ੌਂਟਾਂ ਉੱਤੇ ਪਾਬੰਦੀ ਹਟਾਉਣ ਲਈ ਕਲਿੱਕ ਕਰੋ", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoScripting1": { + "message": "ਇਸ ਸਾਈਟ ਉੱਤੇ JavaScript ਅਸਮਰੱਥ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupTipNoScripting2": { + "message": "ਇਸ ਸਾਈਟ ਉੱਤੇ JavaScript ਅਸਮਰੱਥ ਕਰਨ ਨੂੰ ਹਟਾਉਣ ਲਈ ਕਲਿੱਕ ਕਰੋ", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupNoPopups_v2": { + "message": "ਪੌਪ-ਅੱਪ ਵਿੰਡੋ", + "description": "Caption for the no-popups per-site switch" + }, + "popupNoLargeMedia_v2": { + "message": "ਵੱਡੇ ਮੀਡੀਆ ਭਾਗ", + "description": "Caption for the no-large-media per-site switch" + }, + "popupNoCosmeticFiltering_v2": { + "message": "ਦਿੱਖ ਫਿਲਟਰ ਕਰਨਾ", + "description": "Caption for the no-cosmetic-filtering per-site switch" + }, + "popupNoRemoteFonts_v2": { + "message": "ਰਿਮੋਟ ਫ਼ੌਂਟ", + "description": "Caption for the no-remote-fonts per-site switch" + }, + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" + }, + "popupMoreButton_v2": { + "message": "ਹੋਰ", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton_v2": { + "message": "ਘੱਟ", + "description": "Label to be used to hide popup panel sections" + }, + "popupTipGlobalRules": { + "message": "ਗਲੋਬਲ ਨਿਯਮ: ਇਹ ਕਾਲਮ ਸਾਰੀਆਂ ਸਾਈਟਾਂ ਉੱਤੇ ਲਾਗੂ ਹੋਣ ਵਾਲੇ ਨਿਯਮਾਂ ਲਈ ਹੈ।", + "description": "Tooltip when hovering the top-most cell of the global-rules column." + }, + "popupTipLocalRules": { + "message": "ਲੋਕਲ ਨਿਯਮ: ਇਹ ਕਾਲਮ ਨਿਯਮਾਂ ਲਈ ਹੈ, ਜੋ ਕਿ ਸਿਰਫ਼ ਲੋਕਲ ਸਾਈਟਾਂ ਉੱਤੇ ਹੀ ਲਾਗੂ ਹੁੰਦੇ ਹਨ।\nਲੋਕਲ ਨਿਯਮ ਗਲੋਬਲ ਨਿਯਮਾਂ ਨੂੰ ਅਣਡਿੱਠਾ ਕਰਦੇ ਹਨ।", + "description": "Tooltip when hovering the top-most cell of the local-rules column." + }, + "popupTipSaveRules": { + "message": "ਆਪਣੀਆਂ ਤਬਦੀਲੀਆਂ ਨੂੰ ਪੱਕਾ ਬਣਾਉਣ ਲਈ ਕਲਿੱਕ ਕਰੋ।", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." + }, + "popupTipRevertRules": { + "message": "ਆਪਣੀਆਂ ਤਬਦੀਲੀਆਂ ਨੂੰ ਵਾਪਸ ਲੈਣ ਲਈ ਕਲਿੱਕ ਕਰੋ।", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + }, + "popupAnyRulePrompt": { + "message": "ਸਭ", + "description": "" + }, + "popupImageRulePrompt": { + "message": "ਚਿੱਤਰ", + "description": "" + }, + "popup3pAnyRulePrompt": { + "message": "ਤੀਜੀ-ਧਿਰ", + "description": "" + }, + "popup3pPassiveRulePrompt": { + "message": "ਤੀਜੀ-ਧਿਰ CSS/ਚਿੱਤਰ", + "description": "" + }, + "popupInlineScriptRulePrompt": { + "message": "ਇਨ-ਲਾਈਨ ਸਕ੍ਰਿਪਟਾਂ", + "description": "" + }, + "popup1pScriptRulePrompt": { + "message": "1ਲੀ-ਧਿਰ ਸਕ੍ਰਿਪਟਾਂ", + "description": "" + }, + "popup3pScriptRulePrompt": { + "message": "ਤੀਜੀ-ਧਿਰ ਸਕ੍ਰਿਪਟਾਂ", + "description": "" + }, + "popup3pFrameRulePrompt": { + "message": "ਤੀਜੀ-ਧਿਰ ਫਰੇਮ", + "description": "" + }, + "popupHitDomainCountPrompt": { + "message": "ਕਨੈਕਟ ਹੋਈਆਂ ਡੋਮੇਨਾਂ", + "description": "appears in popup" + }, + "popupHitDomainCount": { + "message": "{{total}} ਵਿੱਚੋਂ {{count}}", + "description": "appears in popup" + }, + "popupVersion": { + "message": "ਵਰਜ਼ਨ", + "description": "Example of use: Version 1.26.4" + }, + "popup3pScriptFilter": { + "message": "ਸਕ੍ਰਿਪਟ", + "description": "Appears as an option to filter out firewall rows" + }, + "popup3pFrameFilter": { + "message": "ਫਰੇਮ", + "description": "Appears as an option to filter out firewall rows" + }, + "pickerCreate": { + "message": "ਬਣਾਓ", + "description": "English: Create" + }, + "pickerPick": { + "message": "ਚੁਣੋ", + "description": "English: Pick" + }, + "pickerQuit": { + "message": "ਬਾਹਰ", + "description": "English: Quit" + }, + "pickerPreview": { + "message": "ਝਲਕ", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + }, + "pickerNetFilters": { + "message": "ਨੈੱਟਵਰਕ ਫਿਲਟਰ", + "description": "English: header for a type of filter in the element picker dialog" + }, + "pickerCosmeticFilters": { + "message": "ਦਿੱਖ ਫਿਲਟਰ ਕਰਨਾ", + "description": "English: Cosmetic filters" + }, + "pickerCosmeticFiltersHint": { + "message": "ਕਲਿੱਕ, Ctrl-ਕਲਿੱਕ", + "description": "English: Click, Ctrl-click" + }, + "pickerContextMenuEntry": { + "message": "ਭਾਗ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ…", + "description": "An entry in the browser's contextual menu" + }, + "settingsCollapseBlockedPrompt": { + "message": "ਪਾਬੰਦੀ ਲਾਏ ਭਾਗਾਂ ਲਈ ਸਥਾਨ ਨੂੰ ਓਹਲੇ ਕਰੋ", + "description": "English: Hide placeholders of blocked elements" + }, + "settingsIconBadgePrompt": { + "message": "ਆਈਕਾਨ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਈਆਂ ਬੇਨਤੀਆਂ ਦੀ ਗਿਣਤੀ ਦਿਖਾਓ", + "description": "English: Show the number of blocked requests on the icon" + }, + "settingsTooltipsPrompt": { + "message": "ਟੂਲ-ਟਿੱਪ ਅਸਮਰੱਥ ਕਰੋ", + "description": "A checkbox in the Settings pane" + }, + "settingsContextMenuPrompt": { + "message": "ਜਦੋਂ ਵੀ ਵਾਜਬ ਹੋਵੇ ਤਾਂ ਪ੍ਰਸੰਗ ਮੇਨੂ ਨੂੰ ਵਰਤੋਂ", + "description": "English: Make use of context menu where appropriate" + }, + "settingsColorBlindPrompt": { + "message": "ਰੰਗ-ਅੰਨ੍ਹੇਪਣ ਲਈ ਸਰਲ", + "description": "English: Color-blind friendly" + }, + "settingsAppearance": { + "message": "ਦਿੱਖ", + "description": "Section for controlling user interface appearance" + }, + "settingsThemeLabel": { + "message": "ਥੀਮ", + "description": "Label for checkbox to enable a custom dark theme" + }, + "settingsThemeAccent0Label": { + "message": "Custom accent color", + "description": "Label for checkbox to pick an accent color" + }, + "settingsCloudStorageEnabledPrompt": { + "message": "ਕਲਾਉਡ ਸਟੋਰੇਜ਼ ਸਹਾਇਤਾ ਸਮਰੱਥ ਕਰੋ", + "description": "" + }, + "settingsAdvancedUserPrompt": { + "message": "ਮੈਂ ਮਾਹਰ ਵਰਤੋਂਕਾਰ ਹਾਂ", + "description": "Checkbox to let user access advanced, technical features" + }, + "settingsPrefetchingDisabledPrompt": { + "message": "ਪਹਿਲਾਂ-ਪ੍ਰਾਪਤ ਕਰਨਾ ਅਸਮਰੱਥ (ਪਾਬੰਦੀ ਲਾਈਆਂ ਨੈੱਟਵਰਕ ਬੇਨਤੀਆਂ ਲਈ ਕਿਸੇ ਵੀ ਕਨੈਕਸ਼ਨ ਨੂੰ ਰੋਕਣ ਲਈ)", + "description": "English: " + }, + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "ਹਾਈਪਰ-ਲਿੰਕ ਪੜਤਾਲ ਨੂੰ ਅਸਮਰੱਥ ਕਰੋ", + "description": "English: " + }, + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "WebRTC ਨੂੰ ਲੋਕਲ IP ਐਡਰੈਸ ਲੀਕ ਕਰਨ ਤੋਂ ਰੋਕੋ", + "description": "English: " + }, + "settingPerSiteSwitchGroup": { + "message": "ਮੂਲ ਰਵੱਈਆ", + "description": "" + }, + "settingPerSiteSwitchGroupSynopsis": { + "message": "ਇਹ ਮੂਲ ਰਵੱਈਏ ਨੂੰ ਹਰ-ਸਟਾਈ ਮੁਤਾਬਕ ਅਣਡਿੱਠਾ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ", + "description": "" + }, + "settingsNoCosmeticFilteringPrompt": { + "message": "ਦਿੱਖ ਫਿਲਟਰ ਕਰਨ ਨੂੰ ਅਸਮਰੱਥ ਕਰੋ", + "description": "" + }, + "settingsNoLargeMediaPrompt": { + "message": "{{input}} KB ਤੋਂ ਵੱਡੇ ਮੀਡੀਆ ਭਾਗਾਂ ਉੱਤੇ ਪਾਬੰਦੀ", + "description": "" + }, + "settingsNoRemoteFontsPrompt": { + "message": "ਰਿਮੋਟ ਫ਼ੌਂਟਾਂ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ", + "description": "" + }, + "settingsNoScriptingPrompt": { + "message": "JavaScript ਅਸਮਰੱਥ ਕਰੋ", + "description": "The default state for the per-site no-scripting switch" + }, + "settingsNoCSPReportsPrompt": { + "message": "CSP ਰਿਪੋਰਟਾਂ ਉੱਤੇ ਪਾਬੰਦੀ", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" + }, + "settingsUncloakCnamePrompt": { + "message": "Uncloak canonical names", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" + }, + "settingsAdvanced": { + "message": "ਤਕਨੀਕੀ", + "description": "Section for controlling advanced-user settings" + }, + "settingsAdvancedSynopsis": { + "message": "ਫ਼ੀਚਰ ਸਿਰਫ਼ ਤਕਨੀਕੀ ਮਾਹਰ ਵਰਤੋਂਕਾਰਾਂ ਲਈ ਢੁੱਕਵੇਂ ਹਨ", + "description": "Description of section controlling advanced-user settings" + }, + "settingsAdvancedUserSettings": { + "message": "ਤਕਨੀਕੀ ਸੈਟਿੰਗਾਂ", + "description": "For the tooltip of a link which gives access to advanced settings" + }, + "settingsLastRestorePrompt": { + "message": "ਪਿਛਲਾ ਰੀ-ਸਟੋਰ:", + "description": "English: Last restore:" + }, + "settingsLastBackupPrompt": { + "message": "ਪਿਛਲਾ ਬੈਕਅੱਪ:", + "description": "English: Last backup:" + }, + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} ਨੈੱਟਵਰਕ ਫਿਲਟਰ + {{cosmeticFilterCount}} ਦਿੱਖ ਫਿਲਟਰ, ਇੱਥੋਂ:", + "description": "Appears at the top of the _3rd-party filters_ pane" + }, + "3pListsOfBlockedHostsPerListStats": { + "message": "{{total}} ਵਿੱਚੋਂ {{used}} ਵਰਤੇ", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "3pAutoUpdatePrompt1": { + "message": "ਫਿਲਟਰ ਸੂਚੀਆਂ ਆਪੇ ਅੱਪਡੇਟ ਕਰੋ", + "description": "A checkbox in the _3rd-party filters_ pane" + }, + "3pUpdateNow": { + "message": "ਹੁਣੇ ਅੱਪਡੇਟ ਕਰੋ", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pPurgeAll": { + "message": "ਸਭ ਕੈਸ਼ ਮਿਟਾਓ", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pParseAllABPHideFiltersPrompt1": { + "message": "ਦਿੱਖ ਫਿਲਟਰ ਨੂੰ ਪਾਰਸ ਅਤੇ ਲਾਗੂ ਕਰੋ", + "description": "English: Parse and enforce Adblock+ element hiding filters." + }, + "3pParseAllABPHideFiltersInfo": { + "message": "ਦਿੱਖ (cosmetic) ਫਿਲਟਰ ਵੈੱਬ ਸਫ਼ੇ ਉੱਤੇ ਅਜਿਹਾ ਭਾਗਾਂ ਨੂੰ ਲੁਕਾਉਂਦੇ ਹਨ, ਜੋ ਕਿ ਦਿੱਖ ਵਿੱਚ ਰੁਕਾਵਟ ਬਣਦੇ ਹਨ ਅਤੇ ਜਿਹਨਾਂ ਉੱਤੇ ਨੈੱਟਵਰਕ ਅਧਾਰਿਤ ਫਿਲਟਰ ਇੰਜਣਾਂ ਰਾਹੀਂ ਪਾਬੰਦੀ ਨਹੀਂ ਲਾਈ ਜਾ ਸਕਦੀ ਹੈ।", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + }, + "3pIgnoreGenericCosmeticFilters": { + "message": "ਆਮ ਦਿੱਖ ਆਧਾਰਿਤ ਫਿਲਟਰ ਅਣਡਿੱਠੇ ਕਰੋ", + "description": "This will cause uBO to ignore all generic cosmetic filters." + }, + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." + }, + "3pSuspendUntilListsAreLoaded": { + "message": "ਸਭ ਫਿਲਟਰ ਸੂਚੀਆਂ ਲੋਡ ਹੋਣ ਤੱਕ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਨੂੰ ਸਸਪੈਂਡ ਰੱਖੋ", + "description": "A checkbox in the 'Filter lists' pane" + }, + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" + }, + "3pApplyChanges": { + "message": "ਤਬਦੀਲੀਆਂ ਲਾਗੂ ਕਰੋ", + "description": "English: Apply changes" + }, + "3pGroupDefault": { + "message": "ਬਿਲਟ-ਇਨ", + "description": "Filter lists section name" + }, + "3pGroupAds": { + "message": "ਇਸ਼ਤਿਹਾਰ", + "description": "Filter lists section name" + }, + "3pGroupPrivacy": { + "message": "ਪਰਦੇਦਾਰੀ", + "description": "Filter lists section name" + }, + "3pGroupMalware": { + "message": "ਮਾਲਵੇਅਰਾਂ ਤੋਂ ਬਚਾਅ, ਸੁਰੱਖਿਆ", + "description": "Filter lists section name" + }, + "3pGroupSocial": { + "message": "ਸ਼ੋਸ਼ਲ ਵਿਜੈਟ", + "description": "Filter lists section name" + }, + "3pGroupCookies": { + "message": "ਕੂਕੀਜ਼ ਨੋਟਿਸ", + "description": "Filter lists section name" + }, + "3pGroupAnnoyances": { + "message": "ਅਣਚਾਹੇ", + "description": "Filter lists section name" + }, + "3pGroupMultipurpose": { + "message": "ਬਹੁ-ਮਕਸਦੀ", + "description": "Filter lists section name" + }, + "3pGroupRegions": { + "message": "ਖੇਤਰ, ਭਾਸ਼ਾਵਾਂ", + "description": "Filter lists section name" + }, + "3pGroupCustom": { + "message": "ਕਸਟਮ", + "description": "Filter lists section name" + }, + "3pImport": { + "message": "ਇੰਪੋਰਟ…", + "description": "The label for the checkbox used to import external filter lists" + }, + "3pExternalListsHint": { + "message": "ਹਰ ਲਾਈਨ ਵਿੱਚ ਇੱਕ URL। ਗਲਤ URL ਨੂੰ ਬਿਨਾਂ ਰੁਕੇ ਅਣਡਿੱਠਾ ਕੀਤਾ ਜਾਵੇਗਾ।", + "description": "Short information about how to use the textarea to import external filter lists by URL" + }, + "3pExternalListObsolete": { + "message": "ਪੁਰਾਣਾ।", + "description": "used as a tooltip for the out-of-date icon beside a list" + }, + "3pViewContent": { + "message": "ਸਮੱਗਰੀ ਵੇਖੋ", + "description": "used as a tooltip for eye icon beside a list" + }, + "3pLastUpdate": { + "message": "ਆਖਰੀ ਅੱਪਡੇਟ: {{ago}}।\nਅੱਪਡੇਟ ਲਈ ਮਜ਼ਬੂਰ ਕਰਨ ਵਾਸਤੇ ਕਲਿੱਕ ਕਰੋ।", + "description": "used as a tooltip for the clock icon beside a list" + }, + "3pUpdating": { + "message": "…ਅੱਪਡੇਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ", + "description": "used as a tooltip for the spinner icon beside a list" + }, + "3pNetworkError": { + "message": "ਨੈੱਟਵਰਕ ਗਲਤੀ ਸਰੋਤ ਨੂੰ ਅੱਪਡੇਟ ਹੋਣ ਤੋਂ ਰੋਕਦੀ ਹੈ।", + "description": "used as a tooltip for error icon beside a list" + }, + "1pTrustWarning": { + "message": "ਗ਼ੈਰ-ਭਰੋਸੇਯੋਗ ਸਰੋਤਾਂ ਤੋਂ ਫਿਲਟਰ ਨਾ ਜੋੜੋ।", + "description": "Warning against copy-pasting filters from random sources" + }, + "1pEnableMyFiltersLabel": { + "message": "ਮੇਰੇ ਕਸਟਮ ਫਿਲਟਰ ਸਮਰੱਥ ਕਰੋ", + "description": "Label for the checkbox use to enable/disable 'My filters' list" + }, + "1pTrustMyFiltersLabel": { + "message": "Allow custom filters requiring trust", + "description": "Label for the checkbox use to trust the content of 'My filters' list" + }, + "1pImport": { + "message": "ਇੰਪੋਰਟ ਕਰੋ ਤੇ ਜੋੜੋ…", + "description": "Button in the 'My filters' pane" + }, + "1pExport": { + "message": "ਐਕਸਪੋਰਟ…", + "description": "Button in the 'My filters' pane" + }, + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" + }, + "1pApplyChanges": { + "message": "ਤਬਦੀਲੀਆਂ ਲਾਗੂ ਕਰੋ", + "description": "English: Apply changes" + }, + "rulesPermanentHeader": { + "message": "ਪੱਕੇ ਨਿਯਮ", + "description": "header" + }, + "rulesTemporaryHeader": { + "message": "ਆਰਜ਼ੀ ਨਿਯਮ", + "description": "header" + }, + "rulesRevert": { + "message": "ਵਾਪਸ ਲਵੋ", + "description": "This will remove all temporary rules" + }, + "rulesCommit": { + "message": "ਕਮਿਟ", + "description": "This will persist temporary rules" + }, + "rulesEdit": { + "message": "ਸੋਧੋ", + "description": "Will enable manual-edit mode (textarea)" + }, + "rulesEditSave": { + "message": "ਸੰਭਾਲੋ", + "description": "Will save manually-edited content and exit manual-edit mode" + }, + "rulesEditDiscard": { + "message": "ਖ਼ਾਰਜ", + "description": "Will discard manually-edited content and exit manual-edit mode" + }, + "rulesImport": { + "message": "…ਫ਼ਾਈਲ ਤੋਂ ਇੰਪੋਰਟ ਕਰੋ", + "description": "" + }, + "rulesExport": { + "message": "…ਫ਼ਾਈਲ ਉੱਤੇ ਐਕਸਪੋਰਟ ਕਰੋ", + "description": "Button in the 'My rules' pane" + }, + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" + }, + "rulesHint": { + "message": "ਤੁਹਾਡੇ ਚਾਲੂ ਫਿਲਟਰ ਕਰਨ ਦੇ ਨਿਯਮਾਂ ਦੀ ਸੂਚੀ ਹੈ।", + "description": "English: List of your dynamic filtering rules." + }, + "rulesFormatHint": { + "message": "Rule syntax: source destination type action (full documentation).", + "description": "English: dynamic rule syntax and full documentation." + }, + "rulesSort": { + "message": "ਲੜੀਬੱਧ:", + "description": "English: label for sort option." + }, + "rulesSortByType": { + "message": "ਨਿਯਮ ਦੀ ਕਿਸਮ", + "description": "English: a sort option for list of rules." + }, + "rulesSortBySource": { + "message": "ਸਰੋਤ", + "description": "English: a sort option for list of rules." + }, + "rulesSortByDestination": { + "message": "ਟਿਕਾਣਾ", + "description": "English: a sort option for list of rules." + }, + "whitelistPrompt": { + "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line.", + "description": "A concise description of the 'Trusted sites' pane." + }, + "whitelistImport": { + "message": "ਇੰਪੋਰਟ ਕਰੋ ਤੇ ਜੋੜੋ…", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExport": { + "message": "ਐਕਸਪੋਰਟ…", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExportFilename": { + "message": "my-ublock-trusted-sites_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" + }, + "whitelistApply": { + "message": "ਤਬਦੀਲੀਆਂ ਲਾਗੂ ਕਰੋ", + "description": "English: Apply changes" + }, + "logRequestsHeaderType": { + "message": "ਕਿਸਮ", + "description": "English: Type" + }, + "logRequestsHeaderDomain": { + "message": "ਡੋਮੇਨ", + "description": "English: Domain" + }, + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" + }, + "logRequestsHeaderFilter": { + "message": "ਫਿਲਟਰ", + "description": "English: Filter" + }, + "logAll": { + "message": "ਸਭ", + "description": "Appears in the logger's tab selector" + }, + "logBehindTheScene": { + "message": "ਬਿਨ-ਟੈਬ", + "description": "Pretty name for behind-the-scene network requests" + }, + "loggerCurrentTab": { + "message": "ਮੌਜੂਦਾ ਟੈਬ", + "description": "Appears in the logger's tab selector" + }, + "loggerReloadTip": { + "message": "ਟੈਬ ਸਮੱਗਰੀ ਮੁੜ-ਲੋਡ ਕਰੋ", + "description": "Tooltip for the reload button in the logger page" + }, + "loggerDomInspectorTip": { + "message": "DOM ਇੰਸਪੈਕਟਰ ਨੂੰ ਬਦਲੋ", + "description": "Tooltip for the DOM inspector button in the logger page" + }, + "loggerPopupPanelTip": { + "message": "ਪੌਪ-ਅੱਪ ਪੈਨਲ ਬਦਲੋ", + "description": "Tooltip for the popup panel button in the logger page" + }, + "loggerInfoTip": { + "message": "uBlock Origin ਵਿਕੀ: ਲੌਗਰ", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "ਲੌਗਰ ਮਿਟਾਓ", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "ਲੌਗਰ ਨੂੰ ਰੋਕੋ (ਸਭ ਆਉਣ ਵਾਲੇ ਡਾਟੇ ਨੂੰ ਅਣਡਿੱਠਾ ਕਰੋ)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "ਲੌਗਰ ਨੂੰ ਚਾਲੂ ਕਰੋ", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "ਲੌਗਰ ਫਿਲਟਰਾਂ ਨੂੰ ਬਦਲੋ", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "ਲੌਗਰ ਸਮੱਗਰੀ ਨੂੰ ਫਿਲਟਰ ਕਰੋ", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "ਲੌਗਰ ਫਿਲਟਰ ਕਰਨ ਲਈ ਚੋਣਾਂ", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "ਨਹੀਂ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "ਪਾਬੰਦੀ ਲਾਏ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "ਮਨਜ਼ੂਰ ਕੀਤੇ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "ਸੋਧ ਕੀਤੇ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "1ਲੀ-ਧਿਰ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "3ਜੀ-ਧਿਰ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "ਵੇਰਵੇ", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "ਫਿਲਟਰ", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "ਫਿਲਟਰ ਸੂਚੀ", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "ਨਿਯਮ", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "ਪਰਸੰਗ", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "ਰੂਟ ਪਰਸੰਗ", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "ਬਿਨ-ਧਿਰ", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "ਕਿਸਮ", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL ਨਿਯਮ", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "ਪਰਸੰਗ:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "ਕਿਸਮ:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "ਟਿਕਾਊ ਫਿਲਟਰ", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "ਪਾਬੰਦੀ", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "ਮਨਜ਼ੂਰ", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "ਕਿਸਮ “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "ਕੋਈ ਵੀ ਕਿਸਮ", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "“{{origin}}” ਤੋਂ", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "ਕਿਸੇ ਵੀ ਥਾਂ ਤੋਂ", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "ਛੋਟ ਜਦੋਂ", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "ਭਾਵੇਂ ਜੇ", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "ਸਥਿਰ ਫਿਲਟਰ {{filter}} ਇਸ ਵਿੱਚ ਮੌਜੂਦ ਹੈ:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Static filter could not be found in any of the currently enabled filter lists", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "ਪਿਛਲੇ {{input}} ਮਿੰਟਾਂ ਤੋਂ ਐਂਟਰੀਆਂ ਰੱਖੋ", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Preserve at most {{input}} page loads per tab", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Preserve at most {{input}} entries per tab", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Use {{input}} lines per entry in vertically expanded mode", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "ਕਾਲਮ ਲੁਕਾਓ:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} ਸਮਾਂ", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} ਫਿਲਟਰ/ਨਿਯਮ", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} ਪਰਸੰਗ", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} ਬਿਨ-ਧਿਰ", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "ਸੂਚੀ", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "ਸਾਰਣੀ", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "ਸਰਲ", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "ਮਾਰਕਡਾਊਨ", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "ਖੋਲ੍ਹੋ", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "ਨਵੀਂ ਰਿਪੋਰਟ ਬਣਾਓ", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "ਰਲਦੀਆਂ ਰਿਪੋਰਟਾਂ ਲੱਭੋ", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "ਦਸਤਾਵੇਜ਼", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "uBlock Origin ਦੇ ਸਾਰੇ ਫੀਚਰਾਂ ਬਾਰੇ ਜਾਣਕਾਰੀ ਲੈਣ ਲਈ uBlock/wiki ਤੋਂ ਦਸਤਾਵੇਜ਼ ਪੜ੍ਹੋ।", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "ਸਵਾਲ ਅਤੇ ਸਹਿਯੋਗ", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "ਸਵਾਲਾਂ ਦੇ ਜਵਾਬ ਅਤੇ ਹੋਰ ਕਿਸੇ ਵੀ ਕਿਸਮ ਦੀ ਮਦਦ subreddit /r/uBlockOrigin ਉੱਤੇ ਦਿੱਤੀ ਜਾਂਦੀ ਹੈ।", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "ਫਿਲਟਰ ਮਸਲੇ/ਵੈੱਬਸਾਈਟ ਖਰਾਬ ਹੈ", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Important: Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tips: Be sure your filter lists are up to date. The logger is the primary tool to diagnose filter-related issues.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "ਬੱਗ ਰਿਪੋਰਟ", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Report issues with uBlock Origin itself to the uBlockOrigin/uBlock-issue issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "ਸਮੱਸਿਆ ਹੱਲ ਕਰਨ ਸੰਬੰਧੀ ਜਾਣਕਾਰੀ", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "ਹੇਠਾਂ ਤਕਨੀਕੀ ਜਾਣਕਾਰੀ ਦਿੱਤੀ ਹੈ, ਜੋ ਕਿ ਵਲੰਟੀਅਰਾਂ ਲਈ ਮਦਦਗਾਰ ਹੋ ਸਕਦੀ ਹੈ, ਜੋ ਤੁਹਾਡੀ ਸਮੱਸਿਆ ਹੱਲ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ ਕਰਦੇ ਹਨ।", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "ਫਿਲਟਰ ਮਸਲੇ ਬਾਰੇ ਰਿਪੋਰਟ ਕਰੋ", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "ਵਲੰਟੀਅਰਾਂ ਕੋਲ ਡੁਪਲੀਕੇਟ ਰਿਪੋਰਟਾਂ ਦਾ ਕੰਮ ਵਧਾਉਣ ਤੋਂ ਬਚਣ ਲਈ ਕਿਰਪਾ ਕਰਕੇ ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਮਸਲਾ ਕਿਤੇ ਪਹਿਲਾਂ ਰਿਪੋਰਟ ਤਾਂ ਨਹੀ ਕੀਤਾ ਹੋਇਆ ਹੈ।", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "ਫਿਲਟਰ ਸੂਚੀਆਂ ਰੋਜ਼ ਅੱਪਡੇਟ ਕੀਤੀਆਂ ਜਾਂਦੀਆਂ ਹਨ। ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਕਿਤੇ ਤੁਹਾਡਾ ਮਸਲਾ ਪਹਿਲਾਂ ਹੀ ਸਭ ਤੋਂ ਤਾਜ਼ਾ ਫਿਲਟਰ ਸੂਚੀਆਂ ਰਾਹੀਂ ਹੱਲ ਤਾਂ ਨਹੀਂ ਹੋ ਚੁੱਕਿਆ ਹੈ।", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "ਸਮੱਸਿਆ ਵਾਲੇ ਵੈੱਬ-ਸਫ਼ੇ ਨੂੰ ਮੁੜ-ਲੋਡ ਕਰਨ ਦੇ ਬਾਅਦ ਜਾਂਚ ਕਰੋ ਕਿ ਕੀ ਮਸਲਾ ਹਾਲੇ ਵੀ ਮੌਜੂਦ ਹੈ।", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "ਵੈੱਬ ਸਾਈਟ ਦਾ ਸਿਰਨਾਵਾਂ:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "ਵੈੱਬ ਸਫ਼ਾ…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- ਐਂਟਰੀ ਚੁਣੋ --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "ਇਸ਼ਤਿਹਾਰ ਜਾਂ ਇਸ਼ਤਿਹਾਰ ਦੀ ਰਹਿੰਦ-ਖੂੰਦ ਦਿਖਾਉਂਦਾ ਹੈ", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "uBlock Origin ਖੋਜਦਾ ਹੈ", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "ਪਰਦੇਦਾਰੀ ਸੰਬੰਧੀ ਮਸਲੇ ਹਨ", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "uBlock Origin ਸਮਰੱਥ ਕਰਨ ਦੇ ਬਾਅਦ ਗੜਬੜ ਹੁੰਦੀ ਹੈ", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "ਬੇਲੋੜੀਆਂ ਟੈਬਾਂ ਜਾਂ ਵਿੰਡੋ ਖੋਲ੍ਹਦਾ ਹੈ", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the web page as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "ਪਰਦੇਦਾਰੀ ਨੀਤੀ", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "ਤਬਦੀਲੀ-ਸੂਚੀ", + "description": "" + }, + "aboutCode": { + "message": "ਸਰੋਤ ਕੋਡ (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "ਯੋਗਦਾਨੀ", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "ਸਰੋਤ ਕੋਡ", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "ਅਨੁਵਾਦ", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "ਫਿਲਟਰ ਸੂਚੀਆਂ", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "ਬਾਹਰੀ ਨਿਰਭਰਤਾਵਾਂ (GPLv3-ਅਨੁਕੂਲ):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO ਦੀਆਂ ਆਪਣੀਆਂ ਫਿਲਟਰ ਸੂਚੀਆਂ CDN ਉੱਤੇ ਆਜ਼ਾਦ ਰੂਪ ਵਿੱਚ ਹੋਸਟ ਕੀਤੀਆਂ ਹਨ:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "A randomly picked CDN is used when a filter list needs to be updated.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "ਫ਼ਾਈਲ ਤੋਂ ਬੈਕਅੱਪ ਲਵੋ…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "ਮੇਰਾ-ublock-ਬੈਕ-ਅੱਪ_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "…ਫ਼ਾਈਲ ਤੋਂ ਬਹਾਲ ਕਰੋ", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "…ਮੂਲ ਸੈਟਿੰਗਾਂ ਬਹਾਲ ਕਰੋ", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "ਡਾਟਾ ਪੜ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ ਜਾਂ ਗ਼ੈਰ-ਵਾਜਬ ਹੈ", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "ਤੁਹਾਡੀਆਂ ਸਾਰੀਆਂ ਸੈਟਿੰਗਾਂ ਨੂੰ ਹਟਾਇਆ ਜਾਵੇਗਾ ਅਤੇ uBlock₀ ਮੁੜ-ਚਾਲੂ ਹੋਵੇਗਾ।\n\nਕੀ uBlock₀ ਨੂੰ ਫੈਕਟਰੀ ਸੈਟਿੰਗਾਂ ਲਈ ਮੁੜ-ਸੈੱਟ ਕਰਨਾ ਹੈ?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "ਨੈੱਟਵਰਕ ਗਲਤੀ: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "ਮੈਂਬਰ ਬਣੋ", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "ਮਿੰਟ ਪਹਿਲਾਂ", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} ਮਿੰਟ ਪਹਿਲਾਂ", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "ਘੰਟਾ ਪਹਿਲਾਂ", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} ਘੰਟੇ ਪਹਿਲਾਂ", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "ਇੱਕ ਦਿਨ ਪਹਿਲਾਂ", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} ਦਿਨ ਪਹਿਲਾਂ", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "ਡੈਸ਼ਬੋਰਡ ਵੇਖਾਓ", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "ਲੌਗਰ ਵੇਖਾਓ", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "ਬੰਦ", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "ਸਫ਼ੇ ਉੱਤੇ ਪਾਬੰਦੀ ਹੈ", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin ਨੇ ਅੱਗੇ ਦਿੱਤੇ ਸਫ਼ੇ ਨੂੰ ਲੋਡ ਹੋਣ ਤੋਂ ਰੋਕਿਆ ਹੈ:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "ਅੱਗੇ ਦਿੱਤੇ ਫਿਲਟਰ ਕਰਕੇ:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "ਬਿਨਾਂ ਪੈਰਾਮੀਟਰ", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "ਲੱਭੋ:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "ਪਿੱਛੇ ਜਾਓ", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "ਇਹ ਵਿੰਡੋ ਬੰਦ ਕਰੋ", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "ਇਸ ਸਾਈਟ ਬਾਰੇ ਮੈਨੂੰ ਮੁੜ ਚੇਤਾਵਨੀ ਨਾ ਦਿਓ", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "{{hostname}} ਲਈ ਸਖ਼ਤ ਪਾਬੰਦੀਆਂ ਲਾਉਣਾ ਅਸਮਰੱਥ ਕਰੋ", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "ਆਰਜ਼ੀ", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "ਪੱਕੇ ਤੌਰ ਉੱਤੇ", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "ਜਾਰੀ ਰੱਖੋ", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "ਕਾਰਨ:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "ਟੋਹੀ", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "ਕਲਾਉਡ ਸਟੋਰੇਜ਼ ਉੱਤੇ ਐਕਸਪੋਰਟ ਕਰੋ", + "description": "tooltip" + }, + "cloudPull": { + "message": "ਕਲਾਉਡ ਸਟੋਰੇਜ਼ ਤੋਂ ਇੰਪੋਰਟ ਕਰੋ", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "ਕਲਾਉਡ ਸਟੋਰੇਜ਼ ਤੋਂ ਇੰਪੋਰਟ ਕਰੋ ਅਤੇ ਮੌਜੂਦਾ ਸੈਟਿੰਗਾਂ ਨਾਲ ਮਿਲਾਓ", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "ਇਸ ਡਿਵਾਈਸ ਦਾ ਨਾਂ:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "ਸਾਵਧਾਨ! ਇਹ ਤਕਨੀਕੀ ਸੈਟਿੰਗਾਂ ਨੂੰ ਆਪਣੇ ਖ਼ਤਰੇ ਮੁਤਾਬਕ ਬਦਲੋ।", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "ਭੇਜੋ", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "ਤਬਦੀਲੀਆਂ ਲਾਗੂ ਕਰੋ", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "ਵਾਪਸ ਲਵੋ", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "ਬਾਈਟ", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "ਫਰੇਮ ਵਿੱਚ ਭਾਗ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਈ…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "ਫਿਲਟਰ ਸੂਚੀ ਲਈ ਮੈਂਬਰ ਬਣੋ…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "ਆਰਜ਼ੀ ਤੌਰ ਉੱਤੇ ਵੱਡੇ ਮੀਡੀਆ ਭਾਗਾਂ ਨੂੰ ਮਨਜ਼ੂਰੀ ਦਿਓ", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "ਸਰੋਤ ਕੋਡ ਵੇਖੋ…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "ਸ਼ਾਰਟਕੱਟ ਲਿਖੋ", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Toggle locked scrolling", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "ਕਲਿੱਪਬੋਰਡ ਵਿੱਚ ਕਾਪੀ ਕਰੋ", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "ਸਭ ਚੁਣੋ", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Toggle cosmetic filtering", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "JavaScript ਨੂੰ ਬਦਲੋ", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Relax blocking mode", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "ਵਰਤੀ ਗਈ ਸਟੋਰੇਜ਼: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "ਲੋਡ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "ਗਲਤੀਆਂ: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" + } +} diff --git a/src/_locales/pl/messages.json b/src/_locales/pl/messages.json index 9526a97889ac4..4802a3a0669c4 100644 --- a/src/_locales/pl/messages.json +++ b/src/_locales/pl/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Nareszcie skuteczne blokowanie reklam, niskie użycie procesora i pamięci.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Nareszcie skuteczny bloker charakteryzujący się niskim użyciem procesora i pamięci.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ – Panel sterowania", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ – Panel sterowania", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Ustawienia", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Uwaga! Masz niezapisane zmiany", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Zewnętrzne filtry", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Zostań", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Moje filtry", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ignoruj", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Moje reguły", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Ustawienia", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Wyjątki", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Listy filtrów", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock — Dziennik żądań sieciowych", - "description":"Title for the logger window" + "1pPageName": { + "message": "Moje filtry", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Informacje", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Moje reguły", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Kliknij, aby włączyć\/wyłączyć uBlock₀ na tej witrynie.\n\nKliknij z wciśniętym klawiszem Ctrl, aby włączyć\/wyłączyć uBlock₀ tylko na tej stronie.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Zaufane witryny", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"Zablokowane żądania", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Skróty", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"na tej stronie", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ – Rejestrator", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} ({{percent}}%)", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "O rozszerzeniu", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"od zainstalowania", - "description":"English: since install" + "supportPageName": { + "message": "Pomoc techniczna", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"lub", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ – Podgląd zasobu", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Kliknij, aby otworzyć panel sterowania", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Ustawienia zaawansowane", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Przejdź do trybu zaznaczania elementów", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Kliknij, aby wyłączyć uBlock₀ dla tej witryny.\n\nKliknij z wciśniętym klawiszem Ctrl,\naby wyłączyć uBlock₀ tylko dla tej strony.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Przejdź do dziennika żądań", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Kliknij, aby wyłączyć uBlock₀ dla tej witryny.\n\nKliknij z wciśniętym klawiszem Ctrl, aby wyłączyć uBlock₀ tylko dla tej strony.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Włącz\/wyłącz blokowanie wyskakujących okien na tej witrynie", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Kliknij, aby włączyć uBlock₀ dla tej witryny.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Włącz\/wyłącz blokowanie elementów multimedialnych", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "zablokowane żądania", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Włącz\/wyłącz kosmetyczne filtrowanie na tej witrynie", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "na tej stronie", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Włącz\/wyłącz blokowanie zdalnych czcionek na tej stronie", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Reguły globalne. W tej kolumnie znajdują się reguły stosowane na wszystkich witrynach.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "od instalacji", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Reguły lokalne. W tej kolumnie znajdują się reguły stosowane tylko na bieżącej witrynie.\nReguły lokalne zastępują reguły globalne.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "lub", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Kliknij, aby zastosować zmiany na stałe.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Zablokowane na tej stronie", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Kliknij, aby przywrócić zmiany.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Zablokowane od instalacji", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"wszystko", - "description":"" + "popupDomainsConnected_v2": { + "message": "Domeny podłączone", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"obrazki", - "description":"" + "popupTipDashboard": { + "message": "Otwórz panel sterowania", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"domeny zewnętrzne", - "description":"" + "popupTipZapper": { + "message": "Przejdź do trybu usuwania elementów", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"zewnętrzne css\/obrazki", - "description":"" + "popupTipPicker": { + "message": "Przejdź do trybu zaznaczania elementów", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"zagnieżdżone skrypty", - "description":"" + "popupTipLog": { + "message": "Otwórz rejestrator", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"skrypty z tej domeny", - "description":"" + "popupTipReport": { + "message": "Zgłoś problem z tą stroną", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"skrypty z zewnętrznej domeny", - "description":"" + "popupTipNoPopups": { + "message": "Włącz/wyłącz blokowanie wyskakujących okien na tej witrynie", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"ramki z zewnętrznej domeny", - "description":"" + "popupTipNoPopups1": { + "message": "Kliknij, aby zablokować wszystkie wyskakujące okna na tej witrynie", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"Podłączone domeny", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Kliknij, aby nie blokować wyskakujących okien na tej witrynie", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} z {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Włącz/wyłącz blokowanie dużych elementów multimedialnych na tej witrynie", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Utwórz", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Kliknij, aby zablokować duże elementy multimedialne na tej witrynie", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Wybierz", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Kliknij, aby nie blokować dużych elementów multimedialnych na tej witrynie", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Zamknij", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Włącz/wyłącz kosmetyczne filtrowanie na tej witrynie", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Podgląd", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Kliknij, aby wyłączyć filtrowanie kosmetyczne na tej witrynie", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Filtry sieciowe", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Kliknij, aby włączyć filtrowanie kosmetyczne na tej witrynie", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Filtry kosmetyczne", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Włącz/wyłącz blokowanie zdalnych czcionek na tej witrynie", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Kliknięcie, kliknięcie z Ctrl", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Kliknij, aby zablokować zdalne czcionki na tej witrynie", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Zablokuj element", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Kliknij, aby nie blokować zdalnych czcionek na tej witrynie", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Ukrywaj symbole zastępcze zablokowanych elementów", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Kliknij, aby wyłączyć JavaScript na tej witrynie", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Wyświetlaj liczbę zablokowanych żądań na ikonie rozszerzenia", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Kliknij, aby JavaScript nie był już wyłączony na tej witrynie", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Nie wyświetlaj podpowiedzi", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Wyskakujące okna", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Korzystaj z menu kontekstowego w stosownych przypadkach", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Duże elementy multimedialne", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Zastosuj schemat kolorów przyjazny osobom niedowidzącym", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Filtrowanie kosmetyczne", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Włącz obsługę dysków w chmurze", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Zdalne czcionki", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Włącz funkcje zaawansowane (Informacje<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Wyłącz wstępne pobieranie, by uniknąć połączeń z zablokowanymi zapytaniami sieciowymi", - "description":"English: " + "popupMoreButton_v2": { + "message": "Więcej", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Nie śledź kliknięć odnośników", - "description":"English: " + "popupLessButton_v2": { + "message": "Mniej", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Zapobiegaj wyciekom adresu IP poprzez interfejs WebRTC", - "description":"English: " + "popupTipGlobalRules": { + "message": "Reguły globalne:\nW tej kolumnie znajdują się reguły stosowane na wszystkich witrynach.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Działanie domyślne", - "description":"" + "popupTipLocalRules": { + "message": "Reguły lokalne:\nW tej kolumnie znajdują się reguły stosowane tylko na bieżącej witrynie.\nReguły lokalne zastępują reguły globalne.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Te ustawienia mogą być zastąpione przez ustawienia danej witryny", - "description":"" + "popupTipSaveRules": { + "message": "Kliknij, aby zastosować zmiany na stałe.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Wyłącz filtrowanie kosmetyczne", - "description":"" + "popupTipRevertRules": { + "message": "Kliknij, aby odrzucić zmiany.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Blokuj elementy multimedialne większe niż {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "wszystko", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blokuj zdalne czcionki", - "description":"" + "popupImageRulePrompt": { + "message": "obrazki", + "description": "" }, - "settingsStorageUsed":{ - "message":"Użycie pamięci masowej: {{value}} bajtów", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "domeny zewnętrzne", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Ostatnie przywrócenie wykonano:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "zewnętrzne CSS/obrazki", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Ostatnią kopię zapasową wykonano:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "zagnieżdżone skrypty", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"Filtry sieciowe: {{netFilterCount}} ÷ Filtry kosmetyczne: {{cosmeticFilterCount}} z:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "skrypty tej samej domeny", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"użytych {{used}} z {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "skrypty z domen zewnętrznych", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Automatycznie aktualizuj listy filtrów", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "ramki z domen zewnętrznych", + "description": "" }, - "3pUpdateNow":{ - "message":"Aktualizuj teraz", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "podłączone domeny", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Wyczyść całą pamięć podręczną", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} z {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Przetwarzaj i stosuj filtry kosmetyczne", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Wersja", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Włączenie tej funkcji skutkuje przetwarzaniem i używaniem filtrów kompatybilnych z dodatkiem Adblock Plus służących do ukrywania elementów<\/a>. Są to filtry kosmetyczne i służą do ukrycia elementów uważanych za wizualnie uciążliwe, których nie można zablokować przez filtry sieciowe.<\/p>

      Włączenie tej funkcji powoduje zwiększenie użycia pamięci przez uBlock₀.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "skrypt", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignoruj ogólne filtry kosmetyczne", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "ramka", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Ogólne filtry kosmetyczne, to filtry przeznaczone do stosowania na wszystkich stronach internetowych.

      Choć dobrze obsługiwane przez uBlock₀ mogą na niektórych stronach, szczególnie dużych i otwartych przez dłuższy czas, przyczyniać się do obciążenia procesora i pamięci operacyjnej.

      Włącznie tej funkcji wyeliminuje obciążenie procesora i pamięci operacyjnej powodowane stosowaniem filtrów kosmetycznych, a także zmniejszy zapotrzebowanie na pamięć samego uBlocka₀.

      Zaleca się włączenie tej funkcji na mniej wydajnych urządzeniach.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Utwórz", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Listy zablokowanych hostów", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Wybierz", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Zastosuj zmiany", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Zamknij", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Reklamy", - "description":"English: Ads" + "pickerPreview": { + "message": "Podgląd", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Prywatność", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Filtry sieciowe", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Domeny ze złośliwym oprogramowaniem", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Filtry kosmetyczne", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Serwisy społecznościowe", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Klik, Ctrl + klik", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Wielofunkcyjne", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Zablokuj element…", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Regiony, języki", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Ukrywaj symbole zastępcze zablokowanych elementów", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Specjalne", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Wyświetlaj liczbę zablokowanych żądań na ikonie rozszerzenia", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"W jednym wierszu może być tylko jeden adres URL. Wiersze poprzedzone znakiem wykrzyknika [ ! ] i błędne adresy URL będą pomijane.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Nie wyświetlaj dymków podpowiedzi", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Zastosuj", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Używaj menu kontekstowego, gdzie to możliwe", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"wyczyść pamięć podręczną", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Interfejs przyjazny osobom z zaburzeniami widzenia kolorów", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"jest dostępna nowa wersja", - "description":"English: new version available" + "settingsAppearance": { + "message": "Wygląd", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"nieaktualna", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Motyw", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Ostatnio zaktualizowano: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Własny kolor akcentujący", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"W jednym wierszu może być tylko jeden filtr. Filtrem może być nazwa hosta lub filtr kompatybilny z dodatkiem AdBlock Plus. Wiersze poprzedzone znakiem wykrzyknika [ ! ] będą pomijane.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Włącz obsługę zapisu ustawień w chmurze", + "description": "" }, - "1pImport":{ - "message":"Importuj i dołącz", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Jestem zaawansowanym użytkownikiem", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Eksportuj", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Wyłącz wstępne pobieranie (by uniknąć połączeń z zablokowanymi zapytaniami sieciowymi)", + "description": "English: " }, - "1pExportFilename":{ - "message":"ublock-statyczne-filtry_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Wyłącz śledzenie kliknięć odnośników", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Zastosuj zmiany", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Zapobiegaj ujawnianiu lokalnego adresu IP poprzez interfejs WebRTC", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Stałe reguły", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Działanie domyślne", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Tymczasowe reguły", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Te ustawienia mogą być zastąpione przez ustawienia danej witryny", + "description": "" }, - "rulesRevert":{ - "message":"Przywróć", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Wyłącz filtrowanie kosmetyczne", + "description": "" }, - "rulesCommit":{ - "message":"Zatwierdź", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Blokuj elementy multimedialne większe niż {{input}} KiB", + "description": "" }, - "rulesEdit":{ - "message":"Edytuj", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Blokuj zdalne czcionki", + "description": "" }, - "rulesEditSave":{ - "message":"Zapisz", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Wyłącz JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Odrzuć", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Blokuj raporty CSP", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Importuj z pliku…", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Pokaż rzeczywistą nazwę domeny (CNAME)", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Eksportuj do pliku…", - "description":"" + "settingsAdvanced": { + "message": "Zaawansowane", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"ublock-dynamiczne-reguly_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Funkcje odpowiednie tylko dla użytkowników z przygotowaniem technicznym", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Lista reguł dynamicznego filtrowania.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "Ustawienia zaawansowane", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Składnia reguły: źródło cel typ akcja<\/code> (pełna dokumentacja<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Ostatnie przywrócenie wykonano:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Lista nazw hostów, na których uBlock₀ zostanie wyłączony. W jednym wierszu może być tylko jeden wpis. Błędne nazwy hostów zostaną pominięte.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Ostatnią kopię zapasową wykonano:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Importuj i dołącz", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "Filtry sieciowe: {{netFilterCount}} + filtry kosmetyczne: {{cosmeticFilterCount}} z:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Eksportuj", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "użytych {{used}} z {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"ublock-lista-wyjatkow_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Automatycznie aktualizuj listy filtrów", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Zastosuj zmiany", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Zaktualizuj teraz", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Typ", - "description":"English: Type" + "3pPurgeAll": { + "message": "Wyczyść całą pamięć podręczną", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Domena", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Przetwarzaj i stosuj filtry kosmetyczne", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"Adres URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Filtry kosmetyczne służą do ukrywania elementów stron internetowych uważanych za wizualne uciążliwe, które to nie mogą zostać zablokowane za pomocą filtrów żądań sieciowych.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filtr", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignoruj ogólne filtry kosmetyczne", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Wszystkie", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Ogólne filtry kosmetyczne, to filtry które mają być zastosowane na wszystkich stronach internetowych. Włącznie tej funkcji zmniejszy obciążenie procesora i pamięci.\n\nZaleca się włączenie tej funkcji na mniej wydajnych urządzeniach.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Ukryte żądania", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Zawieś aktywność sieciową do czasu załadowania wszystkich list filtrów", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"filtruj wpisy", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Listy zablokowanych hostów", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Maksymalna liczba wyświetlanych wpisów", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Zastosuj zmiany", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Kontekst:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Wbudowane", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Typ:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Reklamy", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Dynamiczne filtrowanie URL", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Prywatność", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Filtrowanie statyczne", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Ochrona przed złośliwym oprogramowaniem, bezpieczeństwo", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} żądania sieciowe {{type}}, których adres URL jest zgodny z: {{url}} {{br}}i pochodzi {{origin}}, {{importance}} filtr znajduje się na liście wyjątków.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Widety społecznościowe", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blokuj", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Powiadomienia o ciasteczkach", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Zezwalaj na", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Elementy irytujące", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"typu „{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Wielofunkcyjne", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"każdego typu", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Regiony, języki", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"z „{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Własne", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"z dowolnego miejsca", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Importuj…", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"z wyjątkiem, gdy", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Jeden adres URL listy na linię. Błędne adresy URL będą pomijane.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"nawet, jeśli", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Nieaktualna.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Filtr statyczny {{filter}} znajdujący się w:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "zobacz zawartość", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Dziennik zmian", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Zaktualizowano: {{ago}}.\nKliknij, aby wymusić aktualizację.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Informacje", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Aktualizowanie…", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Pomoc", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Błąd sieci uniemożliwił aktualizację zasobów.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Kod źródłowy (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Nie dodawaj filtrów z niezaufanych źródeł.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Współtwórcy", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Włącz moje własne filtry", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Utwórz kopię zapasową", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Zezwól na filtry wymagające zaufania", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"ublock-kopia-zapasowa_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Importuj i dołącz…", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Przywróć z kopii…", - "description":"English: Restore from file..." + "1pExport": { + "message": "Eksportuj…", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Przywróć ustawienia domyślne…", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "ublock-statyczne-filtry_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Wszystkie twoje ustawienia zostaną zastąpione ustawieniami z kopii stworzonej {{time}}. Po zakończeniu uBlock₀ zostanie uruchomiony ponownie.\n\nPrzywrócić ustawienia z kopii zapasowej?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Zastosuj zmiany", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Danych nie można odczytać lub są nieprawidłowe", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Stałe reguły", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Wszystkie twoje ustawienia zostaną usunięte i uBlock₀ zostanie ponownie uruchomiony.\n\nCzy chcesz przywrócić ustawienia domyślne?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Tymczasowe reguły", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Nie można się połączyć z {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Przywróć", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Dodać następujący URL do twojej listy filtrów?\n\nTytuł: \"{{title}}\"\nAdres: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Zatwierdź", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"minutę temu", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Edytuj", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} min. temu", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Zapisz", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"godzinę temu", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Odrzuć", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} godz. temu", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Importuj z pliku…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"wczoraj", - "description":"English: a day ago" + "rulesExport": { + "message": "Eksportuj do pliku…", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} dni temu", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "ublock-dynamiczne-reguly_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Panel sterowania", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Lista reguł dynamicznego filtrowania.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Dziennik żądań", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Składnia reguły: źródło cel typ akcja (pełna dokumentacja).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"wyłączony", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Sortowanie:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock₀ zablokował wczytywanie strony", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Typ reguły", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Powodem zablokowania jest filtr", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Źródło", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"bez parametrów", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Miejsce docelowe", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Filtr znajduje się na liście:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Wytyczne zaufanych witryn nakazują, na których stronach uBlock Origin powinien zostać wyłączony. Jeden wpis na linię.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Wstecz", - "description":"English: Go back" + "whitelistImport": { + "message": "Importuj i dołącz…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Zamknij to okno", - "description":"English: Close this window" + "whitelistExport": { + "message": "Eksportuj…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Wyłącz skrupulatne blokowanie na {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "ublock-zaufane-witryny_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Tymczasowo", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Zastosuj zmiany", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Na stałe", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Typ", + "description": "English: Type" }, - "cloudPush":{ - "message":"Eksport do dysku w chmurze", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Domena", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Import z dysku w chmurze", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "Adres URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Importuj z chmury i połącz z aktualnymi ustawieniami", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filtr", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Wszystkie", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Nazwa urządzenia:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Bez kart", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Wyślij", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Aktywna karta", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Przywróć", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Przeładuj zawartość karty", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"bajty", - "description":"" + "loggerDomInspectorTip": { + "message": "Przełącz inspektor DOM", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Tymczasowo zezwalaj na wyświetlanie dużych elementów multimedialnych", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Przełącz panel popup", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"Ten wpis musi być ostatni", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: Rejestrator (ang.)", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Wyczyść rejestr", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Pauzuj rejestrowanie (porzuć wszystkie przychodzące dane)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Wznów rejestrowanie", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Przełącz filtrowanie rejestru", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filtruj zawartość rejestru", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Opcje filtrowania rejestru", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Nie", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "akcje", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "zablokowane", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "dozwolone", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "zmodyfikowane", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "własna domena", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "domeny zewnętrzne", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Szczegóły", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filtr", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Lista filtrów", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Reguła", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Kontekst", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Kontekst główny", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Lokalność", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Typ", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "Adres URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Reguła URL", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Kontekst:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Typ:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Filtr statyczny", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} żądania sieciowe {{type}}, których adres URL jest zgodny z: {{url}} {{br}}i pochodzi {{origin}}, {{importance}} filtr znajduje się na liście wyjątków.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Blokuj", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Zezwalaj na", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "typu „{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "każdego typu", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "z „{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "z dowolnego miejsca", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "z wyjątkiem, gdy", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "nawet, jeśli", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Filtr statyczny {{filter}} znajdujący się w:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Filtr statyczny nie został znaleziony w aktualnie włączonych listach filtrów", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Wpisy rejestru niespełniające wszystkich trzech warunków będą automatycznie porzucane:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Zachowuj wpisy z ostatnich {{input}} minut", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Zachowuj nie więcej niż {{input}} przeładowań strony na kartę", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Zachowuj nie więcej niż {{input}} wpisów na kartę", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Użyj {{input}} linie na wpis w widoku poszerzonym", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Ukryj kolumny:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Czas", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filtr/reguła", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Kontekst", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Lokalność", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Lista", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tabela", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Bez formatowania", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Otwórz", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Utwórz nowy raport", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Znajdź podobne raporty", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Dokumentacja", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Przeczytaj dokumentację na uBlock/wiki, by nauczyć się obsługi uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Pytania oraz pomoc", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Odpowiedzi na pytania oraz inne rodzaje pomocy są udzielane na subreddicie /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Problemy z filtrami/błędy w wyświetlaniu stron", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Zgłoś problemy z filtrami na poszczególnych stronach na trackerze błędów uBlockOrigin/uAssets. Wymaga konta GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Ważne: Unikaj innych podobnie działających dodatków razem z uBlock Origin, ponieważ może to powodować problemy z filtrami na poszczególnych stronach.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Porada: Upewnij się, że listy filtrów są aktualne. Rejestrator jest głównym narzędziem do diagnozowania problemów związanych z filtrami.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Zgłaszanie błędów", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Zgłoś problemy związane bezpośrednio z uBlock Origin na trackerze błędów uBlockOrigin/uBlock-issue. Wymaga konta GitHub.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Informacje pomocne w rozwiązywaniu problemów", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Poniżej znajdują się informacje techniczne które mogą być użyteczne gdy wolontariusze próbują pomóc ci w rozwiązaniu problemu.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Zgłoś problem z filtrem", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Aby uniknąć obciążania wolontariuszy zduplikowanymi zgłoszeniami, sprawdź, czy problem nie został już zgłoszony.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Listy filtrów są aktualizowane codziennie. Sprawdź, czy twój problem nie został już rozwiązany w najnowszych listach filtrów.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Sprawdź, czy problem nadal występuje po odświeżeniu problematycznej strony internetowej.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Adres strony internetowej:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Strona internetowa…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "— Wybierz pozycję —", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Wyświetla reklamy lub ich pozostałości", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Ma nakładki lub inne niedogodności", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Wykrywa uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Ma problemy związane z prywatnością", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Działa nieprawidłowo, gdy włączony jest uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Otwiera niepożądane karty lub okna", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Prowadzi do szkodliwego oprogramowania, phishingu", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Oznacz stronę internetową jako „NSFW” („Not Safe For Work (nieodpowiednią w pracy)”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Polityka prywatności", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Informacje o wydaniu", + "description": "" + }, + "aboutCode": { + "message": "Kod źródłowy (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Współtwórcy", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Kod źródłowy", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Tłumaczenia", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Listy filtrów", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Zewnętrzne zależności (kompatybilne z GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Własne listy filtrów uBO są dobrowolnie hostowane w następujących sieciach CDN:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Losowo wybrana sieć CDN zostanie użyta, gdy lista filtrów będzie wymagała aktualizacji.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Utwórz kopię zapasową…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "ublock-kopia-zapasowa_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Przywróć kopię z pliku…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Przywróć ustawienia domyślne…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Wszystkie twoje ustawienia zostaną zastąpione ustawieniami z kopii stworzonej {{time}}. Po zakończeniu uBlock₀ zostanie uruchomiony ponownie.\n\nPrzywrócić ustawienia z kopii zapasowej?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Danych nie można odczytać lub są nieprawidłowe", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Wszystkie twoje ustawienia zostaną usunięte i uBlock₀ zostanie ponownie uruchomiony.\n\nCzy chcesz przywrócić ustawienia domyślne?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Błąd sieci: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Subskrybuj", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "minutę temu", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} min. temu", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "godzinę temu", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} godz. temu", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "wczoraj", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} dni temu", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Panel sterowania", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Pokaż rejestrator", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "wyłączony", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Strona zablokowana", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin zablokował wczytywanie następującej strony:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Powodem zablokowania jest filtr", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "bez parametrów", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Filtr znajduje się na liście:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Wstecz", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Zamknij to okno", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Nie ostrzegaj mnie ponownie o tej stronie", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Wyłącz rygorystyczne blokowanie dla {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Tymczasowo", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Na stałe", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Kontynuuj", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Zablokowana strona chce przekierować na inną witrynę. Jeśli zdecydujesz się kontynuować, przejdziesz bezpośrednio do: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Powód:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "złośliwa", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "śledząca", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "podejrzana", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Eksportuj do chmury", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importuj z chmury", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importuj z chmury i połącz z aktualnymi ustawieniami", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Nazwa urządzenia:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Uwaga! Te ustawienia zmieniasz na własne ryzyko.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Wyślij", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Zastosuj zmiany", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Przywróć", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bajty", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Zablokuj element w ramce…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Subskrybuj listę filtrów…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Tymczasowo zezwalaj na wyświetlanie dużych elementów multimedialnych", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Pokaż źródło…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Wprowadź skrót", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Przełącz przewijanie synchroniczne", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Kopiuj do schowka", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Zaznacz wszystko", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Włącz/wyłącz filtrowanie kosmetyczne", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Włącz/wyłącz JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Rozluźnij tryb blokowania", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Użycie pamięci dyskowej: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Kliknij, aby załadować", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Błędy: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Podczas uruchamiania przeglądarki nie można prawidłowo filtrować.\nAby zapewnić prawidłowe filtrowanie, wczytaj ponownie stronę.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Ten wpis musi być ostatni", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/pt_BR/messages.json b/src/_locales/pt_BR/messages.json index 1b7f968bf33cf..a8c575b011a80 100644 --- a/src/_locales/pt_BR/messages.json +++ b/src/_locales/pt_BR/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Finalmente, um bloqueador eficiente. Com baixo uso de memória e CPU.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Até que enfim, um bloqueador eficiente. Bem otimizado para CPU e memória.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Painel", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Painel", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Configurações", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Aviso! Você tem mudanças não salvas", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Filtros de terceiros", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Ficar", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Meus filtros", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ignorar", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Minhas regras", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Configurações", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Lista branca", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Listas de filtros", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Registro de Eventos", - "description":"Title for the logger window" + "1pPageName": { + "message": "Meus filtros", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Sobre", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Minhas regras", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Clique: desativa\/ativa o uBlock₀ para este site.\n\nCtrl+clique: desativa o uBlock₀ apenas nesta página.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Sites confiáveis", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"pedidos bloqueados", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Atalhos", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"nesta página", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Coletor", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} ou {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Sobre", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"desde a instalação", - "description":"English: since install" + "supportPageName": { + "message": "Suporte", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"ou", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Visualizador de recursos", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Clique para abrir o painel de controle", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Configurações avançadas", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Entrar no modo de seleção de elemento", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Clique: desativa/ativa o uBlock₀ neste site.\n\nCtrl+clique: desativa o uBlock₀ só nesta página.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Abrir registro de eventos", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Clique para desativar o uBlock₀ neste site.\n\nCtrl+clique para desativar o uBlock₀ só nesta página.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Alternar o bloqueio de todos popups para este site", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Clique para ativar o uBlock₀ neste site.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Alternar o bloqueio de grandes elementos de mídia para este site", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "requisições bloqueadas", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Alternar a filtragem cosmética para este site", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "nesta página", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Alternar o bloqueio de fontes remotas para este site", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Regras globais: esta coluna é para as regras que se aplicam a todos os sites.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "desde a instalação", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Regras locais: esta coluna é para as regras que se aplicam somente ao site atual.\nRegras locais substituem regras globais.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "ou", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Clique para fazer suas mudanças permanentes.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Bloqueios nesta página", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Clique para reverter suas mudanças.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Bloqueios desde a instalação", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"todos", - "description":"" + "popupDomainsConnected_v2": { + "message": "Domínios conectados", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"imagens", - "description":"" + "popupTipDashboard": { + "message": "Abrir painel", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"terceiros", - "description":"" + "popupTipZapper": { + "message": "Entrar no modo de remoção de elementos", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"css de terceiros\/imagens", - "description":"" + "popupTipPicker": { + "message": "Entrar no modo de seleção de elemento", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"scripts internos", - "description":"" + "popupTipLog": { + "message": "Abrir o coletor", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"scripts do domínio", - "description":"" + "popupTipReport": { + "message": "Reportar um problema com este site", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"scripts de terceiros", - "description":"" + "popupTipNoPopups": { + "message": "Alternar o bloqueio de todos os pop-ups neste site", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"frames de terceiros", - "description":"" + "popupTipNoPopups1": { + "message": "Clique pra bloquear todos os pop-ups neste site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"domínios conectados", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Clique pra não mais bloquear todos os pop-ups neste site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} de {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Habilitar o bloqueio de grandes elementos de mídia neste site", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Criar", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Clique pra bloquear grandes elementos de mídia neste site", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Selecionar", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Clique pra não mais bloquear grandes elementos de mídia neste site", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Sair", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Habilitar a filtragem cosmética neste site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Pré-visualizar", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Clique pra desativar a filtragem cosmética neste site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Filtros de rede", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Clique pra ativar a filtragem cosmética neste site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Filtros cosméticos", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Habilitar o bloqueio de fontes remotas neste site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Clique, Ctrl-clique", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Clique pra bloquear fontes remotas neste site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Bloquear elemento", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Clique para deixar de bloquear fontes remotas neste site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Ocultar os espaços ocupados por elementos bloqueados", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Clique para desativar o JavaScript neste site", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Mostrar o número de pedidos bloqueados no ícone", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Clique para deixar de desativar o JavaScript neste site", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Desativar dicas", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Janelas pop-up", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Utilizar o menu de contexto onde apropriado", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Grandes elementos de mídia", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Cores amigáveis para daltônicos", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Filtragem cosmética", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Ativar suporte de armazenamento na nuvem", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Fontes remotas", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Sou um usuário avançado (Leitura necessária<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Desativar pré-chamadas (para impedir qualquer conexão de pedidos de rede bloqueados)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Mais", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Desativar auditoria em hyperlinks", - "description":"English: " + "popupLessButton_v2": { + "message": "Menos", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Impedir o protocolo WebRTC de vazar meu endereço de IP local", - "description":"English: " + "popupTipGlobalRules": { + "message": "Regras globais: esta coluna é para as regras as quais se aplicam a todos os sites.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Comportamento padrão", - "description":"" + "popupTipLocalRules": { + "message": "Regras locais: esta coluna é para regras as quais se aplicam só ao site atual.\nRegras locais substituem regras globais.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Estes comportamentos padrões podem ser substituídos em uma base por site", - "description":"" + "popupTipSaveRules": { + "message": "Clique pra tornar suas mudanças permanentes.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Desativar filtragem cosmética", - "description":"" + "popupTipRevertRules": { + "message": "Clique pra reverter suas mudanças.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Bloquear elementos de mídia maiores que {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "todos", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Bloquear fontes remotas", - "description":"" + "popupImageRulePrompt": { + "message": "imagens", + "description": "" }, - "settingsStorageUsed":{ - "message":"Armazenamento utilizado: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "de terceiros", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Última restauração:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "CSS/imagens de terceiros", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Último backup:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "scripts inline", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} filtros de rede + {{cosmeticFilterCount}} filtros cosméticos de:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "scripts primários", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} usado(s) de {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "scripts de terceiros", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Atualizar automaticamente as listas de filtros", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "frames de terceiros", + "description": "" }, - "3pUpdateNow":{ - "message":"Atualizar agora", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "domínios conectados", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Limpar todos caches", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} de {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Analisar e aplicar filtros cosméticos", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Versão", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Esta opção permite a análise e aplicação de filtros de “ocultação de elementos” compatíveis com o Adblock Plus<\/a>. Estes filtros são essencialmente cosméticos, servindo para ocultar elementos em uma página da web que são consideradas um incômodo visual, e que não podem ser bloqueados pelo motor de filtragem baseado em pedidos de rede.<\/p>

      Ativando este recurso aumenta o consumo de memória do uBlock₀.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignorar filtros cosméticos genéricos", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "frame", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Os filtros cosméticos genéricos são os filtros cosméticos que são destinados a serem aplicados em todos os sites.

      Embora manuseados eficientemente pelo uBlock₀, os filtros cosméticos genéricos podem ainda contribuir para um grande uso de memória e CPU em algumas páginas, especialmente as grandes e duradouras.

      Habilitando esta opção irá eliminar a sobrecarga da memória e cpu adicionadas nas páginas de web como resultado da aplicação dos filtros cosméticos genéricos e também irá reduzir o consumo da memória pelo uBlock₀ em si.

      É recomendado que ative esta opção em dispositivos menos poderosos.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Criar", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Listas de servidores bloqueados", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Escolher", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Aplicar alterações", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Sair", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Anúncios", - "description":"English: Ads" + "pickerPreview": { + "message": "Pré-visualizar", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Privacidade", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Filtros de rede", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Domínios de malware", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Filtros cosméticos", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Social", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Clique, Ctrl-clique", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Multiuso", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Bloquear elemento...", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Regiões, idiomas", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Ocultar os espaços reservados dos elementos bloqueados", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Personalizado", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Mostrar o número de requisições bloqueadas no ícone", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Uma URL por linha. As linhas prefixadas com ‘!’ serão ignoradas. URLs inválidas serão silenciosamente ignoradas.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Desativar dicas das ferramentas", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Analisar", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Fazer uso do menu de contexto aonde apropriado", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"limpar cache", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Cores amigáveis para daltônicos", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"nova versão disponível", - "description":"English: new version available" + "settingsAppearance": { + "message": "Aparência", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"desatualizada", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Tema", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Última atualização: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Cor de destaque personalizada", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Adicione um filtro por linha. Um filtro pode ser um simples nome de servidor ou um filtro compatível com o Adblock Plus. Linhas prefixadas com ‘!’ serão ignoradas.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Ativar suporte de armazenamento na nuvem", + "description": "" }, - "1pImport":{ - "message":"Importar e adicionar", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Eu sou um usuário avançado", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Exportar", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Desativar pré-solicitações (para impedir qualquer solicitação de rede a recursos bloqueados)", + "description": "English: " }, - "1pExportFilename":{ - "message":"meus-filtros-estáticos-do-ublock_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Desativar auditoria de hyperlinks", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Aplicar alterações", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Impedir o WebRTC de vazar endereços de IP locais", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Regras permanentes", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Comportamento padrão", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Regras temporárias", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Estes comportamentos padrão podem ser substituídos numa base por site", + "description": "" }, - "rulesRevert":{ - "message":"Reverter", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Desativar filtragem cosmética", + "description": "" }, - "rulesCommit":{ - "message":"Aplicar", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Bloquear elementos de mídia maiores do que {{input}} KBs", + "description": "" }, - "rulesEdit":{ - "message":"Editar", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Bloquear fontes remotas", + "description": "" }, - "rulesEditSave":{ - "message":"Salvar", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Desativar JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Descartar", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Bloquear relatórios de CSPs", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Importar do arquivo...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Revelar nomes canônicos", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Exportar para arquivo", - "description":"" + "settingsAdvanced": { + "message": "Avançado", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"minhas-regras-dinâmicas-do-ublock.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Recursos adequados só pra usuários técnicos.", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Lista de suas regras de filtragem dinâmica.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "configurações avançadas", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Regras de sintaxe: origem destino tipo ação<\/code> (documentação completa<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Última restauração:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Sua lista de exceções de servidores para qual o uBlock₀ será desativado. Uma entrada por linha. Servidores inválidos serão silenciosamente ignorados.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Último backup:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Importar e adicionar", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} filtros de rede + {{cosmeticFilterCount}} filtros cosméticos de:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Exportar", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} usados dos {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"minha-listabranca-ublock_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Auto-atualizar as listas de filtros", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Aplicar alterações", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Atualizar agora", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Tipo", - "description":"English: Type" + "3pPurgeAll": { + "message": "Limpar todos os caches", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Domínio", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Analisar e impor filtros cosméticos", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Os filtros cosméticos servem para ocultar elementos em uma página os quais são considerados um incômodo visual e os quais não podem ser bloqueados pelos motores de filtragem baseadas em solicitações de rede.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filtro", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignorar filtros cosméticos genéricos", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Tudo", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Os filtros cosméticos genéricos são aqueles filtros cosméticos os quais são destinados a serem aplicados em todos os sites. Ativar esta opção eliminará a sobrecarga da memória e da CPU adicionada as páginas como um resultado de lidar com filtros cosméticos genéricos.\n\nÉ recomendado ativar esta opção em dispositivos mais lentos.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Bastidores", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Suspender atividade da rede até que todas as listas de filtros estejam carregadas", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"filtrar entradas de registro", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Listas de hospedeiros bloqueados", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Número máximo de entradas de registro", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Aplicar mudanças", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Contexto:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Embutidos", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tipo:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Anúncios", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Filtragem de URL dinâmica", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Privacidade", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Filtragem estática", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Proteção contra malware, segurança", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} pedidos de rede de {{type}} {{br}}que corresponde ao endereço de URL {{url}} {{br}}e que tem origem de {{origin}},{{br}}{{importance}} existir um filtro de exceção correspondente.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Widgets sociais", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Bloquear", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Avisos dos cookies", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Permitir", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Aborrecimentos", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tipo “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Multi-propósito", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"qualquer tipo", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Regiões, idiomas", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"de “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Personalizar", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"de qualquer lugar", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Importar...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"exceto quando", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Uma URL por linha. As URLs inválidas serão ignoradas silenciosamente.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"mesmo se", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Desatualizada.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Filtro estático {{filter}} encontrado em:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "visualizar conteúdo", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Registro de alterações", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Última atualização: {{ago}}.\nClique para forçar uma atualização.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Documentação", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Atualizando...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Suporte", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Um erro de rede impediu o recurso de ser atualizado.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Código-fonte (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Não adicione filtros de fontes não confiáveis.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Contribuidores", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Ativar meus filtros personalizados", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Backup para arquivo", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Permitir os filtros personalizados que requerem confiança", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"meu-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Importar e anexar…", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Restaurar do arquivo...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Exportar", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Restaurar configurações padrão...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "meus-filtros-estáticos-do-ublock_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Todas as suas configurações serão substituídas pelos dados do backup salvo em {{time}}, e o uBlock₀ será reiniciado. \n\nDeseja substituir todas as configurações existentes usando os dados do backup?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Aplicar mudanças", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Os dados não podem ser lidos ou são inválidos", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Regras permanentes", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Todas as suas configurações serão apagadas, e o uBlock₀ será reiniciado. \n\nDeseja restaurar as configurações originais do uBlock₀?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Regras temporárias", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Não foi possível conectar à {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Reverter", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Adicionar a seguinte URL na sua lista de filtros personalizados?\n\nTítulo: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Confirmar", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"um minuto atrás", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Editar", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minutos atrás", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Salvar", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"uma hora atrás", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Descartar", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} horas atrás", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Importar do arquivo...", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"um dia atrás", - "description":"English: a day ago" + "rulesExport": { + "message": "Exportar para um arquivo…", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} dias atrás", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "minhas-regras-dinâmicas-do-ublock_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Mostrar Painel", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Lista das suas regras de filtragem dinâmica.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Mostrar Registro de Eventos", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Regras de sintaxe: fonte destino tipo ação (documentação completa).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"desativado", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Organizar:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin impediu a seguinte página de ser carregada:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Tipo de regra", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Por causa do seguinte filtro", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Fonte", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"sem parâmetros", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Destino", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Encontrado em:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "As diretivas dos sites confiáveis ditam em quais páginas o uBlock Origin deve ser desativado. Uma entrada por linha. ", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Voltar", - "description":"English: Go back" + "whitelistImport": { + "message": "Importar e anexar…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Fechar esta janela", - "description":"English: Close this window" + "whitelistExport": { + "message": "Exportar", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Desativar o bloqueio estrito para {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "meus-sites-confiaveis-do-ublock_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Temporariamente", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Aplicar mudanças", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Permanentemente", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Tipo", + "description": "English: Type" }, - "cloudPush":{ - "message":"Exportar para armazenamento na nuvem", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Domínio", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Importar do armazenamento em nuvem", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Importar do armazenamento em nuvem e fundir com as configurações atuais", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filtro", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Todos", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Nome deste dispositivo:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Sem abas", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Enviar", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Aba atual", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Reverter", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Recarregar o conteúdo da aba", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"bytes", - "description":"" + "loggerDomInspectorTip": { + "message": "Habilitar o inspetor de DOM", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Permitir temporariamente grandes elementos de mídia", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Habilitar o painel pop-up", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"Esta entrada deve ser a última", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "Wiki do uBlock Origin: O coletor", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Limpar coletor", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Pausar coletor (descartar todos os dados futuros)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Despausar coletor", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Habilitar filtragem do coletor", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filtrar conteúdo do coletor", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Opções de filtragem do coletor", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Não", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "importante", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "bloqueado", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "permitido", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "modificado", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "primário", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "de terceiros", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Detalhes", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filtro", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Lista de filtros", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Regra", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Contexto", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Contexto raiz", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Originário/de terceiros", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Tipo", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Regra da URL", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Contexto:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Tipo:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Filtro estático", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} solicitações de rede do tipo {{type}} {{br}}onde o endereço da URL corresponde a {{url}} {{br}} e que origina de {{origin}},{{br}}{{importance}} há um filtro de exceção correspondente.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Bloquear", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Permitir", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "tipo “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "qualquer tipo", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "de “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "de qualquer lugar", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "exceto quando", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "mesmo se", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Filtro estático {{filter}} achado em:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "O filtro estático não pôde ser achado em nenhuma das listas de filtros ativadas atualmente", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Os registros que não preencherem todas as três condições abaixo serão descartados automaticamente:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Preservar entradas dos últimos {{input}} minutos", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Preservar no máximo {{input}} carregamentos de página por aba", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Preservar no máximo {{input}} registros por aba", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Usar {{input}} linhas por registro no modo expandido verticalmente", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Ocultar colunas:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Hora", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filtro/regra", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Contexto", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Originário/de terceiros", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Lista", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tabela", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Simples", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Formatação", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Abrir", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Criar um novo relatório no GitHub", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Achar relatórios similares no GitHub", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Documentação", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Leia a documentação em uBlock/wiki para saber sobre todos os recursos do uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Perguntas e suporte", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Respostas a perguntas e outros tipos de suporte de ajuda são fornecidas no subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Problemas com filtros/o site não funciona", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Reporte problemas com os filtros em sites específicos no rastreador de problemas do uBlockOrigin/uAssets. Uma conta do GitHub é necessária.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Importante: Evite usar outros bloqueadores junto com o uBlock Origin pois isto pode causar problemas com filtros em sites específicos.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Dicas: Certifique-se que suas listas de filtros estão atualizadas. O coletor é a ferramenta principal para diagnosticar problemas relacionados aos filtros.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Relatório de erro", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Reporte problemas com o próprio uBlock Origin no rastreador de problemas do uBlockOrigin/uBlock-issue. Uma conta do GitHub é necessária.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Informações para solução de problemas", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Abaixo estão informações técnicas que poderiam ser úteis quando voluntários estão tentando ajudar você a resolver um problema.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Reportar um problema com o filtro", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Para evitar sobrecarregar os voluntários com relatórios duplicados por favor verifique se o problema já não foi reportado. Observação: clicar no botão fará com que a origem da página seja enviada ao GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "As listas de filtros são atualizadas diariamente. Certifique-se que seu problema ainda não foi abordado nas listas de filtros mais recentes.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verifique se o problema ainda existe após recarregar a página da Web problemática.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Endereço da página da web:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "A página da web...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "— Selecione um tipo —", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Mostra anúncios ou restos de anúncios", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Tem sobreposições ou outras perturbações", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detecta o uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Tem problemas relacionados a privacidade", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Não funciona direito quando o uBlock Origin está ativado", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Abre abas ou janelas indesejadas", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leva a badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Rotular a página da web como \"NSFW\" (\"Não é Seguro no Trabalho\")", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Política de privacidade", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Changelog", + "description": "" + }, + "aboutCode": { + "message": "Código fonte (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Colaboradores", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Código fonte", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Traduções", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Listas de filtros", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Dependências externas (compatíveis com GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "As próprias listas de filtros do uBO estão hospedadas gratuitamente nas seguintes CDNs: ", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Uma CDN é escolhida automaticamente quando uma lista de filtros precisa ser atualizada.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Fazer backup para arquivo", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "meu-backup-do-ublock_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Restaurar do arquivo...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Reconfigurar tudo para o padrão…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Todas as suas configurações serão sobrescritas usando dados do backup salvos em {{time}}, e o uBlock₀ reiniciará. \n\nSobrescrever todas as configurações existentes usando os dados do backup?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Os dados não puderam ser lidos ou são inválidos", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Todas as suas configurações serão removidas, e o uBlock₀ reiniciará.\n\nReconfigurar o uBlock₀ para as configurações de fábrica?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Erro da rede: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Subscrever", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "um minuto atrás", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} minutos atrás", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "uma hora atrás", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} horas atrás", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "um dia atrás", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} dias atrás", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Mostrar Painel", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Mostrar coletor", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "desligado", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Página bloqueada", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "O uBlock Origin impediu a seguinte página de carregar:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Por causa do seguinte filtro:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "sem parâmetros", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Achado em:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Voltar", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Fechar esta janela", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Não me avisar de novo sobre este site", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Desativar o bloqueio restrito para {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Temporariamente", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Permanentemente", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Prosseguir", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "A página bloqueada deseja redirecionar para outro site. Se você escolher continuar, você navegará diretamente para: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Motivo:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicioso", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Rastreador", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Má reputação", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Exportar pro armazenamento na nuvem", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importar do armazenamento na nuvem", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importar do armazenamento na nuvem e unir com as configurações atuais", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Este nome de dispositivo:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Aviso! Mude estas configurações avançadas por sua própria conta e risco.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Submeter", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Aplicar mudanças", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Reverter", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Bloquear elemento no frame...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Inscrever-se na lista de filtros...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Permitir temporariamente grandes elementos de mídia", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Visualizar código-fonte…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Digite um atalho", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Alternar bloqueio de rolagem", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Copiar pra área de transferência", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Selecionar tudo", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Alternar filtragem cosmética", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Habilitar JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Relaxar modo de bloqueio", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Armazenamento usado: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KBs", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MBs", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GBs", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Clique pra carregar", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Erros: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Não foi possível filtrar apropriadamente na inicialização do navegador. Recarregue a página para garantir a filtragem apropriada.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Esta entrada deve ser a última", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/pt_PT/messages.json b/src/_locales/pt_PT/messages.json index 2af34899e61db..a599052c871e9 100644 --- a/src/_locales/pt_PT/messages.json +++ b/src/_locales/pt_PT/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Finalmente, um bloqueador eficiente. Leve na CPU e memória.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Finalmente, um bloqueador eficiente. Leve para a CPU e a memória.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Painel de controlo", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Painel de controlo", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Definições", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Atenção! Tem alterações não guardadas", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Filtros de terceiros", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Permanecer aqui", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Meus filtros", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ignorar", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Minhas regras", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Definições", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Lista branca", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Listas de filtros", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Registador", - "description":"Title for the logger window" + "1pPageName": { + "message": "Os meus filtros", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Acerca", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "As minhas regras", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Clique: desativar\/ativar o uBlock₀ para este site.\n\nCtrl+clique: desativar o uBlock₀ apenas nesta página.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Sites fidedignos", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"pedidos bloqueados", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Atalhos", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"nesta página", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Registo", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} ou {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Acerca", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"desde a instalação", - "description":"English: since install" + "supportPageName": { + "message": "Suporte", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"ou", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Visualizador de recursos", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Clique para abrir o painel de controlo", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Definições avançadas", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Entrar no modo de seleção de elemento", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Clique: desativar/ativar o uBlock₀ para este site.\n\nCtrl+clique: desativar o uBlock₀ apenas nesta página.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Abrir o registador", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Clique para desativar o uBlock₀ para este site.\n\nCtrl+clique para desativar o uBlock₀ apenas nesta página.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Alternar o bloqueio de todos os popups para este site", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Clique para ativar o uBlock₀ para este site.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Alternar o bloqueio de grandes elementos multimédia para este site", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "pedidos bloqueados", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Alternar a filtragem cosmética para este site", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "nesta página", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Alternar o bloqueio de fontes remotas para este site", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Regras globais: esta coluna é para as regras que se aplicam a todos os sites.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "desde a instalação", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Regras locais: esta coluna é para as regras que se aplicam apenas a este site.\nAs regras locais sobrepõem-se às regras globais.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "ou", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Clique para tornar as alterações permanentes.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Bloqueado(s) nesta página", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Clique para reverter as alterações.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Bloqueado(s) desde a instalação", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"tudo", - "description":"" + "popupDomainsConnected_v2": { + "message": "Domínios ligados", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"imagens", - "description":"" + "popupTipDashboard": { + "message": "Abrir o painel de controlo", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"terceiros", - "description":"" + "popupTipZapper": { + "message": "Entrar no modo de remoção rápida de elemento", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"css\/imagens de terceiros", - "description":"" + "popupTipPicker": { + "message": "Entrar no modo de seleção de elemento", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"scripts em linha", - "description":"" + "popupTipLog": { + "message": "Abrir o registo", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"scripts de primeiros", - "description":"" + "popupTipReport": { + "message": "Relatar um problema neste website", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"scripts de terceiros", - "description":"" + "popupTipNoPopups": { + "message": "Alternar o bloqueio de todos os popups para este site", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"frames de terceiros", - "description":"" + "popupTipNoPopups1": { + "message": "Clique para bloquear todos os popups neste site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"domínios conectados", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Clique para deixar de bloquear todos os popups neste site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} de {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Alternar o bloqueio de elementos multimédia grandes para este site", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Criar", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Clique para bloquear elementos multimédia grandes neste site", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Selecionar", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Clique para deixar de bloquear elementos multimédia grandes neste site", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Sair", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Alternar a filtragem cosmética para este site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Pré-visualizar", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Clique para desativar a filtragem cosmética neste site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Filtros de rede", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Clique para ativar a filtragem cosmética neste site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Filtros cosméticos", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Alternar o bloqueio de tipos de letra remotos para este site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Clique, Ctrl-clique", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Clique para bloquear os tipos de letra remotos neste site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Bloquear elemento", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Clique para deixar de bloquear os tipos de letra remotos neste site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Ocultar espaços ocupados por elementos bloqueados", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Clique para desativar JavaScript neste site", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Mostrar o número de pedidos bloqueados no ícone", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Clique para deixar de desativar JavaScript neste site", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Desativar dicas", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Janelas pop-up", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Fazer uso do menu de contexto onde apropriado", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Elementos multimédia grandes", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Cores amigáveis para daltónicos", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Filtragem cosmética", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Ativar suporte à 'cloud'", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Tipos de letra remotos", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Sou um utilizador avançado (leitura necessária<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Desativar 'pre-fetching' (para impedir qualquer ligação para pedidos de rede bloqueados)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Mais", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Desativar auditoria de hiperligações", - "description":"English: " + "popupLessButton_v2": { + "message": "Menos", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Impedir que o WebRTC divulgue endereços de IP locais", - "description":"English: " + "popupTipGlobalRules": { + "message": "Regras globais: esta coluna é para as regras que se aplicam a todos os sites.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Comportamento predefinido", - "description":"" + "popupTipLocalRules": { + "message": "Regras locais: esta coluna é para as regras que se aplicam apenas a este site.\nAs regras locais sobrepõem-se às regras globais.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Estes comportamentos predefinidos podem ser substituídos numa base por site", - "description":"" + "popupTipSaveRules": { + "message": "Clique para tornar as suas alterações permanentes.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Desativar filtragem cosmética", - "description":"" + "popupTipRevertRules": { + "message": "Clique para reverter as suas alterações.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Bloquear elementos multimédia maiores do que {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "tudo", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Bloquear tipos de letra remotos", - "description":"" + "popupImageRulePrompt": { + "message": "imagens", + "description": "" }, - "settingsStorageUsed":{ - "message":"Armazenamento utilizado: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "terceiros", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Último restauro:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "CSS/imagens de terceiros", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Último backup:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "scripts inline", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} filtros de rede + {{cosmeticFilterCount}} filtros cosméticos a partir de:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "scripts primários", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} utilizados de {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "scripts de terceiros", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Atualizar automaticamente as listas dos filtros.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "frames de terceiros", + "description": "" }, - "3pUpdateNow":{ - "message":"Atualizar agora", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "domínios ligados", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Limpar todas as caches", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} de {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Analisar e aplicar filtros cosméticos.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Versão", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Esta opção permite a análise e aplicação de filtros de “ocultação de elementos” compatíveis com o Adblock Plus<\/a>. Estes filtros são essencialmente cosméticos, servindo para ocultar elementos numa página web que sejam considerados incómodo visual, e que não podem ser bloqueados pelo motor de filtragem baseado em pedidos de rede.<\/p>

      Ativar esta funcionalidade aumenta o consumo de memória do uBlock₀<\/i>.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignorar filtros cosméticos genéricos.", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "frame", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Os filtros cosméticos genéricos são os filtros cosméticos que são destinados a ser aplicados em todos os web sites.

      Embora manuseados eficientemente pelo uBlock₀, os filtros cosméticos genéricos podem ainda contribuir para uma memória mensurável e overhead da CPU em algumas páginas web, especialmente os grandes e duradouros.

      Ao ativar esta opção irá eliminar a overhead da memória e CPU adicionada a páginas web como resultado do manuseamento de filtros cosméticos genéricos, e também irá diminuir a pegada de memória do próprio uBlock₀.

      É recomendado que ative esta opção em dispositivos menos poderosos.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Criar", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Listas de servidores bloqueados", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Escolher", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Aplicar alterações", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Sair", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Anúncios", - "description":"English: Ads" + "pickerPreview": { + "message": "Pré-visualizar", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Privacidade", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Filtros de rede", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Domínios maliciosos", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Filtros cosméticos", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Social", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Clique, Ctrl-clique", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Multi-uso", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Bloquear elemento…", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Regiões, idiomas", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Ocultar espaços ocupados por elementos bloqueados", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Personalizado", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Mostrar o número de pedidos bloqueados no ícone", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Um endereço por linha. Linhas começadas com ‘!’ serão ignoradas. Endereços inválidos serão ignorados silenciosamente.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Desativar dicas", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Analisar", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Fazer uso do menu de contexto onde apropriado", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"limpar cache", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Cores amigáveis para daltónicos", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"nova versão disponível", - "description":"English: new version available" + "settingsAppearance": { + "message": "Aparência", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"desatualizada", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Tema", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Última atualização: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Cor de destaque personalizada", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Um filtro por linha. Um filtro pode ser um simples nome de servidor, ou um filtro compatível com o Adblock Plus. Linhas começadas por ‘!’ serão ignoradas.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Ativar suporte para armazenamento na nuvem", + "description": "" }, - "1pImport":{ - "message":"Importar e anexar", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Sou um utilizador avançado", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Exportar", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Desativar pré-obtenção (para impedir qualquer ligação para pedidos de rede bloqueados)", + "description": "English: " }, - "1pExportFilename":{ - "message":"my-ublock-custom-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Desativar auditoria de hiperligações", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Aplicar alterações", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Impedir o WebRTC de vazar endereços IP locais", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Regras permanentes", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Comportamento predefinido", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Regras temporárias", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Estes comportamentos predefinidos podem ser substituídos numa base por site", + "description": "" }, - "rulesRevert":{ - "message":"Reverter", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Desativar filtragem cosmética", + "description": "" }, - "rulesCommit":{ - "message":"Aplicar", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Bloquear elementos multimédia maiores do que {{input}} KB", + "description": "" }, - "rulesEdit":{ - "message":"Editar", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Bloquear tipos de letra remotos", + "description": "" }, - "rulesEditSave":{ - "message":"Guardar", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Desativar JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Descartar", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Bloquear relatórios CSP", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Importar do ficheiro...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Desvendar nomes canónicos", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Exportar para ficheiro", - "description":"" + "settingsAdvanced": { + "message": "Avançadas", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Funcionalidades adequadas apenas para utilizadores avançados", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Lista das suas regras de filtragem dinâmica.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "definições avançadas", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Regra de sintaxe: origem destino tipo ação<\/code> (documentação completa<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Último restauro:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Lista pessoal de servidores para os quais o uBlock₀ será desativado. Uma entrada por linha. Servidores inválidos serão ignorados silenciosamente.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Última cópia de segurança:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Importar e anexar", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} filtros de rede + {{cosmeticFilterCount}} filtros cosméticos a partir de:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Exportar", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} utilizados de {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Atualizar automaticamente listas de filtros", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Aplicar alterações", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Atualizar agora", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Tipo", - "description":"English: Type" + "3pPurgeAll": { + "message": "Limpar todas as caches", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Domínio", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Analisar e aplicar filtros cosméticos", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"Endereço", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Os filtros cosméticos servem para ocultar elementos numa página web que sejam considerados incómodo visual e que não podem ser bloqueados pelo motor de filtragem baseado em pedidos de rede.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filtro", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignorar filtros cosméticos genéricos", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Todos", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Os filtros cosméticos genéricos são destinados para aplicação em todos os sites. Se ativar esta opção irá eliminar o excesso de utilização da memória e CPU, como resultado da manipulação dos filtros cosméticos genéricos.\n\nRecomendamos a ativação desta opção em dispositivos mais fracos.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Bastidores", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Suspender a atividade da rede até que todas as listas de filtros sejam carregadas", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"filtrar entradas de registo", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Listas de servidores bloqueados", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Número máximo de entradas de registo", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Aplicar alterações", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Contexto:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Integrados", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tipo:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Anúncios", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Filtragem de URL dinâmico", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Privacidade", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Filtragem estática", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Proteção contra malware, segurança", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} pedidos de rede de {{type}} {{br}}cujo endereço URL corresponde a {{url}} {{br}}e que origina {{origin}},{{br}}{{importance}} há um filtro de exceção correspondente.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Widgets sociais", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Bloquear", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Avisos de cookies", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Permitir", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Inconveniências", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tipo \"{{type}}\"", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Multifunções", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"qualquer tipo", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Regiões e idiomas", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"de \"{{origin}}\"", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Personalizados", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"de qualquer lugar", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Importar…", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"exceto quando", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Um URL por linha. Os URLs inválidos serão ignorados silenciosamente.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"mesmo se", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Desatualizada.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Filtro estático {{filter}} encontrado em:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "ver conteúdo", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Registo de alterações", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Última atualização: {{ago}}.\nClique para forçar uma atualização.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "A atualizar…", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Suporte", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Um erro de rede impediu que o recurso fosse atualizado.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Código fonte (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Não adicione filtros de fontes não fidedignas.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Contribuidores", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Ativar os meus filtros personalizados", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Cópia para ficheiro", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Permitir filtros personalizados que requeiram confiança", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Importar e anexar…", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Restaurar por um ficheiro...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Exportar…", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Restaurar predefinições...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "my-ublock-custom-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Todas as suas definições serão substituídas utilizando os dados da cópia de segurança de {{time}}, e uBlock₀ irá reiniciar.\n\nSubstituir todas as definições existentes utilizando os dados da cópia de segurança?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Aplicar alterações", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Os dados não puderam ser lidos ou são inválidos", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Regras permanentes", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Todas as suas definições serão removidas e o uBlock₀ será reiniciado.\n\nRestaurar predefinições do uBlock₀?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Regras temporárias", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Não é possível conectar a {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Reverter", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Adicionar o seguinte URL à lista de filtros personalizados?\n\nTítulo: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Aplicar", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"há um minuto", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Editar", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"há {{value}} minuto(s)", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Guardar", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"há uma hora", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Descartar", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"há {{value}} hora(s)", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Importar a partir de ficheiro…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"há um dia", - "description":"English: a day ago" + "rulesExport": { + "message": "Exportar para ficheiro…", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"há {{value}} dia(s)", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Mostrar painel de controlo", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Lista das suas regras de filtragem dinâmica.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Mostrar registador", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Regra de sintaxe: origem destino tipo ação (documentação completa).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"desativado", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Ordenar:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"O uBlock Origin impediu que a seguinte página fosse carregada:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Tipo de regra", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Por causa do seguinte filtro", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Origem", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"sem parâmetros", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Destino", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Encontrado em:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "As diretivas de sites fidedignos determinam em que páginas web o uBlock Origin deve ser desativado. Uma entrada por linha.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Recuar", - "description":"English: Go back" + "whitelistImport": { + "message": "Importar e anexar…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Fechar esta janela", - "description":"English: Close this window" + "whitelistExport": { + "message": "Exportar…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Desativar bloqueio estrito para {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "my-ublock-trusted-sites_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Temporariamente", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Aplicar alterações", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Permanentemente", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Tipo", + "description": "English: Type" }, - "cloudPush":{ - "message":"Exportar para a 'cloud'", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Domínio", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Importar da 'cloud'", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Importar do armazenamento 'cloud' e juntar às definições atuais", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filtro", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Todos", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Nome deste dispositivo:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Sem separador", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Submeter", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Separador atual", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Reverter", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Recarregar o conteúdo do separador", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"bytes", - "description":"" + "loggerDomInspectorTip": { + "message": "Alternar o inspetor DOM", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Permitir temporariamente grandes elementos multimédia", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Alternar o painel de popup", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"Esta entrada deve ser a última", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: O registo", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Limpar registo", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Pausar registo (descartar todos os dados a receber)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Retomar registo", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Alternar filtragem do registo", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filtrar conteúdo do registo", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Opções de filtragem do registo", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Não", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "bloqueado", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "permitido", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "modificado", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "primário", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "terceiro", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Detalhes", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filtro", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Lista de filtros", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Regra", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Contexto", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Contexto raiz", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Tipo de relação", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Tipo", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Regra do URL", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Contexto:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Tipo:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Filtro estático", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} pedidos de rede de {{type}} {{br}}cujo endereço URL corresponde a {{url}} {{br}}e que origina {{origin}},{{br}}{{importance}} existe um filtro de exceção correspondente.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Bloquear", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Permitir", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "tipo \"{{type}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "qualquer tipo", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "de \"{{origin}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "de qualquer lugar", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "exceto quando", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "mesmo se", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Filtro estático {{filter}} encontrado em:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "O filtro estático não pôde ser encontrado em quaisquer das listas de filtros ativadas atualmente", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Entradas do registo que não preenchem todas as três condições abaixo serão automaticamente descartadas:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Preservar entradas dos últimos {{input}} minutos", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Preservar no máximo {{input}} carregamentos de página por separador", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Preservar no máximo {{input}} entradas por separador", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Utilizar {{input}} linhas por entrada no modo verticalmente expandido", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Ocultar colunas:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Hora", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filtro/regra", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Contexto", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Tipo de relação", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Lista", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tabela", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Sem formatação", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Abrir", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Criar novo relatório no GitHub", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Encontrar relatórios semelhantes no GitHub", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Documentação", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Leia a documentação em uBlock/wiki para saber mais acerca de todas as funcionalidades do uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Perguntas e suporte", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "As respostas às perguntas e outros tipos de ajuda são fornecidas no subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Problemas de filtros/website está com falhas", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Relate problemas de filtros com websites específicos para o controlador de problemas uBlockOrigin/uAssets. Requer uma conta GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Importante: evite a utilização de outros bloqueadores com propósitos semelhantes juntamente com o uBlock Origin, dado que isto pode causar problemas com filtros em websites específicos.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Dicas: certifique-se de que as suas listas de filtros estão atualizadas. O registo é a ferramenta principal para diagnosticar problemas relacionados com filtros.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Relatório de erros", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Relate problemas com o próprio uBlock Origin para o controlador de problemas uBlockOrigin/uBlock-issue. Requer uma conta GitHub.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Informação sobre resolução de problemas", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Abaixo encontra-se informação técnica que pode ser útil quando voluntários estão a tentar ajudar-lhe a resolver um problema.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Relatar um problema de filtro", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Para evitar sobrecarregar os voluntários com relatórios duplicados, verifique se o problema ainda não foi relatado. Nota: clicar no botão fará com que a origem da página seja enviada para o GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "As listas de filtros são atualizadas diariamente. Certifique-se de que o seu problema ainda não foi abordado nas listas de filtros mais recentes.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verifique se o problema ainda existe após o recarregamento da página web problemática.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Endereço da página web:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "A página web…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Escolha uma entrada --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Mostra anúncios ou restos de anúncios", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Tem sobreposições ou outros incómodos", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Deteta o uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Tem problemas relacionados com a privacidade", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Falha quando o uBlock Origin está ativado", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Abre separadores ou janelas indesejáveis", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leva a badware e phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Rotular a página web como “NSFW” (“Não seguro para o trabalho”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Política de privacidade", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Registo de alterações", + "description": "" + }, + "aboutCode": { + "message": "Código fonte (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Contribuidores", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Código fonte", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Traduções", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Listas de filtros", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Dependências externas (compatíveis com GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "As listas de filtros do uBO estão livremente hospedadas nas seguintes CDNs:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Uma CDN escolhida aleatoriamente é utilizada quando uma lista de filtros precisar de ser atualizada.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Copiar para ficheiro…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Restaurar a partir de ficheiro…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Restaurar predefinições…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Todas as suas definições serão substituídas utilizando os dados da cópia de segurança de {{time}}, e o uBlock₀ irá reiniciar.\n\nSubstituir todas as definições existentes utilizando os dados da cópia de segurança?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Os dados não puderam ser lidos ou são inválidos", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Todas as suas definições serão removidas e o uBlock₀ será reiniciado.\n\nRestaurar predefinições do uBlock₀?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Erro de rede: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Subscrever", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "há um minuto", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "há {{value}} minutos", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "há uma hora", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "há {{value}} horas", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "há um dia", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "há {{value}} dias", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Mostrar painel de controlo", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Mostrar registo", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "desativado", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Página bloqueada", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "O uBlock Origin impediu que a seguinte página fosse carregada:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Devido ao seguinte filtro:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "sem parâmetros", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Encontrado em:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Retroceder", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Fechar esta janela", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Não me avisar novamente acerca deste site", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Desativar bloqueio estrito para {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Temporariamente", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Permanentemente", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Proceder", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "A página bloqueada pretende redirecionar para outro site. Se optar por proceder, navegará diretamente para: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Motivo:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicioso", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Rastreador", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Má reputação", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Exportar para a nuvem", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importar a partir da nuvem", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importar a partir da nuvem e juntar às definições atuais", + "description": "tooltip" + }, + "cloudNoData": { + "message": "... ...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Nome deste dispositivo:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Atenção! Altere estas definições avançadas por sua conta e risco.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Submeter", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Aplicar alterações", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Reverter", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Bloquear elemento no frame…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Subscrever à lista de filtros…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Permitir temporariamente elementos multimédia grandes", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Ver código fonte…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Digitar um atalho", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Alternar deslocamento bloqueado", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Copiar para a área de transferência", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Selecionar tudo", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Alternar filtragem cosmética", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Alternar JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Relaxar modo de bloqueio", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Armazenamento utilizado: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Clique para carregar", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Erros: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Não foi possível filtrar adequadamente no arranque do navegador. Recarregue a página para assegurar uma filtragem adequada.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Esta entrada deve ser a última", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/ro/messages.json b/src/_locales/ro/messages.json index fe40619665a66..3c5347a6b2660 100644 --- a/src/_locales/ro/messages.json +++ b/src/_locales/ro/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"În sfârșit, un blocant eficient. Are un impact mic asupra procesorului și memoriei.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "În sfârșit, un blocant eficient. Are un impact mic asupra procesorului și memoriei.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Panou de control", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Panou de control", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Opțiuni", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Atenție! Ai modificări nesalvate", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Filtre terțe", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Așteaptă", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Filtrele mele", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ignoră", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Regulile mele", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Opțiuni", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Lista de excluderi", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Liste de filtre", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Jurnal", - "description":"Title for the logger window" + "1pPageName": { + "message": "Filtrele mele", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Despre", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Regulile mele", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Clic: dezactivează\/activează uBlock₀ pentru acest sait.\n\nCtrl+clic: dezactivează uBlock₀ doar pe această pagină.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Situri de încredere", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"cereri blocate", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Comenzi rapide", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"pe această pagină", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Jurnal", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} sau {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Despre", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"de la instalare", - "description":"English: since install" + "supportPageName": { + "message": "Asistență", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"sau", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Vizualizator de resurse", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Clic pentru a deschide panoul", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Setări avansate", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Modul alege element", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Clic: dezactivează/activează uBlock₀ pentru acest sait.\n\nCtrl+clic: dezactivează uBlock₀ doar pe această pagină.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Deschide jurnalul", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Clic ca să dezactivezi uBlock₀ pe acest site.\n\nCtrl+clic ca să dezactivezi uBlock₀ doar pe această pagină.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Comută blocarea tuturor popup-urilor pentru acest sait", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Clic pentru a activa uBlock₀ pe acest site.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Modifică modul de blocare a elementelor media de mari dimensiuni pentru acest sait", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "cereri blocate", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Comută filtrarea vizuală pentru acest sait", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "pe această pagină", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Comută blocarea fonturilor externe pentru acest sait", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} sau {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Reguli globale: această coloană este pentru regulile care se aplică tuturor site-urilor.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "de la instalare", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Reguli locale: această coloană este pentru regulile care se aplică doar site-ului curent.\nRegulile locale suprascriu pe cele globale.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "sau", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Apasă pentru a face modificările permanente.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Blocate pe această pagină", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Apasă pentru a renunța la modificări.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Blocate de la instalare", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"tot", - "description":"" + "popupDomainsConnected_v2": { + "message": "Domenii conectate", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"imagini", - "description":"" + "popupTipDashboard": { + "message": "Deschide panoul de control", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"terțe", - "description":"" + "popupTipZapper": { + "message": "Accesați modul de eliminare elemente", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"css\/imagini terțe", - "description":"" + "popupTipPicker": { + "message": "Modul alege element", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"scripturi înglobate", - "description":"" + "popupTipLog": { + "message": "Deschide jurnalul", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"scripturi din saitul primar", - "description":"" + "popupTipReport": { + "message": "Raportează o eroare cu acest sit", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"scripturi din saituri terțe", - "description":"" + "popupTipNoPopups": { + "message": "Comută blocarea tuturor popup-urilor pentru acest sait", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"cadre din saituri terțe", - "description":"" + "popupTipNoPopups1": { + "message": "Clic pentru a bloca toate popup-urile pe acest site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"domenii conectate", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Clic pentru a nu mai bloca toate popup-urile pe acest site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} din {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Modifică modul de blocare a elementelor media de mari dimensiuni pentru acest sait", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Creează", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Clic pentru a bloca elementele media de mari dimensiuni pe acest site", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Alege", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Clic pentru a nu mai bloca elementele media de mari dimensiuni pe acest site", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Ieșire", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Comută filtrarea vizuală pentru acest sait", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Previzualizare", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Clic pentru a dezactiva filtrele vizuale pe acest site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Filtre de rețea", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Clic pentru a activa filtrele vizuale pe acest site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Filtre vizuale", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Comută blocarea fonturilor externe pentru acest sait", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Clic, Ctrl-clic", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Clic pentru a bloca fonturile externe pe acest site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Blochează elementul", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Clic pentru a nu mai bloca fonturile externe pe acest site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Ascunde substituenții elementelor blocate", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Apasă pentru a dezactiva JavaScript pe acest site", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Arată numărul cererilor blocate pe pictogramă", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Apasă pentru a nu mai dezactiva JavaScript pe acest site", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Dezactivează indiciile", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Ferestre suprapuse", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Folosește meniul contextual unde este cazul", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Elemente media mari", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Accesibil pentru daltonism", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Filtre vizuale", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Activează suportul pentru stocare în cloud", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Fonturi externe", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Sunt un utilizator avansat (Lectură obligatorie<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Dezactivează preluarea în avans (pentru a preveni orice conexiune ce s-ar încadra în cereri de rețea blocate)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Mai multe", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Dezactivează auditarea hiperlinkurilor", - "description":"English: " + "popupLessButton_v2": { + "message": "Mai puțin", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Previne dezvăluirea adreselor IP locale prin intermediul protocolului WebRTC", - "description":"English: " + "popupTipGlobalRules": { + "message": "Reguli globale: această coloană este pentru regulile care se aplică tuturor site-urilor.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Comportament implicit", - "description":"" + "popupTipLocalRules": { + "message": "Reguli locale: această coloană este pentru regulile care se aplică doar site-ului curent.\nRegulile locale suprascriu pe cele globale.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Aceste comportamente implicite pot fi suprascrise pentru fiecare sait în parte", - "description":"" + "popupTipSaveRules": { + "message": "Apasă pentru a face modificările permanente.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Dezactivează filtrele cosmetice", - "description":"" + "popupTipRevertRules": { + "message": "Apasă pentru a renunța la modificări.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Blochează elementele media mai mari de {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "tot", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blochează fonturile de la distanță", - "description":"" + "popupImageRulePrompt": { + "message": "imagini", + "description": "" }, - "settingsStorageUsed":{ - "message":"Spațiu de stocare utilizat: {{value}} octeți", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "terțe", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Ultima restaurare:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "CSS/imagini terțe", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Ultima copie de siguranță:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "scripturi înglobate", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} filtre rețea + {{cosmeticFilterCount}} filtre vizuale din:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "scripturi din saitul primar", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} folosite din {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "scripturi din saituri terțe", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Actualizare automată a listelor de filtre.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "cadre din saituri terțe", + "description": "" }, - "3pUpdateNow":{ - "message":"Actualizează acum", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "domenii conectate", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Golește tot din memoria tampon", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} din {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Citește și aplică filtrele vizuale.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Versiune", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Această opțiune permite citirea și aplicarea filtrelor compatibile Adblock Plus pentru “ascunderea elementelor”<\/a>. Aceste filtre sunt în esență vizuale, ele servesc la ascunderea elementelor dintr-o pagină web care sunt considerate drept o neplăcere vizuală și care nu pot fi blocate de motorul de filtrare bazat pe cereri de rețea.<\/p>

      Activând această opțiune memoria utilizată de uBlock₀ va crește.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignoră filtrele cosmetice generice", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "cadru", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      FIltrele cosmetice generice sunt acelea care se aplică tuturor site-urilor.

      Deși sunt folosite eficient de uBlock₀, filtrele cosmetice generice pot contribui semnificativ la creșterea cantității de memorie și a utilizării procesorului pe anumite pagini, în special cele de mari dimensiuni și care sunt încărcate pentru mult timp.

      Activarea acestei opțiuni va elimina încărcarea suplimentară a memoriei și a procesorului rezultată în urma folosirii filtrelor cosmetice generice, și, de asemenea, va micșora impactul uBlock₀ asupra sistemului.

      Se recomandă activarea acestei opțiuni pe dispozitivele mai puțin performante.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Creează", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lista adreselor blocate", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Alege", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Aplică modificările", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Ieșire", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Reclame", - "description":"English: Ads" + "pickerPreview": { + "message": "Previzualizare", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Intimitate", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Filtre de rețea", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Domenii malițioase", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Filtre vizuale", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Social", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Clic, Ctrl-clic", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Multifuncționale", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Blochează elementul…", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Regiuni, limbi", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Ascunde substituenții elementelor blocate", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Personalizare", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Arată numărul cererilor blocate pe pictogramă", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"O adresă pe linie. Liniile care încep cu ‘!’ vor fi ignorate. Adresele nevalide vor fi ignorate fără avertizare.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Dezactivează indiciile", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Analizează", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Folosește meniul contextual unde este cazul", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"golește memoria tampon", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Accesibil pentru daltonism", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"versiune nouă disponibilă", - "description":"English: new version available" + "settingsAppearance": { + "message": "Aspect", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"învechit", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Aspect", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Ultima actualizare: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Culoare de accentuare personalizată", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Un filtru pe linie. Un filtru poate fi un simplu nume de gazdă sau un filtru compatibil Adblock Plus. Liniile precedate de ‘!’ vor fi ignorate.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Activează suportul pentru stocare în cloud", + "description": "" }, - "1pImport":{ - "message":"Importă și adaugă", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Sunt un utilizator avansat", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Exportă", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Dezactivează preluarea în avans (pentru a preveni orice conexiune ce s-ar încadra în cereri de rețea blocate)", + "description": "English: " }, - "1pExportFilename":{ - "message":"filtrele-mele-statice-ublock_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Dezactivează auditarea hiperlinkurilor", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Aplică modificările", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Previne dezvăluirea adreselor IP locale prin intermediul protocolului WebRTC", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Reguli permanente", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Comportament implicit", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Reguli temporare", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Aceste comportamente implicite pot fi suprascrise pentru fiecare sait în parte", + "description": "" }, - "rulesRevert":{ - "message":"Înlătură", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Dezactivează filtrele cosmetice", + "description": "" }, - "rulesCommit":{ - "message":"Aplică", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Blochează elementele media mai mari de {{input}} KB", + "description": "" }, - "rulesEdit":{ - "message":"Modifică", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Blochează fonturile de la distanță", + "description": "" }, - "rulesEditSave":{ - "message":"Salvează", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Dezactivare JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Elimină", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Blochează rapoartele CSP", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Importă din fișier...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Dezvăluie numele canonice", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Exportă în fișier...", - "description":"" + "settingsAdvanced": { + "message": "Avansate", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"regulile-mele-dinamice-ublock_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Proprietăți potrivite pentru utilizatorii avansați", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Lista regulilor tale de filtrare dinamică.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "setări avansate", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Sintaxa pentru regulă: sursă destinație tip acțiune<\/code> (documentație<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Ultima restaurare:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Lista ta de nume de gazde unde uBlock₀ va fi dezactivat. Fiecare adresă pe o singură linie. Adresele nevalide vor fi ignorate automat.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Ultima copie de siguranță:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Importă și adaugă", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} filtre rețea + {{cosmeticFilterCount}} filtre vizuale din:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Exportă", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} folosite din {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"lista-mea-de-excluderi-ublock_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Actualizare automată a listelor de filtre.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Aplică modificările", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Actualizează acum", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Tip", - "description":"English: Type" + "3pPurgeAll": { + "message": "Golește tot din memoria tampon", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Domeniu", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Citește și aplică filtrele vizuale.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Filtrele cosmetice servesc la ascunderea elementelor dintr-o pagină web care sunt considerate a fi deranjante din punct de vedere vizual și care nu pot fi blocate de motoarele de filtrare bazate pe solicitări de rețea.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filtru", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignoră filtrele cosmetice generice", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Tot", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

      FIltrele cosmetice generice sunt acelea care se aplică tuturor site-urilor.

      Deși sunt folosite eficient de uBlock₀, filtrele cosmetice generice pot contribui semnificativ la creșterea cantității de memorie și a utilizării procesorului pe anumite pagini, în special cele de mari dimensiuni și care sunt încărcate pentru mult timp.

      Activarea acestei opțiuni va elimina încărcarea suplimentară a memoriei și a procesorului rezultată în urma folosirii filtrelor cosmetice generice, și, de asemenea, va micșora impactul uBlock₀ asupra sistemului.

      Se recomandă activarea acestei opțiuni pe dispozitivele mai puțin performante.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"În spatele scenei", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Suspendă activitatea în rețea până când se încarcă toate listele cu filtre", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"filtrează intrările din jurnal", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Lista adreselor blocate", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Numărul maxim de intrări în jurnal", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Aplică modificările", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Context:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Încorporate", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tip:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Reclame", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Filtrare dinamică a URL-urilor", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Intimitate", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Filtrare statică", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Domenii malițioase, securitate", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} cererile de rețea de {{type}} {{br}}când adresa URL corespunde cu {{url}} {{br}}și care își au originea {{origin}},{{br}}{{importance}} există un filtru corespondent de excepție.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Widget-uri sociale", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blochează", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Notificări privind cookie-urile", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Permite", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Neplăceri", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tip “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Multifuncționale", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"orice tip", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Regiuni, limbi", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"de la “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Personalizare", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"de oriunde", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Importă…", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"exceptând când", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "O adresă pe linie. Adresele nevalide vor fi ignorate fără avertizare.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"chiar dacă", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "învechit", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Filtru static {{filter}} găsit în:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "vezi conținut", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Jurnalul de modificări", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Ultima actualizare: {{ago}}.\nClic pentru a forța o actualizare.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Se actualizează…", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Ajutor", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "O eroare de rețea a împiedicat actualizarea resursei.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Cod sursă (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Nu adăuga filtre din surse nesigure.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Contribuitori", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Activați filtrele mele personalizate", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Copie de siguranță în fișier", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Permiteți filtre personalizate care necesită încredere", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"salvarea-mea-ublock_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Importă și adaugă", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Restaurează din fișier...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Exportă", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Restaurează la configurarea implicită...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "filtrele-mele-statice-ublock_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Toate opțiunile vor fi suprascrise cu datele din {{time}} și uBlock₀ va fi repornit.\n\nDorești să suprascrii toate opțiunile folosind datele salvate?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Aplică modificările", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Datele nu au putut fi citite sau sunt nevalide", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Reguli permanente", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Toate configurările tale vor fi eliminate și uBlock₀ va reporni.\n\nRestaurează uBlock₀ la configurările din fabrică?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Reguli temporare", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Nu mă pot conecta la {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Înlătură", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Adaug următorul URL în lista ta de filtre personalizate?\n\nTitlu: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Aplică", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"acum un minut", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Modifică", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"acum {{value}} minute", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Salvează", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"acum o oră", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Elimină", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"acum {{value}} ore", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Importă din fișier…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"în urmă cu o zi", - "description":"English: a day ago" + "rulesExport": { + "message": "Exportă în fișier...", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"în urmă cu {{value}} zile", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "regulile-mele-dinamice-ublock_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Deschide panoul de control", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Lista regulilor tale de filtrare dinamică.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Arată jurnalul", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Sintaxa pentru regulă: sursă destinație tip acțiune (documentație).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"dezactivat", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Sortare:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin a prevenit încărcarea acestei pagini:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Tipul regulei", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Din cauza următorului filtru", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Sursa", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"fără parametri", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Destinație", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Găsit în:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Directivele privind siturile de încredere stabilesc pe ce pagini web trebuie dezactivat uBlock Origin. O intrare pe linie.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Înapoi", - "description":"English: Go back" + "whitelistImport": { + "message": "Importă și adaugă", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Închide această fereastră", - "description":"English: Close this window" + "whitelistExport": { + "message": "Exportă", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Dezactivează blocarea strictă pentru {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "situri-de-încredere-ublock_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Temporar", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Aplică modificările", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Permanent", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Tip", + "description": "English: Type" }, - "cloudPush":{ - "message":"Exportă către stocarea în cloud", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Domeniu", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Importă din stocarea în cloud", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Importă din stocarea în cloud și combină cu setările curente", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filtru", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Tot", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Numele acestui dispozitiv:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Fără tab-uri", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Trimite", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Fila curentă", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Înlătură", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Reîncarcă conținutul tab-ului", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"octeți", - "description":"" + "loggerDomInspectorTip": { + "message": "Comută inspector DOM", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Permite temporar elementele media mari", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Comută panou pop-up", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"Aceasta intrare trebuie sa fie ultima", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: Jurnal", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Şterge logger-ul", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Oprește logger-ul(ignoră tot traficul primit)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Pornește logger-ul", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Comută filtrarea jurnalierului", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filtrează conținutul jurnalierului", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Opțiunile de filtrare ale jurnalierului", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Nu", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "activ", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "blocat", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "permis", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "modificat", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "primare", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "terțe", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Detalii", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filtru", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Lista filtrelor", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Regulă", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Context", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Context de bază", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Apartenență", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Tip", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Regulă URL", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Context:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Tip:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Filtru static", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} cererile de rețea de {{type}} {{br}}când adresa URL corespunde cu {{url}} {{br}}și care își au originea {{origin}},{{br}}{{importance}} există un filtru corespondent de excepție.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Blochează", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Permite", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "tip “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "orice tip", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "de la “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "de oriunde", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "exceptând când", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "chiar dacă", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Filtrul static {{filter}} găsit în:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Filtrul static {{filter}} nu se găsește în niciuna dintre listele de filtre activate", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Intrările în registrul de logare care nu îndeplinesc toate cele trei condiții de mai jos vor fi automat eliminate.", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Păstrează intrările din ultimele {{input}} minute", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Păstrează cel mult {{input}} încărcări de pagină pe filă", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Păstrează cel mult {{input}} intrări pe filă", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Folosește {{input}} linii pentru intrările în modul vertical expandat", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Ascunde coloanele:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Timp", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filtru/regulă", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Context", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Apartenență", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Listă", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tabel", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Simplu", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Marcaj", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Deschide", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Crează o nouă sesizare", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Găsește sesizări similare", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Documentație", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Citește documentația de la uBlock/wiki pentru a învăța totul despre caracteristicile uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Întrebări și ajutor", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Răspunsuri la întrebări și alte informații de ajutor sunt disponibile pe subreddit-ul /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Probleme cu filtrele/siturile defecte", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Raportează probleme cu filtrele pe anumite situri în uBlockOrigin/uAssets centralizatorul de probleme. Necesită un cont GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": ">Important: Evită să folosești alte extensii cu același scop ca uBlock Origin, deoarece pot exista probleme cu filtrele pe anumite situri.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Sfat: Asigurați-vă că filtrele sunt actualizate. Registrul cu înregistrări este unealta principală pentru diagnosticarea problemelor cu filtrele.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Raportare defecte", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Raportați probleme cu uBlock Origin în uBlockOrigin/uBlock-issuecentralizatorul de probleme. Necesită un cont GitHub.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Informații pentru depanare", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Mai jos sunt informații care îi pot ajuta pe voluntarii care încearcă să vă ajute în rezolvarea problemelor.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Raportează o problemăcu filtrele", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Pentru a evita suprasolicitarea voluntarilor, vă rugăm să verificați dacă această problemă nu a fost deja raportată.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Listele cu filtre sunt actualizate zilnic. Verificați că problema dumneavoastră nu a fost rezolvată în cele mai recente liste cu filtre.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verificați că problema există și după reîncărcarea paginii.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Adresa paginii web:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Pagina web…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Alege o intrare --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Arată reclame sau resturi de reclame", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Are acoperiri sau alte neplăceri", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detectează uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Are probleme privind confidențialitatea", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Nu mai funcționează când uBlock Origin este activat", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Deschide file sau ferestre nedorite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Duce la programe dăunătoare, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Etichetează pagina ca fiind „NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Politică de confidențialitate", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Jurnal de modificări", + "description": "" + }, + "aboutCode": { + "message": "Cod sursă (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Contribuitori", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Cod sursă", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Traduceri", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Liste de filtre", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Dependențe externe (compatibile GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "FIltrele proprii uBO sunt găzduite gratuit de următoarele rețele de distribuție de conținut:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Un CDN ales aleator va fi folosit când listele de filtre vor trebui actualizate", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Copie de rezervă…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "salvarea-mea-ublock_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Restabilește din fișier…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Restabilește reglările inițiale…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Toate opțiunile vor fi suprascrise cu datele din {{time}} și uBlock₀ va fi repornit.\n\nDorești să suprascrii toate opțiunile folosind datele salvate?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Datele nu au putut fi citite sau sunt nevalide", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Toate configurările tale vor fi eliminate și uBlock₀ va reporni.\n\nRestaurează uBlock₀ la configurările din fabrică?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Eroare de rețea: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Abonează-te", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "acum un minut", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "acum {{value}} minute", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "acum o oră", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "acum {{value}} ore", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "în urmă cu o zi", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "în urmă cu {{value}} zile", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Deschide panoul de control", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Arată jurnalul", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "dezactivat", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Pagină blocată", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin a prevenit încărcarea acestei pagini:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Din cauza următorului filtru", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "fără parametri", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Găsit în:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Înapoi", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Închide această fereastră", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Nu mă avertiza din nou despre acest sit", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Dezactivează blocarea strictă pentru {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Temporar", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Permanent", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Continuă", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Pagina blocată dorește să redirecționeze către un alt site. Dacă alegeți să continuați, veți naviga direct către: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Motiv:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malițios", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Urmăritor", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Reputație slaba", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Exportă către stocarea în cloud", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importă din stocarea în cloud", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importă din stocarea în cloud și combină cu setările curente", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Numele acestui dispozitiv:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Atenție: schimbă aceste setări avansate pe propriul risc.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Trimite", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Aplică modificările", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Înlătură", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "octeți", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Blochează un element în cadru…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Înscrie-te la lista de filtre…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Permite temporar elementele media mari", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Vezi sursa", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Tastează o comandă rapidă", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Activează/Dezactivează Blocarea răsfoirii", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Copiază în clipboard", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Alege tot", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Comută filtrele cosmetice", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Comută JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Relaxați modul de blocare", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Spațiu de stocare utilizat: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Apasă pentru a încărca", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Erori: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Nu s-a putut filtra corespunzător in timpul lansării browser-ului. Reîncarcați paginile", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Aceasta intrare trebuie sa fie ultima", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/ru/messages.json b/src/_locales/ru/messages.json index 66baa6c11e42f..bcde2df487b6d 100644 --- a/src/_locales/ru/messages.json +++ b/src/_locales/ru/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Наконец-то, быстрый и эффективный блокировщик для браузеров.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Наконец-то, быстрый и эффективный блокировщик для браузеров.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Панель управления", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Панель управления", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Настройки", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Внимание! У вас есть несохраненные изменения", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Сторонние фильтры", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Остаться", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Мои фильтры", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Игнорировать", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Мои правила", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Настройки", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Белый список", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Списки фильтров", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Журнал сетевых запросов", - "description":"Title for the logger window" + "1pPageName": { + "message": "Мои фильтры", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"О расширении", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Мои правила", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"ЛКМ: отключить\/включить uBlock₀ для этого сайта.\n\nCtrl+ЛКМ: отключить uBlock₀ только на этой странице.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Доверенные сайты", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"запросов заблокировано", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Сочетания клавиш", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"на этой странице", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Логгер", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} или {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "О расширении", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"с момента установки", - "description":"English: since install" + "supportPageName": { + "message": "Поддержка", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"или", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Активы", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Нажмите, чтобы открыть панель управления", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Расширенные настройки", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Войти в режим выбора элемента", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Клик: отключить/включить uBlock₀ для этого сайта.\n\nCtrl+клик: отключить uBlock₀ только на этой странице.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Открыть журнал сетевых запросов", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Кликните, чтобы отключить uBlock₀ для этого сайта.\nCtrl+клик, чтобы отключить uBlock₀ только на этой странице.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Вкл\/Выкл блокировку всех всплывающих окон на этом сайте", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Кликните, чтобы активировать uBlock₀ для этого сайта.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Вкл\/Выкл блокировку больших медиа-элементов на этом сайте", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "запросов заблокировано", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Вкл\/Выкл косметические фильтры на этом сайте", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "на этой странице", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Вкл\/Выкл блокировку сторонних шрифтов на этом сайте", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Глобальные правила: эта колонка предназначена для правил, применяемых ко всем сайтам.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "с момента установки", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Локальные правила: эта колонка предназначена для правил, применяемых только к текущему сайту.\nЛокальные правила замещают глобальные.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "или", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Нажмите, чтобы сохранить изменения.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Заблокировано на этой странице", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Нажмите, чтобы отменить изменения.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Заблокировано с момента установки", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"все", - "description":"" + "popupDomainsConnected_v2": { + "message": "Доменов подключено", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"изображения", - "description":"" + "popupTipDashboard": { + "message": "Открыть панель управления", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"сторонние ресурсы", - "description":"" + "popupTipZapper": { + "message": "Режим мгновенного временного скрытия элемента", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"сторонние css\/изображения", - "description":"" + "popupTipPicker": { + "message": "Войти в режим выбора элементов", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"inline-скрипты", - "description":"" + "popupTipLog": { + "message": "Открыть логгер", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"собственные скрипты", - "description":"" + "popupTipReport": { + "message": "Сообщить о проблеме на данном сайте", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"сторонние скрипты", - "description":"" + "popupTipNoPopups": { + "message": "Вкл/Выкл блокировку всех всплывающих окон на этом сайте", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"сторонние фреймы", - "description":"" + "popupTipNoPopups1": { + "message": "Нажмите, чтобы блокировать все всплывающие окна на этом сайте", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"доменов подключено", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Нажмите, чтобы отключить блокировку всех всплывающих окон на этом сайте", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} из {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Вкл/Выкл блокировку больших медиа-элементов на этом сайте", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Создать", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Нажмите для включения блокировки больших медиа-элементов на этом сайте", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Выбрать", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Нажмите для отключения блокировки больших медиа-элементов на этом сайте", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Выйти", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Вкл/Выкл косметическую фильтрацию на этом сайте", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Предпросмотр", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Нажмите, чтобы отключить косметическую фильтрацию на этом сайте", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Сетевые фильтры", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Нажмите, чтобы включить косметическую фильтрацию на этом сайте", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Косметические фильтры", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Вкл/Выкл блокировку сторонних шрифтов на этом сайте", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Щелчок, Ctrl+щелчок", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Нажмите для блокировки сторонних шрифтов на этом сайте", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Заблокировать элемент", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Нажмите для отключения блокировки сторонних шрифтов на этом сайте", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Скрыть оставшееся от заблокированных элементов место", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Нажмите, чтобы отключить JavaScript на этом сайте", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Показывать количество заблокированных запросов на иконке", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Кликните, чтобы перестать блокировать JavaScript на этом сайте", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Отключить всплывающие подсказки", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Всплывающие окна", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Использовать контекстное меню, где возможно", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Большие медиа-элементы", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Режим для дальтоников", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Косметическая фильтрация", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Включить поддержку облачного хранилища", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Загружаемые шрифты", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Я опытный пользователь (Обязательно к прочтению<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Отключить предзагрузку для предотвращения подключений для заблокированных запросов", - "description":"English: " + "popupMoreButton_v2": { + "message": "Больше", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Отключить проверку гиперссылок", - "description":"English: " + "popupLessButton_v2": { + "message": "Меньше", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Предотвратить утечку локального IP-адреса через WebRTC", - "description":"English: " + "popupTipGlobalRules": { + "message": "Глобальные правила: этот столбец предназначен для правил, применяемых ко всем сайтам.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Поведение по умолчанию", - "description":"" + "popupTipLocalRules": { + "message": "Локальные правила: этот столбец предназначен для правил, применяемых только к текущему сайту.\nЛокальные правила переопределяют глобальные.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Эти настройки могут быть указаны для каждого сайта отдельно", - "description":"" + "popupTipSaveRules": { + "message": "Нажмите, чтобы сохранить изменения.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Отключить косметические фильтры", - "description":"" + "popupTipRevertRules": { + "message": "Нажмите, чтобы отменить изменения.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Блокировать медиа-элементы больше {{input:number}} КБ", - "description":"" + "popupAnyRulePrompt": { + "message": "все", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Блокировать сторонние шрифты", - "description":"" + "popupImageRulePrompt": { + "message": "изображения", + "description": "" }, - "settingsStorageUsed":{ - "message":"Места использовано: {{value}} байт", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "3rd-party ресурсы", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Последнее восстановление:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "3rd-party CSS/изображения", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Последняя резервная копия:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "inline-скрипты", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} сетевых фильтров + {{cosmeticFilterCount}} косметических фильтров из:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "1st-party скрипты", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} используется из {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "3rd-party скрипты", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Автообновление списков фильтров.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "3rd-party фреймы", + "description": "" }, - "3pUpdateNow":{ - "message":"Обновить сейчас", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "доменов подключено", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Очистить все кэши", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} из {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Парсить и применять косметические фильтры.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Версия", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Эта опция включает использование анализатора Adblock Plus-совместимых фильтров “скрытия элементов”<\/a>. Это косметические фильтры, дающие возможность скрыть ненужные элементы страницы, которые не могут быть заблокированы механизмом фильтрации сетевых запросов.<\/p>

      Использование данной опции увеличивает потребление памяти uBlock₀.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "скрипт", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Игнорировать общие косметические фильтры.", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "фрейм", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Общие косметические фильтры — это те косметические фильтры, которые должны применяться на всех веб-сайтах.

      Хотя uBlock₀ и обращается с ними эффективно, общие косметические фильтры всё равно могут потреблять ощутимое количество оперативной памяти и нагружать ЦПУ на некоторых, в особенности больших, страницах.

      Включение этой опции снизит потребление памяти веб-страницами, и избавит процессор от обработки общих косметических фильтров, а также снизит потребление памяти самого uBlock₀.

      Рекомендуется включить этот параметр на слабых устройствах.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Создать", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Список заблокированных хостов", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Выбрать", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Применить изменения", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Выйти", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Реклама", - "description":"English: Ads" + "pickerPreview": { + "message": "Предпросмотр", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Приватность", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Сетевые фильтры", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Вредоносные программы", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Косметические фильтры", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Социальные", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Клик, Ctrl+клик", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Многоцелевые", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Блокировать элемент...", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Регионы, языки", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Скрыть оставшееся от заблокированных элементов место", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Пользовательские", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Показывать количество заблокированных запросов на иконке", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Один URL на строку. Строки, начинающиеся с символа ‘!’, будут игнорироваться. Неверные ссылки будут игнорироваться без предупреждения.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Отключить всплывающие подсказки", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Обработать", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Использовать контекстное меню, где возможно", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"очистить кэш", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Цветовая схема для дальтоников", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"доступна новая версия", - "description":"English: new version available" + "settingsAppearance": { + "message": "Настройки интерфейса", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"устарел", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Тема", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Последнее обновление: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Выбрать акцент цветового оформления", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Одно правило на строку. Правилом может быть обычное имя сайта, или Adblock Plus-совместимый фильтр. Строки, начинающиеся с ‘!’, будут игнорироваться.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Включить поддержку облачного хранилища", + "description": "" }, - "1pImport":{ - "message":"Импортировать и добавить", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Я — опытный пользователь", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Экспортировать", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Отключить предзагрузку для предотвращения подключений для заблокированных запросов", + "description": "English: " }, - "1pExportFilename":{ - "message":"ublock-custom-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Отключить проверку гиперссылок", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Применить изменения", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Предотвратить утечку локального IP-адреса через WebRTC", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Постоянные правила", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Поведение по умолчанию", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Временные правила", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Эти настройки могут быть указаны для каждого сайта отдельно", + "description": "" }, - "rulesRevert":{ - "message":"Вернуть", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Отключить косметические фильтры", + "description": "" }, - "rulesCommit":{ - "message":"Утвердить", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Блокировать медиа-элементы больше {{input}} KБ", + "description": "" }, - "rulesEdit":{ - "message":"Изменить", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Блокировать сторонние шрифты", + "description": "" }, - "rulesEditSave":{ - "message":"Сохранить", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Отключить JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Сбросить", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Блокировать CSP-отчёты", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Импорт из файла...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Раскрывать CNAME записи", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Экспорт в файл...", - "description":"" + "settingsAdvanced": { + "message": "Расширенные настройки", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Функции, предназначенные для технических пользователей", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Список ваших правил динамической фильтрации.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "расширенные настройки", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Синтаксис правил: источник назначение тип действие<\/code> (полная документация<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Последнее восстановление:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Ваш список имен сайтов, для которых uBlock₀ будет отключен. Одна запись на строку. Неверные имена сайтов будут игнорироваться без предупреждений.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Последняя резервная копия:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Импортировать и добавить", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} сетевых фильтров + {{cosmeticFilterCount}} косметических фильтров из:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Экспортировать", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} используется из {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Автообновление списков фильтров", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Применить изменения", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Обновить сейчас", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Тип", - "description":"English: Type" + "3pPurgeAll": { + "message": "Очистить все кэши", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Домен", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Парсить и применять косметические фильтры", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Косметические фильтры применяются на веб-странице для скрытия элементов, которые создают визуальные помехи, и которые не могут быть заблокированы механизмом фильтрации сетевых запросов.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Фильтр", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Игнорировать общие косметические фильтры", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Все", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Общие косметические фильтры — это те косметические фильтры, которые должны применяться на всех веб-сайтах. Включение этой опции снизит потребление памяти и избавит процессор от обработки общих косметических фильтров на веб-страницах.\n\nРекомендуется включить эту опцию на недостаточно мощных устройствах.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Скрытые запросы", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Приостановить сетевую активность, пока не запустятся все списки фильтров", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"фильтр записей в журнале", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Список заблокированных хостов", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Максимальное число записей логгера", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Применить изменения", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Контекст:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Встроенные", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Тип:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Реклама", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Динамическая фильтрация URL", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Приватность", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Статическая фильтрация", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Защита от вредоносных сайтов, безопасность", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} сетевые запросы {{type}}, {{br}}URL которых совпадает с {{url}} {{br}} и которые происходят из {{origin}},{{br}}{{importance}} имеется подходящий фильтр-исключение.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Виджеты соцсетей", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Блокировать", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Уведомления о файлах куки", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Разрешить", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Раздражающие элементы", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"типа “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Многоцелевые", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"любой тип", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Регионы, языки", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"из “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Пользовательские", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"откуда угодно", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Импортировать...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"кроме случаев, когда", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Один URL на строку. Неверные URL будут проигнорированы без предупреждения.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"даже если", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Устарел.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Статический фильтр {{filter}} найден в:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "показать содержимое", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Список изменений", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Последнее обновление: {{ago}}.\nКликните для принудительного обновления.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Вики", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Обновление...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Поддержка", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "В результате ошибки сети обновление не произошло.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Исходный код (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Не добавляйте фильтры из ненадёжных источников.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Участники", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Включить мои пользовательские фильтры", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Резервное копирование в файл...", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Разрешить пользовательские фильтры, требующие доверия", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Импортировать и добавить…", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Восстановление из файла...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Экспортировать…", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Восстановить настройки по умолчанию...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Текущие настройки будут заменены данными из резервной копии от {{time}}, и uBlock₀ будет перезапущен.\n\nПерезаписать все существующие параметры данными из резервной копии?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Применить изменения", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Данные не могут быть прочитаны или ошибочны", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Постоянные правила", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Все ваши настройки будут удалены, uBlock₀ будет перезапущен. \n\nВосстановить настройки по умолчанию?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Временные правила", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Не удается подключиться к {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Вернуть", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: добавить следующий адрес в ваш список фильтров?\n\nНазвание: \"{{title}}\"\nURL-адрес: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Утвердить", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"минуту назад", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Изменить", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} минут(-ы) назад", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Сохранить", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"час назад", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Сбросить", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} часа(-ов) назад", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Импорт из файла...", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"день назад", - "description":"English: a day ago" + "rulesExport": { + "message": "Экспортировать в файл…", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} дня(-ей) назад", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Показать панель управления", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Список ваших правил динамической фильтрации.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Показать журнал сетевых запросов", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Синтаксис правил: источник назначение тип действие (полная документация).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"выключен", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Сортировка:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin предотвратил загрузку следующей страницы:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Тип правила", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Из-за следующего фильтра", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Источник", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"без параметров", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Цель", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Найден в:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Записи доверенных сайтов указывают на каких веб-страницах uBlock Origin должен быть отключен. Одна запись на строку.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Вернуться", - "description":"English: Go back" + "whitelistImport": { + "message": "Импортировать и добавить…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Закрыть это окно", - "description":"English: Close this window" + "whitelistExport": { + "message": "Экспортировать…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Отключить строгую блокировку для {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "my-ublock-trusted-sites_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Временно", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Применить изменения", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Навсегда", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Тип", + "description": "English: Type" }, - "cloudPush":{ - "message":"Экспорт в облачное хранилище", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Домен", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Импорт из облачного хранилища", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Импортировать из облачного хранилища и объединить с текущими настройками", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Фильтр", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Все", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Имя этого устройства:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Закулисные запросы", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Принять", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Текущая вкладка", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Вернуть", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Перезагрузить содержимое вкладки", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"байт", - "description":"" + "loggerDomInspectorTip": { + "message": "Вкл/Выкл DOM-инспектор", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Временно разрешить большие медиа-элементы", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Вкл/Выкл всплывающую панель", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"Эта запись должна быть последней", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin вики: Логгер", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Очистить логгер", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Поставить логгер на паузу (отбрасывать все входящие данные)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Снять логгер с паузы", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Вкл/Выкл фильтрацию логгера", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "фильтрация записей логгера", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Настройки фильтрации логгера", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Not", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "blocked", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "allowed", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "модифицировано", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "1st-party", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "3rd-party", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Подробно", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Фильтр", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Список фильтров", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Правило", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Контекст", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Контекст корня", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Сторона", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Тип", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL правило", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Контекст:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Тип:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Статич. фильтр", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} сетевые запросы {{type}}, {{br}}URL которых совпадает с {{url}} {{br}} и которые происходят из {{origin}},{{br}}{{importance}} имеется подходящий фильтр-исключение.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Блокировать", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Разрешить", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "типа “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "любой тип", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "из “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "откуда угодно", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "кроме случаев, когда", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "даже если", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Статический фильтр {{filter}} найден в:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Статический фильтр не найден ни в одном списке фильтров, включенных в данный момент", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Записи логгера, не удовлетворяющие всем трём нижеуказанным условиям, будут автоматически отброшены:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Хранить записи последних {{input}} минут", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Хранить не больше {{input}} загрузок страницы на вкладку", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Хранить не больше {{input}} записей на вкладку", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Использовать {{input}} строк для каждой записи при вертикальном расширении", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Скрыть столбцы:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Время", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Фильтр/правило", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Контекст", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Сторона", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Список", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Таблица", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Простой", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Открыть", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Создать новый отчёт в GitHub", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Найти похожие отчёты в GitHub", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Документация", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Прочитайте документацию на uBlock/wiki, чтобы узнать обо всех возможностях uBlock Origin. ", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Вопросы и поддержка", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Ответы на вопросы и другая помощь доступны в разделе /r/uBlockOrigin на reddit.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Проблемы фильтрации/сломанный сайт", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Сообщайте о проблемах фильтрации на конкретных сайтах в раздел трекера uBlockOrigin/uAssets. Требуется аккаунт GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Важно: Избегайте использования других блокировщиков схожего назначения совместно с uBlock Origin, так как это может привести к проблемам с фильтрацией на определенных сайтах.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Советы: убедитесь, что ваши списки фильтров обновлены. Логгер — основной инструмент диагностики проблем, связанных с фильтрами.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Отчет об ошибке", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Сообщайте о собственных ошибках дополнения uBlock Origin в раздел трекера uBlockOrigin/uBlock-issue. Требуется GitHub аккаунт.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Диагностика неисправностей", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Ниже представлена техническая информация, которая может быть полезна волонтерам, помогающим вам решить проблему.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Сообщить о проблемном фильтре", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Чтобы не обременять добровольцев повторяющимися отчётами, пожалуйста, убедитесь, что об этой проблеме ещё не сообщали. Примечание: щелчок по кнопке приведёт к отправке адреса посещенной страницы GitHub'у.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Списки фильтров обновляются ежедневно. Убедитесь, что ваша проблема не была решена в свежих списках фильтров.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Удостоверьтесь, что проблема воспроизводится даже после обновления проблемной страницы.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Адрес веб-страницы:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Веб-страница...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "--Выберите категорию--", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Показывается реклама или ее заполнители", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Всплывающие окна или другие помехи", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Обнаруживается uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Проблемы, связанные с приватностью", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Поломки, когда включен uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Открываются нежелательные вкладки или окна", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Вредоносное ПО, фишинг", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Пометить веб-страницу как “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Политика конфиденциальности", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Список изменений", + "description": "" + }, + "aboutCode": { + "message": "Исходный код (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Участники", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Исходный код", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Переводы", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Списки фильтров", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Внешние зависимости (GPLv3-совместимые):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Собственные списки фильтров uBO свободно размещены на следующих CDN:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "При обновлении списка фильтров используется выбранный случайным образом CDN", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Резервное копирование в файл…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Восстановить из файла...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Восстановить настройки по умолчанию...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Текущие настройки будут заменены данными из резервной копии от {{time}}, и uBlock₀ будет перезапущен.\n\nПерезаписать все существующие параметры данными из резервной копии?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Данные не могут быть прочитаны или ошибочны", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Все ваши настройки будут удалены, uBlock₀ будет перезапущен. \n\nВосстановить настройки по умолчанию?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Ошибка сети: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Подписаться", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "минуту назад", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} минут(-ы) назад", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "час назад", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} часа(-ов) назад", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "день назад", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} дня(-ей) назад", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Показать панель управления", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Показать логгер", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "выключен", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Страница заблокирована", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin предотвратил загрузку следующей страницы:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Из-за следующего фильтра", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "без параметров", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Найден в:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Вернуться", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Закрыть это окно", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Не предупреждать меня больше про этот сайт", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Отключить строгую блокировку для {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Временно", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Навсегда", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Продолжить", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Заблокированная страница собирается перенаправить вас на другой сайт. Если вы решите продолжить, вы перейдете непосредственно на: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Причина:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Вредоносная активность", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Трекер", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Сомнительное содержание", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Экспорт в облачное хранилище", + "description": "tooltip" + }, + "cloudPull": { + "message": "Импорт из облачного хранилища", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Импортировать из облачного хранилища и объединить с текущими настройками", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Имя этого устройства:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Внимание! Изменяйте эти настройки на свой страх и риск.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Принять", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Применить изменения", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Вернуть", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "байт", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Заблокировать элемент во фрейме...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Установить список фильтров...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Временно разрешить большие медиа-элементы", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Показать исходный код...", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Введите сочетание", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Вкл/Выкл общую прокрутку", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Скопировать в буфер", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Выбрать все", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Вкл/Выкл косметическую фильтрацию", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Вкл/Выкл JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Ослабленный режим блокировки", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Размер хранилища: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KБ", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "МБ", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "ГБ", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Нажмите, чтобы загрузить", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Ошибки: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Не удалось выполнить фильтрацию при запуске браузера.\nПерезагрузите страницу, чтобы обеспечить фильтрацию.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Эта запись должна быть последней", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/si/messages.json b/src/_locales/si/messages.json new file mode 100644 index 0000000000000..fc4255dd27cb6 --- /dev/null +++ b/src/_locales/si/messages.json @@ -0,0 +1,1314 @@ +{ + "extName": { + "message": "uBlock Origin", + "description": "extension name." + }, + "extShortDesc": { + "message": "අවසානයේදී, මධ්‍ය සැකසුම් ඒකකය සහ මතකය අඩුවෙන් භාවිතා කරන කාර්යක්‍ෂම අවහිරකයක් ඇත.", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "dashboardName": { + "message": "යූබ්ලොක්₀ - උපකරණ පුවරුව", + "description": "English: uBlock₀ — Dashboard" + }, + "dashboardUnsavedWarning": { + "message": "අවවාදයයි! ඔබ නොසුරැකි වෙනස්කම් ඇත", + "description": "A warning in the dashboard when navigating away from unsaved changes" + }, + "dashboardUnsavedWarningStay": { + "message": "මෙතැන ඉන්න", + "description": "Label for button to prevent navigating away from unsaved changes" + }, + "dashboardUnsavedWarningIgnore": { + "message": "නොසලකන්න", + "description": "Label for button to ignore unsaved changes" + }, + "settingsPageName": { + "message": "සැකසුම්", + "description": "appears as tab name in dashboard" + }, + "3pPageName": { + "message": "පෙරහන් ලැයිස්තු", + "description": "appears as tab name in dashboard" + }, + "1pPageName": { + "message": "මාගේ පෙරහන්", + "description": "appears as tab name in dashboard" + }, + "rulesPageName": { + "message": "මාගේ නීති", + "description": "appears as tab name in dashboard" + }, + "whitelistPageName": { + "message": "විශ්වාසදායී අඩවි", + "description": "appears as tab name in dashboard" + }, + "shortcutsPageName": { + "message": "කෙටිමං", + "description": "appears as tab name in dashboard" + }, + "statsPageName": { + "message": "යූබ්ලොක්₀ — ලඝුර", + "description": "Title for the logger window" + }, + "aboutPageName": { + "message": "පිළිබඳ", + "description": "appears as tab name in dashboard" + }, + "supportPageName": { + "message": "සහාය", + "description": "appears as tab name in dashboard" + }, + "assetViewerPageName": { + "message": "යූබ්ලොක්₀ — වත්කම් දක්වනය", + "description": "Title for the asset viewer page" + }, + "advancedSettingsPageName": { + "message": "සංකීර්ණ සැකසුම්", + "description": "Title for the advanced settings page" + }, + "popupPowerSwitchInfo": { + "message": "ඔබන්න: මෙම අඩවියට යූබ්ලොක්₀ අබල/සබල කරන්න.\n\nCtrl+ඔබන්න: මෙම පිටුවට පමණක් යූබ්ලොක්₀ අබල කරන්න.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + }, + "popupPowerSwitchInfo1": { + "message": "මෙම අඩවියට යූබ්ලොක්₀ අබල/සබල කිරීමට ඔබන්න.\n\nමෙම පිටුවට පමණක් යූබ්ලොක්₀ අබල කිරීමට Ctrl+ඔබන්න.", + "description": "Message to be read by screen readers" + }, + "popupPowerSwitchInfo2": { + "message": "මෙම අඩවියට යූබ්ලොක්₀ සබල කිරීමට ඔබන්න.", + "description": "Message to be read by screen readers" + }, + "popupBlockedRequestPrompt": { + "message": "ඉල්ලීම් අවහිර කර ඇත", + "description": "English: requests blocked" + }, + "popupBlockedOnThisPagePrompt": { + "message": "මෙම පිටුවෙහි", + "description": "English: on this page" + }, + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 (13%)" + }, + "popupBlockedSinceInstallPrompt": { + "message": "ස්ථාපනයේ සිට", + "description": "English: since install" + }, + "popupOr": { + "message": "හෝ", + "description": "English: or" + }, + "popupBlockedOnThisPage_v2": { + "message": "මෙම පිටුවේ අවහිර", + "description": "For the new mobile-friendly popup design" + }, + "popupBlockedSinceInstall_v2": { + "message": "ස්ථාපනයෙන් පසු අවහිර", + "description": "For the new mobile-friendly popup design" + }, + "popupDomainsConnected_v2": { + "message": "සම්බන්ධිත වසම්", + "description": "For the new mobile-friendly popup design" + }, + "popupTipDashboard": { + "message": "උපකරණ පුවරුව අරින්න", + "description": "English: Click to open the dashboard" + }, + "popupTipZapper": { + "message": "මූලද්‍රව්‍ය zapper ප්‍රකාරයට ඇතුළු වන්න", + "description": "Tooltip for the element-zapper icon in the popup panel" + }, + "popupTipPicker": { + "message": "මූලද්‍රව්‍ය තෝරක ප්‍රකාරයට ඇතුළු වන්න", + "description": "English: Enter element picker mode" + }, + "popupTipLog": { + "message": "ලඝුර අරින්න", + "description": "Tooltip used for the logger icon in the panel" + }, + "popupTipReport": { + "message": "මෙම අඩවියේ ගැටලුවක් වාර්තා කරන්න", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipNoPopups": { + "message": "මෙම අඩවිය සඳහා සියලු උත්පතන අවහිර කිරීම ටොගල් කරන්න", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups1": { + "message": "මෙම අඩවියේ ඇති සියලුම උත්පතන අවහිර කිරීමට ක්ලික් කරන්න.", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2": { + "message": "මෙම අඩවියේ ඇති සියලුම උත්පතන තවදුරටත් අවහිර නොකිරීමට ක්ලික් කරන්න.", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoLargeMedia": { + "message": "මෙම අඩවිය සඳහා විශාල මාධ්‍ය අංග අවහිර කිරීම ටොගල් කරන්න.", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia1": { + "message": "මෙම අඩවියේ විශාල මාධ්‍ය අංග අවහිර කිරීමට ක්ලික් කරන්න.", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2": { + "message": "මෙම අඩවියේ විශාල මාධ්‍ය අංග තවදුරටත් අවහිර නොකිරීමට ක්ලික් කරන්න.", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoCosmeticFiltering": { + "message": "මෙම අඩවිය සඳහා රූපලාවන්‍ය පෙරහන ටොගල් කරන්න", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering1": { + "message": "මෙම අඩවියේ රූපලාවන්‍ය පෙරහන් අක්‍රිය කිරීමට ක්ලික් කරන්න.", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2": { + "message": "මෙම අඩවියේ රූපලාවන්‍ය පෙරහන් සක්‍රීය කිරීමට ක්ලික් කරන්න.", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoRemoteFonts": { + "message": "මෙම අඩවිය සඳහා දුරස්ථ අකුරු අවහිර කිරීම ටොගල් කරන්න", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts1": { + "message": "මෙම අඩවියේ දුරස්ථ අකුරු අවහිර කිරීමට ක්ලික් කරන්න.", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts2": { + "message": "මෙම අඩවියේ දුරස්ථ අකුරු තවදුරටත් අවහිර නොකිරීමට ක්ලික් කරන්න.", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoScripting1": { + "message": "මෙම අඩවියේ ජාවාස්ක්‍රිප්ට් අබල කිරීමට ඔබන්න", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupTipNoScripting2": { + "message": "මෙම අඩවියේ තවදුරටත් ජාවාස්ක්‍රිප්ට් අබල නොකිරීමට ඔබන්න", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupNoPopups_v2": { + "message": "උත්පතන කවුළු", + "description": "Caption for the no-popups per-site switch" + }, + "popupNoLargeMedia_v2": { + "message": "විශාල මාධ්‍ය අංග", + "description": "Caption for the no-large-media per-site switch" + }, + "popupNoCosmeticFiltering_v2": { + "message": "රූපලාවන්‍ය පෙරහන", + "description": "Caption for the no-cosmetic-filtering per-site switch" + }, + "popupNoRemoteFonts_v2": { + "message": "දුරස්ථ රුවකුරු", + "description": "Caption for the no-remote-fonts per-site switch" + }, + "popupNoScripting_v2": { + "message": "ජාවාස්ක්‍රිප්ට්", + "description": "Caption for the no-scripting per-site switch" + }, + "popupMoreButton_v2": { + "message": "තව", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton_v2": { + "message": "අඩුවෙන්", + "description": "Label to be used to hide popup panel sections" + }, + "popupTipGlobalRules": { + "message": "ගෝලීය නීති: මෙම තීරුව සියලුම අඩවි වලට යොදන නීතී සඳහා ය.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." + }, + "popupTipLocalRules": { + "message": "දේශීය නීති: මෙම තීරුව වත්මන් අඩවියට පමණක් අදාළ වන නීති සඳහා වේ.\nදේශීය නීති ගෝලීය නීති අභිබවා යයි.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." + }, + "popupTipSaveRules": { + "message": "ඔබගේ වෙනස්කම් ස්ථිර කිරීමට ක්ලික් කරන්න.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." + }, + "popupTipRevertRules": { + "message": "ඔබගේ වෙනස්කම් ප්‍රතිවර්තනය කිරීමට ක්ලික් කරන්න.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + }, + "popupAnyRulePrompt": { + "message": "සියල්ල", + "description": "" + }, + "popupImageRulePrompt": { + "message": "රූප", + "description": "" + }, + "popup3pAnyRulePrompt": { + "message": "තෙවන පාර්ශ්ව", + "description": "" + }, + "popup3pPassiveRulePrompt": { + "message": "තෙවන පාර්ශ්ව CSS/රූප", + "description": "" + }, + "popupInlineScriptRulePrompt": { + "message": "එක්තල අත්පත්", + "description": "" + }, + "popup1pScriptRulePrompt": { + "message": "පළමු පාර්ශ්ව අත්පත්", + "description": "" + }, + "popup3pScriptRulePrompt": { + "message": "තෙවන පාර්ශ්ව අත්පත්", + "description": "" + }, + "popup3pFrameRulePrompt": { + "message": "තෙවන පාර්ශ්ව රාමු", + "description": "" + }, + "popupHitDomainCountPrompt": { + "message": "සම්බන්ධිත වසම්", + "description": "appears in popup" + }, + "popupHitDomainCount": { + "message": "{{total}}න් {{count}}", + "description": "appears in popup" + }, + "popupVersion": { + "message": "අනුවාදය", + "description": "Example of use: Version 1.26.4" + }, + "popup3pScriptFilter": { + "message": "අත්පත", + "description": "Appears as an option to filter out firewall rows" + }, + "popup3pFrameFilter": { + "message": "රාමුව", + "description": "Appears as an option to filter out firewall rows" + }, + "pickerCreate": { + "message": "සාදන්න", + "description": "English: Create" + }, + "pickerPick": { + "message": "තෝරන්න", + "description": "English: Pick" + }, + "pickerQuit": { + "message": "ඉවත් වන්න", + "description": "English: Quit" + }, + "pickerPreview": { + "message": "පෙරදසුන", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + }, + "pickerNetFilters": { + "message": "ජාල පෙරහන්", + "description": "English: header for a type of filter in the element picker dialog" + }, + "pickerCosmeticFilters": { + "message": "රූපලාවන්‍ය පෙරහන්", + "description": "English: Cosmetic filters" + }, + "pickerCosmeticFiltersHint": { + "message": "ඔබන්න, Ctrl-ඔබන්න", + "description": "English: Click, Ctrl-click" + }, + "pickerContextMenuEntry": { + "message": "අංග අවහිර කරන්න", + "description": "An entry in the browser's contextual menu" + }, + "settingsCollapseBlockedPrompt": { + "message": "අවහිර කළ මූලද්‍රව්‍යවල ස්ථාන දරන්නන් සඟවන්න", + "description": "English: Hide placeholders of blocked elements" + }, + "settingsIconBadgePrompt": { + "message": "නිරූපකයේ අවහිර කළ ඉල්ලීම් ගණන පෙන්වන්න", + "description": "English: Show the number of blocked requests on the icon" + }, + "settingsTooltipsPrompt": { + "message": "මෙවලම් ඉඟි අක්‍රීය කරන්න", + "description": "A checkbox in the Settings pane" + }, + "settingsContextMenuPrompt": { + "message": "සුදුසු අවස්ථා වල දී සන්දර්භ වට්ටෝරුව භාවිතා කරන්න", + "description": "English: Make use of context menu where appropriate" + }, + "settingsColorBlindPrompt": { + "message": "වර්ණ-අන්ධ හිතකාමී", + "description": "English: Color-blind friendly" + }, + "settingsAppearance": { + "message": "පෙනුම", + "description": "Section for controlling user interface appearance" + }, + "settingsThemeLabel": { + "message": "තේමාව", + "description": "Label for checkbox to enable a custom dark theme" + }, + "settingsThemeAccent0Label": { + "message": "අභිරුචි උදාත්ත වර්ණය", + "description": "Label for checkbox to pick an accent color" + }, + "settingsCloudStorageEnabledPrompt": { + "message": "මේඝ ආචයන සහාය සබල කරන්න", + "description": "" + }, + "settingsAdvancedUserPrompt": { + "message": "මම ප්‍රගත පරිශ්‍රීලකයෙකි", + "description": "Checkbox to let user access advanced, technical features" + }, + "settingsPrefetchingDisabledPrompt": { + "message": "පූර්ව-ලබා ගැනීම අක්‍රීය කරන්න (අවහිර කළ ජාල ඉල්ලීම් සඳහා කිසිදු සම්බන්ධතාවයක් වැළැක්වීමට)", + "description": "English: " + }, + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "අතිසබැඳි විගණනය අබල කරන්න", + "description": "English: " + }, + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "දේශීය IP ලිපින කාන්දු වීම WebRTC වලක්වන්න", + "description": "English: " + }, + "settingPerSiteSwitchGroup": { + "message": "පෙරනිමි හැසිරීම", + "description": "" + }, + "settingPerSiteSwitchGroupSynopsis": { + "message": "මෙම පෙරනිමි හැසිරීම් එක් එක් අඩවියට අනුව අභිබවා යා හැක.", + "description": "" + }, + "settingsNoCosmeticFilteringPrompt": { + "message": "රූපලාවන්‍ය පෙරහන අක්‍රීය කරන්න", + "description": "" + }, + "settingsNoLargeMediaPrompt": { + "message": "කි.බ. {{input}} කට වඩා විශාල මාධ්‍ය අංග අවහිර කරන්න", + "description": "" + }, + "settingsNoRemoteFontsPrompt": { + "message": "දුරස්ථ රුවකුරු අවහිර කරන්න", + "description": "" + }, + "settingsNoScriptingPrompt": { + "message": "ජාවාස්ක්‍රිප්ට් අබල කරන්න", + "description": "The default state for the per-site no-scripting switch" + }, + "settingsNoCSPReportsPrompt": { + "message": "අ.ආ.ප්‍ර. (CSP) වාර්තා අවහිර කරන්න", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" + }, + "settingsUncloakCnamePrompt": { + "message": "කැනොනිකල් නම් ඉවත් කරන්න", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" + }, + "settingsAdvanced": { + "message": "සංකීර්ණ", + "description": "Section for controlling advanced-user settings" + }, + "settingsAdvancedSynopsis": { + "message": "තාක්‍ෂණික පරිශ්‍රීලකයින්ට පමණක් සුදුසු විශේෂාංග", + "description": "Description of section controlling advanced-user settings" + }, + "settingsAdvancedUserSettings": { + "message": "සංකීර්ණ සැකසුම්", + "description": "For the tooltip of a link which gives access to advanced settings" + }, + "settingsLastRestorePrompt": { + "message": "අවසාන ප්‍රත්‍යර්පණය:", + "description": "English: Last restore:" + }, + "settingsLastBackupPrompt": { + "message": "අවසාන උපස්ථය:", + "description": "English: Last backup:" + }, + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} ජාල පෙරහන් + {{cosmeticFilterCount}} රූපලාවන්‍ය පෙරහන්:", + "description": "Appears at the top of the _3rd-party filters_ pane" + }, + "3pListsOfBlockedHostsPerListStats": { + "message": "{{total}} න් {{used}} ක් භාවිතා කර ඇත", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "3pAutoUpdatePrompt1": { + "message": "පෙරහන් ලැයිස්තු ස්වයංක්‍රීයව යාවත්කාලීන කරන්න", + "description": "A checkbox in the _3rd-party filters_ pane" + }, + "3pUpdateNow": { + "message": "යාවත්කාල කරන්න", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pPurgeAll": { + "message": "සියලුම හැඹිලි ඉවත් කරන්න", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pParseAllABPHideFiltersPrompt1": { + "message": "රූපලාවන්‍ය පෙරහන් විග්‍රහ කර බලාත්මක කරන්න", + "description": "English: Parse and enforce Adblock+ element hiding filters." + }, + "3pParseAllABPHideFiltersInfo": { + "message": "රූපලාවන්‍ය පෙරහන් යනු වෙබ් පිටුවක දෘශ්‍ය කරදරයක් ලෙස සලකනු ලබන සහ ජාල ඉල්ලීම් මත පදනම් වූ පෙරහන් එන්ජින් මගින් අවහිර කළ නොහැකි අංග සැඟවීමට සේවය කරයි.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + }, + "3pIgnoreGenericCosmeticFilters": { + "message": "සාමාන්‍ය රූපලාවන්‍ය පෙරහන් නොසලකා හරින්න.", + "description": "This will cause uBO to ignore all generic cosmetic filters." + }, + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "සාමාන්‍ය රූපලාවන්‍ය පෙරහන් යනු සියලුම වෙබ් අඩවිවල යෙදීමට අදහස් කරන රූපලාවන්‍ය පෙරහන් වේ. මෙම විකල්පය සක්‍රීය කිරීමෙන් සාමාන්‍ය රූපලාවන්‍ය පෙරහන් හැසිරවීමේ ප්‍රතිඵලයක් ලෙස වෙබ් පිටුවලට එකතු වන මතකය සහ CPU උඩිස් බර ඉවත් කරනු ඇත.\n\nඅඩු බලවත් උපාංගවල මෙම විකල්පය සක්‍රීය කිරීම නිර්දේශ කෙරේ.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." + }, + "3pSuspendUntilListsAreLoaded": { + "message": "සියලුම පෙරහන් ලැයිස්තු පූරණය වන තුරු ජාල ක්‍රියාකාරකම් අත්හිටුවන්න.", + "description": "A checkbox in the 'Filter lists' pane" + }, + "3pListsOfBlockedHostsHeader": { + "message": "අවහිර කළ සත්කාරක", + "description": "English: Lists of blocked hosts" + }, + "3pApplyChanges": { + "message": "වෙනස්කම් යොදන්න", + "description": "English: Apply changes" + }, + "3pGroupDefault": { + "message": "තිළෑලි", + "description": "Filter lists section name" + }, + "3pGroupAds": { + "message": "දැන්වීම්", + "description": "Filter lists section name" + }, + "3pGroupPrivacy": { + "message": "පෞද්ගලිකත්‍වය", + "description": "Filter lists section name" + }, + "3pGroupMalware": { + "message": "අනිෂ්ට මෘදුකාංග ආරක්ෂාව, ආරක්ෂාව", + "description": "Filter lists section name" + }, + "3pGroupSocial": { + "message": "සමාජ විජට්", + "description": "Filter lists section name" + }, + "3pGroupCookies": { + "message": "දත්තකඩ දැන්වීම්", + "description": "Filter lists section name" + }, + "3pGroupAnnoyances": { + "message": "කරදර", + "description": "Filter lists section name" + }, + "3pGroupMultipurpose": { + "message": "බහුකාර්ය", + "description": "Filter lists section name" + }, + "3pGroupRegions": { + "message": "කලාප, භාෂා", + "description": "Filter lists section name" + }, + "3pGroupCustom": { + "message": "අභිරුචි", + "description": "Filter lists section name" + }, + "3pImport": { + "message": "ආයාත කරන්න...", + "description": "The label for the checkbox used to import external filter lists" + }, + "3pExternalListsHint": { + "message": "පේළියකට එක් URL එකක් බැගින්. අවලංගු URL නිහඬව නොසලකා හරිනු ලැබේ.", + "description": "Short information about how to use the textarea to import external filter lists by URL" + }, + "3pExternalListObsolete": { + "message": "කල් ඉකුත් වී ඇත.", + "description": "used as a tooltip for the out-of-date icon beside a list" + }, + "3pViewContent": { + "message": "අන්තර්ගතය බලන්න", + "description": "used as a tooltip for eye icon beside a list" + }, + "3pLastUpdate": { + "message": "අවසන් යාවත්කාලීන කිරීම: {{ago}}.\nයාවත්කාලීන කිරීමට බල කිරීමට ක්ලික් කරන්න.", + "description": "used as a tooltip for the clock icon beside a list" + }, + "3pUpdating": { + "message": "යාවත්කාල වෙමින්...", + "description": "used as a tooltip for the spinner icon beside a list" + }, + "3pNetworkError": { + "message": "ජාල දෝෂයක් නිසා සම්පත යාවත්කාලීන වීම වැළැක්විණි.", + "description": "used as a tooltip for error icon beside a list" + }, + "1pTrustWarning": { + "message": "විශ්වාස නොකළ මූලාශ්‍රවලින් පෙරහන් එක් නොකරන්න.", + "description": "Warning against copy-pasting filters from random sources" + }, + "1pEnableMyFiltersLabel": { + "message": "මගේ අභිරුචි පෙරහන් සක්‍රීය කරන්න", + "description": "Label for the checkbox use to enable/disable 'My filters' list" + }, + "1pTrustMyFiltersLabel": { + "message": "විශ්වාසය අවශ්‍ය අභිරුචි පෙරහන් වලට ඉඩ දෙන්න.", + "description": "Label for the checkbox use to trust the content of 'My filters' list" + }, + "1pImport": { + "message": "…ආයාත කර එකතු කරන්න", + "description": "Button in the 'My filters' pane" + }, + "1pExport": { + "message": "නිර්යාත කරන්න...", + "description": "Button in the 'My filters' pane" + }, + "1pExportFilename": { + "message": "මගේ-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" + }, + "1pApplyChanges": { + "message": "වෙනස්කම් යොදන්න", + "description": "English: Apply changes" + }, + "rulesPermanentHeader": { + "message": "ස්ථිර නීති", + "description": "header" + }, + "rulesTemporaryHeader": { + "message": "තාවකාලික නීති", + "description": "header" + }, + "rulesRevert": { + "message": "ප්‍රතිවර්තනය", + "description": "This will remove all temporary rules" + }, + "rulesCommit": { + "message": "කැප කරන්න", + "description": "This will persist temporary rules" + }, + "rulesEdit": { + "message": "සංස්කරණය", + "description": "Will enable manual-edit mode (textarea)" + }, + "rulesEditSave": { + "message": "සුරකින්න", + "description": "Will save manually-edited content and exit manual-edit mode" + }, + "rulesEditDiscard": { + "message": "ඉවතලන්න", + "description": "Will discard manually-edited content and exit manual-edit mode" + }, + "rulesImport": { + "message": "ගොනුවකින් ආයාත කරන්න...", + "description": "" + }, + "rulesExport": { + "message": "ගොනුවකට නිර්යාත කරන්න", + "description": "Button in the 'My rules' pane" + }, + "rulesDefaultFileName": { + "message": "මාගේ-ublock-ගතික-නීති_{{datetime}}.txt", + "description": "default file name to use" + }, + "rulesHint": { + "message": "ඔබගේ ගතික පෙරහන් නීති ලැයිස්තුව.", + "description": "English: List of your dynamic filtering rules." + }, + "rulesFormatHint": { + "message": "රීති වාක්‍ය ඛණ්ඩය: මූලාශ්‍ර ගමනාන්ත වර්ගය ක්‍රියාව (සම්පූර්ණ ලියකියවිලි).", + "description": "English: dynamic rule syntax and full documentation." + }, + "rulesSort": { + "message": "වර්ගනය:", + "description": "English: label for sort option." + }, + "rulesSortByType": { + "message": "නීතියේ වර්ගය", + "description": "English: a sort option for list of rules." + }, + "rulesSortBySource": { + "message": "මූලාශ්‍රය", + "description": "English: a sort option for list of rules." + }, + "rulesSortByDestination": { + "message": "ගමනාන්තය", + "description": "English: a sort option for list of rules." + }, + "whitelistPrompt": { + "message": "විශ්වාසදායක අඩවි නියෝග මඟින් uBlock Origin අක්‍රිය කළ යුත්තේ කුමන වෙබ් පිටු මතද යන්න නියම කරයි. පේළියකට එක් ඇතුළත් කිරීමක් පමණි.", + "description": "A concise description of the 'Trusted sites' pane." + }, + "whitelistImport": { + "message": "…ආයාත කර එකතු කරන්න", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExport": { + "message": "නිර්යාත…", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExportFilename": { + "message": "මාගේ-ublock-විශ්වාසදායී-අඩවි_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" + }, + "whitelistApply": { + "message": "වෙනස්කම් යොදන්න", + "description": "English: Apply changes" + }, + "logRequestsHeaderType": { + "message": "වර්ගය", + "description": "English: Type" + }, + "logRequestsHeaderDomain": { + "message": "වසම", + "description": "English: Domain" + }, + "logRequestsHeaderURL": { + "message": "ඒ.ස.නි.", + "description": "English: URL" + }, + "logRequestsHeaderFilter": { + "message": "පෙරහන", + "description": "English: Filter" + }, + "logAll": { + "message": "සියල්ල", + "description": "Appears in the logger's tab selector" + }, + "logBehindTheScene": { + "message": "මේස", + "description": "Pretty name for behind-the-scene network requests" + }, + "loggerCurrentTab": { + "message": "වත්මන් ටැබය", + "description": "Appears in the logger's tab selector" + }, + "loggerReloadTip": { + "message": "ටැබ් අන්තර්ගතය නැවත පූරණය කරන්න", + "description": "Tooltip for the reload button in the logger page" + }, + "loggerDomInspectorTip": { + "message": "DOM පරීක්ෂක ටොගල් කරන්න", + "description": "Tooltip for the DOM inspector button in the logger page" + }, + "loggerPopupPanelTip": { + "message": "උත්පතන පැනලය ටොගල් කරන්න", + "description": "Tooltip for the popup panel button in the logger page" + }, + "loggerInfoTip": { + "message": "uBlock සම්භවය විකි: ලොගර්", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "ලොගර් හිස් කරන්න", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "ලොගර් විරාම කරන්න (එන සියලුම දත්ත ඉවතලන්න)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "ලොගර් විරාම නොකරන්න", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "ලොගර් පෙරහන ටොගල් කරන්න", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "පෙරහන් ලොගර් අන්තර්ගතය", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "ලොගර් පෙරහන් විකල්ප", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "නැහැ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "අවහිරයි", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "ඉඩදුන්", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "සංශෝධිත", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "පළමු පාර්ශ්ව", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "තෙවන පාර්ශ්ව", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "විස්තර", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "පෙරහන", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "පෙරහන් ලැයිස්තුව", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "නීතිය", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "සන්දර්භය", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "මූල සන්දර්භය", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "සාද ගතිය", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "වර්ගය", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "ඒ.ස.නි.", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "ඒ.ස.නි. නීතිය", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "සන්දර්භය:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "වර්ගය:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "ස්ථිතික පෙරහන", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} ජාල ඉල්ලීම් {{type}} {{br}}වන URL ලිපිනය {{url}} {{br}}ට ගැලපෙන අතර {{origin}}ට ආරම්භ වේ,{{br}}{{importance}} ට ගැලපෙන ව්‍යතිරේක පෙරහනක් ඇත.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "අවහිර", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "ඉඩ දෙන්න", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "වර්ගය “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "ඕනෑම වර්ගයක", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "“{{origin}}” වෙතින්", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "ඕනෑම තැනක සිට", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "විට හැර", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "විට දී වුවත්", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "ස්ථිතික පෙරහන {{filter}} හමු වූයේ:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "දැනට සක්‍රිය කර ඇති කිසිදු පෙරහන් ලැයිස්තුවක ස්ථිතික පෙරහන සොයාගත නොහැකි විය.", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "පහත කොන්දේසි තුනම සපුරා නොමැති ලොගර් ඇතුළත් කිරීම් ස්වයංක්‍රීයව ඉවත දමනු ලැබේ:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "අවසාන මිනිත්තු {{input}} වලින් ඇතුළත් කිරීම් සුරකින්න", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "ටැබ් එකකට උපරිම වශයෙන් {{input}} පිටු පූරණ සංරක්ෂණය කරන්න", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "ටැබ් එකකට උපරිම වශයෙන් {{input}} ඇතුළත් කිරීම් සංරක්ෂණය කරන්න", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "සිරස් අතට පුළුල් කළ ප්‍රකාරයේදී ඇතුළත් කිරීමකට {{input}} රේඛා භාවිතා කරන්න.", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "තීරු සඟවන්න:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} වේලාව", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} පෙරහන/නීතිය", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} සන්දර්භය", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} සාද ස්වභාවය", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "ලැයිස්තුව", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "වගුව", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "සරල", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "මාර්ක්ඩවුන්", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "අරින්න", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "නව වාර්තාවක් සාදන්න", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "සමාන වාර්තා සොයන්න", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "ප්‍රලේඛනය", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "uBlock Origin හි සියලුම විශේෂාංග ගැන ඉගෙන ගැනීමට uBlock/wiki හි ඇති ලේඛන කියවන්න.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "ප්‍රශ්න සහ සහාය", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "ප්‍රශ්නවලට පිළිතුරු සහ අනෙකුත් ආකාරයේ උපකාර සහාය /r/uBlockOriginයන උප රෙඩිට් එකෙන් සපයනු ලැබේ.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "පෙරහන් ගැටළු/වෙබ් අඩවිය බිඳ වැටී ඇත", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "නිශ්චිත වෙබ් අඩවි සමඟ පෙරහන් ගැටළු uBlockOrigin/uAssets ගැටළු ට්රැකර්වෙත වාර්තා කරන්න. GitHub ගිණුමක් අවශ්‍යයි.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "වැදගත්: uBlock Origin සමඟ සමාන අරමුණු සහිත වෙනත් අවහිර කරන්නන් භාවිතා කිරීමෙන් වළකින්න, මන්ද මෙය නිශ්චිත වෙබ් අඩවි වල පෙරහන් ගැටළු ඇති කළ හැකිය.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "ඉඟි: ඔබගේ පෙරහන් ලැයිස්තු යාවත්කාලීනව ඇති බවට වග බලා ගන්න. පෙරහන් ආශ්‍රිත ගැටළු හඳුනා ගැනීම සඳහා ලොගර් මූලික මෙවලම වේ.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "දෝෂ වාර්තාව", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "uBlock Origin සමඟ ඇති ගැටළු uBlockOrigin/uBlock-issue ගැටළු ට්‍රැකර්වෙත වාර්තා කරන්න. GitHub ගිණුමක් අවශ්‍යයි.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "දෝශ නිරාකරණ තොරතුරු", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "ස්වේච්ඡා සේවකයන් ගැටලුවක් විසඳීමට ඔබට උදව් කිරීමට උත්සාහ කරන විට ප්‍රයෝජනවත් විය හැකි තාක්ෂණික තොරතුරු පහත දැක්වේ.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "පෙරහන් ගැටළුවක් වාර්තා කරන්න", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "අනුපිටපත් වාර්තා සමඟ ස්වේච්ඡා සේවකයින්ට බරක් වීම වළක්වා ගැනීම සඳහා, කරුණාකර ගැටළුව දැනටමත් වාර්තා කර නොමැති බව තහවුරු කරගන්න. සටහන: බොත්තම ක්ලික් කිරීමෙන් පිටුවේ මූලාරම්භය GitHub වෙත යවනු ලැබේ.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "පෙරහන් ලැයිස්තු දිනපතා යාවත්කාලීන වේ. ඔබගේ ගැටලුව මෑත කාලීන පෙරහන් ලැයිස්තු වල දැනටමත් විසඳා නොමැති බවට වග බලා ගන්න.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "ගැටළු සහගත වෙබ් පිටුව නැවත පූරණය කිරීමෙන් පසුවද ගැටලුව පවතින බව තහවුරු කරන්න.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "වියමන පිටුවේ ලිපිනය:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "වියමන පිටුව…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- නිවේශිතයක් තෝරන්න --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "දැන්වීම් හෝ දැන්වීම් ඉතිරි කොටස් පෙන්වයි", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "උඩැතිරි හෝ වෙනත් කරදර ඇති", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "යූබ්ලොක් ඔරිජින් හඳුනා ගනියි", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "පෞද්ගලිකත්‍වය ආශ්‍රිත ගැටළු තිබේ", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "uBlock Origin සක්‍රීය කර ඇති විට සිදුවන අක්‍රමිකතා", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "අනවශ්‍ය පටිති හෝ කවුළු අරියි", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "නරක මෘදුකාංග, තතුබෑම් වලට මග පාදයි", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "වෙබ් පිටුව “NSFW” ලෙස ලේබල් කරන්න (“වැඩ සඳහා ආරක්ෂිත නොවේ”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "රහස්‍යතා ප්‍රතිපත්තිය", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "වෙනස්කම් සටහන", + "description": "" + }, + "aboutCode": { + "message": "මූලාශ්‍ර කේත (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "දායකයින්", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "මූලාශ්‍ර කේත", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "පරිවර්තන", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "පෙරහන් ලැයිස්තු", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "බාහිර පරායත්ත (GPLv3-අනුකූල):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO හි පෙරහන් ලැයිස්තු පහත CDNsමත නිදහසේ සත්කාරකත්වය දරයි:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "පෙරහන් ලැයිස්තුවක් යාවත්කාලීන කිරීමට අවශ්‍ය වූ විට අහඹු ලෙස තෝරාගත් CDN එකක් භාවිතා වේ.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "ගොනුවකට උපස්ථ කරන්න", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "මාගේ-ublock-උපස්ථය_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "ගොනුවකින් ප්‍රත්‍යර්පණය කරන්න", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "සැකසුම් පෙරනිමියට සකසන්න", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "{{time}}මත උපස්ථ කළ දත්ත භාවිතයෙන් ඔබගේ සියලු සැකසුම් උඩින් ලියනු ලබන අතර, uBlock₀ නැවත ආරම්භ වේ.\n\nඋපස්ථ කළ දත්ත භාවිතයෙන් පවතින සියලුම සැකසුම් උඩින් ලියන්නද?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "දත්ත කියවිය නොහැකි විය නැතහොත් අවලංගුය.", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "ඔබගේ සියලු සැකසුම් ඉවත් කරනු ලබන අතර, uBlock₀ නැවත ආරම්භ වේ.\n\nuBlock₀ කර්මාන්තශාලා සැකසුම් වෙත නැවත සකසන්නද?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "ජාලයේ දෝෂය: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "දායක වන්න", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "විනාඩියකට පෙර", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "විනාඩි {{value}} කට පෙර", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "පැයකට පෙර", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "පැය {{value}} කට පෙර", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "දවසකට පෙර", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "දවස් {{value}} කට පෙර", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "උපකරණ පුවරුව පෙන්වන්න", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "ලඝුව පෙන්වන්න", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "අක්‍රියයි", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "පිටුව අවහිරයි", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin විසින් පහත පිටුව පූරණය වීම වළක්වා ඇත:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "පහත පෙරහන නිසා:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "පරාමිතීන් නොමැතිව", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "මෙහි හමු විය:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "ආපසු යන්න", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "මෙම කවුළුව වසන්න", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "මෙම අඩවිය ගැන මට නැවත අනතුරු අඟවන්න එපා.", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "{{hostname}}සඳහා දැඩි අවහිර කිරීම අක්‍රීය කරන්න", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "තාවකාලිකව", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "සදහටම", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "ඉදිරියට", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "අවහිර කළ පිටුව වෙනත් අඩවියකට හරවා යැවීමට අවශ්‍යයි. ඔබ ඉදිරියට යාමට තෝරා ගන්නේ නම්, ඔබ කෙලින්ම මෙහි සංචාලනය කරනු ඇත: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "මේඝ ආචයනයට නිර්යාත කරන්න", + "description": "tooltip" + }, + "cloudPull": { + "message": "මේඝ ආචයනයෙන් ආයාත කරන්න", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "මේඝ ආචයනයෙන් ආයාත කර වත්මන් සැකසුම් වලට ඒකාබද්ධ කරන්න", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "මෙම උපාංගයේ නම:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "අවවාදයයි! මෙම සංකීර්ණ සැකසුම් සංශෝධනයේ අවදානම ඔබ සතුයි.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "යොමන්න", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "වෙනස්කම් යොදන්න", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "ප්‍රතිවර්තනය", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "බයිට", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "රාමුවේ බ්ලොක් මූලද්‍රව්‍යය…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "පෙරහන් ලැයිස්තුවට දායක වන්න…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "තාවකාලිකව විශාල මාධ්‍ය අංගවලට ඉඩ දෙන්න.", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "මූලාශ්‍ර කේත බලන්න…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "කෙටිමඟක් ලියන්න", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "අගුළු දැමූ අනුචලනය ටොගල් කරන්න", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "පසුරු පුවරුවට පිටපතක්", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "සියල්ල තෝරන්න", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "රූපලාවන්‍ය පෙරහන ටොගල් කරන්න", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "ජාවාස්ක්‍රිප්ට් ටොගල් කරන්න", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "අවහිර කිරීමේ මාදිලිය ලිහිල් කරන්න", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "ආචයනය භාවිතය: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "කි.බ.", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "මෙ.බ.", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "ගි.බ.", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "පූරණයට ඔබන්න", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "දෝෂ: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "බ්‍රව්සරය දියත් කිරීමේදී නිසි ලෙස පෙරීමට නොහැකි විය. නිසි පෙරහන සහතික කිරීම සඳහා පිටුව නැවත පූරණය කරන්න.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" + } +} diff --git a/src/_locales/sk/messages.json b/src/_locales/sk/messages.json index ab9a6579b0813..fd590d2460a2b 100644 --- a/src/_locales/sk/messages.json +++ b/src/_locales/sk/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Konečne efektívny blokovač, ktorý nezaťažuje CPU a pamäť.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Konečne efektívny blokovač. Nezaťažuje CPU ani pamäť.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Ovládací panel", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Ovládací panel", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Nastavenia", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Upozornenie! Máte neuložené zmeny", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Filtre tretích strán", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Zostať", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Moje filtre", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ignorovať", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Moje pravidlá", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Nastavenia", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Biela listina", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Zoznam filtrov", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Zaznamenávač", - "description":"Title for the logger window" + "1pPageName": { + "message": "Moje filtre", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"O doplnku", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Moje pravidlá", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Kliknutie: zakázať\/povoliť uBlock pre túto stránku.\n\nCtrl+kliknutie: zakázať uBlock len pre túto stránku.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Dôveryhodné stránky", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"zablokované požiadavky", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Klávesové skratky", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"na tejto stránke", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Zaznamenávač", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} alebo {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "O doplnku", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"od inštalácie", - "description":"English: since install" + "supportPageName": { + "message": "Podpora", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"alebo", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Zobrazenie zdrojov", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Kliknite sem pre otvorenie ovládacieho panela", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Pokročilé nastavenia", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Prejsť do režimu výberu prvku", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Kliknutie: zakázať/povoliť uBlock pre túto stránku.\n\nCtrl+kliknutie: zakázať uBlock₀ len pre túto stránku.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Otvoriť Zaznamenávač", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Kliknutím zakážete uBlock₀ pre túto stránku.\n\nCtrl+kliknutie zakáže uBlock₀ len pre túto stránku.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Žiadne vyskakovacie okná pre túto stránku", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Kliknutím povolíte uBlock₀ pre túto stránku.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Prepnúť blokovanie veľkých multimediálnych prvkov na tejto stránke", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "zablokované požiadavky", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Prepnúť kozmetické filtrovanie pre túto stránku", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "na tejto stránke", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Prepnúť blokovanie vzdialených písiem na tejto stránke", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} alebo {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Globálne pravidlá: tento stĺpec slúži pre pravidlá, ktoré platia pre všetky weby.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "od inštalácie", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Lokálne pravidlá: tento stĺpec slúži pre pravidlá, ktoré platia len pre aktuálny web.\nLokálne pravidlá prepisujú globálne pravidlá.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "alebo", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Kliknutím použijete vaše zmeny.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Blokované na tejto stránke", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Kliknutím vrátite vaše zmeny.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Blokované od inštalácie", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"všetko", - "description":"" + "popupDomainsConnected_v2": { + "message": "Pripojené domény", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"obrázky", - "description":"" + "popupTipDashboard": { + "message": "Otvoriť ovládací panel", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"z tretej strany", - "description":"" + "popupTipZapper": { + "message": "Prejsť do režimu výberu prvku", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"CSS\/obrázky tretích strán", - "description":"" + "popupTipPicker": { + "message": "Prejsť do režimu výberu prvku", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"vstavané skripty", - "description":"" + "popupTipLog": { + "message": "Otvoriť Zaznamenávač", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"skripty prvej triedy", - "description":"" + "popupTipReport": { + "message": "Nahlásiť problém na tejto webovej stránke", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"skripty tretej triedy", - "description":"" + "popupTipNoPopups": { + "message": "Žiadne vyskakovacie okná pre túto stránku", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"rámy tretej triedy", - "description":"" + "popupTipNoPopups1": { + "message": "Kliknutím zakážete všetky vyskakovacie okná na tejto stránke", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"pripojené domény", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Kliknutím povolíte všetky vyskakovacie okná na tejto stránke", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} z {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Prepnúť blokovanie veľkých multimediálnych prvkov na tejto stránke", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Vytvoriť", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Kliknutím zablokovať veľké multimediálne prvky na tejto stránke", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Vybrať", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Kliknutím povolíte veľké multimediálne prvky na tejto stránke", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Ukončiť", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Prepnúť kozmetické filtrovanie pre túto stránku", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Náhľad", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Kliknutím zakážete kozmetické filtrovanie na tejto stránke", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Sieťové filtre", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Kliknutím povolíte kozmetické filtrovanie na tejto stránke", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Kozmetické filtre", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Prepnúť blokovanie vzdialených písiem na tejto stránke", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Kliknutie, Ctrl-kliknutie", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Kliknutím zakážete vzdialené písma pre túto stránku", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Zablokovať prvok", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Kliknutím povolíte vzdialené písma pre túto stránku", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Skryť zástupcov zablokovaných prvkov", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Kliknutím úplne zakážete JavaScript na tejto stránke", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Zobraziť počet zablokovaných požiadaviek na ikone", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Kliknutím už nebude úplne zakázaný JavaScript na tejto stránke", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Zakázať tipy pre nástroje", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Vyskakovacie okná", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Používať kontextovú ponuku v prípade potreby", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Veľké mediálne prvky", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Režim pre farboslepých", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Kozmetické filtrovanie", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Povoliť podporu cloudového úložiska", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Vzdialené písma", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Som pokročilý používateľ (Povinne prečítať<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Zakázať prednačítavanie (zakáže akékoľvek pripojenie pre zablokované sieťové požiadavky)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Viac", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Zakázať auditovanie hypertextových odkazov", - "description":"English: " + "popupLessButton_v2": { + "message": "Menej", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Zabrániť úniku lokálnej IP adresy cez WebRTC", - "description":"English: " + "popupTipGlobalRules": { + "message": "Globálne pravidlá: tento stĺpec slúži pre pravidlá, ktoré platia pre všetky weby.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Predvolené správanie", - "description":"" + "popupTipLocalRules": { + "message": "Lokálne pravidlá: tento stĺpec slúži pre pravidlá, ktoré platia len pre aktuálny web.\nLokálne pravidlá prepisujú globálne pravidlá.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Tieto predvolené správania môžu byť prepísané u jednotlivých stránkach", - "description":"" + "popupTipSaveRules": { + "message": "Kliknutím použijete vaše zmeny.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Vypnúť kozmetické filtrovanie", - "description":"" + "popupTipRevertRules": { + "message": "Kliknutím vrátite vaše zmeny.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Blokovať multimediálne prvky väčšie ako {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "všetko", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blokovať vzdialené písma", - "description":"" + "popupImageRulePrompt": { + "message": "obrázky", + "description": "" }, - "settingsStorageUsed":{ - "message":"Využité miesto: {{value}} bajtov", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "z tretej strany", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Posledná obnova:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "CSS/obrázky tretích strán", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Posledná záloha:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "vstavané skripty", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} sieťových filtrov + {{cosmeticFilterCount}} kozmetických filtrov z:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "skripty prvej triedy", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} použitých z {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "skripty tretej triedy", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Automaticky aktualizovať zoznamy filtrov.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "rámy tretej triedy", + "description": "" }, - "3pUpdateNow":{ - "message":"Aktualizovať teraz", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "pripojené domény", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Vyčistiť celú vyrovnávaciu pamäť", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} z {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Spracovať a vynútiť kozmetické filtre", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Verzia", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Táto možnosť povoľuje analyzovanie a vynútenie filtrov “skrývajúcich prvky” a kompatibilných s Adblock Plus<\/a>. Tieto filtre sú prevažne kozmetické. Skrývajú prvky webových stránok, ktoré sú vizuálne otravné a nemôžu byť zablokované filtrovaním sieťových požiadavkov.<\/p>

      Povolenie tejto funkcie zvyšujte nároky uBlock<\/i>na pamäť.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "skript", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignorovať generické kozmetické filtre", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "rámec", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Generické kozmetické filtre sú tie kozmetické filtre, ktoré sú určené na použitie na všetkých webových stránkach.

      Aj keď ich uBlock₀ používa efektívne, generické kozmetické filtre môžu stále prispievať k zaťaženiu pamäte a procesora na niektorých webových stránkach, a to najmä na veľkých a zložitých.

      Zapnutím tejto možnosti sa zníži zaťaženie pamäte a procesora v dôsledku použitia generických kozmetických filtrov pre webové stránky, a taktiež sa znížia nároky samotného rozšírenia uBlock₀ na pamäť.

      Odporúča sa povoliť túto možnosť na menej výkonných zariadení.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Vytvoriť", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Zoznamy zablokovaných hostiteľov", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Vybrať", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Použiť zmeny", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Ukončiť", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Reklamy", - "description":"English: Ads" + "pickerPreview": { + "message": "Náhľad", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Súkromie", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Sieťové filtre", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Domény malvéru", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Kozmetické filtre", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Sociálne", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Kliknutie, Ctrl-kliknutie", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Viacúčelové", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Zablokovať prvok…", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Regióny, jazyky", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Skryť zástupcov zablokovaných prvkov", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Vlastné", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Zobraziť počet zablokovaných požiadaviek na ikone", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Jedna URL na riadok. Riadky začínajúce s ‘!’ budú ignorované. Neplatné URL budú potichu ignorované.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Zakázať tipy pre nástroje", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Spracovať", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Používať kontextovú ponuku v prípade potreby", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"vyčistiť vyrovnávaciu pamäť", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Režim pre farboslepých", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"dostupná nová verzia", - "description":"English: new version available" + "settingsAppearance": { + "message": "Vzhľad", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"zastarané", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Motív", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Posledná aktualizácia: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Vlastná farba motívu", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Jeden filter na riadok. Filter môže byť jednoduchý názov hostiteľa alebo filter kompatibilný s Adblock Plus. Riadky začínajúce s ‘!’ budú ignorované.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Povoliť podporu cloudového úložiska", + "description": "" }, - "1pImport":{ - "message":"Importovať a pripojiť", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Som pokročilý používateľ", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Exportovať", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Zakázať prednačítavanie (zakáže akékoľvek pripojenie pre zablokované sieťové požiadavky)", + "description": "English: " }, - "1pExportFilename":{ - "message":"ublock-moje-statické-filtre_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Zakázať auditovanie hypertextových odkazov", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Použiť zmeny", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Zabrániť úniku lokálnej IP adresy cez WebRTC", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Trvalé pravidlá", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Predvolené správanie", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Dočasné pravidlá", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Tieto predvolené správania môžu byť prepísané na jednotlivých stránkach", + "description": "" }, - "rulesRevert":{ - "message":"Vrátiť", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Vypnúť kozmetické filtrovanie", + "description": "" }, - "rulesCommit":{ - "message":"Potvrdiť", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Blokovať multimediálne prvky väčšie ako {{input:number}} KB", + "description": "" }, - "rulesEdit":{ - "message":"Upraviť", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Blokovať vzdialené písma", + "description": "" }, - "rulesEditSave":{ - "message":"Uložiť", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Zakázať JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Zahodiť", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Zablokovať CSP hlásenia", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Importovať zo súboru...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Odhaliť kanonické mená", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Exportovať zo súboru", - "description":"" + "settingsAdvanced": { + "message": "Pokročilé", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"ublock-moje-dynamické-pravidlá_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Funkcie vhodné iba pre pokročilých používateľov.", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Zoznam vašich dynamických filtrovacích pravidiel.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "pokročilé nastavenia", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Syntax pravidla: zdroj cieľ typ akcia<\/code> (úplná dokumentácia<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Posledná obnova:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Váš zoznam názvov hostiteľov, pre ktoré bude uBlock zakázaný. Jedna položka na riadok. Neplatné názvy hostiteľov budú ignorované.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Posledná záloha:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Importovať a pripojiť", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} sieťových filtrov + {{cosmeticFilterCount}} kozmetických filtrov z:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Exportovať", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} použitých z {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"ublock-moja-biela-listina_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Automaticky aktualizovať zoznamy filtrov.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Použiť zmeny", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Aktualizovať teraz", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Typ", - "description":"English: Type" + "3pPurgeAll": { + "message": "Vyčistiť celú vyrovnávaciu pamäť", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Doména", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Spracovať a vynútiť kozmetické filtre", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Kozmetické filtre slúžia na skrytie prvkov na webovej stránke, ktoré sa považujú za vizuálne obťažujúce a ktoré nemôžu byť zablokované filtrovaním sieťových požiadavkov.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignorovať generické kozmetické filtre", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Všetky", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Generické kozmetické filtre sú tie kozmetické filtre, ktoré sú určené na použitie na všetkých webových stránkach. Zapnutím tejto možnosti sa zníži zaťaženie pamäte a procesora v dôsledku použitia generických kozmetických filtrov.\n\nOdporúča sa povoliť túto možnosť na menej výkonných zariadeniach.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Za oponou", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Pozastaviť sieťovú aktivitu, kým sa nenačítajú všetky zoznamy filtrov", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"filtrovať položky v zázname", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Zoznamy zablokovaných hostiteľov", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Maximálny počet položiek v zázname", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Použiť zmeny", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Kontext:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Vstavané", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Typ:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Reklamy", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Dynamické filtrovanie URL", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Súkromie", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Statické filtrovanie", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Domény malvéru", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} sieťové požiadavky {{type}} {{br}}, ktorých URL adresa sa zhoduje s {{url}} {{br}}a pochádza {{origin}},{{br}}{{importance}} zodpovedajúci výnimkový filter.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Sociálne widgety", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Zablokovať", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Oznámenie o cookies", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Povoliť", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Obťažujúce", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"typu “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Viacúčelové", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"akéhokoľvek typu", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Regióny, jazyky", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"z “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Vlastné", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"z odkiaľkoľvek", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Importovať...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"pokiaľ neexistuje", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Jedna URL adresa na riadok. Neplatné URL adresy budú potichu ignorované.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"aj keď existuje", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Zastarané.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statický filter {{filter}} bol nájdený v:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "zobraziť obsah", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Zoznam zmien", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Posledná aktualizácia: {{ago}}.\nKliknutím vynútite aktualizáciu.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Aktualizácia...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Podpora", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Chyba siete zabránila aktualizácii zdroja.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Zdrojový kód (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Nepridávajte filtre z nedôveryhodných zdrojov.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Prispievatelia", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Povoliť moje vlastné filtre", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Zálohovať do súboru", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Povoliť vlastné filtre vyžadujúce dôveru", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"ublock-moja-záloha_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Importovať a pripojiť", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Obnoviť zo súboru...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Exportovať", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Obnoviť na predvolené nastavenia...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "ublock-moje-statické-filtre_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Všetky vaše nastavenia budú prepísané pomocou dáta zálohovaných dňa {{time}} a uBlock sa reštartne.\n\nPrepísať všetky existujúce nastavenia pomocou zálohovaných dát?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Použiť zmeny", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Dáta sa nepodarilo načítať alebo sú neplatné", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Trvalé pravidlá", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Všetky vaše nastavenia budú odstránené a uBlock sa reštartne.\n\nObnoviť uBlock na predvolené nastavenia?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Dočasné pravidlá", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Nie je možné sa pripojiť k {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Vrátiť", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock: Pridať nasledujúcu URL do zoznamu vlastných filtrov?\n\nNázov: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Potvrdiť", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"pred minútou", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Upraviť", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"pred {{value}} minútami", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Uložiť", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"pred hodinou", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Zahodiť", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"pred {{value}} hodinami", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Importovať zo súboru...", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"pred dňom", - "description":"English: a day ago" + "rulesExport": { + "message": "Exportovať do súboru", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"pred {{value}} dňami", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "ublock-moje-dynamické-pravidlá_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Zobraziť ovládací panel", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Zoznam vašich dynamických filtrovacích pravidiel.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Zobraziť Zaznamenávač", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Syntax pravidla: zdroj cieľ typ akcia (úplná dokumentácia).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"vypnutý", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Zoradiť:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin zabránil načítaniu nasledujúcej stránky:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Typ pravidla", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Kvôli nasledujúcemu filtru", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Zdroj", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"bez parametrov", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Cieľ", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Nájdený v:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Zoznam dôveryhodných stránok pre ktoré bude uBlock Origin zakázaný. Jedna položka na riadok.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Naspäť", - "description":"English: Go back" + "whitelistImport": { + "message": "Importovať a pripojiť", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Zatvoriť toto okno", - "description":"English: Close this window" + "whitelistExport": { + "message": "Exportovať", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Zakázať prísne blokovanie pre {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "ublock-doveryhodne-stranky_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Dočasne", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Použiť zmeny", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Natrvalo", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Typ", + "description": "English: Type" }, - "cloudPush":{ - "message":"Exportovať do cloudového úložiska", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Doména", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Importovať z cloudového úložiska", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Importovať z cloudového úložiska a zlúčiť so súčasnými nastaveniami", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Všetky", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Názov tohto zariadenia:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Za oponou", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Poslať", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Aktívna karta", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Vrátiť", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Obnoviť obsah karty", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"bajtov", - "description":"" + "loggerDomInspectorTip": { + "message": "Prepnúť DOM inšpektor", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Dočasne povoliť veľké multimediálne prvky", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Prepnúť na vyskakovací panel", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: Zaznamenávač", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Vyčistiť zaznamenávač", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Pozastaviť zaznamenávač (vymazať všetky prichádzajúce dáta)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Pokračovať v zaznamenávaní", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Prepnúť filtrovanie zaznamenávača", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filtrovať obsah zaznamenávača", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Možnosti filtrovania zaznamenávača", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Nie", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "blokované", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "povolené", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "zmenené", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "Z prvej strany", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "Z tretej strany", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Podrobnosti", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filter", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Zoznam filtrov", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Pravidlo", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Kontext", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Koreňový kontext", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Partnerská strana", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Typ", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Dynamické filtrovanie URL", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Kontext:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Typ:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Statické filtrovanie", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} sieťové požiadavky {{type}} {{br}}, ktorých URL adresa sa zhoduje s {{url}} {{br}}a pochádza {{origin}},{{br}}{{importance}} zodpovedajúci výnimkový filter.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Zablokovať", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Povoliť", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "typu “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "akéhokoľvek typu", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "z “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "z odkiaľkoľvek", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "pokiaľ neexistuje", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "aj keď existuje", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Statický filter {{filter}} bol nájdený v:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Statický filter sa nepodarilo nájsť v žiadnom momentálne povolenom zozname filtrov", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Záznamy v zaznamenávači, ktoré nespĺňajú všetky 3 podmienky uvedené nižšie budú automatické zamietnuté:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Ponechať záznamy za posledných {{input}} minút", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Ponechať načítaných aspoň {{input}} strán na kartu", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Ponechať načítaných aspoň {{input}} položiek na kartu", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Pre každú položku zobraziť {{input}} riadky vo vertikálnom rozšírenom režime", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Skryť stĺpce:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Čas", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filter/pravidlo", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Kontext", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Zdroj požiadavky", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Zoznam", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tabuľka", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Neformátované", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Formátované", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Otvoriť", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Vytvoriť nové hlásenie", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Vyhľadať podobné hlásenia", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Dokumentácia", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Prečítajte si dokumentáciu na uBlock/wiki a dozviete sa o všetkých funkciách uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Otázky a podpora", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Odpovede na otázky a iné druhy podpory pomoci sa poskytujú na subreddite /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Problémy s filtrom/webová stránka je nefunkčná", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Nahlásenie problémov s filtrom s konkrétnymi webovými stránkami na uBlockOrigin/uAssets issue tracker. Vyžaduje sa GitHub účet.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Dôležité: Vyhnite sa používaniu iných podobne zameraných blokátorov spolu s uBlock Origin, pretože to môže spôsobiť problémy s filtrovaním na konkrétnych webových stránkach.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tipy: Uistite sa, že je váš zoznam filtrov aktuálny. Záznamenávač je primárnym nástrojom na diagnostiku problémov súvisiacich s filtrami.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Nahlásiť chybu", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Nahlásenie problémov so samotným uBlock Origin nauBlockOrigin/uBlock-issue issue tracker. Vyžaduje sa GitHub účet.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Informácie o riešení problémov", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Nasledujú technické informácie, ktoré môžu byť užitočné, keď sa vám dobrovoľníci pokúšajú pomôcť vyriešiť problém.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Nahlásiť problém s filtrom", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Aby ste dobrovoľníkov nezaťažovali duplicitnými hláseniami, overte si, či už problém nebol nahlásený.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Zoznamy filtrov sa aktualizujú denne. Uistite sa, že váš problém už nebol vyriešený v najnovších zoznamoch filtrov.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Overte, či problém pretrváva aj po opätovnom načítaní problematickej webovej stránky.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Adresa webovej stránky:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Webová stránka…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Vyberte položku --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Zobrazuje reklamy alebo zvyšky reklám", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Je prekrytá alebo má iné nedostatky", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Deteguje uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Má problémy súvisiace so súkromím", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Má problém s funkčnosťou, keď je povolený uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Otvára nechcené karty alebo okná", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Smeruje k badvéru a phishingu", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Označiť webstránku ako “NSFW” (Nie je bezpečné pre prácu”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Zásady ochrany osobných údajov", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Zoznam zmien", + "description": "" + }, + "aboutCode": { + "message": "Zdrojový kód (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Prispievatelia", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Zdrojový kód", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Preklady", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Zoznam filtrov", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Externé závislosti (kompatibilné s GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Vlastné zoznamy filtrov uBO sú voľne dostupné na nasledujúcich CDN:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Pri aktualizácii zoznamu filtrov sa použije náhodne vybraná CDN.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Zálohovať do súboru", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "ublock-moja-záloha_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Obnoviť zo súboru...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Obnoviť na predvolené nastavenia...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Všetky vaše nastavenia budú prepísané dátami zálohovanými {{time}} a uBlock sa reštartuje.\n\nPrepísať všetky existujúce nastavenia pomocou zálohovaných dát?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Dáta sa nepodarilo načítať alebo sú neplatné", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Všetky vaše nastavenia budú odstránené a uBlock sa reštartne.\n\nObnoviť uBlock na predvolené nastavenia?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Chyba siete: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Pridať", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "pred minútou", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "pred {{value}} minútami", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "pred hodinou", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "pred {{value}} hodinami", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "pred dňom", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "pred {{value}} dňami", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Zobraziť ovládací panel", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Zobraziť Zaznamenávač", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "vypnutý", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Blokovaná stránka", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin zabránil načítaniu nasledujúcej stránky:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Kvôli nasledujúcemu filtru", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "bez parametrov", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Nájdený v:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Naspäť", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Zatvoriť toto okno", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Už ma na túto stránku neupozorňovať", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Zakázať prísne blokovanie pre {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Dočasne", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Natrvalo", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Pokračovať", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Zablokovaná stránka chce presmerovať na inú stránku. Ak sa rozhodnete pokračovať, prejdete priamo na: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Dôvod:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Škodlivé", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Sledovač", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Pochybné", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Exportovať do cloudového úložiska", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importovať z cloudového úložiska", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importovať z cloudového úložiska a zlúčiť so súčasnými nastaveniami", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Názov tohto zariadenia:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Upozornenie! Zmenu pokročilých nastavení vykonávate na vlastné nebezpečenstvo.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Poslať", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Použiť zmeny", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Vrátiť", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bajtov", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Zablokovať prvok v ráme…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Prihlásiť sa k odberu zoznamu filtrov…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Dočasne povoliť veľké multimediálne prvky", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Zobraziť zdrojový kód", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Zadajte klávesovú skratku", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Prepnúť zámok posúvania", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Kopírovať do schránky", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Vybrať všetko", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Prepnúť kozmetické filtrovanie", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Prepnúť JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Zmierniť režim blokovania", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Využité miesto: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Kliknite pre načítanie", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Chyby: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Pri spustení prehliadača sa nepodarilo správne filtrovať.\nZnova načítajte stránku, aby ste zaistili správne filtrovanie.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/sl/messages.json b/src/_locales/sl/messages.json index cc538497962c0..eb21a35223156 100644 --- a/src/_locales/sl/messages.json +++ b/src/_locales/sl/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Končno, učinkovita, procesorju in pomnilniku prijazna razširitev za blokiranje oglasov.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Končno, učinkovita, procesorju in pomnilniku prijazna razširitev za blokiranje oglasov.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Nadzorna plošča", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Nadzorna plošča", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Nastavitve", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Pozor! Spremembe niso shranjene", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Filtri tretjih oseb", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Ostani", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Moji filtri", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Prezri", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Moja pravila", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Nastavitve", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Seznam dovoljenih", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filtri tretjih oseb", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Dnevnik omrežnih zahtev", - "description":"Title for the logger window" + "1pPageName": { + "message": "Moji filtri", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"O razširitvi", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Moja pravila", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Klik: onemogoči\/omogoči uBlock₀ za to stran.\n\nCtrl+klik: onemogoči uBlock₀ samo na tej strani.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Seznam dovoljenih", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"blokirane zahteve", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Bližnjice", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"na tej strani", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Dnevnik omrežnih zahtev", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} ali {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "O razširitvi", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"od namestitve", - "description":"English: since install" + "supportPageName": { + "message": "Podpora", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"ali", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — pregled sredstev", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Klikni za odpiranje nadzorne plošče", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Napredne nastavitve", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Vklopi način izbire elementov", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Klik: onemogoči/omogoči uBlock₀ za to stran.\n\nCtrl+klik: onemogoči uBlock₀ samo na tej strani.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Pojdi na dnevnik omrežnih zahtev", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Kliknite, da onemogočite uBlock₀ za to stran.\n\nPritisnite Ctrl in kliknite, da onemogočite uBlock₀ samo na tej strani.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Vklop\/Izklop blokiranja vseh pojavnih oken za to stran", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Kliknite, da omogočite uBlock₀ za to stran.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Vklop\/izklop blokiranja večjih medijev za to stran", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "blokirane zahteve", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Vklop\/Izklop kozmetičnih filtrov za to stran", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "na tej strani", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Vklopi\/izklopi blokiranje oddaljenih pisav za to stran", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} ali {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Globalna pravila: ta stolpec je za pravila, ki se uveljavljajo za vse strani.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "od namestitve", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Lokalna pravila: ta stolpec je za pravila, ki se uveljavljajo samo za trenutno stran. Lokalna pravila preglasijo globalna pravila.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "ali", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Kliknite za uveljavitev sprememb.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Blokirano na tej strani", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Kliknite za preklic sprememb.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Blokirano od namestitve", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"vse", - "description":"" + "popupDomainsConnected_v2": { + "message": "Povezane domene", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"slike", - "description":"" + "popupTipDashboard": { + "message": "Klikni za odpiranje nadzorne plošče", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"tretje-osebne", - "description":"" + "popupTipZapper": { + "message": "Vklopi način izbire elementov", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"css\/slike tretje osebe", - "description":"" + "popupTipPicker": { + "message": "Vklopi način izbire elementov", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"vrinjene skripti", - "description":"" + "popupTipLog": { + "message": "Pojdi na dnevnik omrežnih zahtev", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"strani lastni skripti", - "description":"" + "popupTipReport": { + "message": "Prijavi napako na tej strani", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"skripti tretjih oseb", - "description":"" + "popupTipNoPopups": { + "message": "Vklop/Izklop blokiranja vseh pojavnih oken za to stran", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"okvirji tretjih oseb", - "description":"" + "popupTipNoPopups1": { + "message": "Kliknite, da omogičite blokiranje vseh pojavnih oken za to stran", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"povezane domene", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Kliknite, da onemogočite blokiranje vsah pojavnih oken na tej strani", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} od {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Vklop/izklop blokiranja večjih medijev za to stran", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Ustvari", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Kliknite, da omogičite blokiranje večjih medijev za to stran", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Izberi", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Kliknite, da onemogočite blokiranje večjih medijev za to stran", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Končaj", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Vklop/Izklop kozmetičnih filtrov za to stran", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Predogled", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Kliknite, da onemogočite kozmetično filtriranje na tej strani", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Omrežni filtri", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Kliknite, da omogočite kozmetično filtriranje na tej strani", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Kozmetični filtri", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Vklopi/izklopi blokiranje oddaljenih pisav za to stran", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Klik, Ctrl-klik", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Kliknite, da omogočite blokiranje oddaljenih pisav na tej strani", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Blokiraj element", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Kliknite, da onemogočite blokiranje oddaljenih pisav na tej strani", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Skrij držala blokiranih elementov", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Klikni, da onemogočiš JavaScript na tej strani", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Prikaži število blokiranih zahtevkov na ikoni", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Klikni, da prenehaš onemogočati JavaScript na tej strani", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Onemogoči namige", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Pojavna okna", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Izkoristite kontekstni meni, kjer je to primerno", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Veliki predstavnostni elementi", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Način prijazen barvno slepim uporabnikom", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Kozmetično filtriranje", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Omogoči podporo za shrambo v oblako", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Oddaljene pisave", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Sem napreden uporabnik (Potrebno branje<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Onemogoči prednalaganje strani (da se prepreči kakršno koli povezavo za blokirane zahteve omrežja)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Več", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Onemogoči revizijo hiperlinkov (Hyperlink-auditing)", - "description":"English: " + "popupLessButton_v2": { + "message": "Manj", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Prepreči izpostavitev lokalnega IP naslova preko WebRTC", - "description":"English: " + "popupTipGlobalRules": { + "message": "Globalna pravila: ta stolpec je za pravila, ki se uveljavljajo za vse strani.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Privzeto ravnanje", - "description":"" + "popupTipLocalRules": { + "message": "Lokalna pravila: ta stolpec je za pravila, ki se uveljavljajo samo za trenutno stran. Lokalna pravila preglasijo globalna pravila.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Te privzete nastavitve lahko spremenite za posamezne strani", - "description":"" + "popupTipSaveRules": { + "message": "Kliknite za uveljavitev sprememb.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Onemogoči kosmetično filtriranje", - "description":"" + "popupTipRevertRules": { + "message": "Kliknite za preklic sprememb.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Blokiraj medijske elemente večje kot {input:number} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "vse", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blokiraj oddaljene pisave", - "description":"" + "popupImageRulePrompt": { + "message": "slike", + "description": "" }, - "settingsStorageUsed":{ - "message":"Uporabljenega prostora: {{value}} bajtov", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "tretjih oseb", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Zadnja obnovitev:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "css/slike tretje osebe", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Zadnja varnostna kopija:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "vrinjene skripti", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} omrežnih in {{cosmeticFilterCount}} kozmetičnih filtrov od:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "strani lastni skripti", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"uporabljenih {{used}} od {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "skripti tretjih oseb", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Samodejno posodabljanje seznama filtrov.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "okvirji tretjih oseb", + "description": "" }, - "3pUpdateNow":{ - "message":"Posodobi zdaj", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "povezane domene", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Sprosti celoten predpomnilnik", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} od {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Razčleni in uveljavi kozmetične filtre.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Različica", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Ta opcija omogoči razčlenjevanje in uveljavljanje Adblock Plus kompatibilnih filtrov za “skrivanje elementov”<\/a> Le-ti filtri so v bistvu kozmetični in služijo skrivanju elementov na spletnih straneh, ki jih lahko obravnavamo kot \"vizualna nadloga\", in taki, ki se jih preko filtrov zahtev omrežja ne da blokirati.<\/p>\n

      Vklop te funkcije poveča spominski odtis uBlock₀.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignoriraj generične kozmetične filtre", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "frame", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites.

      Though handled efficiently by uBlock₀, generic cosmetic filters may still contribute measurable memory and CPU overhead on some web pages, especially for large and long-lived ones.

      Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters, and also lower the memory footprint of uBlock₀ itself.

      It is recommended to enable this option on less powerful devices.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Ustvari", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Seznam blokiranih gostiteljev", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Izberi", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Uveljavi spremembe", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Končaj", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Oglasi", - "description":"English: Ads" + "pickerPreview": { + "message": "Predogled", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Zasebnost", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Omrežni filtri", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Zlonamerne domene", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Kozmetični filtri", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Socialno", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Klik, Ctrl-klik", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Večnamenski", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Blokiraj element", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Regije, jeziki", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Skrij držala blokiranih elementov", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Po meri", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Prikaži število blokiranih zahtevkov na ikoni", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"En URL na vrstico. Vrstice s predpono ‘!’ in neveljavni URL-ji bodo prezrti.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Onemogoči namige", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Razčleni", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Izkoristite kontekstni meni, kjer je to primerno", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"sprosti predpomnilnik", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Način prijazen barvno slepim uporabnikom", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"nova različica je na voljo", - "description":"English: new version available" + "settingsAppearance": { + "message": "Izgled", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"zastarelo", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Tema", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Zadnja posodobitev: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Barva akcenta po meri", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"En filter na vrstico. Filter je lahko navadno ime gostitelja, ali pa Adblock Plus kompatibilen filter. Vrstice z znakom ‘!’ bodo ignorirane.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Omogoči podporo za shrambo v oblaku", + "description": "" }, - "1pImport":{ - "message":"Uvozi in dodaj", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Sem napreden uporabnik (Potrebno branje)", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Izvozi", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Onemogoči prednalaganje strani (da se prepreči kakršno koli povezavo za blokirane zahteve omrežja)", + "description": "English: " }, - "1pExportFilename":{ - "message":"moji-ublock-staticni-filtri_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Onemogoči revizijo hiperlinkov (Hyperlink-auditing)", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Uporabi spremembe", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Prepreči izpostavitev lokalnega IP naslova preko WebRTC", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Stalna pravila", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Privzeto ravnanje", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Začasna pravila", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Te privzete nastavitve lahko spremenite za posamezne strani", + "description": "" }, - "rulesRevert":{ - "message":"Povrni", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Onemogoči kosmetično filtriranje", + "description": "" }, - "rulesCommit":{ - "message":"Stori", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Blokiraj medijske elemente večje kot {input:number} kB", + "description": "" }, - "rulesEdit":{ - "message":"Uredi", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Blokiraj oddaljene pisave", + "description": "" }, - "rulesEditSave":{ - "message":"Shrani", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Onemogoči JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Zavrži", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Blokiraj CSP poročila", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Uvozi iz datoteke...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Uncloak canonical names", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Izvozi v datoteko", - "description":"" + "settingsAdvanced": { + "message": "Napredno", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"moji-ublock-dinamicna-pravila_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Funkcije primerne zgolj za napredne uporabnike", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Seznam vaših dinamičnih pravil filtriranja.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "napredne nastavitve", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Sintaksa pravil: vir destinacija tip akcija<\/code> (polna dokumentacija (v angleščini)<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Zadnja obnovitev:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Vaš seznam gostiteljskih naslovov, za katere želite, da je uBlock₀ izklopljen. En vnos na vrstico. Neveljavna gostiteljska imena bodo brez opozoril ignorirana.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Zadnja varnostna kopija:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Uvozi in dodaj", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} omrežnih in {{cosmeticFilterCount}} kozmetičnih filtrov od:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Izvozi", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "uporabljenih {{used}} od {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"moj-ublock-seznam-dovoljenih_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Samodejno posodabljanje seznama filtrov.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Uveljavi spremembe", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Posodobi zdaj", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Vrsta", - "description":"English: Type" + "3pPurgeAll": { + "message": "Sprosti celoten predpomnilnik", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Domena", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Razčleni in uveljavi kozmetične filtre.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "

      Ta opcija omogoči razčlenjevanje in uveljavljanje Adblock Plus kompatibilnih filtrov za “skrivanje elementov” Le-ti filtri so v bistvu kozmetični in služijo skrivanju elementov na spletnih straneh, ki jih lahko obravnavamo kot \"vizualna nadloga\", in taki, ki se jih preko filtrov zahtev omrežja ne da blokirati.

      \n

      Vklop te funkcije poveča spominski odtis uBlock₀.

      ", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignoriraj generične kozmetične filtre", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Vse", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

      Generični vizualni filtri so vizualni filtri, ki naj bi bili uporabljeni na vseh spletnih straneh.

      Kljub temu, da je njihova uporaba v uBlock₀ učinkovita, generični vizualni filtri lahko, na nekaterih spletnih straneh (še posebno na velikih in starih), pripomorejo k opazni dodatni porabi pomnilnika in uporabi CPE.

      Omogočitev te funkcije bo zmanjšala porabo pomnilnika in uporabo CPE, ki nastane kot rezultat dodajanja generičnih vizualnih filtrov, in tudi zmanjšala porabo pomnilnika dodatka uBlock₀.

      Priporočeno je, da omogočite to možnost na manj zmogljivih napravah.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Za zaveso", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Prekini aktivnosti omrežja, dokler niso naloženi vsi filtri", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"filtriraj vnose dnevnika", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Seznam blokiranih gostiteljev", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Največje število dnevniških vnosov", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Uveljavi spremembe", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Vsebina:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Lokalno", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Vrsta:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Oglasi", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Dinamično URL filtriranje", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Zasebnost", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Statično filtriranje", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Zlonamerne domene", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} zahteve omrežja {{type}} {{br}}katerih URL naslov se ujema z {{url}} {{br}}in izvirajo iz {{origin}},{{br}}{{importance}} obstaja ustrezen filter izjeme.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Social widgets", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blokiraj", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Cookie notices", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Dovoli", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "\t\nNadlegovanje", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"vrsta {{type}}", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Večnamenski", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"vsaka vrsta", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Regije, jeziki", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"iz “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Po meri", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"iz kjerkoli", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Uvozi ...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"razen če", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "En URL na vrstico. Vrstice s predpono ‘!’ in neveljavni URL-ji bodo prezrti.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"tudi če", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "zastarelo", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statičen filter {{filter}} najden v:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "view content", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Dnevnik sprememb", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Zadnja posodobitev: {{ago}}", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Posodabljanje ...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Support", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Omrežna napaka je preprečila posodobitev virov.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Izvorna koda (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Do not add filters from untrusted sources.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Razvijalci", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Enable my custom filters", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Naredi varnostno kopijo v datoteko", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Allow custom filters requiring trust", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"moja-ublock-varnostna-kopija_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Uvozi in dodaj", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Obnovi iz datoteke...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Izvozi", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Ponastavi na privzete nastavitve...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "moji-ublock-staticni-filtri_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Vse vaše nastavitve bodo prepisane s podatki, ki so bili varnostno shranjeni {{time}}. uBlock₀ se bo ponovno zagnal.\n\nPrepišem vse obstoječe nastavitve z varnostno shranjenimi podatki?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Uporabi spremembe", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Podatki varnostne kopije niso uspeli biti uspešno prebrani oz. so neveljavni", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Stalna pravila", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Vse vaše spremembe bodo izbrisane, uBlock₀ pa se bo ponovno zagnal.\n\nPonastavim uBlock₀ na tovarniške nastavitve?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Začasna pravila", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Ne morem se povezati do {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Povrni", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Dodam sledeči URL na listo lastnih filtrov?\n\nNaslov: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Stori", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"1 minuto nazaj", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Uredi", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minut nazaj", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Shrani", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"1 uro nazaj", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Zavrži", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} ur nazaj", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Uvozi iz datoteke...", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"1 dan nazaj", - "description":"English: a day ago" + "rulesExport": { + "message": "Izvozi v datoteko", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} dni nazaj", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "moji-ublock-dinamicna-pravila_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Prikaži nadzorno ploščo", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Seznam vaših dinamičnih pravil filtriranja.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Prikaži dnevnik", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Sintaksa pravil: vir destinacija tip akcija (polna dokumentacija (v angleščini)).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"izklop", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Razvrsti", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock₀ je preprečil nalaganje naslednje strani:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Tip pravila", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Zaradi sledečega filtra", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Vir", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"brez parametrov", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Cilju", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Najden v:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Vaš seznam gostiteljskih naslovov, za katere želite, da je uBlock₀ izklopljen. En vnos na vrstico. Neveljavna gostiteljska imena bodo brez opozoril ignorirana.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Nazaj", - "description":"English: Go back" + "whitelistImport": { + "message": "Uvozi in dodaj", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Zapri to okno", - "description":"English: Close this window" + "whitelistExport": { + "message": "Izvozi", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Onemogoči striktno blokiranje za {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "moj-ublock-seznam-dovoljenih_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Začasno", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Uveljavi spremembe", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Trajno", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Vrsta", + "description": "English: Type" }, - "cloudPush":{ - "message":"Izvozi v shrambe oblaka", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Domena", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Uvozi iz shrambe oblaka", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Uvozi iz oblaka in spoji s trenutnimi nastavitvami", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Vse", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Ime te naprave:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Za zaveso", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Predloži", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Trenutni zavihek", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Povrni", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Ponovno naloži vsebino zavihka", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"biti", - "description":"" + "loggerDomInspectorTip": { + "message": "Preklopi DOM pregledovalnik", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Začasno dovoli velike medijske elemente", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Preklopi pojavno okno", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: Dnevnik omrežnih zahtev", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Počisti dnevnik omrežnih zahtev", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Ustavi dnevnik omrežnih zahtev (zavrne vse prihajajoče zahteve)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Nadaljuj dnevnik omrežnih zahtev", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Preklopi filtriranje dnevnika", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filtriraj vnose dnevnika", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Nastavitve filtriranja dnevnika", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Ni", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "blokiran", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "dovoljeno", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "spremenjeno", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "1. osebni", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "3. osebni", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Podrobnosti", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filter", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Seznam filtrov", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Pravilo", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Vsebina", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Glavna vsebina", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Pripadnost", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Vrsta", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Dinamično URL filtriranje", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Vsebina:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Vrsta:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Statično filtriranje", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} zahteve omrežja {{type}} {{br}}katerih URL naslov se ujema z {{url}} {{br}}in izvirajo iz {{origin}},{{br}}{{importance}} obstaja ustrezen filter izjeme.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Blokiraj", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Dovoli", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "vrsta {{type}}", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "vsaka vrsta", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "iz “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "iz kjerkoli", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "razen če", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "tudi če", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Statičen filter {{filter}} najden v:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Statični filter {{filter}} ni bil najden v nobenem izmed trenutno izbranih seznamov", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Zapisi, ki ne ustrezajo vsem spodaj podanim pogojem, bodo avtomatsko zavrženi:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Ohrani vnose izpred zadnjih {{input}} minut", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Ohrani največ {{input}} nalaganj strani na zavihek", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Ohrani največ {{input}} vnosov na zavihek", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Uporabi {{input}} vrstic pri vsakem vnosu v navpično razširjenem načinu", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Skrij stolpce:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} čas", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} filter/pravilo", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} vsebina", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Pripadnost", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Seznam", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tabela", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Navaden", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Odpri", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Ustvari novo poročilo", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Najdi podobna poročila", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Dokumentacija", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Preberi dokumentacijo na uBlock/wiki, da izveš vse o funkcijah uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Vprašanja in podpora", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Odgovori na vprašanja in druga pomoč so na voljo na forumu /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Težave s filtrom/stran ne deluje", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Prijavi težave s filtrom na posameznih straneh v uBlockOrigin/uAssets sledilnik težav.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Pomembno: Izogibajte se sočasni uporabi podobnih orodij za blokiranje, to lahko povzroči težave s filtrom na posameznih straneh.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tips: Preverjajte, da so vaši seznami filtrov redno posodobljeni. Zapisovalnik je glavno orodje za diagnostiko težav s filtri.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Prijavi napako", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Prijavi težave z uBlock Origin na uBlockOrigin/uBlock-issuesledilnik težav. Potreben je GitHub račun.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Informacije za odpravljanje težav", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Prijavi napako filtra", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Zaradi preprečitve obremenjevanja prostovoljcev s podvojenimi poročili prosim preveri da težava še ni bila sporočena.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verify that the issue still exists after reloading the problematic web page.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Naslov spletne strani:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Spletna stran …", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Izberi vnos --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Prikaže reklame ali ostanke reklam", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Ima probleme povezane z zasebnostjo", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBlock Origin is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the web page as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Pravilnik o zasebnosti", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Dnevnik sprememb", + "description": "" + }, + "aboutCode": { + "message": "Izvorna koda (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Razvijalci", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Izvorna koda", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Prevodi", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Seznami filtrov", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Zunanje odvisnosti (GPLv3-kompatibilne):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO's own filter lists are freely hosted on the following CDNs:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Ob posodobitvi seznama filtrov se uporabi naključno izbran CDN", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Naredi varnostno kopijo v datoteko", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "moja-ublock-varnostna-kopija_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Obnovi iz datoteke...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Ponastavi na privzete nastavitve...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Vse vaše nastavitve bodo prepisane s podatki, ki so bili varnostno shranjeni {{time}}. uBlock₀ se bo ponovno zagnal.\n\nPrepišem vse obstoječe nastavitve z varnostno shranjenimi podatki?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Podatki varnostne kopije niso uspeli biti uspešno prebrani oz. so neveljavni", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Vse vaše spremembe bodo izbrisane, uBlock₀ pa se bo ponovno zagnal.\n\nPonastavim uBlock₀ na tovarniške nastavitve?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Ne morem se povezati do {{url}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Naročite se", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "1 minuto nazaj", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} minut nazaj", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "1 uro nazaj", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} ur nazaj", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "1 dan nazaj", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} dni nazaj", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Prikaži nadzorno ploščo", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Prikaži dnevnik", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "izklop", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Page blocked", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock₀ je preprečil nalaganje naslednje strani:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Zaradi sledečega filtra", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "brez parametrov", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Najden v:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Nazaj", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Zapri to okno", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Onemogoči striktno blokiranje za {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Začasno", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Trajno", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Proceed", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Izvozi v shrambe oblaka", + "description": "tooltip" + }, + "cloudPull": { + "message": "Uvozi iz shrambe oblaka", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Uvozi iz oblaka in spoji s trenutnimi nastavitvami", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Ime te naprave:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Opozorilo! Sprememba teh naprednih nastavitev na lastno odgovornost.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Predloži", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Uveljavi spremembe", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Povrni", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "biti", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Blokiraj element v okvirju", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Naroči se na seznam filtrov..", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Začasno dovoli velike medijske elemente", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "View source code…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Vnesite bližnjico", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Preklopi zaklenjeno drsenje", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Kopiraj v odložišče", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Izberi vse", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Preklopi lepotno filtriranje", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Toggle JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Sprostite način blokiranja.", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Uporabljena shramba: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Kliknite za prikaz", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Errors: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/so/messages.json b/src/_locales/so/messages.json new file mode 100644 index 0000000000000..7ec1742bd9fcf --- /dev/null +++ b/src/_locales/so/messages.json @@ -0,0 +1,1314 @@ +{ + "extName": { + "message": "uBlock Origin", + "description": "extension name." + }, + "extShortDesc": { + "message": "Ugu dambeyntii, xannibaado hufan. Ku fudud oo ku saabsan CPU iyo xusuusta.", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "dashboardName": { + "message": "uBlock? - Dashboard", + "description": "English: uBlock₀ — Dashboard" + }, + "dashboardUnsavedWarning": { + "message": "Digniin! Waxaad leedahay isbedelo aan la keydin", + "description": "A warning in the dashboard when navigating away from unsaved changes" + }, + "dashboardUnsavedWarningStay": { + "message": "Joog", + "description": "Label for button to prevent navigating away from unsaved changes" + }, + "dashboardUnsavedWarningIgnore": { + "message": "Iska daa", + "description": "Label for button to ignore unsaved changes" + }, + "settingsPageName": { + "message": "Dejinta", + "description": "appears as tab name in dashboard" + }, + "3pPageName": { + "message": "Liisaska sifee", + "description": "appears as tab name in dashboard" + }, + "1pPageName": { + "message": "filtarradayda", + "description": "appears as tab name in dashboard" + }, + "rulesPageName": { + "message": "Xeerarkayga", + "description": "appears as tab name in dashboard" + }, + "whitelistPageName": { + "message": "Goobaha lagu kalsoon yahay", + "description": "appears as tab name in dashboard" + }, + "shortcutsPageName": { + "message": "Jid gaaban", + "description": "appears as tab name in dashboard" + }, + "statsPageName": { + "message": "uBlock? - Logger", + "description": "Title for the logger window" + }, + "aboutPageName": { + "message": "Ku saabsan", + "description": "appears as tab name in dashboard" + }, + "supportPageName": { + "message": "Taageero", + "description": "appears as tab name in dashboard" + }, + "assetViewerPageName": { + "message": "uBlock? - Daawaha hantida", + "description": "Title for the asset viewer page" + }, + "advancedSettingsPageName": { + "message": "Dejinta horumarsan", + "description": "Title for the advanced settings page" + }, + "popupPowerSwitchInfo": { + "message": "Guji: dami/damar uBlock? goobtan. ", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + }, + "popupPowerSwitchInfo1": { + "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "description": "Message to be read by screen readers" + }, + "popupPowerSwitchInfo2": { + "message": "Ctrl+guji: dami uBlock? kaliya boggan.", + "description": "Message to be read by screen readers" + }, + "popupBlockedRequestPrompt": { + "message": "Guji si aad u joojiso uBlock? ee goobtan. ", + "description": "English: requests blocked" + }, + "popupBlockedOnThisPagePrompt": { + "message": "on this page", + "description": "English: on this page" + }, + "popupBlockedStats": { + "message": "Ctrl+guji si aad u joojiso uBlock? kaliya boggan.", + "description": "Example: 15 (13%)" + }, + "popupBlockedSinceInstallPrompt": { + "message": "Guji si aad awood ugu siiso uBlock? goobtan.", + "description": "English: since install" + }, + "popupOr": { + "message": "codsiyada la xannibay", + "description": "English: or" + }, + "popupBlockedOnThisPage_v2": { + "message": "boggan", + "description": "For the new mobile-friendly popup design" + }, + "popupBlockedSinceInstall_v2": { + "message": "{{count}} ({{boqolkiiba}}%)", + "description": "For the new mobile-friendly popup design" + }, + "popupDomainsConnected_v2": { + "message": "tan iyo markii la rakibo", + "description": "For the new mobile-friendly popup design" + }, + "popupTipDashboard": { + "message": "ama", + "description": "English: Click to open the dashboard" + }, + "popupTipZapper": { + "message": "Xiray boggan", + "description": "Tooltip for the element-zapper icon in the popup panel" + }, + "popupTipPicker": { + "message": "Xirmay tan iyo markii la rakibay", + "description": "English: Enter element picker mode" + }, + "popupTipLog": { + "message": "Domains ku xiran", + "description": "Tooltip used for the logger icon in the panel" + }, + "popupTipReport": { + "message": "Report an issue on this website", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipNoPopups": { + "message": "Fur dashboard-ka", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups1": { + "message": "Geli qaabka zapper element", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2": { + "message": "Geli qaabka xulashada walxaha", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoLargeMedia": { + "message": "Fur qoraha", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia1": { + "message": "Bedeli xannibaadda dhammaan soo-baxayaasha goobtan", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2": { + "message": "Guji si aad u xannibto dhammaan popup-yada goobtan", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoCosmeticFiltering": { + "message": "Guji si aadan mar dambe u xannibin dhammaan soo-bandhigyada goobtan", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering1": { + "message": "U beddel xannibaadda walxaha waaweyn ee warbaahinta ee goobtan", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2": { + "message": "Guji si aad u xannibto qaybaha warbaahinta waaweyn ee boggan", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoRemoteFonts": { + "message": "Guji si aanad mar dambe u xannibin qaybaha warbaahinta waaweyn ee boggan", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts1": { + "message": "U beddel shaandhaynta qurxinta goobtan", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts2": { + "message": "Guji si aad u joojiso shaandhaynta isqurxinta ee goobtan", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoScripting1": { + "message": "Guji si aad awood ugu siiso shaandhaynta goobtan", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupTipNoScripting2": { + "message": "U beddel xannibaadda xarfaha fog ee boggan", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupNoPopups_v2": { + "message": "Guji si aad u xannibto farta fog ee goobtan", + "description": "Caption for the no-popups per-site switch" + }, + "popupNoLargeMedia_v2": { + "message": "Guji si aadan mar dambe u xannibin farta fog ee goobtan", + "description": "Caption for the no-large-media per-site switch" + }, + "popupNoCosmeticFiltering_v2": { + "message": "Guji si aad JavaScript uga joojiso goobtan", + "description": "Caption for the no-cosmetic-filtering per-site switch" + }, + "popupNoRemoteFonts_v2": { + "message": "Guji si aad mar dambe u damin JavaScript ee goobtan", + "description": "Caption for the no-remote-fonts per-site switch" + }, + "popupNoScripting_v2": { + "message": "daaqadaha soo booda", + "description": "Caption for the no-scripting per-site switch" + }, + "popupMoreButton_v2": { + "message": "Qaybaha warbaahinta waaweyn", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton_v2": { + "message": "Shaandhaynta qurxinta", + "description": "Label to be used to hide popup panel sections" + }, + "popupTipGlobalRules": { + "message": "Farta fog", + "description": "Tooltip when hovering the top-most cell of the global-rules column." + }, + "popupTipLocalRules": { + "message": "JavaScript", + "description": "Tooltip when hovering the top-most cell of the local-rules column." + }, + "popupTipSaveRules": { + "message": "Wax badan", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." + }, + "popupTipRevertRules": { + "message": "In ka yar", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + }, + "popupAnyRulePrompt": { + "message": "Xeerarka caalamiga ah: tiirkan waxaa loogu talagalay xeerar khuseeya dhammaan bogagga.", + "description": "" + }, + "popupImageRulePrompt": { + "message": "Xeerarka maxalliga ah: tiirkan waxaa loogu talagalay xeerar khuseeya goobta hadda jirta oo keliya. ", + "description": "" + }, + "popup3pAnyRulePrompt": { + "message": "Xeerarka maxalliga ah ayaa meesha ka saaraya xeerarka caalamiga ah.", + "description": "" + }, + "popup3pPassiveRulePrompt": { + "message": "Guji si aad isbeddelkaaga uga dhigto mid joogto ah.", + "description": "" + }, + "popupInlineScriptRulePrompt": { + "message": "Guji si aad u soo celiso isbedeladaada", + "description": "" + }, + "popup1pScriptRulePrompt": { + "message": "dhammaan", + "description": "" + }, + "popup3pScriptRulePrompt": { + "message": "sawiro", + "description": "" + }, + "popup3pFrameRulePrompt": { + "message": "xisbiga 3aad", + "description": "" + }, + "popupHitDomainCountPrompt": { + "message": "CSS/sawirrada xisbiga 3aad", + "description": "appears in popup" + }, + "popupHitDomainCount": { + "message": "xarfaha xariiqda", + "description": "appears in popup" + }, + "popupVersion": { + "message": "Qoraallada xisbiga 1-aad", + "description": "Example of use: Version 1.26.4" + }, + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" + }, + "popup3pFrameFilter": { + "message": "frame", + "description": "Appears as an option to filter out firewall rows" + }, + "pickerCreate": { + "message": "domains ku xiran", + "description": "English: Create" + }, + "pickerPick": { + "message": "{{tirinta}} ka baxsan {{ total}}", + "description": "English: Pick" + }, + "pickerQuit": { + "message": "Nooca", + "description": "English: Quit" + }, + "pickerPreview": { + "message": "?: Xooga saar safafka leh meeraha xisbiga 3aad", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + }, + "pickerNetFilters": { + "message": "?: Xooga saar safafka leh meeraha xisbiga 3aad", + "description": "English: header for a type of filter in the element picker dialog" + }, + "pickerCosmeticFilters": { + "message": "Abuur", + "description": "English: Cosmetic filters" + }, + "pickerCosmeticFiltersHint": { + "message": "Dooro", + "description": "English: Click, Ctrl-click" + }, + "pickerContextMenuEntry": { + "message": "Jooji", + "description": "An entry in the browser's contextual menu" + }, + "settingsCollapseBlockedPrompt": { + "message": "Horudhac", + "description": "English: Hide placeholders of blocked elements" + }, + "settingsIconBadgePrompt": { + "message": "Shabakadda shabkada", + "description": "English: Show the number of blocked requests on the icon" + }, + "settingsTooltipsPrompt": { + "message": "Shaandhooyinka qurxinta", + "description": "A checkbox in the Settings pane" + }, + "settingsContextMenuPrompt": { + "message": "Guji, Ctrl-guji", + "description": "English: Make use of context menu where appropriate" + }, + "settingsColorBlindPrompt": { + "message": "Cunsurka xannibi...", + "description": "English: Color-blind friendly" + }, + "settingsAppearance": { + "message": "Appearance", + "description": "Section for controlling user interface appearance" + }, + "settingsThemeLabel": { + "message": "Theme", + "description": "Label for checkbox to enable a custom dark theme" + }, + "settingsThemeAccent0Label": { + "message": "Custom accent color", + "description": "Label for checkbox to pick an accent color" + }, + "settingsCloudStorageEnabledPrompt": { + "message": "Qari meel-hayeyaasha walxaha xanniban", + "description": "" + }, + "settingsAdvancedUserPrompt": { + "message": "Ku muuji tirada codsiyada la xannibay ee sumadda", + "description": "Checkbox to let user access advanced, technical features" + }, + "settingsPrefetchingDisabledPrompt": { + "message": "Isticmaal macnaha guud marka ay habboon tahay", + "description": "English: " + }, + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Midab-indho la'aan saaxiibtinimo", + "description": "English: " + }, + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Daar taageerada kaydinta daruuraha", + "description": "English: " + }, + "settingPerSiteSwitchGroup": { + "message": "Waxaan ahay isticmaale horumarsan (akhris loo baahan yahay)", + "description": "" + }, + "settingPerSiteSwitchGroupSynopsis": { + "message": "goobaha horumarsan", + "description": "" + }, + "settingsNoCosmeticFilteringPrompt": { + "message": "Dami soo-keenista ka hor (si looga hortago xidhiidh kasta ee codsiyada shabakada la xidhay)", + "description": "" + }, + "settingsNoLargeMediaPrompt": { + "message": "Jooji xisaabinta hyperlink", + "description": "" + }, + "settingsNoRemoteFontsPrompt": { + "message": "Ka ilaali WebRTC inay soo daadato cinwaannada IP-ga maxalliga ah", + "description": "" + }, + "settingsNoScriptingPrompt": { + "message": "Dabeecada aan caadiga ahayn", + "description": "The default state for the per-site no-scripting switch" + }, + "settingsNoCSPReportsPrompt": { + "message": "Dabeecadahan aan caadiga ahayn waa laga gudbi karaa si ku saleysan goob kasta", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" + }, + "settingsUncloakCnamePrompt": { + "message": "Dami shaandhaynta qurxinta", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" + }, + "settingsAdvanced": { + "message": "Advanced", + "description": "Section for controlling advanced-user settings" + }, + "settingsAdvancedSynopsis": { + "message": "Features suitable only for technical users", + "description": "Description of section controlling advanced-user settings" + }, + "settingsAdvancedUserSettings": { + "message": "Dami tilmaanta aaladaha", + "description": "For the tooltip of a link which gives access to advanced settings" + }, + "settingsLastRestorePrompt": { + "message": "Jooji walxaha warbaahinta ee ka weyn {{input}} KB", + "description": "English: Last restore:" + }, + "settingsLastBackupPrompt": { + "message": "Jooji xarfaha fogfog", + "description": "English: Last backup:" + }, + "3pListsOfBlockedHostsPrompt": { + "message": "Dami JavaScript", + "description": "Appears at the top of the _3rd-party filters_ pane" + }, + "3pListsOfBlockedHostsPerListStats": { + "message": "Jooji warbixinnada CSP", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "3pAutoUpdatePrompt1": { + "message": "Ka fur magacyada canonical", + "description": "A checkbox in the _3rd-party filters_ pane" + }, + "3pUpdateNow": { + "message": "Soo celinta u dambaysay:", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pPurgeAll": { + "message": "Kaydka u dambeeya:", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pParseAllABPHideFiltersPrompt1": { + "message": "filtarrada shabkada {{netFilterCount}} ? {{cosmeticFilterCount}} filtarrada qurxinta ee:", + "description": "English: Parse and enforce Adblock+ element hiding filters." + }, + "3pParseAllABPHideFiltersInfo": { + "message": "{{la isticmaalay}} la isticmaalay {{ total}}", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + }, + "3pIgnoreGenericCosmeticFilters": { + "message": "Si otomaatig ah u cusbooneysii liisaska shaandhada", + "description": "This will cause uBO to ignore all generic cosmetic filters." + }, + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Cusbooneysii hadda", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." + }, + "3pSuspendUntilListsAreLoaded": { + "message": "Suspend network activity until all filter lists are loaded", + "description": "A checkbox in the 'Filter lists' pane" + }, + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" + }, + "3pApplyChanges": { + "message": "Kala saar oo dhaqan geli filtarrada qurxinta", + "description": "English: Apply changes" + }, + "3pGroupDefault": { + "message": "Shaandhooyinka isqurxintu waxay u adeegaan inay ku qariyaan walxaha ku jira bogga shabakadda kuwaas oo loo arko inay dhib ku yihiin aragga, oo aanay xannibi karin matoorada shaandhaynta ku salaysan codsiga shabakadda.", + "description": "Filter lists section name" + }, + "3pGroupAds": { + "message": "Iska daa filtarrada guud ee qurxinta", + "description": "Filter lists section name" + }, + "3pGroupPrivacy": { + "message": "Shaandhooyinka isqurxinta guud waa filtarrada qurxinta kuwaas oo loogu talagalay in lagu dabaqo dhammaan shabakadaha internetka. Awood u yeelashada doorashadan waxay meesha ka saaraysaa xusuusta iyo dusha sare ee CPU ee lagu daray boggaga internetka taasoo ka dhalatay maaraynta filtarrada isqurxinta guud. ", + "description": "Filter lists section name" + }, + "3pGroupMalware": { + "message": "Malware protection, security", + "description": "Filter lists section name" + }, + "3pGroupSocial": { + "message": "Social widgets", + "description": "Filter lists section name" + }, + "3pGroupCookies": { + "message": "Cookie notices", + "description": "Filter lists section name" + }, + "3pGroupAnnoyances": { + "message": "Waxaa lagu talinayaa in lagu suurtageliyo doorashadan aaladaha awoodda yar.", + "description": "Filter lists section name" + }, + "3pGroupMultipurpose": { + "message": "Liisaska martida la xannibay", + "description": "Filter lists section name" + }, + "3pGroupRegions": { + "message": "Codso isbeddelada", + "description": "Filter lists section name" + }, + "3pGroupCustom": { + "message": "Lagu dhex dhisay", + "description": "Filter lists section name" + }, + "3pImport": { + "message": "Xayeysiisyada", + "description": "The label for the checkbox used to import external filter lists" + }, + "3pExternalListsHint": { + "message": "Qarsoodi", + "description": "Short information about how to use the textarea to import external filter lists by URL" + }, + "3pExternalListObsolete": { + "message": "Goobaha Malware", + "description": "used as a tooltip for the out-of-date icon beside a list" + }, + "3pViewContent": { + "message": "Cadhada", + "description": "used as a tooltip for eye icon beside a list" + }, + "3pLastUpdate": { + "message": "Ujeedo badan", + "description": "used as a tooltip for the clock icon beside a list" + }, + "3pUpdating": { + "message": "Gobollada, luqadaha", + "description": "used as a tooltip for the spinner icon beside a list" + }, + "3pNetworkError": { + "message": "Caadiyan", + "description": "used as a tooltip for error icon beside a list" + }, + "1pTrustWarning": { + "message": "Do not add filters from untrusted sources.", + "description": "Warning against copy-pasting filters from random sources" + }, + "1pEnableMyFiltersLabel": { + "message": "Enable my custom filters", + "description": "Label for the checkbox use to enable/disable 'My filters' list" + }, + "1pTrustMyFiltersLabel": { + "message": "Allow custom filters requiring trust", + "description": "Label for the checkbox use to trust the content of 'My filters' list" + }, + "1pImport": { + "message": "Hal URL laynkiiba. URL-yada aan ansax ahayn waa la iska indho-tiraa aamusnaan.", + "description": "Button in the 'My filters' pane" + }, + "1pExport": { + "message": "Waqtigii dhacay", + "description": "Button in the 'My filters' pane" + }, + "1pExportFilename": { + "message": "fiiri nuxurka", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" + }, + "1pApplyChanges": { + "message": "Cusbooneysii ugu dambeysay: {{ago}} ", + "description": "English: Apply changes" + }, + "rulesPermanentHeader": { + "message": "Guji si aad u qasbi cusbooneysiinta", + "description": "header" + }, + "rulesTemporaryHeader": { + "message": "Cusbooneysiinta...", + "description": "header" + }, + "rulesRevert": { + "message": "Cilad shabakadeed ayaa ka hor istaagtay in kheyraadka la cusboonaysiiyo.", + "description": "This will remove all temporary rules" + }, + "rulesCommit": { + "message": "Hal filter halkii sadar Shaandheeyaha wuxuu noqon karaa magaca martida loo yahay ee cad, ama shaandhada ku habboon Adblock Plus. Khadadka horgalayaasha leh ! waa la iska indhatiraa", + "description": "This will persist temporary rules" + }, + "rulesEdit": { + "message": "Soo deji oo ku dheji", + "description": "Will enable manual-edit mode (textarea)" + }, + "rulesEditSave": { + "message": "Dhoofinta", + "description": "Will save manually-edited content and exit manual-edit mode" + }, + "rulesEditDiscard": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "Will discard manually-edited content and exit manual-edit mode" + }, + "rulesImport": { + "message": "Codso isbeddelada", + "description": "" + }, + "rulesExport": { + "message": "Xeerarka joogtada ah", + "description": "Button in the 'My rules' pane" + }, + "rulesDefaultFileName": { + "message": "Xeerarka ku meel gaadhka ah", + "description": "default file name to use" + }, + "rulesHint": { + "message": "Soo noqo", + "description": "English: List of your dynamic filtering rules." + }, + "rulesFormatHint": { + "message": "Ballanqaad", + "description": "English: dynamic rule syntax and full documentation." + }, + "rulesSort": { + "message": "Wax ka beddel", + "description": "English: label for sort option." + }, + "rulesSortByType": { + "message": "Badbaadin", + "description": "English: a sort option for list of rules." + }, + "rulesSortBySource": { + "message": "Tuur", + "description": "English: a sort option for list of rules." + }, + "rulesSortByDestination": { + "message": "Ka soo deji faylka...", + "description": "English: a sort option for list of rules." + }, + "whitelistPrompt": { + "message": "U Dhoofinta faylka", + "description": "A concise description of the 'Trusted sites' pane." + }, + "whitelistImport": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExport": { + "message": "Liiska xeerarka shaandhaynta firfircoon.", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExportFilename": { + "message": "Xeerka syntax: nooca goobta loo socdo (full documents ).", + "description": "The default filename to use for import/export purpose" + }, + "whitelistApply": { + "message": "Kala sooc:", + "description": "English: Apply changes" + }, + "logRequestsHeaderType": { + "message": "Nooca qaanuunka", + "description": "English: Type" + }, + "logRequestsHeaderDomain": { + "message": "Xigasho", + "description": "English: Domain" + }, + "logRequestsHeaderURL": { + "message": "Meesha loo socdo", + "description": "English: URL" + }, + "logRequestsHeaderFilter": { + "message": "Awaamiirta goobta lagu kalsoon yahay ayaa tilmaamaysa boggaga internetka ee uBlock Origin waa in la curyaamiyo. Hal gelitaan halkii sadar. Awaamiirta aan ansax ahayn si aamusnaan ah ayaa loo indhatiraa oo faallo looga bixin doonaa.", + "description": "English: Filter" + }, + "logAll": { + "message": "Soo deji oo ku dheji", + "description": "Appears in the logger's tab selector" + }, + "logBehindTheScene": { + "message": "Dhoofinta", + "description": "Pretty name for behind-the-scene network requests" + }, + "loggerCurrentTab": { + "message": "my-ublock-trusted-sites_{{datetime}}.txt", + "description": "Appears in the logger's tab selector" + }, + "loggerReloadTip": { + "message": "Codso isbeddelada", + "description": "Tooltip for the reload button in the logger page" + }, + "loggerDomInspectorTip": { + "message": "Nooca", + "description": "Tooltip for the DOM inspector button in the logger page" + }, + "loggerPopupPanelTip": { + "message": "Domain", + "description": "Tooltip for the popup panel button in the logger page" + }, + "loggerInfoTip": { + "message": "URL", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Shaandhayso", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Dhammaan", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Shaxda", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "tab hadda", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "Dib u soo rar nuxurka tab", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Bedeli kormeeraha DOM", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Beddel guddiga soo booda", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "Nadiifi logger", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "Jooji logger (ka tuur dhammaan xogta soo socota)", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "Jooji gooyaha", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "Beddel shaandhaynta logger", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "shaandhayso waxa ku jira logger", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Xulashada shaandhaynta Logger", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Maya", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "dhacdo", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "xannibay", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "ogol yahay", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "wax laga beddelay", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "xisbiga 1aad", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "xisbiga 3aad", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "Faahfaahin", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Shaandhayso", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Liiska kala shaandheynta", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Xeer", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Dulucda", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "macnaha guud", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Xaflada", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Nooca", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "URL", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "Xeerka URL", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "Dulucda:", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "Nooca:", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "Shaandheeyaha taagan", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "{{action}} codsiyada shabakada {{type}} {{br}} URL kee u dhigma {{url}} {{br}}oo asal ahaan ka soo jeeda {{asalka}},{{br}}{{{muhiimada} } waxaa jira shaandheyn ka reeban oo ku habboon.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Block", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Allow", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "ku qor \"{{type}}\"", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "nooc kasta", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "ka \"{{asalka}}\"", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "meel kasta ka yimid", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "marka laga reebo", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "xataa haddii", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "Shaandheeyaha taagan {{filter}} ayaa laga helay:", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "Shaandhaynta taagan lagama helin mid ka mid ah liisaska shaandhaynta hadda karti u leh", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "Gelida Logger ee aan buuxin dhammaan saddexda shuruudood ee hoose si toos ah ayaa loo tuurayaa:", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "Kaydi gelida daqiiqadihii ugu dambeeyay {{Input}}", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Ilaali ugu badnaan {{input}} culayska bogga tabkiiba", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Ilaali ugu badnaan {{input}} gelinta tab kasta", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Isticmaal {{input}} khadadka gelistaba qaab si toosan loo fidiyay", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Qari tiirarka:", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "{{Input}} Waqtiga", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Create new report on GitHub", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Find similar reports on GitHub", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "{{input}} Shaandhayso/xukun", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "{{Input}} Dulucda", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "{{Input}} Xaflada", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Liiska", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Miis", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Cad", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Markdown", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Furan", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Dukumeenti", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Ka akhri dukumeentiga uBlock/wiki si aad wax uga ogaato dhammaan astaamaha uBlock Origin.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Su'aalo iyo taageero", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Jawaabaha su'aalaha iyo noocyada kale ee taageerada caawimada waxaa lagu bixiyaa subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported. Note: clicking the button will cause the page's origin to be sent to GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verify that the issue still exists after reloading the problematic web page.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the web page:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The web page…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBlock Origin is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the web page as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Talooyin: Hubi in liisaska shaandhayntaadu ay cusub yihiin. Logger waa aaladda koowaad ee lagu baadho arrimaha shaandhada la xiriira.", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Warbixinta cayayaanka", + "description": "" + }, + "aboutCode": { + "message": "Ka warbixi arrimaha uBlock Origin laftiisa uBlockOrigin/uBlock-issue arin tracker. Wuxuu u baahan yahay akoon GitHub", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Macluumaadka Cilad-bixinta", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Hoos waxaa ah macluumaadka farsamada oo laga yaabo inay faa'iido leedahay marka tabaruceyaashu ay isku dayayaan inay kaa caawiyaan xallinta dhibaatada.", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Muhiim: Macluumaad gaar ah ama mid xasaasi ah ayaa si toos ah wax looga beddelay. Macluumaadka dib loo habeeyey ayaa laga yaabaa inay sii adkeeyaan xallinta mushkiladda.", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Dib u habeyn", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Aan waxba laga beddelin", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Qaanuunka Arrimaha Khaaska ah", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Changelog", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Koodhka isha (GPLv3)", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "Wax ku darsaday", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Source code", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Turjumaada", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Liisaska sifee", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Ku tiirsanaanta dibadda (GPLv3-ku habboon):", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Liisaska shaandhaynta uBO ayaa si xor ah loogu martigaliyay kuwa soo socda CDNs:", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "CDN si aan kala sooc lahayn loo soo doortay ayaa la isticmaalaa marka liiska shaandhada loo baahan yahay in la cusboonaysiiyo", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "Ka soo celi faylka...", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "Dib u deji dejinta caadiga ah...", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "Dhammaan dejimahaaga waa lagu beddeli doonaa iyadoo la adeegsanayo xogta la xoojiyay {{waqtiga}}, iyo uBlock? ayaa dib u bilaaban doona. ", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} hours ago", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "Dib u qor dhammaan dejimaha jira adiga oo isticmaalaya xogta la taageeray?", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "Xogta lama akhrin karo ama waa khalad", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Dhammaan dejimahaaga waa laga saari doonaa, oo uBlock? dib ayuu u bilaabi doonaa. ", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Show Logger", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "Dib u deji uBlock? u dejisay dejinta warshadda?", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Page blocked", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "Cilada shabakada: {{msg}}", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "uBlock?: Ku dar URL-kan soo socda liisaska shaandhaynta gaarka ah? ", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "without parameters", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Ciwaanka: \"{{ciwaanka}}\" ", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "URL: {{url}}", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Subscribe dheh", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "hal daqiiqo ka hor", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "{{value}} daqiiqo kahor", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "saacad ka hor", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Proceed", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "{{value}} saac kahor", + "description": "tooltip" + }, + "cloudPull": { + "message": "maalin ka hor", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "{{value}} maalmo kahor", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Muuji Logger", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "off", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "UBlock Origin ayaa ka diiday bogga soo socda in la soo raro:", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "shaandhada soo socota awgeed", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "aan xuduud lahayn", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "Laga helay:", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Ku noqo", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Xir daaqadan", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Dami xannibaadda adag ee {{hostname}}", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "View source code…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Si ku meel gaar ah", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Si joogto ah", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "U dhoofi kaydinta daruuraha", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Ka soo deji kaydinta daruuraha", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Toggle cosmetic filtering", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Toggle JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "... ", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "...", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "Qalabkan magaca:", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "Digniin! Beddel goobahan horumarsan khatartaada.", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "Gudbi", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Codso isbeddelada", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Errors: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" + } +} diff --git a/src/_locales/sq/messages.json b/src/_locales/sq/messages.json index f9f14e7b33dad..0075698dd4f98 100644 --- a/src/_locales/sq/messages.json +++ b/src/_locales/sq/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Më në fund, një bllokues efikas që nuk e rëndon procesorin dhe memorjen.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Më në fund, një bllokues efikas që nuk e rëndon procesorin dhe memorien.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Pulti i programit", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Paneli i kontrollit", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Parametrat", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Kujdes! Nuk keni ruajtur ndryshimet", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Filtrat nga palët e treta", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Qëndroj", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Filtrat e mi", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Shpërfill", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Rregullat e mia", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Parametrat", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Lista e bardhë", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Listat e filtrave", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Kërkesat e rrjetit", - "description":"Title for the logger window" + "1pPageName": { + "message": "Filtrat e mi", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Info", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Rregullat e mia", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Klikoj: uBlock₀ bëhet joaktiv\/aktiv te ky uebsajti.\n\nKlikoj+Ctrl: uBlock₀ bëhet joaktiv vetëm te kjo faqja.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Faqet e besuara", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"kërkesa të refuzuara", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Shkurtoret", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"te kjo faqja", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Regjistri i kërkesave", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} ose {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Info", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"që prej instalimit", - "description":"English: since install" + "supportPageName": { + "message": "Ndihma teknike", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"ose", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Ilustruesi i aseteve", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Klikoj pultin e programit", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Parametrat e avancuar", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Përzgjedhësi i elementeve", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Ç/aktivizoni uBlock₀ te ky uebsajti.\n\nKlikimi+Ctrl e çaktivizon uBlock₀ vetëm te kjo faqja.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Ditari i kërkesave", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Çaktivizoni uBlock₀ te ky uebsajti.\n\nKlikimi+Ctrl e çaktivizon uBlock₀ vetëm te kjo faqja.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Bllokoj të gjitha dritaret automatike që hap kjo faqja", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Aktivizoni uBlock₀ te ky uebsajti.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Bllokoj elementet e mëdha mediatike te kjo faqja", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "kërkesa të bllokuara", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Përdor filtrat kozmetikë te kjo faqja", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "te kjo faqe", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Bllokoj sistemet e shkronjave në distancë", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} ose {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Rregullat globale: rregullat në këtë shtyllë aplikohen te të gjitha faqet.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "që prej instalimit", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Rregullat lokale: rregullat në këtë shtyllë aplikohen vetëm te kjo faqja.\nKëto rregulla kanë më përparësi sesa rregullat globale.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "ose", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Klikoni që t'i bëni ndryshimet të përhershme.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Te kjo faqe janë bllokuar", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Klikoni që t'i zhbëni ndryshimet.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Nga fillimi janë bllokuar", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"të gjitha", - "description":"" + "popupDomainsConnected_v2": { + "message": "Domenet që janë lidhur", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"figurat", - "description":"" + "popupTipDashboard": { + "message": "Hapni panelin e kontrollit", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"palët e treta", - "description":"" + "popupTipZapper": { + "message": "Asgjësuesi i elementeve", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"css\/figurat nga palët e treta", - "description":"" + "popupTipPicker": { + "message": "Përzgjedhësi i elementeve", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"skriptet e integruara", - "description":"" + "popupTipLog": { + "message": "Regjistri i kërkesave", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"skriptet nga pala kryesore", - "description":"" + "popupTipReport": { + "message": "Raportoni problemin me uebsajtin", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"skriptet nga palët e treta", - "description":"" + "popupTipNoPopups": { + "message": "Zh/Bllokoni të gjitha dritaret modale te uebsajti", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"kuadrot nga palët e treta", - "description":"" + "popupTipNoPopups1": { + "message": "Bllokoni të gjitha dritaret modale te uebsajti", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"faqe të kontaktuara", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Zhbllokoni të gjitha dritaret modale te uebsajti", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} nga {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Zh/Bllokoni elementet e mëdha multimediale te uebsajti", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Krijoj", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Bllokoni elementet e mëdha multimediale te uebsajti", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Përzgjedh", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Zbllokoni elementet e mëdha multimediale te uebsajti", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Mbyll", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Ç/Aktivizoni filtrat kozmetikë te uebsajti", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Parashikoj", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Çaktivizoni filtrat kozmetikë te uebsajti", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Filtrat e rrjetit", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Aktivizoni filtrat kozmetikë te uebsajti", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Filtrat kozmetikë", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Zh/Bllokoni modelet e jashtme shkronjore te uebsajti", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Klikoj, Klikoj me Ctrl", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Bllokoni modelet e jashtme shkronjore te uebsajti", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Bllokoj elementin", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Zhbllokoni modelet e jashtme shkronjore te uebsajti", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Fsheh treguesin e elementeve të bllokuara", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Çaktivizoni JavaScript-in te uebsajti", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Tregoj te ikona numrin e kërkesave që janë refuzuar", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Aktivizoni JavaScript-in te uebsajti", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Çaktivizoj përshkrimet e shkurtra", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Dritaret modale", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Përdor menynë kontekstuale kur duhet", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Elementet e mëdha multimediale", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Përshtat ngjyrat për daltonikët", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Filtrat kozmetikë", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Aktivizoj renë informatike", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Modelet e jashtme shkronjore", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Kam njohuri të avancuara (Lexim i detyruar<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Çaktivizoj hapjen e parakohshme të faqeve (për të parandaluar lidhjet me kërkesat e refuzuara)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Më shumë", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Çaktivizoj shqyrtimin e tejlidhjeve", - "description":"English: " + "popupLessButton_v2": { + "message": "Më pak", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Nuk lejoj WebRTC-në që të zbulojë adresat IP lokale", - "description":"English: " + "popupTipGlobalRules": { + "message": "Rregullat globale: rregullat në këtë shtyllë aplikohen për të gjitha uebsajtet.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Vlerat standarde", - "description":"" + "popupTipLocalRules": { + "message": "Rregullat lokale: rregullat në këtë shtyllë aplikohen vetëm për këtë uebsajtin. \nKëto kanë përparësi mbi rregullat globale.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Këto vlera bëhen të panevojshme, sipas rastit", - "description":"" + "popupTipSaveRules": { + "message": "Ruani përgjithnjë ndryshimet.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Çaktivizoj filtrat kozmetikë", - "description":"" + "popupTipRevertRules": { + "message": "Ktheni ndryshimet.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Bllokoj elementet mediatike më të mëdha se {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "të gjitha", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Bllokoj sistemet e shkronjave në distancë", - "description":"" + "popupImageRulePrompt": { + "message": "imazhet", + "description": "" }, - "settingsStorageUsed":{ - "message":"Hapësira e përdorur: {{value}} bajt", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "palët e treta", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Rindërtimi i fundit:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "CSS/imazhet nga palët e treta", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Kopja e fundit:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "skriptet e integruara", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} filtra të rrjetit + {{cosmeticFilterCount}} filtra kozmetikë nga:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "skriptet nga pala kryesore", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"përdor {{used}} nga {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "skriptet nga palët e treta", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Përditësoj filtrat automatikisht", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "kuadrot nga palët e treta", + "description": "" }, - "3pUpdateNow":{ - "message":"Përditësoj tani", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "domenet që janë lidhur", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Heq të gjitha stoqet", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} nga {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Analizoj dhe zbatoj filtrat kozmetikë", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Versioni", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Ky opsion lejon analizimin dhe zbatimin e filtrave “eliminues” njësoj si në Adblock Plus<\/a>. Këta filtra kozmetikë shërbejnë kryesisht për të fshehur nga ana vizive elementet e padëshirueshme të cilat nuk bllokohen me metodën e filtrimit standard.<\/p>

      Aktivizimi i kësaj veçorie rrit impaktin e uBlock₀<\/i> te memorja e kompjuterit.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "skript", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Nuk marr parasysh filtrat kozmetikë jospecifikë", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "kuadër", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Filtrat kozmetikë jospecifikë janë filtra kozmetikë të cilët aplikohen për të gjitha faqet e internetit.

      Megjithëse uBlock₀ i përdor ata me efikasitet, filtrat kozmetikë jospecifikë përsëri mund të rëndojnë memorjen dhe procesorin e kompjuterit në faqet e gjata.

      Aktivizimi i këtij opsioni eliminon peshën e tepërt te memorja dhe procesori, dhe ul impaktin e uBlock₀ te memorja e kompjuterit.

      Rekomandohet që ky opsion të aktivizohet për aparatet jo shumë të shpejta.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Krijoj", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lista e hosteve të bllokuara", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Përzgjedh", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Ruaj ndryshimet", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Mbyll", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Reklamat", - "description":"English: Ads" + "pickerPreview": { + "message": "Parashikoj", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Privatësia", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Filtrat e rrjetit", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Domenet e dëmshme", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Filtrat kozmetikë", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Rrjetet sociale", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Kliko, Kliko me Ctrl", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Për qëllime të ndryshme", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Bllokoj elementin…", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Sipas rajonit, gjuhës", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Fsheh treguesin e elementeve të bllokuara", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Personalizoj", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Shfaq në ikonë numrin e kërkesave të bllokuara", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Një URL për rresht. Nuk do të merren parasysh rreshtat që kanë si parashtesë ‘!’, sikundër adresat e pasakta.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Çaktivizoj përshkrimet e shkurtra", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Analizoj", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Përdor menunë kontekstuale sipas rrethanave", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"heq stokun", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Përshtat ngjyrat për daltonikët", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"ka dalë versioni i ri", - "description":"English: new version available" + "settingsAppearance": { + "message": "Paraqitja", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"e vjetër", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Motivi", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Përditësimi i fundit: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Personalizoj ngjyrën e theksuar", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Një filtër për rresht. Filtri mund të jetë thjesht emri i një hosti ose t'i ngjasojë atyre që përdor Adblock Plus. Nuk do të merren parasysh rreshtat që kanë si parashtesë ‘!’.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Aktivizoj renë informatike", + "description": "" }, - "1pImport":{ - "message":"Importoj dhe shtoj", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Kam njohuri të thelluara", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Eksportoj", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Çaktivizoj kërkesat paraprake (për të shmangur lidhjet me kërkesat e bllokuara)", + "description": "English: " }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Çaktivizoj analizën e lidhjeve hipertekstuale", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Ruaj ndryshimet", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Nuk lejoj WebRTC-në që të zbulojë adresat IP lokale", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Rregulla të përhershme", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Vlerat standarde", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Rregulla të përkohshme", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Këto vlera mund të ndryshohen sipas uebsajtit", + "description": "" }, - "rulesRevert":{ - "message":"Rikthej", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Çaktivizoj filtrat kozmetikë", + "description": "" }, - "rulesCommit":{ - "message":"Aplikoj", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Bllokoj elementet multimediale më të mëdha se {{input}} KB", + "description": "" }, - "rulesEdit":{ - "message":"Modifikoj", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Bllokoj modelet e jashtme shkronjore", + "description": "" }, - "rulesEditSave":{ - "message":"Ruaj", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Çaktivizoj JavaScript-in", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Anuloj", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Bllokoj raportet e CSP-së", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Importoj nga skedari...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Demaskoj emrat kanonikë", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Ruaj në skedar", - "description":"" + "settingsAdvanced": { + "message": "Parametrat e avancuar", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Funksione të përshtatshme vetëm për specialistët", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Lista e rregullave tuaja për filtrimin dinamik.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "parametrat e avancuar", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Rregullat e sintaksës: burimi destinacioni lloji veprimi<\/code> (dokumentimi i plotë<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Rindërtimi i fundit:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Lista e hosteve për të cilat uBlock₀ do të jetë joaktiv. Një element për rresht. Nuk do të merren parasysh emrat e pasaktë.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Kopja e fundit:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Importoj dhe shtoj", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} filtra rrjeti + {{cosmeticFilterCount}} filtra kozmetikë nga:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Eksportoj", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "përdor {{used}} nga {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Përditësoj automatikisht filtrat", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Ruaj ndryshimet", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Përditësoj tani", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Lloji", - "description":"English: Type" + "3pPurgeAll": { + "message": "Heq të gjitha stoqet", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Domeni", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Analizoj dhe zbatoj filtrat kozmetikë", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Filtrat kozmetikë shërbejnë për të fshehur nga ana vizive elementet e padëshirueshme të faqes, të cilat nuk bllokohen me metodën standarde të filtrimit sipas kërkesës.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filtri", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Nuk marr parasysh filtrat kozmetikë jospecifikë", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Të gjitha", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Filtrat kozmetikë jospecifikë janë filtra që aplikohen për të gjitha faqet e internetit. Me aktivizimin e këtij opsioni ulet ngarkesa e memories dhe procesorit.\n\nKy opsion rekomandohet për aparatet kompjuterike jo shumë të shpejta.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Në prapaskenë", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Pezulloj aktivitetin deri kur të jenë gati të gjitha listat", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"filtroni elementet e ditarit", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Lista e hosteve të bllokuara", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Numri maksimal i elementeve të ditarit", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Ruaj ndryshimet", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Konteksti:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Lokale", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Lloji:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Reklamat", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Filtrimi dinamik i adresave", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Privatësia", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Filtrimi statik", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Domenet e dëmshme, siguria", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} kërkesat e {{type}} {{br}}adresa e të cilave korrespondon me {{url}} {{br}}dhe që e kanë origjinën {{origin}},{{br}}{{importance}} ekziston një filtër përjashtues i ngjashëm.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Veglat sociale", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Bllokoj", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Njoftimi për cookies", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Lejoj", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Elementet e bezdisshme", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"llojit “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Për qëllime të ndryshme", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"çdo lloji", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Sipas rajonit, gjuhës", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"nga “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Personale", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"ngado", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Importoj…", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"përveçse kur", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Një URL për rresht. Nuk do të merren parasysh adresat e pasakta.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"edhe kur", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "E vjetër.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Filtri statik {{filter}} gjendet në:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "shfaqni përmbajtjen", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Ditari i ndryshimeve", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Përditësimi i fundit: {{ago}}.\nKlikoni për ta përditësuar vetë.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Dokumentimi", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Përditëson…", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Mbështetja teknike", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Një problem me rrjetin kompjuterik pengoi përditësimin e informacionit.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Materiali burimor (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Mos shtoni filtra nga burime të pabesueshme.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Kontributorët", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Aktivizoj filtrat e mi të personalizuar", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Kopjoj në skedar", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Lejoj filtrat e personalizuar që duhen besuar", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Importoj dhe shtoj…", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Rindërtoj sipas skedarit...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Eksportoj…", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Kthej parametrat e mëparshëm...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Të gjithë parametrat do të mbishkruhen me të dhënat e kopjuara më {{time}}, dhe uBlock₀ do të hapet përsëri.\n\nDo i mbishkruani parametrat aktualë?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Ruaj ndryshimet", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Të dhënat nuk lexohen ose mund të jenë dëmtuar", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Rregullat e përhershme", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Të gjithë parametrat do të fshihen dhe uBlock₀ do të hapet përsëri.\n\nDo i ktheni parametrat origjinalë?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Rregullat e përkohshme", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Nuk arrin të lidhet me {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Rikthej", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Do e shtoni këtë adresën në listën e filtrave tuaj?\n\nTitulli: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Aplikoj", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"një minutë më parë", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Modifikoj", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minuta më parë", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Regjistroj", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"një orë më parë", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Anuloj", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} orë më parë", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Importoj nga skedari…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"një ditë më parë", - "description":"English: a day ago" + "rulesExport": { + "message": "Eksportoj në skedar…", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} ditë më parë", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Pulti i programit", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Lista e rregullave për filtrimin dinamik.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Ditari i kërkesave të rrjetit", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Rregullat e sintaksës: burimi destinacioni lloji veprimi (dokumentimi i plotë).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"fikur", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Rendit:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin po pengon hapjen e faqes:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Lloji i rregullës", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Për shkak të filtrit", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Burimi", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"pa parametra", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Destinacioni", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Gjendet në:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Kjo listë paraqet faqet e besuara të internetit në të cilat uBlock Origin duhet çaktivizuar. Një element për rresht.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Kthehem", - "description":"English: Go back" + "whitelistImport": { + "message": "Importoj dhe shtoj…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Mbyll dritaren", - "description":"English: Close this window" + "whitelistExport": { + "message": "Eksportoj…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Zhbllokoj mënyrën strikte për {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "my-ublock-trusted-sites_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Përkohësisht", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Ruaj ndryshimet", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Gjithmonë", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Lloji", + "description": "English: Type" }, - "cloudPush":{ - "message":"Eksportoj në renë informatike", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Domeni", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Importoj nga reja informatike", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Importoj nga reja informatike dhe bashkoj me parametrat aktualë", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filtri", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Të gjitha", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Emri i aparatit:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Në prapaskenë", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Parashtroj", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Skeda aktuale", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Rikthej", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Freskoni përmbajtjen e skedës", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"bajt", - "description":"" + "loggerDomInspectorTip": { + "message": "Ç/Aktivizoni strukturën DOM", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Lejoj përkohësisht elementet me përmasa të mëdha", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Ç/Aktivizoni panelin modal", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: Regjistri i kërkesave", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Pastroni regjistrin", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Ndërprisni regjistrimin (e gjithë të dhënave të tjera)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Rifilloni regjistrimin", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Ç/Aktivizoni filtrat e regjistrit", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filtroni zërat në regjistër", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Opsionet e filtrimit të regjistrit", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Jo", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "plot ngjarje", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "e bllokuar", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "e lejuar", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "e modifikuar", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "palët kryesore", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "palët e treta", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Detajet", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filtri", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Lista e filtrave", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Rregulla", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Konteksti", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Konteksti bazë", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Palët", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Lloji", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Filtrimi sipas URL", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Konteksti:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Lloji:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Filtrimi statik", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} kërkesat e {{type}} {{br}}që korrespondojnë me adresën {{url}} {{br}}dhe që e kanë origjinën {{origin}},{{br}}{{importance}} ekziston një filtër përjashtues i njëjtë.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Bllokoj", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Lejoj", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "llojit “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "çdo lloji", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "nga “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "ngado", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "përveçse kur", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "edhe kur", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Filtri statik {{filter}} gjendet në:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Nuk u gjet filtri statik në asnjërën prej listave aktive", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Zërat në regjistër do të fshihen automatikisht kur nuk plotësojnë këto tri kushte:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Ruaj zërat e {{input}} minutave të fundit", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Ruaj jo më shumë se {{input}} faqe të reja për skedë", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Ruaj jo më shumë se {{input}} zëra për skedë", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Në pamjen e zgjeruar përdor {{input}} rreshta për zë", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Shtyllat e fshehura:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Ora", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filtri/rregulla", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Konteksti", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Palët", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Listë", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tabelë", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "E paformatuar", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Hap", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Krijoj raport të ri në GitHub", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Gjej raporte të ngjashme në GitHub", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Dokumentacioni", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Lexoni uBlock/wiki që të mësoni më shumë për funksionet e uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Pyetjet dhe ndihma teknike", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Në forumin e dedikuar Reddit /r/uBlockOrigin mund të bëni pyetje dhe të kërkoni çdolloj ndihme tjetër.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Problemet me filtrat/faqet me defekte", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Problemet e disa faqeve me filtrat duhen raportuar në ditarin e problemeve uBlockOrigin/uAssets. Duhet një konto GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Kujdes: uBlock Origin nuk duhet përdorur njëkohësisht me aplikacione të ngjashme bllokuese, pasi mund të keni probleme me filtrat.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Këshilla: Sigurohuni që të përditësoni listat e filtrave. Regjistri është instrumenti kryesor për diagnostikimin e problemeve me filtrat.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Raportimi i problemeve", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Problemet e uBlock Origin duhen raportuar në ditarin e problemeve uBlockOrigin/uBlock-issue. Duhet një konto GitHub.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Diagnostikimi i problemeve", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Informacioni teknik i mëposhtëm u shërben personave të cilët përpiqen të zgjidhin problemin që keni.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Raportoni problemet me filtrat", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Verifikoni a është raportuar edhe më parë që të mos i lodhni vullnetarët e tjerë me të njëjtat probleme. Shënim: kur klikoni butonin, origjina e faqes do të dërgohet në GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Listat e filtrave përditësohen rregullisht. Sigurohuni që problemi qëndron edhe me listat e reja.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verifikoni a qëndron problemi nëse e freskoni sërish faqen në fjalë.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Adresa e faqes:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Faqja…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Zgjidhni --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shfaq reklama ose pjesë reklamash", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Ka mbivendosje ose parregullsi të tjera", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "E di që përdor uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Ka probleme me privatësinë", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Bllokohet kur aktivizoj uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Hap skeda ose dritare të panevojshme", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Çon në instalimin e programeve keqdashëse, mashtruese", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Etiketoj faqen si “NSFW” (“E papërshtatshme për punë”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Politika e privatësisë", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Ditari i ndryshimeve", + "description": "" + }, + "aboutCode": { + "message": "Materiali burimor (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Kontribuesit", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Materiali burimor", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Përkthimet", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Listat e filtrave", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Programet kushtëzuese (sipas GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Listat e filtrave të uBO mundësohen falas në CDN-të e mëposhtme:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Përditësimi i listave do të kryhet nëpërmjet një CDN-je rastësore.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Kopjoj në skedar…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Rindërtoj sipas skedarit…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Kthej parametrat fillestarë…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Të gjithë parametrat do të mbishkruhen me të dhënat e kopjuara më {{time}}, dhe uBlock₀ do të hapet sërish.\n\nDo mbishkruani parametrat aktualë?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Të dhënat nuk lexohen ose mund të jenë dëmtuar", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Të gjithë parametrat do të fshihen dhe uBlock₀ do të hapet sërish.\n\nDo ktheni parametrat origjinalë?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Problem me rrjetin kompjuterik: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Abonohem", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "një minutë më parë", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} minuta më parë", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "një orë më parë", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} orë më parë", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "një ditë më parë", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} ditë më parë", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Paneli i kontrollit", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Regjistri i kërkesave", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "fikur", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Faqe e bllokuar", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin po pengon hapjen e faqes:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Për shkak të filtrit", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "pa parametra", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Gjendet në:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Kthehem", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Mbyll dritaren", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Mos më lajmëro për këtë faqen", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Zhbllokoj mënyrën strikte për {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Përkohësisht", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Gjithnjë", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Vazhdoj", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Faqja e bllokuar do t'ju drejtojë në një uebsajt tjetër. Në rast se vijoni do të shkoni te: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Arsyeja:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Dëmtuese", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Gjurmues", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Joserioze", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Eksportoni në renë informatike", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importoni nga reja informatike", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importoni nga reja informatike dhe bashkoni me parametrat aktualë", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Emri i aparatit:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Kujdes! Mbani ju përgjegjësi nëse i ndryshoni parametrat e avancuar.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Parashtroj", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Ruaj ndryshimet", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Rikthej", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bajt", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Bllokoj elementin në kuadër…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Abonohem në listën e filtrave…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Lejoj përkohësisht elementet e mëdha multimediale", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Shikoj kodin burimor…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Vendosni kombinimin", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Ç/Aktivizoni lëvizjen me rrëshqitje", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Kopjoj në memorie", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Përzgjedh të gjitha", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Ç/Aktivizoj filtrat kozmetikë", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Ç/Aktivizoj JavaScript-in", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Dobësoj mënyrën e bllokimit", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Hapësira e përdorur: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Klikoni për ta hapur", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Probleme: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Kur hapet shfletuesi nuk bëhet filtrimi i duhur. Freskoni faqen për ta filtruar mirë.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/sr/messages.json b/src/_locales/sr/messages.json index 3de48415980f6..02dd6d947bc2e 100644 --- a/src/_locales/sr/messages.json +++ b/src/_locales/sr/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Коначно, ефикасан блокатор. Ниски процесорски и меморијски захтеви.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Коначно, ефикасан блокатор. Ниски процесорски и меморијски захтеви.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Контролна табла", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Контролна табла", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Подешавања", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Упозорење! Имате промене које нису сачуване", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Додатни филтери", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Остани", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Моји филтери", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Игнориши", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Моја правила", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Подешавања", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Дозвољени домени", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Листе филтера", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Евиденција", - "description":"Title for the logger window" + "1pPageName": { + "message": "Моји филтери", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"О програму", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Моја правила", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Клик: онемогући\/омогући µBlock₀ за овај сајт.\n\nCtrl+клик: онемогући\/омогући µBlock₀ само за ову страницу.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Поуздани сајтови", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"блокирани захтеви", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Пречице", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"на овој страници", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Евиденција", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} или {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "О програму", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"од инсталације", - "description":"English: since install" + "supportPageName": { + "message": "Подршка", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"или", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Прегледач ресурса", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Кликните за отварање контролне табле", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Напредна подешавања", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Ући у режим избора елемената", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Клик: онемогући/омогући µBlock₀ за овај сајт.\n\nCtrl+клик: онемогући/омогући µBlock₀ само за ову страницу.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Отвори евиденцију", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Кликните да бисте онемогућили µBlock₀ за овај сајт.\n\nCtrl+клик да бисте онемогућили µBlock₀ само на овој страници.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Укључи\/искључи блокирање свих искачућих прозора за овај сајт", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Кликните да бисте омогућили µBlock₀ за овај сајт.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Укључи\/искључи блокирање великих мултимедијалних елемената за овај сајт", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "блокирани захтеви", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Укључи\/искључи естетско филтрирање за овај сајт", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "на овој страници", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Укључи\/искључи блокирање спољних фонтова за овај сајт", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} или {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Општа правила: ова колона је за правила која се примењују на свим сајтовима.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "од инсталације", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Локална правила: ова колона је за правила која се примењују само на тренутном сајту.\nЛокална правила имају предност у односу на општа.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "или", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Кликните да бисте измене учинили трајним.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Блокирано на овој страници", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Кликните да бисте вратили измене.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Блокирано од инсталације", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"све", - "description":"" + "popupDomainsConnected_v2": { + "message": "Повезани домени", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"слике", - "description":"" + "popupTipDashboard": { + "message": "Отвори контролну таблу", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"треће стране", - "description":"" + "popupTipZapper": { + "message": "Режим уклањања елемената", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"Css\/слике трећих страна", - "description":"" + "popupTipPicker": { + "message": "Режим избора елемената", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"уметнуте скрипте", - "description":"" + "popupTipLog": { + "message": "Отвори евиденцију", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"Корисничке скрипте", - "description":"" + "popupTipReport": { + "message": "Пријавите проблем на овом веб сајту", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"Скрипте трећих страна", - "description":"" + "popupTipNoPopups": { + "message": "Укључи/искључи блокирање свих искачућих прозора за овај сајт", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"Оквири трећих страна", - "description":"" + "popupTipNoPopups1": { + "message": "Кликните за блокирање свих искачућих прозора на овом сајту", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"повезани домени", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Кликните да бисте зауставили блокирање свих искачућих прозора на овом сајту", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} од {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Укључи/искључи блокирање великих мултимедијалних елемената за овај сајт", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Направи", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Кликните за блокирање великих мултимедијалних елемената на овом сајту", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Изабери", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Кликните да бисте зауставили блокирање великих мултимедијалних елемената на овом сајту", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Изађи", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Укључи/искључи естетско филтрирање за овај сајт", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Преглед", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Кликните да бисте онемогућили естетско филтрирање на овом сајту", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Мрежни филтери", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Кликните да бисте омогућили естетско филтрирање на овом сајту", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Естетски филтери", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Укључи/искључи блокирање удаљених фонтова за овај сајт", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Клик, Ctrl-клик", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Кликните за блокирање удаљених фонтова на овом сајту", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Блокирај елемент", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Кликните да бисте зауставили блокирање удаљених фонтова на овом сајту", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Сакриј држаче блокираних елемената", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Кликните да онемогућите JavaScript на овом сајту", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Покажи број блокираних захтева на икони", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Кликните да JavaScript не буде више онемогућен на овом сајту", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Онемогући описе алатке", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Искачући прозори", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Користи контекстни мени где је прикладно", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Велики мултимедијски елементи", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Мод за далтонисте", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Естетско филтрирање", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Укључи подршку за складиште у облаку", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Удаљени фонтови", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Ја сам напредни корисник (Обавезна литература<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Онемогући оптимизацију учитавања (да би се спречила свака веза блокираних мрежних захтева)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Више", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Онемогући проверавање хиперлинкова", - "description":"English: " + "popupLessButton_v2": { + "message": "Мање", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Спречи WebRTC да пропушта локалну IP адресу", - "description":"English: " + "popupTipGlobalRules": { + "message": "Општа правила: ова колона је за правила која се примењују на свим сајтовима.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Подразумевано понашање", - "description":"" + "popupTipLocalRules": { + "message": "Локална правила: ова колона је за правила која се примењују само на тренутном сајту.\nЛокална правила имају предност у односу на општа.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Ова подразумевана понашања могу бити поништена за појединачне веб сајтове", - "description":"" + "popupTipSaveRules": { + "message": "Кликните да бисте промене учинили трајним.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Онемогући естетско филтрирање", - "description":"" + "popupTipRevertRules": { + "message": "Кликните да бисте вратили промене.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Блокирај мултимедијалне елементе веће од {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "све", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Блокирај удаљене фонтове", - "description":"" + "popupImageRulePrompt": { + "message": "слике", + "description": "" }, - "settingsStorageUsed":{ - "message":"Искоришћеност складишта: {{value}} бајтова", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "треће стране", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Последње враћање:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "CSS/слике трећих страна", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Последња резервна копија:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "уметнуте скрипте", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"мрежних филтера: {{netFilterCount}} + естетских филтера: {{cosmeticFilterCount}} из:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "Корисничке скрипте", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} искоришћено од {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "Скрипте трећих страна", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Аутоматско освежавање листе филтера.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "Оквири трећих страна", + "description": "" }, - "3pUpdateNow":{ - "message":"Ажурирај сада", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "повезани домени", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Очисти сав кеш", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} од {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Рашчлани и примени естетске филтере.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Верзија", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Ова опција омогућава рашчлањавање и спровођење Adblock Plus компатибилних филтера “за сакривање елемената” <\/a>. Ови филтери су углавном естетски, они служе за сакривање елемената на веб страници који се сматрају визуелном сметњом и који не могу бити блокирани од стране мрежних захтева базираних на филтрирању.<\/p>

      Омогућавањем ове функције повећава се количина меморије коју uBlock₀ користи.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "скрипта", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Игнориши опште естетске филтере.", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "оквир", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Општи естетски филтери су они естетски филтери који су намењени за примену на свим сајтовима.

      Иако uBlock₀ ефикасно рукује њима, општи естетски филтери могу довести до повећане потрошње меморије и оптерећења процесора на неким страницама, нарочито на оним великим.

      Омогућавањем ове опције, елиминисаће се повећана потрошња меморије и оптерећење процесора на страницама као резултат руковања општим естетским филтерима, а такође и смањити меморијски отисак самог uBlock₀-а.

      Препоручује се да се ова опција омогући на мање моћним уређајима.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Креирај", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Списак блокираних хостова", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Изабери", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Примени измене", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Изађи", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Рекламе", - "description":"English: Ads" + "pickerPreview": { + "message": "Преглед", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Приватност", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Мрежни филтери", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Злонамерни домени", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Естетски филтери", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Друштвени", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Клик, Ctrl-клик", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Вишенаменски", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Блокирај елемент...", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Регионални, језички", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Сакриј држаче блокираних елемената", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Прилагођени", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Прикажи број блокираних захтева на иконици", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Једна адреса по реду. Редови са префиксом ‘!’ ће бити игнорисани. Неисправне адресе ће бити тихо игнорисане.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Онемогући описе алатке", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Примени", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Користи контекстни мени где је прикладно", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"испразни кеш", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Мод за далтонисте", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"доступна нова верзија", - "description":"English: new version available" + "settingsAppearance": { + "message": "Изглед", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"застарело", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Тема", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Последње освежавање: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Прилагођена наглашена боја", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Један филтер по реду. Филтер може бити назив хоста или филтер компатибилан са Adblock Plus форматом. Редови са префиксом ‘!’ ће бити игнорисани.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Укључи подршку за складиште у облаку", + "description": "" }, - "1pImport":{ - "message":"Увези и додај", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Ја сам напредни корисник", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Извези", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Онемогући оптимизацију учитавања (да би се спречила свака веза блокираних мрежних захтева)", + "description": "English: " }, - "1pExportFilename":{ - "message":"моји-ublock-филтери_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Онемогући проверавање хиперлинкова", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Примени измене", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Спречи WebRTC да пропушта локалну IP адресу", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Стална правила", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Подразумевано понашање", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Привремена правила", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Ова подразумевана понашања могу бити поништена за појединачне веб сајтове", + "description": "" }, - "rulesRevert":{ - "message":"Врати", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Онемогући естетско филтрирање", + "description": "" }, - "rulesCommit":{ - "message":"Потврди", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Блокирај мултимедијалне елементе веће од {{input}} kB", + "description": "" }, - "rulesEdit":{ - "message":"Уреди", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Блокирај удаљене фонтове", + "description": "" }, - "rulesEditSave":{ - "message":"Сачувај", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Онемогући JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Одбаци", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Блокирај CSP извештаје", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Увези из датотеке...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Откриј канонска имена", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Извези у датотеку...", - "description":"" + "settingsAdvanced": { + "message": "Напредно", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"моја-ublock-динамичка-правила_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Функције прикладне само за техничке кориснике", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Списак правила за динамичко филтрирање.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "напредна подешавања", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Правила синтаксе: извор одредиште тип акција<\/code>(сва документација<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Последње враћање:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Списак хост назива за које ће uBlock₀ бити онемогућен. Једна ставка по реду. Неисправни хост називи ће бити занемарени.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Последња резервна копија:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Увези и додај", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "мрежних филтера: {{netFilterCount}} + естетских филтера: {{cosmeticFilterCount}} из:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Извези", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} искоришћено од {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"моја-ublock-листа_дозвољених_домена{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Аутоматски ажурирај листе филтера", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Примени измене", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Ажурирај сада", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Тип", - "description":"English: Type" + "3pPurgeAll": { + "message": "Очисти сав кеш", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Домен", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Рашчлани и примени естетске филтере.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Естетски филтери служе за сакривање елемената на веб страници који се сматрају визуелном сметњом и који не могу бити блокирани од стране мрежних захтева базираних на филтрирању.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Филтер", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Игнориши опште естетске филтере.", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Све", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Општи естетски филтери су они естетски филтери који су намењени за примену на свим сајтовима. Омогућавањем ове опције, елиминисаће се повећана потрошња меморије и оптерећење процесора на страницама као резултат руковања општим естетским филтерима.\n\nПрепоручује се да се ова опција омогући на мање моћним уређајима.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Иза сцене", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Обустави мрежну активност док се не учитају све листе филтера", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"филтрирај уносе дневника", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Списак блокираних хостова", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Највише уноса дневника", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Примени промене", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Контекст:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Уграђени", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Тип:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Рекламе", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Динамичко филтрирање УРЛ-а", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Приватност", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Статичко филтрирање", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Заштита од злонамерног софтвера, безбедност", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} мрежни захтев {{type}} {{br}} чија УРЛ адреса одговара {{url}} {{br}} и која долази од {{origin}},{{br}} {{importance}} постоји одговарајући филтер изузетак.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Друштвени виџети", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Блокирај", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Обавештења о колачићима", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Дозволи", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Сметње", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"тип “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Вишенаменски", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"сваки тип", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Регионални, језички", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"од “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Прилагођени", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"било одакле", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Увези...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"осим кад", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Једна адреса по реду. Неисправне адресе ће бити тихо игнорисане.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"чак иако", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Застарело.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Статички филтер {{filter}} нађен у:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "приказ садржаја", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Дневник измена", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Последње ажурирање: {{ago}}.\nКликните да бисте ажурирали.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Вики", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Ажурирање...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Подршка", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Грешка на мрежи је спречила ажурирање ресурса.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Изворни код (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Не додавај филтере из непоузданих извора.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Сарадници", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Омогући моје прилагођене филтере", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Сачувај резервну копију у датотеку", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Дозволи прилагођене филтере који захтевају поверење", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Увези и додај…", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Врати из датотеке...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Извези…", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Врати на подразумевана подешавања...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "моји-ublock-филтери_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Сва ваша подешавања ће бити прегажена резервном копијом података сачуваним {{time}} и uBlock₀ ће се поново покренути.\n\nПрегазити сва постојећа подешавања резервном копијом података?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Примени промене", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Подаци се не могу прочитати или су неисправни", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Стална правила", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Сва ваша подешавања ће бити обрисана и µBlock ће се поново покренути.\n\nВрати µBlock на првобитна подешавања?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Привремена правила", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Није могуће повезати се са {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Врати", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Додати следећу УРЛ адресу у вашу прилагођену листу филтера?\n\nНазив: \"{{title}}\"\nУРЛ: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Потврди", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"пре један минут", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Уреди", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"пре {{value}} минута", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Сачувај", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"пре један сат", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Одбаци", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"пре {{value}} сата\/и", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Увези из датотеке...", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"пре један дан", - "description":"English: a day ago" + "rulesExport": { + "message": "Извези у датотеку...", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"пре {{value}} дана", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "моја-ublock-динамичка-правила_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Прикажи контролну таблу", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Списак правила за динамичко филтрирање.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Прикажи евиденцију мрежних захтева", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Правила синтаксе: извор одредиште тип акција(сва документација).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"искључен", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Сортирај:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin је спречио учитавање следеће странице:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Тип правила", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Због следећег филтера", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Извор", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"без параметара", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Одредиште", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Нађен у:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Смернице поузданих сајтова диктирају на којим веб страницама uBlock Origin треба да буде онемогућен. Један унос по реду.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Иди назад", - "description":"English: Go back" + "whitelistImport": { + "message": "Увези и додај", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Затвори овај прозор", - "description":"English: Close this window" + "whitelistExport": { + "message": "Извези", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Искључи строго блокирање за {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "моји-ublock-поуздани-сајтови_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Привремено", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Примени промене", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Трајно", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Тип", + "description": "English: Type" }, - "cloudPush":{ - "message":"Извези у складиште у облаку", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Домен", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Увези из складишта у облаку", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Увези из складишта у облаку и споји са тренутним подешавањима", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Филтер", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Све", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Назив овог уређаја:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Иза сцене", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Пошаљи", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Тренутна картица", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Врати", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Поновно учитавање садржаја картице", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"бајтови", - "description":"" + "loggerDomInspectorTip": { + "message": "Укључи/искључи DOM инспектор", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Привремено дозволи велике мултимедијалне елементе", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Укључи/искључи искачући панел", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: Евиденција", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Очисти евиденцију", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Паузирај евиденцвију (одбаци све долазне податке)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Настави евидентирање у дневнику", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Укључи/искључи филтрирање евиденције", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "филтрирај уносе евиденције", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Опције филтрирања евиденције", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Не", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "важно", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "блокирано", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "дозвољено", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "измењено", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "прве стране", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "треће стране", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Детаљи", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Филтер", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Листа филтера", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Правило", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Контекст", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Контекст корена", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Страна", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Тип", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Правило URL адресе", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Контекст:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Тип:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Статички филтер", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} мрежни захтев {{type}} {{br}} чија УРЛ адреса одговара {{url}} {{br}} и која долази од {{origin}},{{br}} {{importance}} постоји одговарајући филтер изузетак.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Блокирај", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Дозволи", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "тип “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "сваки тип", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "од “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "било одакле", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "осим кад", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "чак иако", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Статички филтер {{filter}} пронађен у:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Статички филтер није могуће пронаћи нити у једној тренутно омогућеној листи филтера", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Уноси у евиденцији који не испуњавају сва три услова испод биће аутоматски одбачени:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Задржи уносе из последњих {{input}} минута", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Задржи највише {{input}} учитавања страница по картици", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Задржи највише {{input}} уноса по картици", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Користи {{input}} линија по уносу у усправном проширеном режиму", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Сакриј колоне:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Време", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Филтер/правило", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Контекст", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Страна", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Листа", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Табела", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Обично", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Отвори", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Креирај нови извештај на ГитХабу", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Пронађи сличне извештаје на ГитХабу", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Документација", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "\nПрочитајте документацију на uBlock/wiki да бисте сазнали све о функцијама uBlock Origin-а.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Питања и подршка", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Одговори на питања и друге врсте подршке налазе се у подредиту /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Проблеми са филтером/веб сајт не фукционише", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Пријавите проблеме са филтерима на одређеним веб сајтовима на uBlockOrigin/uAssets issue tracker. Неопходан је GitHub налог.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Важно: Избегавајте коришћење других блокатора сличне намене заједно са uBlock Origin-ом, јер то може изазвати проблеме са филтерима на одређеним веб сајтовима.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Савет: Уверите се да су ваше листе филтера ажуриране. Управљач евиденцијом је примарни алат за дијагностиковање проблема у вези са филтером.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Пријава грешке", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Пријавите проблеме са самим uBlock Origin-ом на uBlockOrigin/uBlock-issue issue tracker. Неопходан је GitHub налог.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Информација о решавању проблема", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Испод су техничке информације које могу бити корисне када волонтери покушавају да вам помогну да решите проблем.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Пријављивање проблема са филтером", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Да не бисте оптерећивали волонтере дуплим извештајима, проверите да ли је проблем већ пријављен.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Листе филтера се ажурирају свакодневно. Уверите се да ваш проблем није већ решен у најновијим листама филтера.\n", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Проверите да ли проблем и даље постоји након поновног учитавања проблематичне веб странице.\n", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Адреса веб странице:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Веб страница...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Изаберите ставку --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Приказује рекламе или остатке реклама", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Има преклапања или друге сметње", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Открива uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Има проблеме у вези са приватношћу", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Фукционише неправилно када је uBlock Origin омогућен", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "\nОтвара нежељене картице или прозоре", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Води до лошег софтвера, „пецања\"", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Изначите веб страницу као „NSFW“ (“Није безбедна за рад”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Политика приватности", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Списак измена", + "description": "" + }, + "aboutCode": { + "message": "Изворни код (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Сарадници", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Изворни код", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Преводи", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Листе филтера", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Спољне зависности (компатибилно са GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Сопствене листе филтера uBO-a се слободно хостују на следећим CDN-овима:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Насумично одабрани CDN се користи када листу филтера треба ажурирати.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Сачувај резервну копију у датотеку...", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Врати из датотеке...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Врати на подразумевана подешавања...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Сва ваша подешавања ће бити прегажена резервном копијом података сачуваним {{time}} и uBlock₀ ће се поново покренути.\n\nПрегазити сва постојећа подешавања резервном копијом података?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Подаци се не могу прочитати или су неисправни", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Сва ваша подешавања ће бити обрисана и µBlock ће се поново покренути.\n\nВрати µBlock на првобитна подешавања?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Грешка на мрежи: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Претплати се", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "пре један минут", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "пре {{value}} минута", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "пре један сат", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "пре {{value}} сата/и", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "пре један дан", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "пре {{value}} дана", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Прикажи контролну таблу", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Прикажи евиденцију", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "искључен", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Страница је блокирана", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin је спречио учитавање следеће странице:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "због следећег филтера", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "без параметара", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Пронађен у:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Иди назад", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Затвори овај прозор", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Не упозоравај ме поново на овај сајт", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Искључи строго блокирање за {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Привремено", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Трајно", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Настави", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Блокирана страница жели да преусмери на други сајт. Ако одлучите да наставите, ићи ћете директно на: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Разлог:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Злонамерно", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Праћење", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Неугледан", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Извези у складиште у облаку", + "description": "tooltip" + }, + "cloudPull": { + "message": "Увези из складишта у облаку", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Увези из складишта у облаку и споји са тренутним подешавањима", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Назив овог уређаја:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Упозорење! Мењате ова напредна подешавања на сопствени ризик.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Пошаљи", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Примени промене", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Врати", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "бајтови", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Блокирај елемент у оквиру...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Претплатите се на листу филтера...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Привремено дозволи велике мултимедијалне елементе", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Прикажи изворни код…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Укуцајте пречицу", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Закључај/откључај померање", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Копирај у оставу", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Изабери све", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Укључи/искључи естетско филтрирање", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Укључи/искључи JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Опуштени режим блокирања", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Искоришћеност складишта: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "kB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Кликните за учитавање", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Грешака: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Није могуће правилно филтрирати при покретању прегледача. Поново учитајте страницу да бисте осигурали правилно филтрирање.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/sv/messages.json b/src/_locales/sv/messages.json index c9c5960cfe007..48802a933b91d 100644 --- a/src/_locales/sv/messages.json +++ b/src/_locales/sv/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Äntligen en effektiv blockerare! Snäll mot processor och minne.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Äntligen en effektiv blockerare. Lätt för både processor och minne.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Kontrollpanel", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Kontrollpanel", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Inställningar", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Varning! Du har inte sparat dina ändringar", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Tredjepartsfilter", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Stanna kvar", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Mina filter", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ignorera", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Mina regler", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Inställningar", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Vitlista", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filterlistor", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Logg för nätverksbegäran", - "description":"Title for the logger window" + "1pPageName": { + "message": "Mina filter", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Om", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Mina regler", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Klick: avaktivera\/aktivera uBlock₀ för denna hemsida permanent.\n\nCtrl+klick: avaktivera uBlock₀ endast för denna sida.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Betrodda webbplatser", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"blockerade förfrågningar", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Genvägar", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"på denna sida", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Loggaren", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} eller {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Om", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"sedan installation", - "description":"English: since install" + "supportPageName": { + "message": "Support", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"eller", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Tillgångsvisare", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Klicka för att öppna kontrollpanelen", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Avancerade inställningar", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Gå till elementväljarläge", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Klick: inaktivera/aktivera uBlock₀ för denna webbplats.\n\nCtrl+klick: inaktivera uBlock₀ enbart på denna sida.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Öppna loggaren", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Klicka för att inaktivera uBlock₀ för denna webbplats.\n\nCtrl+klicka för att inaktivera uBlock₀ enbart på denna sida.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Växla blockering av popup-fönster för denna sida", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Klicka för att aktivera uBlock₀ på denna webbplats.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Ändra blockering av stora medieelement för denna sida", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "blockerade förfrågningar", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Växla kosmetiska filter för denna sida", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "på denna sida", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Växla blockering för hämtning av typsnitt på sidan", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Globala regler: denna kolumn avser regler som gäller alla sidor.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "sedan installationen", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Lokala regler: denna kolumn avser regler som endast gäller denna sida.\nLokala regler överskrider globala regler.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "eller", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Tryck för att göra ändringarna beständiga.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Blockerat på denna sida", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Tryck för att ångra dina ändringar.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Blockerat sedan installation", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"alla", - "description":"" + "popupDomainsConnected_v2": { + "message": "Anslutna domäner", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"bilder", - "description":"" + "popupTipDashboard": { + "message": "Öppna kontrollpanelen", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"Tredjepart", - "description":"" + "popupTipZapper": { + "message": "Gå in i elementzapperläge", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"Tredjeparts-css\/bilder", - "description":"" + "popupTipPicker": { + "message": "Gå till elementväljarläge", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"inline skript", - "description":"" + "popupTipLog": { + "message": "Öppna loggaren", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"förstapartskript", - "description":"" + "popupTipReport": { + "message": "Rapportera ett problem på denna webbplats", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"tredjepartsskript", - "description":"" + "popupTipNoPopups": { + "message": "Växla blockering av popup-fönster för den här webbplatsen", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"tredjepartsramar", - "description":"" + "popupTipNoPopups1": { + "message": "Klicka för att blockera alla popup-fönster på denna webbplats", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"anslutna domäner", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Klicka för att inte längre blockera alla popup-fönster på denna webbplats", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} av {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Växla blockering av stora medieelement för denna webbplats", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Skapa", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Klicka för att blockera stora medieelement på denna webbplats", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Välj", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Klicka för att inte längre blockera stora medieelement på denna webbplats", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Avsluta", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Växla kosmetiska filter för denna webbplats", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Förhandsgranska", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Klicka för att inaktivera kosmetiska filter på denna webbplats", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Nätfilter", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Klicka för att aktivera kosmetisk filtrering på denna webbplats", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Kosmetiska filter", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Växla blockeringen av fjärrtypsnitt på denna webbplats", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Klick, Ctrl-klick", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Klicka för att blockera fjärrtypsnitt på denna webbplats", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Blockera element", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Klicka för att inte längre blockera fjärrtypsnitt på denna webbplats", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Dölj platshållare för blockerade element", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Klicka för att inaktivera JavaScript på denna webbplats", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Visa antalet blockerade förfrågningar på ikonen", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Klicka för att aktivera JavaScript på denna webbplats", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Visa inte tipsrutor", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Popup-fönster", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Utnyttja kontextmenyn där så är lämpligt", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Stora medieelement", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Färgblindsanpassat", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Kosmetisk filtrering", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Aktivera stöd för molnlagring", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Fjärrtypsnitt", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Jag är en avancerad användare (obligatorisk läsning<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Stäng av hämtning i förhand (för att motverka anslutningar av blockerade förfrågningar)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Mer", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Stäng av hyperlänksrevidering", - "description":"English: " + "popupLessButton_v2": { + "message": "Mindre", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Förhindra WebRTC från att läcka lokala IP-adresser", - "description":"English: " + "popupTipGlobalRules": { + "message": "Globala regler: den här kolumnen avser regler som gäller för alla webbplatser.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Förvalt beteende", - "description":"" + "popupTipLocalRules": { + "message": "Lokala regler: denna kolumn avser endast regler som gäller för den aktuella webbplatsen.\nLokala regler åsidosätter globala regler.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Dessa förinställda beteenden kan överskridas för varje sida", - "description":"" + "popupTipSaveRules": { + "message": "Klicka för att göra dina ändringar permanenta.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Stäng av kosmetisk filtrering", - "description":"" + "popupTipRevertRules": { + "message": "Klicka för att ångra dina ändringar.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Blockera medieelement större än {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "alla", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blockera externa typsnitt", - "description":"" + "popupImageRulePrompt": { + "message": "bilder", + "description": "" }, - "settingsStorageUsed":{ - "message":"Använt utrymme: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "Tredjepart", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Senast återställd:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "CSS/bilder från tredjepart", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Senaste säkerhetskopia:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "inline skript", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} nätverksfilter + {{cosmeticFilterCount}} kosmetiska filter från:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "Förstapartskript", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} använda av {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "Tredjepartskript", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Uppdatera filterlistor automatiskt.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "Tredjepartramar", + "description": "" }, - "3pUpdateNow":{ - "message":"Uppdatera nu", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "anslutna domäner", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Rensa all cache", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} av {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Tolka och applicera kosmetiska filter.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Version", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Det här alternativet aktiverar tolkning och applicering av Adblock Plus-kompatibla “elementdöljningsfilter”<\/a>. Dessa filter är i huvudsak kosmetiska. De tjänar till att dölja element som anses vara till visuella besvär och som inte kan bli blockerade av den nätförfrågningsbaserade filtreringsmotorn.<\/p>

      Genom att aktivera denna funktion ökar uBlock₀s minnesanvändning.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "skript", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignorera allmänna kosmetiska filter.", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "ram", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Allmänna kosmetiska filter är de kosmetiska filter som är menade att användas på alla webbplatser.

      Även om de hanteras effektivt av uBlock₀ så kan de bidra mätbart till en högre minnes- och processoranvändning på vissa webbsidor, särskilt stora sidor och sidor som är öppna en länge tid.

      Aktiverar du den här inställning så eliminerar du den extra minnes- och processoranvändningen som allmänna kosmetiska filter medför och minskar också minnesanvändningen för uBlock₀ som sådant.

      Vi rekommenderar att du aktiverar inställningen på mindre kraftfulla enheter.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Skapa", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Listor över blockerade värdar", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Välj", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Verkställ ändringar", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Avsluta", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Annonser", - "description":"English: Ads" + "pickerPreview": { + "message": "Förhandsgranska", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Sekretess", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Nätverksfilter", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Malware", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Kosmetiska filter", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Socialt", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Klick, Ctrl-klick", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Universalfilter", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Blockera element…", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Regioner, språk", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Dölj platshållare för blockerade element", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Egna filter", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Visa antalet blockerade förfrågningar på ikonen", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"En adress per rad. Rader med prefixet ‘!’ kommer att ignoreras. Ogiltiga adresser kommer också ignoreras.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Inaktivera verktygstips", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Verkställ", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Använd innehållsmenyn där det är lämpligt", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"Rensa cache", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Färgblindsanpassat", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"ny version tillgänglig", - "description":"English: new version available" + "settingsAppearance": { + "message": "Utseende", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"föråldrad", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Tema", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Senaste uppdatering: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Anpassad accentfärg", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Ett filter per rad. Ett filter kan vara ett vanligt värdnamn eller ett Adblock Plus-kompatibelt filter. Rader med prefixet ‘!’ kommer att ignoreras.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Aktivera stöd för molnlagring", + "description": "" }, - "1pImport":{ - "message":"Importera och lägg till", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Jag är en avancerad användare", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Exportera", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Inaktivera förhämtning (för att förhindra anslutning av blockerade nätverksförfrågningar)", + "description": "English: " }, - "1pExportFilename":{ - "message":"mina-ublock-statiska-filter_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Inaktivera hyperlänksrevidering", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Verkställ ändringar", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Förhindra WebRTC från att läcka lokala IP-adresser", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Permanenta regler", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Standardbeteende", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Temporära regler", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Dessa standardbeteenden kan åsidosättas per webbplats", + "description": "" }, - "rulesRevert":{ - "message":"Ångra", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Inaktivera kosmetisk filtrering", + "description": "" }, - "rulesCommit":{ - "message":"Skicka", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Blockera medieelement större än {{input}} KB", + "description": "" }, - "rulesEdit":{ - "message":"Redigera", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Blockera fjärrtypsnitt", + "description": "" }, - "rulesEditSave":{ - "message":"Spara", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Inaktivera JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Förkasta", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Blockera CSP-rapporter", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Importera från fil", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Ta fram kanoniska namn", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Exportera till fil", - "description":"" + "settingsAdvanced": { + "message": "Avancerat", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"mina-ublock-dynamiska-regler_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Funktioner som endast är lämpliga för tekniska användare", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Lista över din dynamiska filterregler.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "avancerade inställningar", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Regelsyntax: källa destination typ åtgärd<\/code> (full dokumentation<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Senast återställd:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Din lista över vilka värdnamn där uBlock₀ har inaktiveras. En post per rad. Ogiltiga värdnamn kommer att ignoreras.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Senaste säkerhetskopia:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Importera och lägg till", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} nätverksfilter + {{cosmeticFilterCount}} kosmetiska filter från:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Exportera", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} använda av {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"min-ublock-vitlista_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Uppdatera filterlistor automatiskt", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Verkställ ändringar", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Uppdatera nu", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Typ", - "description":"English: Type" + "3pPurgeAll": { + "message": "Rensa alla cachar", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Domän", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Tolka och tillämpa kosmetiska filter", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Kosmetiska filter tjänar till att dölja element på en webbsida som bedöms vara en visuell olägenhet och som inte kan blockeras av nätverksbegärningsbaserade filtermotorer.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignorera allmänna kosmetiska filter", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Alla", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Allmänna kosmetiska filter är de kosmetiska filter som är avsedda att tillämpas på alla webbplatser. Att aktivera detta alternativ kommer att eliminera minnes- och processoranvändningen som läggs till på webbsidor som ett resultat av hantering av allmänna kosmetiska filter.\n\nDet rekommenderas att aktivera detta alternativ på mindre kraftfulla enheter.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Under huven", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Stäng av nätverksaktiviteten tills alla filterlistor har laddats", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"filtrera loggposter", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Listor över blockerade värdar", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Maximalt antal loggposter", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Verkställ ändringar", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Sammanhang:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Inbyggda", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Typ:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Annonser", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Dynamisk adressfiltrering", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Integritet", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Statisk filtrering", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Skydd mot skadlig programvara, säkerhet", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} nätverksförfrågningar av {{type}} {{br}}vilkas URL matchar {{url}} {{br}}och som kommer {{origin}},{{br}}{{importance}} det finns ett matchande undantagsfilter.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Sociala widgets", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blockera", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Cookie-meddelanden", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Tillåt", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Störande", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"typ \"{{type}}\"", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Mångsidiga", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"alla typer", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Regioner, språk", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"från \"{{origin}}\"", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Anpassade", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"var som helst", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Importera…", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"utom när", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "En webbadress per rad. Ogiltiga webbadresser ignoreras tyst.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"även om", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Föråldrad.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Det statiska filtret {{filter}} hittades i:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "visa innehåll", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Ändringslogg", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Senast uppdaterad: {{ago}}\nKlicka för att påtvinga en uppdatering.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Uppdaterar…", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Hjälp", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Ett nätverksproblem har förhindrat resursen från att uppdateras.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Källkod (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Lägg inte till filter från obetrodda källor.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Bidragsgivare", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Aktivera mina anpassade filter", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Säkerhetskopiera till fil", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Att tillåta anpassade filter kräver tillit", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"min-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Importera och lägg till…", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Återställ från fil", - "description":"English: Restore from file..." + "1pExport": { + "message": "Exportera…", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Återställ fabriksinställningar", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "mina-ublock-statiska-filter_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Alla dina inställningar kommer att skrivas över med data som har säkerhetskopierats {{time}} och uBlock₀ kommer att starta om.\n\nVill du skriva över befintliga inställningar med säkerhetskopierad data?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Verkställ ändringar", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Datan gick inte att läsa eller är ogiltig", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Permanenta regler", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Alla dina inställningar kommer att raderas, och uBlock₀ kommer att starta om.\n\nÅterställ uBlock₀ till fabriksinställningar?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Temporära regler", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Det gick inte att ansluta till {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Ångra", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Lägg till följande URL till din skräddarsydda filterlista?\n\nTitel: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Skicka", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"en minut sedan", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Redigera", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minuter sedan", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Spara", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"en timme sedan", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Förkasta", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} timmar sedan", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Importera från fil…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"en dag sen", - "description":"English: a day ago" + "rulesExport": { + "message": "Exportera till fil…", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} dagar sen", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "mina-ublock-dynamiska-regler_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Visa kontrollpanel", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Lista över dina dynamiska filterregler.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Visa nätverksbegäranslogg", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Regelsyntax: källa mål typ åtgärd (full dokumentation).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"av", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Sortera:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin har förhindrat följande sida från att ladda:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Regeltyp", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"P.g.a. följande filter", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Källa", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"utan parametrar", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Mål", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Hittades i:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Direktiven för betrodda webbplatser anger vilka webbsidor som uBlock Origin ska inaktiveras på. En post per rad.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Gå tillbaka", - "description":"English: Go back" + "whitelistImport": { + "message": "Importera och lägg till…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Stäng detta fönster", - "description":"English: Close this window" + "whitelistExport": { + "message": "Exportera…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Avaktivera strikt blockering av {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "mina-ublock-betrodda-webbplatser_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Temporärt", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Verkställ ändringar", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Permanent", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Typ", + "description": "English: Type" }, - "cloudPush":{ - "message":"Exportera till molnlagring", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Domän", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Importera från molnlagring", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "Webbadress", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Importera från molnlagring och slå ihop med nuvarande inställningar", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Alla", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Enhetens namn:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Tabless", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Skicka", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Aktuell flik", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Ångra", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Uppdatera flikinnehåll", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"byte", - "description":"" + "loggerDomInspectorTip": { + "message": "Växla DOM-inspektören", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Tillåt tillfälligt stora medieelement", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Växla popup-panelen", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: Loggaren", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Rensa loggaren", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Pausa loggaren (kassera alla inkommande data)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Fortsätt loggaren", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Växla loggarens filtrering", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filtrera loggarens innehåll", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Loggarens filtreringsalternativ", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Inte", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "händelserikt", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "blockerad", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "tillåten", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "ändrad", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "Förstapart", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "Tredjepart", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Detaljer", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filter", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Filterlista", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Regel", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Innehåll", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Rotinnehåll", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Partsrelation", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Typ", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "Webbadress", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Webbadressregel", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Innehåll:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Typ:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Statiskt filter", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} nätverksförfrågningar av {{type}} {{br}}vilken webbadress matchar {{url}} {{br}}och som kommer från {{origin}},{{br}}{{importance}} det finns ett matchande undantagsfilter.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Blockera", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Tillåt", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "typ \"{{type}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "alla typer", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "från \"{{origin}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "från var som helst", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "utom när", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "även om", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Det statiska filtret {{filter}} hittades i:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Statiskt filter kunde inte hittas i någon av de aktuella aktiverade filterlistorna", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Loggarens poster som inte uppfyller alla tre villkoren nedan kommer automatiskt att kasseras:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Bevara poster från de {{input}} senaste minuterna", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Bevara högst {{input}} sidinläsningar per flik", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Bevara högst {{input}} poster per flik", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Använd {{input}} rader per inmatning i vertikalt expanderat läge", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Dölj kolumner:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Tid", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filter/regel", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Innehåll", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Partsrelation", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Lista", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tabell", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Enkel", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Öppna", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Skapa ny rapport på GitHub", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Hitta liknande rapporter på GitHub", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Dokumentation", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Läs dokumentationen på uBlock/wiki för att lära dig allt om uBlock Origins funktioner.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Frågor och support", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Svar på frågor och andra typer av hjälp finns på subredditen /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filterproblem/webbplatsen fungerar inte", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Rapportera filterproblem med specifika webbplatser till problemhanteringssystemet uBlockOrigin/uAssets. Kräver ett GitHub-konto.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Viktigt: Undvik att använda andra reklamblockerare tillsammans med uBlock Origin, eftersom detta kan orsaka filterproblem på specifika webbplatser.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tips: Se till att dina filterlistor är uppdaterade. Loggaren är det primära verktyget för att diagnostisera filterrelaterade problem.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Felrapport", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Rapportera problem med själva uBlock Origin till problemhanteringssystemet uBlockOrigin/uBlock-issue. Kräver ett GitHub-konto.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Felsökningsinformation", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Nedan finns teknisk information som kan vara användbar när volontärer försöker hjälpa dig att lösa ett problem.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Rapportera ett filterproblem", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "För att undvika att belasta volontärer med dubbletter av rapporter, kontrollera att problemet inte redan har rapporterats. Observera: om du klickar på knappen kommer sidans ursprung att skickas till GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filterlistor uppdateras dagligen. Se till att ditt problem inte redan har åtgärdats i de senaste filterlistorna.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Kontrollera att problemet kvarstår efter att du har laddat om den krånglande webbsidan.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Hemsidans adress:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Webbsidan…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Välj en post --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Visar annonser eller rester av annonser", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Har överlägg eller andra olägenheter", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Upptäcker uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Har integritetsrelaterade problem", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Fungerar inte när uBlock Origin är aktiverad", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Öppnar oönskade flikar eller fönster", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leder till skadlig programvara, nätfiske", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Märk webbsidan som \"NSFW\" (“Inte lämplig på jobbet”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Integritetspolicy", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Ändringslogg", + "description": "" + }, + "aboutCode": { + "message": "Källkod (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Bidragsgivare", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Källkod", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Översättningar", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Filterlistor", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Externa beroenden (GPLv3-kompatibla):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO:s egna filterlistor finns fritt tillgängligt på följande CDN:er:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Ett slumpmässigt valt CDN kommer att användas när en filterlista behöver uppdateras.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Säkerhetskopiera till fil…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "min-ublock-sakerhetskopia_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Återställ från fil…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Återställ till standardinställningarna…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Alla dina inställningar kommer att skrivas över med data som har säkerhetskopierats {{time}} och uBlock₀ kommer att starta om.\n\nVill du skriva över befintliga inställningar med säkerhetskopierad data?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Data kunde inte läsas eller är ogiltiga", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Alla dina inställningar kommer att tas bort och uBlock₀ kommer att starta om.\n\nÅterställ uBlock₀ till fabriksinställningar?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Nätverksfel: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Prenumerera", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "en minut sedan", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} minuter sedan", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "en timme sedan", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} timmar sedan", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "en dag sedan", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} dagar sedan", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Visa kontrollpanelen", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Visa loggaren", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "av", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Sidan blockerad", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin har förhindrat följande sida från att läsas in:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "På grund av följande filter", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "utan parametrar", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Hittades i:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Gå tillbaka", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Stäng det här fönstret", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Varna mig inte igen om den här sidan", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Inaktivera strikt blockering av {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Temporärt", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Permanent", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Fortsätt", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Den blockerade sidan vill omdirigera dig till en annan webbplats. Om du väljer att fortsätta skickas du direkt till: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Anledning:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Illvillig", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Spårare", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Vanhedrande", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Exportera till molnlagring", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importera från molnlagring", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importera från molnlagring och sammanfoga med aktuella inställningar", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Enhetens namn:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Varning! Ändra dessa avancerade inställningar på egen risk.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Skicka", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Verkställ ändringar", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Ångra", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "byte", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Blockera element i ramar…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Prenumerera på filterlista…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Tillåt tillfälligt stora medieelement", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Visa källkoden…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Ange en genväg", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Växla rullningslås", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Kopiera till urklipp", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Markera allt", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Växla kosmetisk filtrering", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Växla JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Lätta på blockeringsläge", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Använt utrymme: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Klicka för att ladda", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Fel: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Det gick inte att filtrera ordentligt vid webbläsarstart. Ladda om sidan för att säkerställa korrekt filtrering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/sw/messages.json b/src/_locales/sw/messages.json new file mode 100644 index 0000000000000..97e8e784aafb8 --- /dev/null +++ b/src/_locales/sw/messages.json @@ -0,0 +1,1314 @@ +{ + "extName": { + "message": "uBlock Origin", + "description": "extension name." + }, + "extShortDesc": { + "message": "Hatimaye, kizuizi kinachofaa. Nyepesi kwenye CPU na kumbukumbu.", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "dashboardName": { + "message": "uBlock₀ — Dashibodi", + "description": "English: uBlock₀ — Dashboard" + }, + "dashboardUnsavedWarning": { + "message": "Ilani! Una mabadiliko ambazo hazijahifadhika.", + "description": "A warning in the dashboard when navigating away from unsaved changes" + }, + "dashboardUnsavedWarningStay": { + "message": "Baki", + "description": "Label for button to prevent navigating away from unsaved changes" + }, + "dashboardUnsavedWarningIgnore": { + "message": "Puuza", + "description": "Label for button to ignore unsaved changes" + }, + "settingsPageName": { + "message": "Mipangilio", + "description": "appears as tab name in dashboard" + }, + "3pPageName": { + "message": "Chuja orodha", + "description": "appears as tab name in dashboard" + }, + "1pPageName": { + "message": "Vichujio vyangu", + "description": "appears as tab name in dashboard" + }, + "rulesPageName": { + "message": "Kanuni zangu", + "description": "appears as tab name in dashboard" + }, + "whitelistPageName": { + "message": "Orodha-ruhusu", + "description": "appears as tab name in dashboard" + }, + "shortcutsPageName": { + "message": "Njiamikato", + "description": "appears as tab name in dashboard" + }, + "statsPageName": { + "message": "uBlock₀ - Batli", + "description": "Title for the logger window" + }, + "aboutPageName": { + "message": "Kuhusu", + "description": "appears as tab name in dashboard" + }, + "supportPageName": { + "message": "Usaidizi", + "description": "appears as tab name in dashboard" + }, + "assetViewerPageName": { + "message": "uBlock₀ - Kitazama rasilimali", + "description": "Title for the asset viewer page" + }, + "advancedSettingsPageName": { + "message": "Mipangilio pevu", + "description": "Title for the advanced settings page" + }, + "popupPowerSwitchInfo": { + "message": "Bofya: lemaza/wezesha uBlock₀ kwenye tovuti hii.\n\nCtrl+bofya: lemaza uBlock₀ kwenye ukurasa huu pekee.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + }, + "popupPowerSwitchInfo1": { + "message": "Bofya kulemaza uBlock₀ kwenye tovuti hii.\n\nCtrl+bofya kulemaza uBlock₀ kwenye ukurasa huu pekee.", + "description": "Message to be read by screen readers" + }, + "popupPowerSwitchInfo2": { + "message": "Bofya kuwezesha uBlock₀ kwenye tovuti hii.", + "description": "Message to be read by screen readers" + }, + "popupBlockedRequestPrompt": { + "message": "Maombi yaliyozuiliwa", + "description": "English: requests blocked" + }, + "popupBlockedOnThisPagePrompt": { + "message": "kwenye ukurasa huu", + "description": "English: on this page" + }, + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 (13%)" + }, + "popupBlockedSinceInstallPrompt": { + "message": "tangu usakinishaji", + "description": "English: since install" + }, + "popupOr": { + "message": "au", + "description": "English: or" + }, + "popupBlockedOnThisPage_v2": { + "message": "Yaliyozuiliwa kwenye ukurasa huu", + "description": "For the new mobile-friendly popup design" + }, + "popupBlockedSinceInstall_v2": { + "message": "Yaliyozuiliwa tangu usakinishaji", + "description": "For the new mobile-friendly popup design" + }, + "popupDomainsConnected_v2": { + "message": "Vikoa vilivyounganishwa", + "description": "For the new mobile-friendly popup design" + }, + "popupTipDashboard": { + "message": "Fungua dashibodi", + "description": "English: Click to open the dashboard" + }, + "popupTipZapper": { + "message": "Ingia mtindo wa kufyatua vipengele", + "description": "Tooltip for the element-zapper icon in the popup panel" + }, + "popupTipPicker": { + "message": "Ingia mtindo wa kuchagua vipengele", + "description": "English: Enter element picker mode" + }, + "popupTipLog": { + "message": "Fungua batli", + "description": "Tooltip used for the logger icon in the panel" + }, + "popupTipReport": { + "message": "Ripoti shida na tovuti hii", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipNoPopups": { + "message": "Togoa uzuiaji wa vibukizi kwenye tovuti hii", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups1": { + "message": "Bofya kuzuia vibukizi vyote kwenye tovuti hii", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2": { + "message": "Bofya kusitisha kuzuia vibukizi vyote kwenye tovuti hii", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoLargeMedia": { + "message": "Togoa uzuiaji wa vipengele vya midia kubwa kwenye tovuti hii", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia1": { + "message": "Bofya kuzuia vipengele vya midia kubwa kwenye tovuti hii", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2": { + "message": "Bofya kusitisha kuzuia vipengele vya midia kubwa kwenye tovuti hii", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoCosmeticFiltering": { + "message": "Togoa uchujaji wa kurembesha kwenye tovuti hii", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering1": { + "message": "Bofya kulemaza uchujaji wa kurembesha kwenye tovuti hii", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2": { + "message": "Bofya kuwezesha uchujaji wa kurembesha kwenye tovuti hii", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoRemoteFonts": { + "message": "Togoa uzuiaji wa fonti za mbali kwenye tovuti hii", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts1": { + "message": "Bofya kuzuia fonti za mbali kwenye tovuti hii", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts2": { + "message": "Bofya kusitisha kuzuia fonti za mbali kwenye tovuti hii", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoScripting1": { + "message": "Bofya kulemaza JavaScript kwenye tovuti hii", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupTipNoScripting2": { + "message": "Bofya kusitisha kulemaza JavaScript kwenye tovuti hii", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupNoPopups_v2": { + "message": "Vidirisha ibukizi", + "description": "Caption for the no-popups per-site switch" + }, + "popupNoLargeMedia_v2": { + "message": "Vipengele vya midia kubwa", + "description": "Caption for the no-large-media per-site switch" + }, + "popupNoCosmeticFiltering_v2": { + "message": "Uchujaji wa kurembesha", + "description": "Caption for the no-cosmetic-filtering per-site switch" + }, + "popupNoRemoteFonts_v2": { + "message": "Fonti za mbali", + "description": "Caption for the no-remote-fonts per-site switch" + }, + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" + }, + "popupMoreButton_v2": { + "message": "Zaidi", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton_v2": { + "message": "Chache", + "description": "Label to be used to hide popup panel sections" + }, + "popupTipGlobalRules": { + "message": "Kanuni za kila mahali: safuwima hii ni ya kanuni zinazotekelezeka kwenye tovuti zote.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." + }, + "popupTipLocalRules": { + "message": "Kanuni za ndani: safuwima hii ni ya kanuni zinazotekelezeka kwenye tovuti ya sasa pekee.\nKanuni za ndani hubatilisha kanuni za kila mahali.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." + }, + "popupTipSaveRules": { + "message": "Bofya kufanya mabadiliko yako yadumu.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." + }, + "popupTipRevertRules": { + "message": "Bofya kurejelesha mabadiliko yako.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + }, + "popupAnyRulePrompt": { + "message": "zote", + "description": "" + }, + "popupImageRulePrompt": { + "message": "picha", + "description": "" + }, + "popup3pAnyRulePrompt": { + "message": "Mhusika wa tatu", + "description": "" + }, + "popup3pPassiveRulePrompt": { + "message": "CSS ya mhusika wa tatu/picha", + "description": "" + }, + "popupInlineScriptRulePrompt": { + "message": "hati za mstari wa ndani", + "description": "" + }, + "popup1pScriptRulePrompt": { + "message": "Hati za mhusika wa kwanza", + "description": "" + }, + "popup3pScriptRulePrompt": { + "message": "Hati za mhusika wa tatu", + "description": "" + }, + "popup3pFrameRulePrompt": { + "message": "Fremu za mhusika wa tatu", + "description": "" + }, + "popupHitDomainCountPrompt": { + "message": "vikoa vilivyounganishwa", + "description": "appears in popup" + }, + "popupHitDomainCount": { + "message": "{{count}} kati ya {{total}}", + "description": "appears in popup" + }, + "popupVersion": { + "message": "Toleo", + "description": "Example of use: Version 1.26.4" + }, + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" + }, + "popup3pFrameFilter": { + "message": "frame", + "description": "Appears as an option to filter out firewall rows" + }, + "pickerCreate": { + "message": "Unda", + "description": "English: Create" + }, + "pickerPick": { + "message": "Teua", + "description": "English: Pick" + }, + "pickerQuit": { + "message": "Ondoka", + "description": "English: Quit" + }, + "pickerPreview": { + "message": "Hakiki", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + }, + "pickerNetFilters": { + "message": "Vichujio vya mtandao", + "description": "English: header for a type of filter in the element picker dialog" + }, + "pickerCosmeticFilters": { + "message": "Vichujio vya kurembesha", + "description": "English: Cosmetic filters" + }, + "pickerCosmeticFiltersHint": { + "message": "Bofya, Ctrl+bofya", + "description": "English: Click, Ctrl-click" + }, + "pickerContextMenuEntry": { + "message": "Zuia kipengele...", + "description": "An entry in the browser's contextual menu" + }, + "settingsCollapseBlockedPrompt": { + "message": "Ficha vishikilia nafasi za vipengele vilivyozuiliwa", + "description": "English: Hide placeholders of blocked elements" + }, + "settingsIconBadgePrompt": { + "message": "Onyesha idadi ya maombi yaliyozuiliwa kwenye ikoni", + "description": "English: Show the number of blocked requests on the icon" + }, + "settingsTooltipsPrompt": { + "message": "Lemaza vidokezozana", + "description": "A checkbox in the Settings pane" + }, + "settingsContextMenuPrompt": { + "message": "Tumia menyu muktadha panapofaa", + "description": "English: Make use of context menu where appropriate" + }, + "settingsColorBlindPrompt": { + "message": "Rahisi na upofu wa rangi", + "description": "English: Color-blind friendly" + }, + "settingsAppearance": { + "message": "Mwonekano", + "description": "Section for controlling user interface appearance" + }, + "settingsThemeLabel": { + "message": "Mandhari", + "description": "Label for checkbox to enable a custom dark theme" + }, + "settingsThemeAccent0Label": { + "message": "Rangi ya lafudhi maalum", + "description": "Label for checkbox to pick an accent color" + }, + "settingsCloudStorageEnabledPrompt": { + "message": "Wezesha auni wa hifadhi ya wingu", + "description": "" + }, + "settingsAdvancedUserPrompt": { + "message": "Mimi na mtumiaji mahiri", + "description": "Checkbox to let user access advanced, technical features" + }, + "settingsPrefetchingDisabledPrompt": { + "message": "Lemaza kuleta-mapema (kuepuka uunganishaji wowote wa maombi yaliyozuiliwa)", + "description": "English: " + }, + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Lemaza ukaguzi wa viungo-wavuti", + "description": "English: " + }, + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Zuia WebRTC kuvuja anwani za IP za ndani", + "description": "English: " + }, + "settingPerSiteSwitchGroup": { + "message": "Tabia chaguo-msingi", + "description": "" + }, + "settingPerSiteSwitchGroupSynopsis": { + "message": "Tabia hizi chaguo-msingi zinaweza kubatilishwa kwenye msingi wa kila tovuti", + "description": "" + }, + "settingsNoCosmeticFilteringPrompt": { + "message": "Lemaza uchujaji wa kurembesha", + "description": "" + }, + "settingsNoLargeMediaPrompt": { + "message": "Zuia vipengee vya midia vilivyo kubwa kuliko KB {{input}}", + "description": "" + }, + "settingsNoRemoteFontsPrompt": { + "message": "Zua fonti za mbali", + "description": "" + }, + "settingsNoScriptingPrompt": { + "message": "Lemaza JavaScript", + "description": "The default state for the per-site no-scripting switch" + }, + "settingsNoCSPReportsPrompt": { + "message": "Zuia ripoti za CSP", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" + }, + "settingsUncloakCnamePrompt": { + "message": "Fichua majina kawaida", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" + }, + "settingsAdvanced": { + "message": "Mahiri", + "description": "Section for controlling advanced-user settings" + }, + "settingsAdvancedSynopsis": { + "message": "Vipengele vinawafaa watumiaji maarufu tu.", + "description": "Description of section controlling advanced-user settings" + }, + "settingsAdvancedUserSettings": { + "message": "mipangilio pevu", + "description": "For the tooltip of a link which gives access to advanced settings" + }, + "settingsLastRestorePrompt": { + "message": "Rejesho ya mwisho:", + "description": "English: Last restore:" + }, + "settingsLastBackupPrompt": { + "message": "Chelezo ya mwisho:", + "description": "English: Last backup:" + }, + "3pListsOfBlockedHostsPrompt": { + "message": "Vichujio vya mtandao {{netFilterCount}} + vichujio vya kurembesha {{cosmeticFilterCount}} kutoka:", + "description": "Appears at the top of the _3rd-party filters_ pane" + }, + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} zimetumika kati ya {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "3pAutoUpdatePrompt1": { + "message": "Sasisha kiotomatiki orodha ya vichujio", + "description": "A checkbox in the _3rd-party filters_ pane" + }, + "3pUpdateNow": { + "message": "Sasisha sasa", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pPurgeAll": { + "message": "Takasa kashe zote", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pParseAllABPHideFiltersPrompt1": { + "message": "Changanua na lazimisha vichujio vya kurembesha", + "description": "English: Parse and enforce Adblock+ element hiding filters." + }, + "3pParseAllABPHideFiltersInfo": { + "message": "Vichujio vya kurembesha vinasaidia kuficha vipengele kwenye ukurasa tovuti ambavyo vinaweka kuwa vizuizi vya mwonekano, na ambavyo haviwezi zuiliwa kupitia injini ya vichujio vinavyotegemea maombi ya mtandao.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + }, + "3pIgnoreGenericCosmeticFilters": { + "message": "Puuza vichujio vya kurembesha vya kijeneriki", + "description": "This will cause uBO to ignore all generic cosmetic filters." + }, + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Vichujio jeneriki vya kurembesha ni vichujio vya kurembesha ambavyo vinafaa kutumika kwenye tovuti zote. Kuwezesha chaguo hii kutaondoa mzigo wa kumbukumbu na CPU unaoongezwa kwenye kurasa tovuti baada ya kuzingatia vichujio jeneriki vya kurembesha.\n\nUnapendekezwa kuwezesha chaguo hii kwenye vifaa vyenye uwezo zaidi.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." + }, + "3pSuspendUntilListsAreLoaded": { + "message": "Simamisha shughuli za mtandao hadi orodha zote zimepakiwa", + "description": "A checkbox in the 'Filter lists' pane" + }, + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" + }, + "3pApplyChanges": { + "message": "Tekeleza mabadiliko", + "description": "English: Apply changes" + }, + "3pGroupDefault": { + "message": "Vijengwa ndani", + "description": "Filter lists section name" + }, + "3pGroupAds": { + "message": "Mtngzo", + "description": "Filter lists section name" + }, + "3pGroupPrivacy": { + "message": "Faragha", + "description": "Filter lists section name" + }, + "3pGroupMalware": { + "message": "Vikoa vya programu hasidi", + "description": "Filter lists section name" + }, + "3pGroupSocial": { + "message": "Social widgets", + "description": "Filter lists section name" + }, + "3pGroupCookies": { + "message": "Cookie notices", + "description": "Filter lists section name" + }, + "3pGroupAnnoyances": { + "message": "Vikasirisho", + "description": "Filter lists section name" + }, + "3pGroupMultipurpose": { + "message": "\nVya anuwai", + "description": "Filter lists section name" + }, + "3pGroupRegions": { + "message": "Mikoa, lugha", + "description": "Filter lists section name" + }, + "3pGroupCustom": { + "message": "Inayokufaa", + "description": "Filter lists section name" + }, + "3pImport": { + "message": "Leta...", + "description": "The label for the checkbox used to import external filter lists" + }, + "3pExternalListsHint": { + "message": "URL moja kila laini. URL batili zitapuuzwa kimya kimya.", + "description": "Short information about how to use the textarea to import external filter lists by URL" + }, + "3pExternalListObsolete": { + "message": "Zilizoisha muda.", + "description": "used as a tooltip for the out-of-date icon beside a list" + }, + "3pViewContent": { + "message": "tazama yaliyomo", + "description": "used as a tooltip for eye icon beside a list" + }, + "3pLastUpdate": { + "message": "Sasisho ya mwisho: {{ago}}.\nBofya kulazimisha sasisho.", + "description": "used as a tooltip for the clock icon beside a list" + }, + "3pUpdating": { + "message": "Inasasisha...", + "description": "used as a tooltip for the spinner icon beside a list" + }, + "3pNetworkError": { + "message": "Tatizo la mtandao imezuia rasilimali kusasishwa.", + "description": "used as a tooltip for error icon beside a list" + }, + "1pTrustWarning": { + "message": "Do not add filters from untrusted sources.", + "description": "Warning against copy-pasting filters from random sources" + }, + "1pEnableMyFiltersLabel": { + "message": "Enable my custom filters", + "description": "Label for the checkbox use to enable/disable 'My filters' list" + }, + "1pTrustMyFiltersLabel": { + "message": "Allow custom filters requiring trust", + "description": "Label for the checkbox use to trust the content of 'My filters' list" + }, + "1pImport": { + "message": "Leta na ambatisha", + "description": "Button in the 'My filters' pane" + }, + "1pExport": { + "message": "Hamisha", + "description": "Button in the 'My filters' pane" + }, + "1pExportFilename": { + "message": "chujio-zangu-tuli-za-ublock_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" + }, + "1pApplyChanges": { + "message": "Tekeleza mabadiliko", + "description": "English: Apply changes" + }, + "rulesPermanentHeader": { + "message": "Kanuni za kudumu", + "description": "header" + }, + "rulesTemporaryHeader": { + "message": "Kanuni za muda", + "description": "header" + }, + "rulesRevert": { + "message": "Rudisha", + "description": "This will remove all temporary rules" + }, + "rulesCommit": { + "message": "Kabidhi", + "description": "This will persist temporary rules" + }, + "rulesEdit": { + "message": "Hariri", + "description": "Will enable manual-edit mode (textarea)" + }, + "rulesEditSave": { + "message": "Hifadhi", + "description": "Will save manually-edited content and exit manual-edit mode" + }, + "rulesEditDiscard": { + "message": "Tupa", + "description": "Will discard manually-edited content and exit manual-edit mode" + }, + "rulesImport": { + "message": "Leta kutoka faili...", + "description": "" + }, + "rulesExport": { + "message": "Hamisha kuenda faili", + "description": "Button in the 'My rules' pane" + }, + "rulesDefaultFileName": { + "message": "chujio-zangu-badilifu-za-ublock_{{datetime}}.txt", + "description": "default file name to use" + }, + "rulesHint": { + "message": "Orodha ya kanuni zako badilifu za uchujaji", + "description": "English: List of your dynamic filtering rules." + }, + "rulesFormatHint": { + "message": "Kanuni za sintaksi: tendo la aina ya chanzo fikio (Kumbukumbu kamili).", + "description": "English: dynamic rule syntax and full documentation." + }, + "rulesSort": { + "message": "Panga:", + "description": "English: label for sort option." + }, + "rulesSortByType": { + "message": "Aina ya kanuni", + "description": "English: a sort option for list of rules." + }, + "rulesSortBySource": { + "message": "Chanzo", + "description": "English: a sort option for list of rules." + }, + "rulesSortByDestination": { + "message": "Fikio", + "description": "English: a sort option for list of rules." + }, + "whitelistPrompt": { + "message": "Orodha ya vikubaliwa inaamrisha ni kwenye kurasa zipi uBlock Origin italemazwa. Ingizo moja tu kila laini. Maelekezi batili yatapuuzwa kimyakimya na kufanywa kuwa maoni.", + "description": "A concise description of the 'Trusted sites' pane." + }, + "whitelistImport": { + "message": "Leta na ambatisha", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExport": { + "message": "Hamisha", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExportFilename": { + "message": "orodhakubalizi-yangu-ya-ublock_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" + }, + "whitelistApply": { + "message": "Tekeleza mabadiliko", + "description": "English: Apply changes" + }, + "logRequestsHeaderType": { + "message": "Aina", + "description": "English: Type" + }, + "logRequestsHeaderDomain": { + "message": "Kikoa", + "description": "English: Domain" + }, + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" + }, + "logRequestsHeaderFilter": { + "message": "Kichujio", + "description": "English: Filter" + }, + "logAll": { + "message": "Zote", + "description": "Appears in the logger's tab selector" + }, + "logBehindTheScene": { + "message": "Bila vichupo", + "description": "Pretty name for behind-the-scene network requests" + }, + "loggerCurrentTab": { + "message": "Kichupo cha sasa", + "description": "Appears in the logger's tab selector" + }, + "loggerReloadTip": { + "message": "Pakia upya yaliyomo kwenye kichupo", + "description": "Tooltip for the reload button in the logger page" + }, + "loggerDomInspectorTip": { + "message": "Togoa kikaguzi cha DOM", + "description": "Tooltip for the DOM inspector button in the logger page" + }, + "loggerPopupPanelTip": { + "message": "Togoa paneli ibukizi", + "description": "Tooltip for the popup panel button in the logger page" + }, + "loggerInfoTip": { + "message": "wiki ya uBlock Origin: Batli", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Futa batli", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Sitisha batli (puuza data yote inayoingia)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Wacha kusitisha batli", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Togoa uchujaji batli", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "chuja yaliyomo kwenye batli", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Machaguo ya uchujaji batli", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Sio", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "imezuiliwa", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "imekubaliwa", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "imebadilishwa", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "Mhusika wa kwanza", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "Mhusika wa tatu", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Ufafanuzi", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Kichujio", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Orodha ya vichujio", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Kanuni", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Muktadha", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Muktadha shina", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Partyness", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Aina", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Kanuni ya URL", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Muktadha:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Aina:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Chujio tuli", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} maombi ya mtanda ya {{type}} {{br}} ambayo anwani ya URL inafanana na {{url}} {{br}} ambayo asili ni {{origin}},{{br}}{{importance}} kunayo chujio kighairi inayofanana.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Zuia", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Ruhusu", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "aina \"{{type}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "aina yoyote", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "kutoka \"{{origin}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "kutoka popote", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "isipokuwa wakati", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "hata kama", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Chujio tuli {{filter}} ilipatikana kwenye:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Chujio tuli haikupatikana popote kwenye orodha za machujio zilizowezeshwa", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Maingizo ya batli yasiyokamilisha masharti yote matatu hapo chini yatatupiliwa mbali kiotomatiki.", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Hifadhi maingizo za dakika {{input}} zilizopita", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Hifadhi hadi upakiaji-kurasa {{input}} kwenye kila kichupo", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Hifadhi hadi maingizo {{input}} kwenye kila kichupo", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Tumia laini {{input}} kila ingisho katika mtindo ya safuwima iliyopanuliwa.", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Ficha safuwima:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Wakati", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Kichujio/kanuni", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "Muktadha", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Partyness", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Orodha", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Meza", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Ghafi", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Fungua", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Unda ripoti mpya", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Pata ripoti sawia", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Kumbukumbu", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Soma mwongozo kwa uBlock kujua vipengele vyote vya uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Maswali na usaidizi", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Majibu ya maswali na usaidizi wote mwingine yanapatikana kwenye subreddit ya /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Shida na vichujio/tovuti imeharibika", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Ripoti shida za vichujio za tovuti maalum kwenyeuBlockOrigin/uAssetskifuatiliaji cha shida. Itahitaji akaunti ya GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Muhimu: Epuka kutumia vizuizi vingine pamoja na uBlock Origin, maana shida zinaweza kutokea kwenye tovuti kadhaa.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Vidokezo: Hakikisha orodha zako ni zimesasishwa. Kirekodi ndicho kifaa kuu cha kutatua shida za vichujio.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Ripoti hitilafu", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Ripoti shida na uBlock Origin yenyewe kwenyeuBlockOrigin/uBlock-issuekifuatiliaji cha shida.Itahitaji akaunti ya Github.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Maelezo ya utafutatuzi", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Ifuatayo ni taarifa ya kiteknolojia inayoweza kuwa ya manufaa wakati waliojitolea wakijaribu kukusaidia.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Ripoti shida ya kichujio", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Ili usiwasumbue wasaidizi waliojitolea kwa ripoti rudufu, tafadhali hakikisha kuwa shida haijaripotiwa bado.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verify that the issue still exists after reloading the problematic web page.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Anwani ya tovuti:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Tovuti husika…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Chagua ingizo --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Inaonyesha matangazo au mabakshishi yake", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Ina matandazo au sumbufu zingine", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Inagundua uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Ina shida za faragha", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Huenda vibaya uBlock Origin ikiwezeshwa", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Hufungua vichupo au vidirisha visivyotakikana", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Ipe tovuti lebo ya \"NSFW\" (\"Haifai Kazini\")", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Sera ya faragha", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Yaliyobadilika", + "description": "" + }, + "aboutCode": { + "message": "Msimbo wa chanzo (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Wachangiaji", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Msimbo chanzo", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Tafsiri", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Orodha za vichujio", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Msimbo wa chanzo (inatangamana na GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Orodha za vichujio za uBO hupangishwa kwenye CDN hizi.", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "CDN iliyochaguliwa kwa unasibu hutumika orodha ya kichujio inapohitaji kusasishwa", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Cheleza kwenye faili", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "chelezo-yangu-ya-ublock_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Rejesha kutoka faili...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Weka upya hadi mipangilio chaguo-msingi...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Mipangilio yako yote itaandikwa upya kutumia data iliyochelezwa mnamo {{time}}, na uBlock₀ itaanza upya.\n\nAndika upya mipangilio yote kutumia chelezo ya data?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Data haisomeki au ni batili", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Mipangilio yako yote itaondolewa, na uBlock₀ itaanza upya.\n\nWeka upya uBlock₀ hadi mipangilio ya mwanzo?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Tatizo la mtandao: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Jisajili", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "dakika moja iliyopita", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "dakika {{value}} zilizopita", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "saa moja iliyopita", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "masaa {{value}} yaliyopita", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "jana", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "siku {{value}} zilizopita", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Onyesha dashibodi", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Onyesha batli", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "zimwa", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Page blocked", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin imezuia ukurasa huu kupakia:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Kwa sababu ya kichujio kifuatacho", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "bila parameta", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Ilipatwa katika:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Rudi nyuma", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Funga dirisha hii", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Lemaza uzuiaji kali kwa {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Kwa muda", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Daima", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Proceed", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Hamisha hadi hifadhi ya wingu", + "description": "tooltip" + }, + "cloudPull": { + "message": "Leta kutoka hifadhi ya wingu", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Leta kutoka hifadhi ya wingu na unganisha na mipangilio ya sasa", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Jina la kifaa hiki:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Ilani! Badilisha mipangilio hii mahiri kwa hiari yako.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Wasilisha", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Tekeleza mabadiliko", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Rudisha", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "baiti", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Zuia kipengee kwenye fremu...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Jisajili kwenye orodha hii…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Ruhusu kwa muda vipengele vya midia kubwa", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "View source code…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Charaza njiamkato", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Togoa kubingiriza kuliofungwa", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Nakili hadi ubao-nakili", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Chagua yote", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Toggle cosmetic filtering", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Toggle JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Pumzisha mtindo wa kuzuia", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Hifadhi iliyotumika: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Bofya kupakia", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Errors: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" + } +} diff --git a/src/_locales/ta/messages.json b/src/_locales/ta/messages.json index 2feef9843e76f..277764a25bf48 100644 --- a/src/_locales/ta/messages.json +++ b/src/_locales/ta/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"இறுதியாக, ஒரு திறமையான விளம்பரத் தடுப்பான். கணினியின் மையச் செயற்பகுதியின் மேலும் நினைவகத்தின் மேலும் இலகுவானது.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "இறுதியாக, ஒரு திறமையான விளம்பரத் தடுப்பான். கணினியின் மையச் செயற்பகுதியின் மேலும் நினைவகத்தின் மேலும் இலகுவானது.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ - நிர்வாக மையம்", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ - நிர்வாக மையம்", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"அமைப்புகள்", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "எச்சரிக்கை: உங்களிடம் சேமிக்கப்படாத மாற்றங்கள் உள்ளன!", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"மூன்றாம் தரப்பு வடிகட்டிகள்", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "இருங்கள்", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"என் வடிகட்டிகள்", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "பொருட்படுத்தாதே", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"என் விதிமுறைகள்", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "அமைப்புகள்", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"அனுமதிப்பட்டியல்", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "வடிகட்டி பட்டியல்கள்", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — பிணையக் கோரிக்கைப் பதிகை", - "description":"Title for the logger window" + "1pPageName": { + "message": "என் வடிகட்டிகள்", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"எம்மைப் பற்றி", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "என் விதிமுறைகள்", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"இந்த தளத்தில் ‍‍‍uBlock₀ ஐ முடக்கவோ\/இயக்கவோ: இங்கே சுட்டு.\nCtrl+click: என்ற குறுக்குவிசையின் மூலம் uBlock₀ ஐ இந்தப் பக்கத்தில் மட்டும் முடக்கு.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "அனுமதிப்பட்டியல்", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"தடுக்கப்பட்ட கோரிக்கைகள்", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "குறுக்குவழிகள்", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"இந்த இணையப் பக்கத்தில்", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — பிணையக் கோரிக்கைப் பதிகை", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} அல்லது {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "எம்மைப் பற்றி", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"நிறுவியது முதல்", - "description":"English: since install" + "supportPageName": { + "message": "ஆதரவு", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"அல்லது", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock -- உடைமை பார்வையாளர்", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"நிர்வாக மையத்தைத் திறக்க இங்கே சொடுக்கவும்", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "மேம்பட்ட அமைப்புகள்", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"உறுப்புத் தெரிவு முறைமைக்குச் செல்லவும்", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "இந்த தளத்தில் ‍‍‍uBlock₀ ஐ முடக்கவோ/இயக்கவோ: இங்கே சுட்டு.\nCtrl+click: என்ற குறுக்குவிசையின் மூலம் uBlock₀ ஐ இந்தப் பக்கத்தில் மட்டும் முடக்கு.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"பிணையக் கோரிக்கைப் பதிவிற்கு செல்", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "இந்த வலைத்தளத்திற்கு uBlock முடக்க, கிளிக் செய்யவும்.\n\nuBlockகை இந்த வலைத்தளத்திற்கு முடக்க Ctrl+click செய்யவும்.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"இத்தளத்தில் அனைத்து மேல்விரிகளையும் தடுப்பதை மாற்றவும்", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "இந்த வலைத்தளத்திற்கு uBlockகை செயல்படுத்த கிளிக் செய்க.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Toggle the blocking of large media elements for this site", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "தடுக்கப்பட்ட கோரிக்கைகள்", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"இத்தளத்திற்கான ஒப்பனை வடிகட்டியை மாற்றவும்", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "இந்த இணையப் பக்கத்தில்", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"இத்தளத்திற்கான தொலைநிலை எழுத்துருக்கள் தடையை மாற்றவும்", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} அல்லது {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Global rules: this column is for rules which apply to all sites.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "நிறுவியது முதல்", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "அல்லது", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"இங்கே சுட்டி உங்கள் மாற்றங்களை நிரந்தரமாக்கவும்.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "இப்பக்கத்தில் தடுக்கப்பட்டது", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"இங்கே சுட்டி உங்கள் மாற்றங்களைப் பழைய நிலைக்குத் திருப்பவும்.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "நிறுவியதிலிருந்து தடுக்கப்பட்டது", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"அனைத்து", - "description":"" + "popupDomainsConnected_v2": { + "message": "களங்கள் இணைக்கப்பட்டுள்ளன", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"படங்கள்", - "description":"" + "popupTipDashboard": { + "message": "நிர்வாக மையத்தை திறக்க இங்கே சொடுக்கவும்", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"மூன்றாம் தரப்பு", - "description":"" + "popupTipZapper": { + "message": "பகுதி தெரிவு முறைமைக்கு நுழை", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"மூன்றாம் தரப்பு CSS\/படங்கள்", - "description":"" + "popupTipPicker": { + "message": "உறுப்புத் தெரிவு முறைமைக்குச் செல்லவும்", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"உள்வரி உரைகள்", - "description":"" + "popupTipLog": { + "message": "பிணையக் கோரிக்கைப் பதிவிற்கு செல்", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"1‍-ஆம் தரப்பு உரைகள்", - "description":"" + "popupTipReport": { + "message": "இத்தளத்திலொரு சிக்கலைப் புகாரளி", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"மூன்றாம் தரப்பு உரைகள்", - "description":"" + "popupTipNoPopups": { + "message": "இத்தளத்தில் அனைத்து மேல்விரிகளையும் தடுப்பதை மாற்றவும்", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"மூன்றாம் தரப்பு சட்டங்கள்", - "description":"" + "popupTipNoPopups1": { + "message": "இந்தத் தளத்தில் உள்ள அனைத்து பாப்அப்களையும் தடுக்க கிளிக் செய்க", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"இணைக்கப்பட்டுள்ள ஆள்களங்கள்", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "இத்தளத்தில் உள்ள எல்லா பாப்அப்களையும் இனி தடுக்காமலிருக்க சொடுக்குக", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"மொத்தம் {{total}} இல் {{count}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "இத்தளத்திற்கான பெரிய ஊடக கூறுகளைத் தடுப்பதை நிலைமாற்று", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"உருவாக்கு", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "இத்தளத்தில் பெரிய ஊடக கூறுகளைத் தடுக்க சொடுக்குக", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"எடு", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "இத்தளத்தில் பெரிய ஊடக கூறுகளை இனி தடுக்காமலிருக்க சொடுக்குக", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"வெளியேறு", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "இத்தளத்திற்கான ஒப்பனை வடிகட்டியை மாற்றவும்", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"முன்னோட்டம் பார்", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "இத்தளத்தில் ஒப்பனை வடிகட்டலை முடக்க சொடுக்குக", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"இணைய வடிகட்டிகள்", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "இத்தளத்தில் ஒப்பனை வடிகட்டலை இயக்க சொடுக்குக", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"ஒப்பனை வடிகட்டி", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "இத்தளத்திற்கான தொலைநிலை எழுத்துருக்கள் தடையை மாற்றவும்", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"சொடுக்கு, Ctrl-சொடுக்கு", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "இத்தளத்தில் தொலை எழுத்துருக்களைத் தடுக்க சொடுக்குக", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"உறுப்பை தடு", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "இத்தளத்தில் தொலை எழுத்துருக்களை இனி தடுக்காமலிருக்க சொடுக்குக", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"தடுக்கப்பட்ட உறுப்புகளின் பெட்டிகளை மறை", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "இத்தளத்தில் ஜாவாஸ்கிரிப்டை முடக்க சொடுக்குக", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"தடுக்கப்பட்ட கோரிக்கைகளின் எண்ணிக்கையைப் பாவையில் காட்டவும்", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "இத்தளத்தில் ஜாவாஸ்கிரிப்டை இனி முடக்காமலிருக்க சொடுக்குக", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"உதவிக்குறிப்புக்களை முடக்கு", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "பாப்-அப் சாளரங்கள்", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"தக்க இடங்களில் சூழல் மெனுவைக் காட்டு", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "பெரிய ஊடக கூறுகள்", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"நிறம்-அறியாதோருக்கு ஏதுவாக", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "ஒப்பனை வடிகட்டுதல்", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Enable cloud storage support", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "தொலை எழுத்துருக்கள்", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"நான் ஒரு மேம்பட்ட பயனர் (அவசியம் படிக்க வேண்டியவை<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "ஜாவாஸ்கிரிப்ட்", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Disable pre-fetching (to prevent any connection for blocked network requests)", - "description":"English: " + "popupMoreButton_v2": { + "message": "மேலும்", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Disable hyperlink auditing", - "description":"English: " + "popupLessButton_v2": { + "message": "குறைந்து", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"உங்கள் தனிப்பட்ட IP முகவரியை WebRTC வெளிக்காட்டாதபடி தடுக்க", - "description":"English: " + "popupTipGlobalRules": { + "message": "உலகளாவிய விதிகள்: இந்நெடுவரிசை அனைத்து தளங்களுக்கும் பொருந்தும் விதிகளுக்கானது.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"இயல்பான நடத்தை", - "description":"" + "popupTipLocalRules": { + "message": "அக விதிகள்: இந்நெடுவரிசை தற்போதைய தளத்திற்கு மட்டுமே பொருந்தும் விதிகளுக்கானது.அக விதிகள் உலகளாவிய விதிகளை மீறுகின்றன.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"These default behaviors can be overridden on a per-site basis", - "description":"" + "popupTipSaveRules": { + "message": "இங்கே சுட்டி உங்கள் மாற்றங்களை நிரந்தரமாக்கவும்.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"ஒப்பனை வடிகட்டியை தடை செய்", - "description":"" + "popupTipRevertRules": { + "message": "இங்கே சுட்டி உங்கள் மாற்றங்களைப் பழைய நிலைக்குத் திருப்பவும்.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Block media elements larger than {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "அனைத்தும்", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"தொலை எழுத்துருக்களை தடு", - "description":"" + "popupImageRulePrompt": { + "message": "படங்கள்", + "description": "" }, - "settingsStorageUsed":{ - "message":"பயன்படுத்தப்பட்ட சேமிப்பகத்தின் அளவு: {{value}} பைட்டுகள்", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "மூன்றாம் தரப்பு", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"இறுதியாக மீட்பதற்கு:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "மூன்றாம் தரப்பு CSS/படங்கள்", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"கடைசி மறுபிரதி:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "உள்வரி உரைகள்", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} பிணைய வடிகட்டிகள் + {{cosmeticFilterCount}} ஒப்பனை வடிகட்டிகளிலிருந்து:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "1‍-ஆம் தரப்பு உரைகள்", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"மொத்தம் {{total}} இல் {{used}} பயன்படுத்தப்பட்டது", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "மூன்றாம் தரப்பு உரைகள்", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"வடிகட்டி பட்டியல்களை தானாக புதுப்பி.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "மூன்றாம் தரப்பு சட்டங்கள்", + "description": "" }, - "3pUpdateNow":{ - "message":"இப்போது புதுப்பிக்கவும்", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "ஆள்களங்கள் இணைக்கப்பட்டுள்ளது", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"தற்காலிகச் சேமிப்புகள் அனைத்தையும் அகற்று", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "மொத்தம் {{total}} இல் {{count}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"இலக்கணகூறை விவரி மற்றும் ஒப்பனை வடிகட்டிகளை செயல்படுத்து.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "பதிப்பு", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      இந்தத் தேர்வு Adblock Plus-க்கு ஏற்ற “உறுப்பு மறைக்கும்” வடிகட்டிகளைப்<\/a> படிப்பதையும் பயன்படுத்துவத்தையும் செயல்படுத்தும். இந்த வடிகட்டிகள் அடிப்படையில் மேலோட்டமானவை. இணையப் பக்கத்தின் தோற்றத்தில் தொந்தரவாகக் கருதப்பட்டு, ஆனால் இணையக்கோரிக்கைகளை வடிகட்டும் எஞ்சினின் மூலம் தடுக்கப்பட முடியாத பக்க-உறுப்புகளை, பார்வையிலிருந்து மட்டும் மறைக்கும்<\/p>

      இந்தத் தேர்வு uBlock₀-இன் நினைவக உபயோகத்தை அதிகரிக்கும்.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "நிரல்", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignore generic cosmetic filters", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "சட்டம்", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites.

      Though handled efficiently by uBlock₀, generic cosmetic filters may still contribute measurable memory and CPU overhead on some web pages, especially for large and long-lived ones.

      Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters, and also lower the memory footprint of uBlock₀ itself.

      It is recommended to enable this option on less powerful devices.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "உருவாக்கு", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"தடைசெய்யப்பட்ட வழங்கிகளின் பட்டியல்", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "எடு", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"மாற்றங்களைச் செயல்படுத்து", - "description":"English: Apply changes" + "pickerQuit": { + "message": "வெளியேறு", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"விளம்பரங்கள்", - "description":"English: Ads" + "pickerPreview": { + "message": "முன்னோட்டம்", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"தனியுரிமை", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "இணைய வடிகட்டிகள்", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"தீப்பொருள் ஆள்களங்கள்", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "ஒப்பனை வடிகட்டி", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"சமூக", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "சொடுக்கு, Ctrl-சொடுக்கு", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"பல்நோக்கு வடிகட்டி", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "உறுப்பைத் தடு...", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"மாநில பகுதிகள், மொழிகள் வாரியான", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "தடுக்கப்பட்ட உறுப்புகளின் பெட்டிகளை மறை", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"தனிபயன்", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "தடுக்கப்பட்ட கோரிக்கைகளின் எண்ணிக்கையைப் பாவையில் காட்டவும்", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"ஒரு வரிக்கு ஒரு இணைய முகவரி. ‘!’ எனும் எழுத்தில் தொடங்கும் வரிகள் புறக்கணிக்கப்படும். தவறான முகவரிகளும் அமைதியாகப் புறக்கணிக்கப்படும்.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "உதவிக்குறிப்புக்களை முடக்கு", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"இலக்கணகூறு", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "தக்க இடங்களில் சூழல் பட்டியலைக் காட்டு", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"தற்காலிக சேமிப்பை அகற்று", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "நிறம்-அறியாதோருக்கு ஏதுவாக", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"புதிய பதிப்பு கிடைக்கிறது", - "description":"English: new version available" + "settingsAppearance": { + "message": "தோற்றம்", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"காலாவதியாகிவிட்டது", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "நிறவமைவு", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"கடைசி புதுப்பிப்பு: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "தனிப்பயன் உரப்பு நிறம்", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"ஒரு வரிக்கு ஒரு வடிகட்டி. வடிகட்டி என்பது வெறும் வழங்கிப்பெயராக இருக்கலாம், அல்லது Adblock Plus-க்குப் பொருந்தும் வடிகட்டியாக இருக்கலாம். ‘!’ எனும் எழுத்தில் தொடங்கும் வரிகள் புறக்கணிக்கப்படும்.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "மேகக்கணி சேமிப்பக ஆதரவு இயக்கு", + "description": "" }, - "1pImport":{ - "message":"இறக்குமதி செய் மற்றும் இணை", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "நான் ஒரு மேம்பட்ட பயனர் (வாசித்தல் தேவை)", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"ஏற்று", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "முன்கூட்டியே பெறுவதை முடக்கு (தடுக்கப்பட்ட பிணைய கோரிக்கைகளுக்கான எந்தவொரு தொடர்பையும் தடுக்க)", + "description": "English: " }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "உரலியிணைப்புத் தணிக்கையை முடக்கவும்", + "description": "English: " }, - "1pApplyChanges":{ - "message":"மாற்றங்களைச் செயல்படுத்து", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "உங்கள் தனிப்பட்ட IP முகவரியை WebRTC வெளிக்காட்டாதபடி தடுக்க", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"நிரந்தரமான விதிகள்", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "இயல்பான நடத்தை", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"தற்காலிக விதிகள்", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "இந்த இயல்புநிலை நடத்தைகள் ஒரு தள அடிப்படையில் மீறப்படலாம்", + "description": "" }, - "rulesRevert":{ - "message":"முன்நிலையாக்கு", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "ஒப்பனை வடிகட்டியை தடை செய்", + "description": "" }, - "rulesCommit":{ - "message":"உறுதியளி", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Elements {உள்ளீடு}} KB ஐ விட பெரிய ஊடக உறுப்புகளைத் தடு", + "description": "" }, - "rulesEdit":{ - "message":"தொகு", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "தொலை எழுத்துருக்களை தடு", + "description": "" }, - "rulesEditSave":{ - "message":"சேமிக்கும்", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "ஜாவாஸ்கிரிப்டை முடக்கு", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"நிராகரிக்கபடும்", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "CSP அறிக்கைகளைத் தடு", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"கோப்பிலிருந்து இறக்குமதி செய் ...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "நியமன பெயர்களை அவிழ்த்து விடுங்கள்", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"கோப்பினுள் ஏற்று", - "description":"" + "settingsAdvanced": { + "message": "உயரமைவு", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "நுட்பமான பயனர்களுக்கு மட்டுமே ஏற்ற அம்சங்கள்.", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"உங்களுடைய மாறுநிலை வடிகட்டி விதிப் பட்டியல்கள்.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "மேம்பட்ட அமைப்புகள்", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Rule syntax: source destination type action<\/code> (full documentation<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "இறுதியாக மீட்பதற்கு:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"uBlock₀ முடக்கப்பட வேண்டிய இடங்களாக நீங்கள் குறிக்கும் வழங்கிப்பெயர்கள். ஒரு வரிக்கு ஒரு பெயர் மட்டுமே. தவறான வழங்கிப்பெயர்கள் அமைதியாகப் புறக்கணிக்கப்படும்.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "கடைசி மறுபிரதி:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Import and append", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} பிணைய வடிகட்டிகள் + {{cosmeticFilterCount}} ஒப்பனை வடிகட்டிகளிலிருந்து:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"ஏற்று", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "மொத்தம் {{total}} இல் {{used}} பயன்படுத்தப்பட்டது", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "வடிகட்டி பட்டியல்களை தானாக புதுப்பி.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"மாற்றங்களைச் செயல்படுத்து", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "இப்போது புதுப்பிக்கவும்", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"வகை", - "description":"English: Type" + "3pPurgeAll": { + "message": "தற்காலிகச் சேமிப்புகள் அனைத்தையும் அகற்று", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"ஆள்களம்", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "இலக்கணகூறை விவரி மற்றும் ஒப்பனை வடிகட்டிகளை செயல்படுத்து.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"உரலி", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "

      இந்தத் தேர்வு Adblock Plus-க்கு ஏற்ற “உறுப்பு மறைக்கும்” வடிகட்டிகளைப் படிப்பதையும் பயன்படுத்துவத்தையும் செயல்படுத்தும். இந்த வடிகட்டிகள் அடிப்படையில் மேலோட்டமானவை. இணையப் பக்கத்தின் தோற்றத்தில் தொந்தரவாகக் கருதப்பட்டு, ஆனால் இணையக்கோரிக்கைகளை வடிகட்டும் எஞ்சினின் மூலம் தடுக்கப்பட முடியாத பக்க-உறுப்புகளை, பார்வையிலிருந்து மட்டும் மறைக்கும்

      இந்தத் தேர்வு uBlock₀-இன் நினைவக உபயோகத்தை அதிகரிக்கும்.

      ", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"வடிகட்டு", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "பொதுவான ஒப்பனை வடிகட்டிகளை புறக்கணி", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"அனைத்து", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "பொதுவான ஒப்பனை வடிப்பான்கள் அனைத்து ஒப்பனை வடிப்பான்களாகும், அவை எல்லா வலைத்தளங்களிலும் பொருந்தும். இந்த விருப்பத்தை இயக்குவது பொதுவான ஒப்பனை வடிப்பான்களைக் கையாளுவதன் விளைவாக வலைப்பக்கங்களில் சேர்க்கப்பட்ட நினைவகம் மற்றும் CPU மேல்நிலை ஆகியவற்றை நீக்கும்.குறைந்த சக்திவாய்ந்த சாதனங்களில் இந்த விருப்பத்தை இயக்க பரிந்துரைக்கப்படுகிறது.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"திறக்கப்பட்ட இ.தளங்களின் பின்னால் நடப்பவை", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "வடிகட்டிப் பட்டியல்கள் அனைத்தும் ஏற்றப்படும் வரை வலைப்பின்னல் செயல்பாட்டை நிறுத்து", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"பதிகை உருப்படிகளை வடிகட்டு", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "தடைசெய்யப்பட்ட வழங்கிகளின் பட்டியல்", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"பதிகை உருப்படிகளின் அதிகபட்ச எண்ணிக்கை", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "மாற்றங்களைச் செயல்படுத்து", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"சூழல்:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "உள்ளமைக்கப்பட்ட", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"வகை:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "விளம்பரங்கள்", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"மாறுநிலை உரலி வடிகட்டல்", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "தனியுரிமை", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"நிலையான வடிகட்டுதல்", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "தீப்பொருள் ஆள்களங்கள்", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{origin}} தொடங்கும், {{br}}{{url}}-குப் பொருந்தும் முகவரி கொண்ட{{br}}{{type}} பிணையக் கோரிக்கைகளை {{action}},{{br}}பொருந்தும் விதிவிலக்கு வடிகட்டி {{importance}}.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "சமூக விட்ஜெட்கள்", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"தடு", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "குக்கீ அறிவிப்புகள்", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"அனுமதி", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "எரிச்சல்கள்", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"\"{{type}}\" வகை", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "பல்நோக்கு வடிகட்டி", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"எந்த வகையும்", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "மாநில பகுதிகள், மொழிகள் வாரியான", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"“{{origin}}”-இல் இருந்து", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "தனிபயன்", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"எங்கிருந்தும்", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "இறக்குமதி ...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"இல்லாவிட்டால் மட்டும்", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "ஒரு வரிக்கு ஒரு இணைய முகவரி. ‘!’ எனும் எழுத்தில் தொடங்கும் வரிகள் புறக்கணிக்கப்படும். தவறான முகவரிகளும் அமைதியாகப் புறக்கணிக்கப்படும்.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"இருந்தாலும் கூட‌", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "காலாவதியாகிவிட்டது", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Static filter {{filter}} found in:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "உள்ளடக்கத்தைக் காண்க", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"நிரல் மாற்றம் மற்றும் வெளியீடுகளின் பதிவு", - "description":"English: Change log" + "3pLastUpdate": { + "message": "கடைசி புதுப்பிப்பு: {{முன்பு}}.\nபுதுப்பிப்பை கட்டாயப்படுத்த கிளிக் செய்க.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"விக்கி", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "புதுப்பிக்கிறது...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Support", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "ஒரு பிணைய பிழை வளத்தைப் புதுப்பிப்பதைத் தடுத்தது.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"மூல நிரல் (பொது மக்கள் உரிமம் பதிப்பு 3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "நம்பகமில்லாத மூலத்தில் இருக்கும் வடிகட்டிகளை சேர்க்காதே.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"பங்களிப்பாளர்கள்", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "என் தனிப்பட்ட வடிகட்டிகளை செயல்படுத்து", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"கோப்பிற்கு காப்பு பிரதி எடு", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Allow custom filters requiring trust", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "இறக்குமதி செய் மற்றும் இணை", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"கோப்பிலிருந்து மீட்டெடு...", - "description":"English: Restore from file..." + "1pExport": { + "message": "ஏற்று", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Reset to default settings...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "மாற்றங்களைச் செயல்படுத்து", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"The data could not be read or is invalid", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "நிரந்தரமான விதிகள்", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "தற்காலிக விதிகள்", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Unable to connect to {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "முன்நிலையாக்கு", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: பின்வரும் உரலியை உங்களுடைய தனிபயன் வடிகட்டியில் சேர்க்கலாமா?\n\nதலைப்பு: \"{{title}}\"\nஉரலி: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "உறுதியளி", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"ஒரு நிமிடத்திற்கு முன்பு", - "description":"English: a minute ago" + "rulesEdit": { + "message": "தொகு", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} நிமிடங்களுக்கு முன்பு", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "சேமி", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"ஒரு மணிநேரத்திற்கு முன்பு", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "நிராகரி", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} மணி நேரம் முன்பு", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "கோப்பிலிருந்து இறக்குமதி செய் ...", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"ஒரு நாளைக்கு முன்பு", - "description":"English: a day ago" + "rulesExport": { + "message": "கோப்பினுள் ஏற்று", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} நாட்கள் முன்பு", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"நிர்வாக மையத்தைக் காட்டுக", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "உங்களுடைய மாறுநிலை வடிகட்டி விதிப் பட்டியல்கள்.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"பதிவேட்டைக் காண்பிக்கவும்", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "விதி தொடரியல்: மூல இலக்கு வகை செயல் ( முழு ஆவணங்கள் ).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"அணைந்து விட்டது", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "வகைபடுத்து:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock Origin has prevented the following page from loading:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "விதி வகை", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Because of the following filter", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "மூல", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"உரலியில் அளவுருக்கள் இல்லாமல்", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "இலக்கு", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"இதனுள் கண்டறியப்பட்டது:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "எந்தெந்தப் பக்கங்களில் uBlock₀ முடக்கப்பட வேண்டுமென்பதை அனுமதிப்பட்ட கட்டளைகள் ஆணையிடுகின்றன. வரிக்கு ஒரு இடுகை மட்டுமே. தவறான கட்டளைகள் அமைதியாகப் புறக்கணிக்கப்படும்.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"பின் செல்", - "description":"English: Go back" + "whitelistImport": { + "message": "இறக்குமதி செய்து சேர்", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"இந்த சாளரத்தை மூடவும்", - "description":"English: Close this window" + "whitelistExport": { + "message": "ஏற்று", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"{{hostname}}-இல் கண்டிப்பான தடையைச்‌ செயலிழக்கச் செய்", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"தற்காலிகமாக", - "description":"English: Temporarily" + "whitelistApply": { + "message": "மாற்றங்களைச் செயல்படுத்து", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"நிரந்தரமாக", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "வகை", + "description": "English: Type" }, - "cloudPush":{ - "message":"மேகக்கணினி சேமிப்பகத்திற்கு ஏற்று", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "ஆள்களம்", + "description": "English: Domain" }, - "cloudPull":{ - "message":"மேகக்கணினி சேமிப்பகத்திலிருந்து இறக்கு", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "உரலி", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"மேகக்கணினி சேமிப்பகத்திலிருந்து இறக்கியபின் நடப்பு அமைப்புகளுடன் இணை", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "வடிகட்டு", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "அனைத்தும்", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"இந்தச் சாதனத்தின் பெயர்:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "இ.தளங்களின் பின்னால் நடப்பவை", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"சமர்ப்பி", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "தற்போதைய தாவல்", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"முன்நிலையாக்கு", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "தாவல் உள்ளடக்கத்தை மீண்டும் ஏற்றவும்", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"பைட்டுகள்", - "description":"" + "loggerDomInspectorTip": { + "message": "DOM இன்ஸ்பெக்டரை நிலைமாற்று", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"தற்காலிகமாகப் பெரிய ஒலி‍-ஒளி-படத்தொகுப்புகளின் கூறுகளை அனுமதி", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "பாப்அப் பலகையை நிலைமாற்று", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock தோற்றம் விக்கி: லாகர்", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "லாகரை அழி", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "லாகரை இடைநிறுத்து (உள்வரும் எல்லா தரவையும் நிராகரி)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "லாகர் இடைநிறுத்தம் தவிர்", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "லாகர் வடிகட்டலை நிலைமாற்று", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "பதிகை உருப்படிகளை வடிகட்டு", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "லாகர் வடிகட்டுதல் விருப்பங்கள்", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "இல்லை", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "தடுக்கப்பட்டது", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "அனுமதிக்கப்படுகிறது", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "மாற்றப்பட்டது", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "முதல் கட்சி", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "மூன்றாம் தரப்பு", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "விவரங்கள்", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "வடிகட்டி", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "வடிகட்டி பட்டியல்", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "விதி", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "சூழல்", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "வேர் சூழல்", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "கட்சித்தன்மை", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "வகை", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "இணைய முகவரி", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "உரலி விதி", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "சூழல்:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "வகை:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "நிலையான வடிகட்டுதல்", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{origin}} தொடங்கும், {{br}}{{url}}-குப் பொருந்தும் முகவரி கொண்ட{{br}}{{type}} பிணையக் கோரிக்கைகளை {{action}},{{br}}பொருந்தும் விதிவிலக்கு வடிகட்டி {{importance}}.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "முடக்கு", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "அனுமதி", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "\"{{type}}\" வகை", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "எந்த வகையும்", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "“{{origin}}”-இல் இருந்து", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "எங்கிருந்தும்", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "இல்லாவிட்டால் மட்டும்", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "இருந்தாலும் கூட‌", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "நிலையான வடிப்பான் {{வடிகட்டி}} இதில் காணப்படுகிறது:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "தற்போது இயக்கப்பட்ட வடிகட்டி பட்டியல்களில் நிலையான வடிப்பானைக் கண்டுபிடிக்க முடியவில்லை", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "கீழே உள்ள மூன்று நிபந்தனைகளையும் பூர்த்தி செய்யாத லாகர் உள்ளீடுகள் தானாக நிராகரிக்கப்படும்:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "கடைசி {{உள்ளீடு} from நிமிடங்களிலிருந்து உள்ளீடுகளைப் பாதுகாக்கவும்", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "ஒரு தாவலுக்கு அதிகபட்சம் {{உள்ளீடு}} பக்க சுமைகளைப் பாதுகாக்கவும்", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "ஒரு தாவலுக்கு அதிகபட்சம் {{உள்ளீடு}} உள்ளீடுகளை பாதுகாக்கவும்", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "செங்குத்தாக விரிவாக்கப்பட்ட பயன்முறையில் ஒரு நுழைவுக்கு {{input}} கோடுகளைப் பயன்படுத்தவும்", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "நெடுவரிசைகளை மறை:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} நேரம்", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} வடிகட்டி/சட்டம்", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} சூழல்", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} கட்சித்தன்மை", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "பட்டியல்", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "பொருளடக்கம்", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "வெற்று", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "மார்க் டவுன்", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "திற", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "புதிய புகாரை உருவாக்கு", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "ஒரேமாதிரியான புகார்களைக் கண்டறி", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "ஆவணமாக்கல்", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "uBlock Originன் அனைத்து அம்சங்களையும்ப் பற்றி அறிய uBlock/wiki இல் உள்ள ஆவணத்தைப் படிக்கவும்.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "கேள்விகள் மற்றும் ஆதரவு", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Answers to questions and other kinds of help support is provided on the subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filter issues/website is broken", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Important: Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tips: Be sure your filter lists are up to date. The logger is the primary tool to diagnose filter-related issues.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "பிழை அறிக்கை", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Report issues with uBlock Origin itself to the uBlockOrigin/uBlock-issue issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "பிழைதீர்க்கும் தகவல்", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "வடிகட்டி சிக்கலைப் புகாரளி", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported. Note: clicking the button will cause the page's origin to be sent to GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verify that the issue still exists after reloading the problematic web page.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "வலைப்பக்கத்தின் முகவரி:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "வலைப்பக்கம்...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "தனியுரிமைசார் சிக்கல்களுள்ளன", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "uBlock Origin இயக்கப்பட்டிருந்தால் உடையும்", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "தேவையற்ற தாவல்கள் அ சாளரங்களைத் திறக்கிறது", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the web page as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "தனியுரிமை கொள்கை", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "மாற்றப்பதிவு", + "description": "" + }, + "aboutCode": { + "message": "மூல நிரல் (பொது மக்கள் உரிமம் பதிப்பு 3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "பங்களிப்பாளர்கள்", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "மூல குறியீடு", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "மொழிபெயர்ப்புகள்", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "பட்டியல்களை வடிகட்டவும்", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "வெளிப்புற சார்புகள் (GPLv3- இணக்கமானது):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO வின் சொந்த வடிகட்டி பட்டியல்கள் பின்வருவனவற்றில் இலவசமாக வழங்கப்படுகின்றன CDNs:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "வடிகட்டி பட்டியலைப் புதுப்பிக்க வேண்டியிருக்கும் போது சீரற்ற முறையில் தேர்ந்தெடுக்கப்பட்ட CDN பயன்படுத்தப்படுகிறது", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "கோப்பிற்கு காப்பு பிரதி எடு", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "கோப்பிலிருந்து மீட்டெடு...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "இயல்புநிலை அமைப்புகளுக்கு அகரமாக்கு...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "உங்கள் எல்லா அமைப்புகளும் காப்புப் பதிவைப் {{time}} பயன்படுத்தி மேலெழுதப்படும், பிறகு uBlock மறுதொடக்கம்.\n\nகாப்புப்பட்ட தரவைப் பயன்படுத்தி உள்ள எல்லா அமைப்புகளையும் மேலெழுதவா?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "தரவை வாசிக்க முடியவில்லை அ செல்லாதது", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "உங்கள் எல்லா அமைப்புகளும் அகற்றப்படும், பிறகு uBlock மீண்டும் தொடங்கும்.\n\nuBlockகை தொழிற்சாலை அமைப்புகளை மீட்டமைக்கவ?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "பிணையத்தில் பிழை: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "சந்தாதராகு", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "ஒரு நிமிடம் முன்பு", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} நிமிடங்கள் முன்பு", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "ஒரு மணி நேரம் முன்பு", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} மணிநேரம் முன்பு", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "ஒரு நாள் முன்பு", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} நாள் முன்பு", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "நிர்வாக மையத்தைக் காட்டுக", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "பதிவேட்டைக் காண்பி", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "முடக்கத்தில்", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "பக்கம் தடுக்கப்பட்டது", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin பின்வரும் பக்கத்தை ஏற்றுவதில் இருந்து தடுத்தது:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "பின்வரும் வடிகட்டியினால்:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "உரலியில் அளவுருக்கள் இல்லாமல்", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "இதனுள் கண்டறியப்பட்டது:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "பின் செல்", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "இச்சாளரத்தை மூடு", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "{{hostname}}-இல் கண்டிப்பான தடையைச்‌ செயலிழக்கச் செய்", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "தற்காலிகமாக", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "நிரந்தரமாக", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "தொடரவும்", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "காரணம்:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "பின்தொடர்பான்", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "மதிப்பற்றது", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "மேகக்கணினி சேமிப்பகத்திற்கு ஏற்று", + "description": "tooltip" + }, + "cloudPull": { + "message": "மேகக்கணினி சேமிப்பகத்திலிருந்து இறக்கு", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "மேகக்கணினி சேமிப்பகத்திலிருந்து இறக்கியபின் நடப்பு அமைப்புகளுடன் இணை", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "இந்தச் சாதனத்தின் பெயர்:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "எச்சரிக்கை! இந்த மேம்பட்ட அமைப்புகளை உங்கள் சொந்த ஆபத்தில் மாற்றவும்.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "சமர்ப்பி", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "மாற்றங்களைச் செயல்படுத்து", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "முன்நிலையாக்கு", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "பைட்டுகள்", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "சட்டத்தில் தொகுதி உறுப்பு ...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "வடிகட்டி பட்டியலுக்கு குழுசேர்...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "தற்காலிகமாகப் பெரிய ஒலி‍-ஒளி-படத்தொகுப்புகளின் கூறுகளை அனுமதி", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "View source code…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "குறுக்குவழியைத் தட்டச்சு செய்க", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "ஸ்க்ரோலிங் பூட்டு மாற்று", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "நினைவிக்கு நகலெடு", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "எல்லாம் தேர்ந்தெடு", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "ஒப்பனை வடிகட்டுதலை மறுநிலைமாற்று", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Toggle JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "தடுப்பு பயன்முறையை தளர்த்தவும்", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "பயன்படுத்தப்பட்ட சேமிப்பகத்தின் அளவு: {{value}} பைட்டுகள்", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "ஏற்ற கிளிக் செய்க", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "தவறுகள்: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/te/messages.json b/src/_locales/te/messages.json index 5ff233709a30b..5b4414c3708a2 100644 --- a/src/_locales/te/messages.json +++ b/src/_locales/te/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"మొత్తానికి RAM ఇంకా CPU పై తేలికయిన, ఒక సమర్థవంతమైన నిరోధిని.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "మొత్తానికి RAM ఇంకా CPU పై తేలికయిన, ఒక సమర్థవంతమైన నిరోధిని.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — నియంత్రణా వేదిక", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — నియంత్రణా వేదిక", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"ఐచ్చికాలు", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "హెచ్చరిక! మీరు భద్రపరచని మార్పులు ఉన్నాయి", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"ఇతర మూలాల నుండి పొందిన వడపోతలు", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "ఉండు", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"నా వడపోతలు", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "వదిలేయి", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"నా నియమాలు", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "ఐచ్చికాలు", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"నేను నమ్మే సైట్ల జాబితా", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "3వ-పక్ష వడపోతలు", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — నెట్వర్కు అభ్యర్ధనల చిట్టా", - "description":"Title for the logger window" + "1pPageName": { + "message": "నా వడపోతలు", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"మా గురించి", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "నా నియమాలు", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"ఈ సైట్లో uBlock₀ను చేతనపరచడానికి లేదా అచేతనపరచడానికి క్లిక్ చేయండి.\n\nకేవలం ఈ పేజిలో uBlock₀ను అచేతనపరచడానికి Ctrl కీ వొత్తి పట్టుకొని క్లిక్ చేయండి.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "నమ్మే సైట్లు", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"నిలువరించబడిన అభ్యర్ధనలు", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "షార్ట్కట్లు", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"ఈ వెబ్ పేజిలో", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — నెట్వర్కు అభ్యర్ధనల చిట్టా", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} లేదా {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "మా గురించి", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"సంస్థాపన నుండి", - "description":"English: since install" + "supportPageName": { + "message": "సహాయం", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"లేదా", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — వనరుల పట్టిక", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"నియంత్రణా పట్టికను తెరచుటకు క్లిక్ చేయండి", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "అధునాతన అమరికలు", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"భాగాలను ఎంచుకొని తొలగించు ప్రక్ర్యియనారంభించు", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "ఈ సైట్లో uBlock₀ను చేతనపరచడానికి లేదా అచేతనపరచడానికి క్లిక్ చేయండి.\n\nకేవలం ఈ పేజిలో uBlock₀ను అచేతనపరచడానికి Ctrl కీ వొత్తి పట్టుకొని క్లిక్ చేయండి.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"అభ్యర్ధనల చిట్టా తెరువుము", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "ఈ సైట్లో uBlock₀ను అచేతనపరచడానికి క్లిక్ చేయండి.\n\nకేవలం ఈ పేజిలో uBlock₀ను అచేతనపరచడానికి Ctrl కీ వొత్తి పట్టుకొని క్లిక్ చేయండి.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"ఈ వెబ్సైట్ లో అన్ని పాప్అప్స్ ని నిషేధించు", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "ఈ సైట్లో uBlock₀ను చేతనపరచడానికి క్లిక్ చేయండి.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"ఈ సైట్లో వున్న భారి దృశ్య\/శ్రవణ అంశాల నిరోధనా స్థితిని మార్చు", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "నిలువరించబడిన అభ్యర్ధనలు", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"ఈ వెబ్ సైట్ లో కాస్మెటిక్ వడపోతల వాడుక స్థితిని మార్చు", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "ఈ వెబ్ పేజిలో", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"ఈ సైట్ లో ఖతుల వాడుకని సక్రియ లేదా నిర్వీర్యపరచు", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} లేదా {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"సామాన్య నియమాలు: ఈ నిలువరుసలో వున్న నియమాలు అన్ని సైట్లకు వర్తిస్తాయి.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "సంస్థాపన నుండి", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"స్థానిక నియమాలు: ఈ నిలువరుసలో వున్న నియమాలు కేవలం ప్రస్తుత సైట్ కే వర్తిస్తాయి.\nసామాన్య నియమాలపై స్థానిక నియమాలు అతిక్రమిస్తాయి.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "లేదా", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"మీ మార్పులను శాశ్వతపరచడానికి క్లిక్ చేయండి.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "ఈ పేజిలో నిరోధించినవి", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"మీ మార్పులను తిరిగరాయుటకు క్లిక్ చేయండి.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "స్థాపించినప్పటి నుండి నిరోధించినవి", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"అన్ని", - "description":"" + "popupDomainsConnected_v2": { + "message": "అనుసందానమైన డొమైన్లు", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"చిత్రాలు", - "description":"" + "popupTipDashboard": { + "message": "నియంత్రణా పట్టికను తెరచుటకు క్లిక్ చేయండి", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"సైట్-ఏతరుల అంశాలు", - "description":"" + "popupTipZapper": { + "message": "భాగాలను ఎంచుకొని తొలగించు ప్రక్ర్యియనారంభించు", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"సైట్-ఏతరుల సిఎస్ఎస్\/చిత్రాలు", - "description":"" + "popupTipPicker": { + "message": "భాగాలను ఎంచుకొని తొలగించు ప్రక్ర్యియనారంభించు", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"లోబడిన స్క్రిప్ట్లు", - "description":"" + "popupTipLog": { + "message": "అభ్యర్ధనల చిట్టా తెరువుము", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"సైట్ యొక్క స్క్రిప్ట్స్", - "description":"" + "popupTipReport": { + "message": "ఈ వెబ్‌సైట్‌లో సమస్యను నివేదించండి", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"సైట్-ఏతరుల స్క్రిప్ట్లు", - "description":"" + "popupTipNoPopups": { + "message": "ఈ వెబ్సైట్ లో అన్ని పాప్అప్స్ ని నిషేధించు/అనుమతించు", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"సైట్-ఏతరుల ఫ్రేమ్స్", - "description":"" + "popupTipNoPopups1": { + "message": "ఇకపై ఈ సైట్లో అన్ని పపప్లను నిరోధించుటకు క్లిక్ చేయండి", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"అనుసంధానించబడిన డొమైన్లు", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "ఇకపై ఈ సైట్లో అన్ని పపప్లను అనుమతించుటకు క్లిక్ చేయండి", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{total}} లో {{count}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "ఈ సైట్లో వున్న భారి దృశ్య/శ్రవణ అంశాల నిరోధనా స్థితిని మార్చు", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"సృష్టించు", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "ఈ సైట్లో పెద్ద పరిమాణం మీడియా అంశాలను నిరోధించుటకు క్లిక్ చేయండి", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"ఎంచుకోనుము", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "ఇకపై ఈ సైట్లో పెద్ద పరిమాణం మీడియా అంశాలను అనుమతించుటకు క్లిక్ చేయండి", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"నిశ్క్రమించు", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "ఈ వెబ్ సైట్ లో కాస్మెటిక్ వడపోతల వాడుక స్థితిని మార్చు", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"పరిశీలించు", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "ఈ వెబ్ సైట్ లో కాస్మెటిక్ ఫిల్టరింగ్ ని అచేతనపరచుటకు క్లిక్ చేయండి", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"నెట్వర్క్ అభ్యర్దన వడపోతలు", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "ఈ వెబ్ సైట్ లో కాస్మెటిక్ ఫిల్టరింగ్ ని చేతపరచుటకు క్లిక్ చేయండి", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"కాస్మెటిక్ వడపోతలు", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "ఈ సైట్ లో ఖతుల వాడుకని సక్రియ లేదా నిర్వీర్యపరచు", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"క్లిక్, Ctrl+క్లిక్", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "ఈ సైట్లోని రిమోట్ ఫాంట్లను నిరోధించుటకు క్లిక్ చేయండి", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"దీన్ని నిరోధించు", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "ఇకపై ఈ సైట్లో రిమోట్ ఫాంట్లను అనుమతించుటకు క్లిక్ చేయండి", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"నిరోధించబడిన అంశాలయోక్క స్థానసంగ్రాహకాలను దాచుము", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "ఈ సైటులో జావాస్క్రిప్టును అచేతనం చేయయానికి నొక్కండి", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"చిహ్నంపై నిరొధించబడిన అభ్యర్దనల సంఖ్య చూపుము", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "ఈ సైట్‌లో జావాస్క్రిప్ట్‌ను ఇకపై నిలిపివేయడానికి క్లిక్ చేయండి", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"టూల్టిప్స్ ను అచేతనపరచు", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "పాప్-అప్ విండోలు", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"అనువైనచోట్లలో కుడి-క్లిక్ మెనూని ఉపయోగించుము", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "పెద్ద మీడియా అంశాలు", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"వర్ణ అంధులకనుకూలమైన", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "నిశ్చలాత్మక వడపోత", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"క్లౌడ్ లో పొందుపర్చడాన్న్ది అనుమతించు", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "రిమోట్ ఫాంట్‌లు", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"నేనొక నిపుణత కలిగిన వినియోగదారున్ని(అయితే ఇదే తప్పనిసరిగా చదవాలి<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "జావాస్క్రిప్ట్", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"అంశాలను ముందుగానే తీసుకురావడాన్ని నిషేధించు (ఎవైనా అవాంఛనీయ అనుసంధానాలను నివారించడానికి)", - "description":"English: " + "popupMoreButton_v2": { + "message": "మరిన్ని", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"చిరునామాల తానిఖిని నిషేధించు", - "description":"English: " + "popupLessButton_v2": { + "message": "తక్కువ", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"WebRTCని మీ స్థానిక IP చిరునామాలను బహిర్గతపరచనివ్వొద్దు", - "description":"English: " + "popupTipGlobalRules": { + "message": "సామాన్య నియమాలు: ఈ నిలువరుసలో వున్న నియమాలు అన్ని సైట్లకు వర్తిస్తాయి.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"సామాన్య ప్రవర్తన", - "description":"" + "popupTipLocalRules": { + "message": "స్థానిక నియమాలు: ఈ నిలువరుసలో వున్న నియమాలు కేవలం ప్రస్తుత సైట్ కే వర్తిస్తాయి.\nసామాన్య నియమాలపై స్థానిక నియమాలు అతిక్రమిస్తాయి.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"ఈ సామాన్య ప్రవర్తనను ఒక్కో సైట్లో ప్రత్యేకంగా మార్చుకోవోచ్చు", - "description":"" + "popupTipSaveRules": { + "message": "మీ మార్పులను శాశ్వతపరచడానికి క్లిక్ చేయండి.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"కాస్మెటిక్ వడపోతను నిర్వీర్యపరచు", - "description":"" + "popupTipRevertRules": { + "message": "మీ మార్పులను తిరిగి పూర్వావస్థకు చేర్చుటకు క్లిక్ చేయండి.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"పరిమాణంలో {{input:number}} కేబీల కన్నా పెద్దవైన అంశాలను నిరోధించు", - "description":"" + "popupAnyRulePrompt": { + "message": "అన్ని", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"బయటి ఖతులను నిరోధించు", - "description":"" + "popupImageRulePrompt": { + "message": "చిత్రాలు", + "description": "" }, - "settingsStorageUsed":{ - "message":"వాడుతున్న నిలువల పరిమాణం: {{value}} బైట్స్", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "సైట్-ఏతరుల అంశాలు", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"గత పునరుద్ధారణ:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "సైట్-ఏతరుల సిఎస్ఎస్/చిత్రాలు", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"గత నకలు:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "లోబడిన స్క్రిప్ట్లు", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"ఈ క్రింది మూలాల నుండి వచ్చిన {{netFilterCount}} నెట్వర్క్ వడపోతలు + {{cosmeticFilterCount}} కాస్మెటిక్ వడపోతలు:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "సైట్ యొక్క స్క్రిప్ట్స్", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{total}} లో వాడుతున్నది {{used}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "సైట్-ఏతరుల స్క్రిప్ట్లు", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"వడపోత జాబితాలను స్వయంచాలకంగా నవీకరించుము.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "సైట్-ఏతరుల ఫ్రేమ్స్", + "description": "" }, - "3pUpdateNow":{ - "message":"జాబితా నవీకరించుము", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "అనుసంధానించబడిన డొమైన్లు", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"తాత్కాలిక నిలువలను త్యజించు", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{total}} లో {{count}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"పదనిరుపనచేసి కాస్మెటిక్ వడపోతలను ఉపయోగించు.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "సంస్కరణ", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      ఈ ఎంపిక Adblock Plus-అనుకూల “అంశాల దపరికాన్ని” వడపోతలను<\/a> పదనిరుపనచేసి లాగుపరుస్తుంది. ఈ వడపోతలు చాలావరకు కాస్మెటిక్ అయివుంటాయి, అవి నెట్వర్క్ అభ్యర్ధన నిరోదన ద్వారా నిరోధించాబడలేని అవాంఛిథ అంశాలను దాచుటకు ఉపకరిస్తాయి.<\/p>

      ఈ ఎంపిక ను ఎంచుకున్నయేడల uBlock₀ యొక్క మెమరీ వాడుక పెరిగే ఆస్కారమున్నది<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "స్క్రిప్ట్", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"కాస్మెటిక్ వడపోతలను విస్మరించు", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "ఫ్రేమ్", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      సాధారణ కాస్మెటిక్ వడపోతలు అన్ని సైట్లపై ఉపయోగించబడుతాయి.

      వీటిని uBlock₀ సమర్థవంతంగా ఉపయోగించగలిగినా, కొన్ని భారీ లేదా దీర్ఘకాలికంగా వీక్షిస్తున్న పేజీలలో CPU ఇంకా RAM వాడుకను ఇవి పెంచగలవు.

      ఈ ఎంపికను ఎంచుకోవడంవలన, సాధారణ కాస్మెటిక్ వడపోతల కొరకు అదనపు CPU ఉపయోగాన్ని నివారిస్తుంది, పైగా uBlock₀ యొక్క RAM వాడుక తగ్గడానికి తోడ్పడుతుంది.

      అల్పసామర్ధ్య పరికరాలలో దీన్ని ఎంచుకోవడం శ్రేయస్కరం.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "సృష్టించు", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"నిరోధించబడిన చిరునామాల జాబితా", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "ఎంచుకోనుము", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"మార్పులను అమలుపరచు", - "description":"English: Apply changes" + "pickerQuit": { + "message": "నిశ్క్రమించు", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"ప్రకటనలు", - "description":"English: Ads" + "pickerPreview": { + "message": "పరిశీలించు", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"గోప్యత", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "నెట్వర్క్ అభ్యర్దన వడపోతలు", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"మాల్వేర్ డొమైన్లు", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "కాస్మెటిక్ వడపోతలు", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"సాంఘికం", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "క్లిక్, Ctrl+క్లిక్", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"బహూలార్ధక", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "దీన్ని నిరోధించు", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"ప్రాంతాలు, భాషలు", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "నిరోధించబడిన అంశాలయోక్క స్థానసంగ్రాహకాలను దాచుము", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"సొంత నిర్దేషణ", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "చిహ్నంపై నిరొధించబడిన అభ్యర్దనల సంఖ్య చూపుము", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"ఒక్కో పంక్తిలో ఒక URL. పంక్తిలో మొదలు ‘!’ ఉన్నచో అది పరిగనించబడదు. చెల్లని URLలు మౌనంగా విస్మరించబడుతాయి.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "టూల్టిప్స్ ను అచేతనపరచు", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"పదనిరూపణ", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "అనువైనచోట్లలో కుడి-క్లిక్ మెనూని ఉపయోగించుము", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"తాత్కాలిక నిలువలను త్యజించు", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "వర్ణ అంధులకనుకూలమైన", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"నవీకరణ అందుబాటులో ఉంది", - "description":"English: new version available" + "settingsAppearance": { + "message": "స్వరూపం", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"పాతబడింది", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "థీమ్", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"గత నవీకరణ: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "అనుకూల యాస రంగు", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"ఒక్కో పంక్తిలో ఒక వడపోత నమోదు. పేర్కొనబడే వడపోత, కేవలం హోస్టుపేరు లేదా Adblock Plusకి అనువైన వడపోత కావొచ్చు. పంక్తిలో మొదలు ‘!’ ఉన్నచో అది పరిగణలోకి తీసుకొబడదు.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "క్లౌడ్ లో పొందుపర్చడాన్న్ది అనుమతించు", + "description": "" }, - "1pImport":{ - "message":"దిగుమతిచేసి పోడిగించుము", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "మీరు నిపుణత కలిగిన వినియోగాదారులైతే (అవసరమైన సమాచారం)", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"ఎగుమతి చేయు", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "అంశాలను ముందుగానే తీసుకురావడాన్ని నిషేధించు (ఎవైనా అవాంఛనీయ అనుసంధానాలను నివారించడానికి)", + "description": "English: " }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "చిరునామాల తానిఖిని దాటవేయు", + "description": "English: " }, - "1pApplyChanges":{ - "message":"మార్పులను భద్రపరచు", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "WebRTCని మీ స్థానిక IP చిరునామాలను బహిర్గతపరచనివ్వొద్దు", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"శాశ్వత నియమాలు", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "సామాన్య ప్రవర్తన", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"తాత్కాలిక నియమాలు", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "ఈ సామాన్య ప్రవర్తనను ఒక్కో సైట్లో ప్రత్యేకంగా మార్చుకోవోచ్చు", + "description": "" }, - "rulesRevert":{ - "message":"మార్పులను తిరస్కరించు", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "కాస్మెటిక్ వడపోతను నిర్వీర్యపరచు", + "description": "" }, - "rulesCommit":{ - "message":"మార్పులను భద్రపరచు", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "పరిమాణంలో {{input:number}} కేబీల కన్నా పెద్దవైన అంశాలను నిరోధించు", + "description": "" }, - "rulesEdit":{ - "message":"చక్కదిడ్డుము", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "బయటి ఖతులను నిరోధించు", + "description": "" }, - "rulesEditSave":{ - "message":"భద్రపరచు", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "జావాస్క్రిప్ట్‌ను ఆపివేయి", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"పారవేయు", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "CSP నివేదికలను నిరోధించు", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"ఫైల్ నుండి దిగుమతి చేయుము...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "కానానికల్ పేర్లను తెరవండి", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"ఫైల్కు ఎగుమతి చేయుము", - "description":"" + "settingsAdvanced": { + "message": "ఆధునిక", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "సాంకేతిక వినియోగదారులకు మాత్రమే సరిపోయే ఫీచర్లు", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"మీ క్రియాశీలక జల్లెడ నియమాల జాబితా.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "అధునాతన అమరికలు", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"నియమనిర్మాన పద్ధతి: మూలం గమ్యం రకం చర్య<\/code> (పూర్తి వివరాలు<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "గత పునరుద్ధారణ:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"uBlock₀ అచేతనబడించిన హోస్టూల జాబితా, ఇది మీరు కూర్చినది,. ఒక్కో పంక్తికి ఒక్కో నమోదు. చెల్లని నమోదులు మౌనంగా విస్మరించబడుతాయి.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "గత నకలు:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"దిగుమతిచేసి పోడిగించుము", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "ఈ క్రింది మూలాల నుండి వచ్చిన {{netFilterCount}} నెట్వర్క్ వడపోతలు + {{cosmeticFilterCount}} కాస్మెటిక్ వడపోతలు:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"ఎగుమతి", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{total}} లో వాడుతున్నది {{used}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "వడపోత జాబితాలను స్వయంచాలకంగా నవీకరించుము.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"మార్పులను భద్రపరచు", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "జాబితా నవీకరించుము", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"రకం", - "description":"English: Type" + "3pPurgeAll": { + "message": "తాత్కాలిక నిలువలను త్యజించు", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"డొమైన్", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "పదనిరుపనచేసి కాస్మెటిక్ వడపోతలను ఉపయోగించు.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "

      ఈ ఎంపిక Adblock Plus-అనుకూల “అంశాల దాచిపెట్టే” ఫిల్టర్లు ని పదనిరుపనచేసి అమలుపరుస్తుంది. ఈ వఫిల్టర్లు చాలావరకు కాస్మెటిక్ అయివుంటాయి, అవి నెట్వర్క్ అభ్యర్ధన నిరోదన ద్వారా నిరోధించాబడలేని అవాంఛిథ అంశాలను దాచుటకు ఉపకరిస్తాయి.

      ఈ ఎంపిక ను ఎంచుకున్నయేడల uBlock₀ యొక్క మెమరీ వాడుక పెరిగే ఆస్కారమున్నది

      ", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"జల్లెడ", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "కాస్మెటిక్ వడపోతలను విస్మరించు", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"అన్ని", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

      సాధారణ కాస్మెటిక్ ఫిల్టర్లు అన్ని సైట్లపై ఉపయోగించబడుతాయి.

      వీటిని uBlock₀ సమర్థవంతంగా ఉపయోగించగలిగినా, కొన్ని భారీ లేదా దీర్ఘకాలికంగా వీక్షిస్తున్న పేజీలలో CPU ఇంకా RAM వాడుకను ఇవి పెంచగలవు.

      ఈ ఎంపికను ఎంచుకోవడంవలన, సాధారణ కాస్మెటిక్ ఫిల్టర్లు కొరకు అదనపు CPU ఉపయోగాన్ని నివారిస్తుంది, పైగా uBlock₀ యొక్క RAM వాడుక తగ్గడానికి తోడ్పడుతుంది.

      అల్పసామర్ధ్య పరికరాలలో దీన్ని ఎంచుకోవడం శ్రేయస్కరం.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"తేర వెనుక", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "అన్ని ఫిల్టర్ జాబితాలు లోడ్ అయ్యే వరకు నెట్‌వర్క్ కార్యాచరణను నిలిపివేయండి", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"చిట్టాలోని నమోదులను జల్లెడపరచు", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "నిరోధించబడిన చిరునామాల జాబితా", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"చిట్టాలోని గరిష్ట నమోదుల సంఖ్య", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "మార్పులను అమలుపరచు", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"సందర్భం:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "అంతర్నిర్మితం", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"రకం:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "ప్రకటనలు", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"క్రియాశీలక URL వడపోత", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "గోప్యత", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"నిశ్చలాత్మక వడపోత", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "మాల్వేర్ డొమైన్లు", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{origin}} నుండి మొదలయ్యి, {{br}}{{url}} తో సరిపోలిన url గల {{br}}{{type}} నెట్వర్క్ అభ్యర్ధనలను {{action}}, {{br}}అదీ వడపోతల జాబితాలో {{importance}}.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Social widgets", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"తిరస్కరించు", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Cookie notices", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"అనుమతించు", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "అసౌకర్యాల పట్టిక", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"“{{type}}” రకమైన", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "బహూలార్ధక", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"ఏటువంటిదైనా", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "ప్రాంతాలు, భాషలు", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"“{{origin}}” నుండి", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "సొంత నిర్దేషణ", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"ఎక్కడినుండైనా", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "దిగుమతిచేయు...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"మినహాయింపు వుంటే", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "ఒక్కో పంక్తిలో ఒక URL. పంక్తిలో మొదట ‘!’ ఉన్నచో ఆ పంక్తి పరిగనించబడదు. చెల్లని URLలు మౌనంగా విస్మరించబడుతాయి.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"మినహాయింపు వున్నా", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "పాతబడింది", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"నిశ్చలాత్మక వడపోత అయిన {{filter}} క్రింది వాటిలో కలదు:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "దీన్ని చూపించు", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"మార్పుల సంచిక", - "description":"English: Change log" + "3pLastUpdate": { + "message": "గత నవీకరణ: {{ago}}.\nనవీకరించుటకు క్లిక్ చెయ్యండి.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"వికి", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "నవీకరిస్తోంది...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"సహాయము", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "ఈ చిట్టా అనుసంధాన వైఫల్యం వలన నవికరించబడలేదు.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"మూలం (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "అవిశ్వసనీయ మూలాల నుండి ఫిల్టర్‌లను జోడించవద్దు.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"ప్రాజెక్ట్కు సహాయ పడిన వారు", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Enable my custom filters", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"ఫైల్ లో భద్రపరచు", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Allow custom filters requiring trust", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "దిగుమతిచేసి పోడిగించుము", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"ఫైల్ నుండి పునరుద్దరించు...", - "description":"English: Restore from file..." + "1pExport": { + "message": "ఎగుమతి చేయు", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"సంస్థాపన ఐచ్చికాలను పునరుద్దరించు...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"మీరు పేర్కొన్న ఐచ్చిక్కాలన్ని {{time}}నకు తీసుకున్న నకలు డేటాతో తిరగారాయబడుతాయి, ఆ పిమ్మట uBlock₀ పునఃప్రారంభమవుతుంది.\n\nమీ ఐచ్చికాలను తిరగరాయుట మీకు సమ్మతమేనా?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "మార్పులను భద్రపరచు", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"డేటాను చదవడంలో లోపం సంభవించినది(డేటా పాడైవుంది లేదా అందుబాటులో లేదు)", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "శాశ్వత నియమాలు", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"ఐచ్చికాలలో మీరు చేసిన మార్పులన్నీ తొలగించనా పిమ్మట uBlock₀ పునఃప్రారంభిన్చాబాడును.\n\nమరి సంస్థాపన ఐచ్చికాలను పునరుద్ధరించాలా?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "తాత్కాలిక నియమాలు", + "description": "header" }, - "errorCantConnectTo":{ - "message":"{{url}}తో అనుసంధానం విఫలమైనది", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "మార్పులను తిరస్కరించు", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: ఈ URLని మీ నిర్దేశిత వడపోత పట్టికకు జతపరచాలా?\n\nశీర్షిక: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "మార్పులను భద్రపరచు", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"ఒక నిమిషం క్రితం", - "description":"English: a minute ago" + "rulesEdit": { + "message": "చక్కదిడ్డుము", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} నిమిషాల క్రితం", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "భద్రపరచు", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"ఒక గంట క్రితం", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "పారవేయు", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} గంటల క్రితం", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "ఫైల్ నుండి దిగుమతి చేయుము...", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"ఒక రోజు క్రితం", - "description":"English: a day ago" + "rulesExport": { + "message": "ఫైల్కు ఎగుమతి చేయుము", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} రోజుల క్రితం", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"నియంత్రణా పట్టికను చూపు", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "మీ క్రియాశీలక జల్లెడ నియమాల జాబితా.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"నెట్వర్క్ అభ్యర్ధనల చిట్టాను చూపు", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "నియమనిర్మాన పద్ధతి: మూలం గమ్యం రకం చర్య (పూర్తి వివరాలు).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"అచేతనం", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "క్రమబద్ధీకరించు", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"ఈ తరువాయి పేజిని uBlock Origin బ్రౌజరులోకి ఎక్కిన్చనివ్వలేదు:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "రూల్ రకం", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"ఇది ఈ క్రింది వడపోతననుసారించి తీసుకోబడిన చర్య", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "మూలం", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"పారామితులు లేని", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "గమ్యం", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"ఈ వడపోత వున్న జాబితా పేరు:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "uBlock Origin అచేతనబడించిన హోస్టూల జాబితా, ఇది మీరు కూర్చినది,. ఒక్కో పంక్తికి ఒక్కో నమోదు. చెల్లని నమోదులు మౌనంగా విస్మరించబడుతాయి.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"వెనక్కి వెళ్ళు", - "description":"English: Go back" + "whitelistImport": { + "message": "దిగుమతిచేసి పోడిగించుము", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"విండో మూయుము", - "description":"English: Close this window" + "whitelistExport": { + "message": "ఎగుమతి", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"{{hostname}} తో అనుసంధానాన్ని అనుమతించాలా?", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"తాత్కాలికంగా", - "description":"English: Temporarily" + "whitelistApply": { + "message": "మార్పులను భద్రపరచు", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"శాశ్వతంగా", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "రకం", + "description": "English: Type" }, - "cloudPush":{ - "message":"క్లౌడ్ లో పొందుపరచు", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "డొమైన్", + "description": "English: Domain" }, - "cloudPull":{ - "message":"క్లౌడ్ నుండి దిగుమతిపరచు", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"అంతర్జాలంలో భద్రపరచిన ఎంపికలను దిగుమతి చేసి ప్రస్తుత ఎంపికలకు జోడించు", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "జల్లెడ", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "అన్ని", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"ఈ పరికరం పేరు:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "తెర వెనుక", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"పంపించు", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "ప్రస్తుత ట్యాబ్", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"మార్పులను తిరస్కరించు", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "టాబ్ కంటెంట్‌ను మళ్లీ లోడ్ చేయండి", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"బైట్లు", - "description":"" + "loggerDomInspectorTip": { + "message": "DOM ఇన్స్పెక్టర్ను టోగుల్ చేయండి", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"భారి దృశ్య\/శ్రవణ అంశాలను తాత్కాలికంగా అనుమతించు", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "పాపప్ ప్యానెల్‌ను టోగుల్ చేయండి", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"ఇది అంతిమంగా వుండాల్సిన నమోదు", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock మూలం వికీ: లాగర్", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "లాగర్ క్లియర్", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "లాగర్ను పాజ్ చేయండి (అన్ని ఇన్కమింగ్ డేటాను విస్మరించండి)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "లాగర్ను పాజ్ చేయండి", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "లాగర్ ఫిల్టరింగ్‌ను టోగుల్ చేయండి", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "చిట్టాలోని నమోదులను జల్లెడపరచు", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "లాగర్ ఫిల్టరింగ్ ఎంపికలు", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "కాదు", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "నిరోధించబడినవి", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "అనుమతించబడింది", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "సవరించబడింది", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "మొదటి పార్టీ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "మూడవ పార్టీ", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "వివరాలు", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "ఫిల్టర్", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "ఫిల్టర్ జాబితా", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "నియమం", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "సందర్భం", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "రూట్ సందర్భం", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "పార్టీనెస్", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "రకం", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "క్రియాశీలక URL ఫిల్టరింగ్", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "సందర్భం:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "రకం:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "నిశ్చలాత్మక ఫిల్టరింగ్", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{origin}} నుండి మొదలయ్యి, {{br}}{{url}} తో సరిపోలిన url గల {{br}}{{type}} నెట్వర్క్ అభ్యర్ధనలను {{action}}, {{br}}అదీ వడపోతల జాబితాలో {{importance}}.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "తిరస్కరించు", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "అనుమతించు", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "“{{type}}” రకమైన", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "ఏటువంటిదైనా", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "“{{origin}}” నుండి", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "ఎక్కడినుండైనా", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "మినహాయింపు వుంటే", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "మినహాయింపు వున్నా", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "నిశ్చలాత్మక ఫిల్టర్ అయిన {{filter}} క్రింది వాటిలో కలదు:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "నిశ్చలాత్మక ఫిల్టర్ అయిన {{filter}} ప్రస్తుతం ఉత్తేజపరిచిన ఫిల్టర్ జాబితాలలో కనుగొనబడలేదు", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "దిగువ మూడు షరతులను నెరవేర్చని లాగర్ ఎంట్రీలు స్వయంచాలకంగా విస్మరించబడతాయి:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "చివరి {{input}} నిమిషాల నుండి ఎంట్రీలను భద్రపరచండి", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "ప్రతి ట్యాబ్‌కు గరిష్టంగా {{input}} పేజీ లోడ్లను భద్రపరచండి", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "ప్రతి ట్యాబ్‌కు గరిష్టంగా {{input}} ఎంట్రీలను భద్రపరచండి", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "నిలువుగా విస్తరించిన మోడ్‌లో ప్రతి ఎంట్రీకి {{input}} పంక్తులను ఉపయోగించండి", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "నిలువు వరుసలను దాచు:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} సమయం", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} ఫిల్టర్ / నియమం", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} e సందర్భం", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}}పార్టీనెస్", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "జాబితా", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "పట్టిక", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "సాదా", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "మార్క్డౌన్", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "తెరవండి", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "కొత్త నివేదికను సృష్టించండి", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "సారూప్య నివేదికలను కనుగొనండి", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "డాక్యుమెంటేషన్", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "uBlock ఆరిజిన్ యొక్క అన్ని లక్షణాల గురించి తెలుసుకోవడానికి uBlock/wiki వద్ద డాక్యుమెంటేషన్ చదవండి.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "ప్రశ్నలు మరియు మద్దతు", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Answers to questions and other kinds of help support is provided on the subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filter issues/website is broken", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Important: Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tips: Be sure your filter lists are up to date. The logger is the primary tool to diagnose filter-related issues.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Bug report", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Report issues with uBlock Origin itself to the uBlockOrigin/uBlock-issue issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Troubleshooting Information", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported. Note: clicking the button will cause the page's origin to be sent to GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verify that the issue still exists after reloading the problematic web page.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the web page:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The web page…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBlock Origin is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "అనవసరమైన ట్యాబ్‌లు లేదా విండోలను తెరుస్తుంది", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "వెబ్ పేజీని “NSFW”గా లేబుల్ చేయండి (“పని కోసం సురక్షితం కాదు”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "గోప్యతా విధానం", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "మార్పుల సంచిక", + "description": "" + }, + "aboutCode": { + "message": "మూలం (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "ప్రాజెక్ట్కు సహాయ పడిన వారు", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "మూల కోడ్", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "అనువాదాలు", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "జాబితాలను ఫిల్టర్ చేయండి", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "బాహ్య ఆధారపడటం (GPLv3- అనుకూలమైనది):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO యొక్క సొంత ఫిల్టర్ జాబితాలు కింది వాటిలో ఉచితంగా హోస్ట్ చేయబడతాయి CDNs:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "ఫిల్టర్ జాబితాను అప్‌డేట్ చేయాల్సిన అవసరం వచ్చినప్పుడు యాదృచ్ఛికంగా ఎంచుకున్న CDN ఉపయోగించబడుతుంది", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "ఫైల్ లో భద్రపరచు", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "ఫైల్ నుండి పునరుద్దరించు...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "సంస్థాపన అమరికలను పునరుద్దరించు...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "మీరు పేర్కొన్న ఐచ్చిక్కాలన్ని {{time}}నకు తీసుకున్న నకలు డేటాతో తిరగారాయబడుతాయి, ఆ పిమ్మట uBlock₀ పునఃప్రారంభమవుతుంది.\n\nమీ ఐచ్చికాలను తిరగరాయుట మీకు సమ్మతమేనా?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "డేటాను చదవడంలో లోపం సంభవించినది(డేటా పాడైవుంది లేదా అందుబాటులో లేదు)", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "ఐచ్చికాలలో మీరు చేసిన మార్పులన్నీ తొలగించనా పిమ్మట uBlock₀ పునఃప్రారంభిన్చాబాడును.\n\nమరి సంస్థాపన ఐచ్చికాలను పునరుద్ధరించాలా?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "అనుసంధాన వైఫల్యం: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "సభ్యత్వాన్ని పొందండి", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "ఒక నిమిషం క్రితం", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} నిమిషాల క్రితం", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "ఒక గంట క్రితం", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} గంటల క్రితం", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "ఒక రోజు క్రితం", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} రోజుల క్రితం", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "నియంత్రణా పట్టికను చూపు", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "నెట్వర్క్ అభ్యర్ధనల చిట్టాను చూపు", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "అచేతనం", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "పేజీ బ్లాక్ చేయబడింది", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "ఈ తరువాయి పేజిని uBlock Origin బ్రౌజరులోకి ఎక్కిన్చనివ్వలేదు:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "ఇది ఈ క్రింది వడపోతననుసారించి తీసుకోబడిన చర్య", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "పారామితులు లేని", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "ఈ వడపోత వున్న జాబితా పేరు:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "వెనక్కి వెళ్ళు", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "విండో మూయుము", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "{{hostname}} తో అనుసంధానాన్ని అనుమతించాలా?", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "తాత్కాలికంగా", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "శాశ్వతంగా", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Proceed", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "క్లౌడ్ లో పొందుపరచు", + "description": "tooltip" + }, + "cloudPull": { + "message": "క్లౌడ్ నుండి దిగుమతిపరచు", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "అంతర్జాలంలో భద్రపరచిన ఎంపికలను దిగుమతి చేసి ప్రస్తుత ఎంపికలకు జోడించు", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "ఈ పరికరం పేరు:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "హెచ్చరిక! ఈ అధునాతన అమరికలను జాగ్రత్తతో మార్చండి.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "పంపించు", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "మార్పులను అమలుపరచు", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "మార్పులను తిరస్కరించు", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "బైట్లు", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "ఫ్రేమ్‌లో మూలకాన్ని బ్లాక్ చేయండి ...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "ఫిల్టర్ జాబితాకు సభ్యత్వం పొందండి ...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "భారి దృశ్య/శ్రవణ అంశాలను తాత్కాలికంగా అనుమతించు", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "View source code…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "షార్ట్కట్ టైప్ చేయండి", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "లాక్ చేసిన స్క్రోలింగ్‌ను టోగుల్ చేయండి", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "క్లిప్‌బోర్డ్‌కు కాపీ చేయండి", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Select all", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Toggle cosmetic filtering", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Toggle JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "నిరోధించే మోడ్‌ను రిలాక్స్ చేయండి", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "ఉపయోగించిన నిల్వ: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "కేబీ", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "ఏంబీ", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "జీబీ", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "లోడ్ చేయడానికి క్లిక్ చేయండి", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Errors: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "ఇది అంతిమంగా వుండాల్సిన నమోదు", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/th/messages.json b/src/_locales/th/messages.json new file mode 100644 index 0000000000000..20c4bb1d09c0d --- /dev/null +++ b/src/_locales/th/messages.json @@ -0,0 +1,1314 @@ +{ + "extName": { + "message": "uBlock Origin", + "description": "extension name." + }, + "extShortDesc": { + "message": "มาแล้ว! โปรแกรมบล็อกโฆษณาได้อย่างมีประสิทธิภาพ โดยที่ไม่กินซีพียูหรือแรม", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "dashboardName": { + "message": "uBlock₀ — หน้าหลัก", + "description": "English: uBlock₀ — Dashboard" + }, + "dashboardUnsavedWarning": { + "message": "คำเตือน! คุณมีการเปลี่ยนแปลงที่ยังไม่ได้บันทึก", + "description": "A warning in the dashboard when navigating away from unsaved changes" + }, + "dashboardUnsavedWarningStay": { + "message": "อยู่ต่อ", + "description": "Label for button to prevent navigating away from unsaved changes" + }, + "dashboardUnsavedWarningIgnore": { + "message": "ไม่สนใจ", + "description": "Label for button to ignore unsaved changes" + }, + "settingsPageName": { + "message": "การตั้งค่า", + "description": "appears as tab name in dashboard" + }, + "3pPageName": { + "message": "รายการตัวกรอง", + "description": "appears as tab name in dashboard" + }, + "1pPageName": { + "message": "ตัวกรองของฉัน", + "description": "appears as tab name in dashboard" + }, + "rulesPageName": { + "message": "เงื่อนไขของฉัน", + "description": "appears as tab name in dashboard" + }, + "whitelistPageName": { + "message": "เว็บไซต์ที่เชื่อถือได้", + "description": "appears as tab name in dashboard" + }, + "shortcutsPageName": { + "message": "ทางลัด", + "description": "appears as tab name in dashboard" + }, + "statsPageName": { + "message": "uBlock₀ — บันทึก", + "description": "Title for the logger window" + }, + "aboutPageName": { + "message": "เกี่ยวกับ", + "description": "appears as tab name in dashboard" + }, + "supportPageName": { + "message": "สนับสนุน", + "description": "appears as tab name in dashboard" + }, + "assetViewerPageName": { + "message": "uBlock₀ — โปรแกรมดูสิ่งที่ถือครอง", + "description": "Title for the asset viewer page" + }, + "advancedSettingsPageName": { + "message": "การตั้งค่าขั้นสูง", + "description": "Title for the advanced settings page" + }, + "popupPowerSwitchInfo": { + "message": "คลิก: ปิด/เปิดการทำงานของ uBlock₀ สำหรับเว็บไซต์นี้ \nCtrl+คลิก: ปิดการทำงานของ uBlock₀ เฉพาะหน้าเว็บนี้", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + }, + "popupPowerSwitchInfo1": { + "message": "คลิกเพื่อปิดใช้งาน uBlock₀ สำหรับเว็บไซต์นี้\n\nCtrl+คลิกเพื่อปิดใช้งาน uBlock₀ เฉพาะในหน้านี้", + "description": "Message to be read by screen readers" + }, + "popupPowerSwitchInfo2": { + "message": "กดเพื่อเปิดใช้่งาน uBlock₀ สำหรับเว็บนี้", + "description": "Message to be read by screen readers" + }, + "popupBlockedRequestPrompt": { + "message": "การร้องขอถูกปฏิเสธ", + "description": "English: requests blocked" + }, + "popupBlockedOnThisPagePrompt": { + "message": "ในหน้านี้", + "description": "English: on this page" + }, + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 (13%)" + }, + "popupBlockedSinceInstallPrompt": { + "message": "ตั้งแต่ติดตั้ง", + "description": "English: since install" + }, + "popupOr": { + "message": "หรือ", + "description": "English: or" + }, + "popupBlockedOnThisPage_v2": { + "message": "ถูกบล็อกบนหน้านี้", + "description": "For the new mobile-friendly popup design" + }, + "popupBlockedSinceInstall_v2": { + "message": "ถูกบล็อกตั้งแต่ติดตั้ง", + "description": "For the new mobile-friendly popup design" + }, + "popupDomainsConnected_v2": { + "message": "โดเมนที่เชื่อมต่อ", + "description": "For the new mobile-friendly popup design" + }, + "popupTipDashboard": { + "message": "เปิด dashboard", + "description": "English: Click to open the dashboard" + }, + "popupTipZapper": { + "message": "เข้าสู่โหมดโจมตีองค์ประกอบ", + "description": "Tooltip for the element-zapper icon in the popup panel" + }, + "popupTipPicker": { + "message": "เข้าสู่โหมดเลือก element", + "description": "English: Enter element picker mode" + }, + "popupTipLog": { + "message": "เปิดบันทึกการทำงาน", + "description": "Tooltip used for the logger icon in the panel" + }, + "popupTipReport": { + "message": "แจ้งปัญหาการใช้งานเว็บไซต์", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipNoPopups": { + "message": "เปลี่ยนสถานะการบล็อกป็อบอัพบนเว็บไชต์นี้", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups1": { + "message": "คลิกเพื่อบล็อกป๊อปอัปทั้งหมดในเว็บไซต์นี้", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2": { + "message": "คลิกเพื่อยกเลิกการบล็อกป๊อปอัปทั้งหมดในเว็บไซต์นี้", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoLargeMedia": { + "message": "เปลี่ยนสถานะการบล็อกองค์ประกอบ media ขนาดใหญ่บนเว็บไชต์นี้", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia1": { + "message": "คลิกเพื่อปิดกั้นองค์ประกอบชนิด Media ที่มีขนาดใหญ่ในเว็บไซต์นี้", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2": { + "message": "คลิกเพื่อยกเลิกการปิดกั้นองค์ประกอบชนิด Media ที่มีขนาดใหญ่ในเว็บไซต์นี้", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoCosmeticFiltering": { + "message": "สลับการกรององค์ประกอบตกแต่งสำหรับเว็บไซต์นี้", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering1": { + "message": "คลิกเพื่อปิดการใช้ฟิลเตอร์บนเว็บไซต์นี้", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2": { + "message": "คลิกเพื่อเปิดใช้งานการกรององค์ประกอบตกแต่งในเว็บไซต์นี้", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoRemoteFonts": { + "message": "สลับเป็นฟอนต์เครื่องที่บล็อกสำหรับเว็บนี้", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts1": { + "message": "คลิกเพื่อบล็อกฟอนต์จากเว็บไซต์นี้", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts2": { + "message": "คลิกเพื่อยกเลิกการบล็อกป๊อปอัปทั้งหมดในเว็บไซต์นี้", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoScripting1": { + "message": "กดเพื่อปิดการใช้งาน JavaScript บนเว็บไซต์นี้", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupTipNoScripting2": { + "message": "กดเพื่อยกเลิกการบล็อก JavaScript บนเว็บไซต์นี้", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupNoPopups_v2": { + "message": "หน้าต่าง Pop-up", + "description": "Caption for the no-popups per-site switch" + }, + "popupNoLargeMedia_v2": { + "message": "องค์ประกอบ media ขนาดใหญ่", + "description": "Caption for the no-large-media per-site switch" + }, + "popupNoCosmeticFiltering_v2": { + "message": "ฟิลเตอร์", + "description": "Caption for the no-cosmetic-filtering per-site switch" + }, + "popupNoRemoteFonts_v2": { + "message": "ฟอนต์ที่เว็บไชต์กำหนด", + "description": "Caption for the no-remote-fonts per-site switch" + }, + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" + }, + "popupMoreButton_v2": { + "message": "เพิ่มเติม", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton_v2": { + "message": "แสดงน้อยลง", + "description": "Label to be used to hide popup panel sections" + }, + "popupTipGlobalRules": { + "message": "กฏทั่วเว็บ: คอลัมน์นี้มีไว้สำหรับกฏที่ใช้กับทุกเว็บไซต์", + "description": "Tooltip when hovering the top-most cell of the global-rules column." + }, + "popupTipLocalRules": { + "message": "กฏเว็บเดียว: คอลัมน์นี้มีไว้สําหรับกฏบนเว็บไซต์นี้เท่านั้น\nกฏเว็บเดียวจะถูกใช้งานก่อนกฏครอบคลุม", + "description": "Tooltip when hovering the top-most cell of the local-rules column." + }, + "popupTipSaveRules": { + "message": "คลิกเพื่อให้ทําให้การเปลี่ยนแปลงถาวร", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." + }, + "popupTipRevertRules": { + "message": "ยกเลิกการเปลี่ยนแปลง", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + }, + "popupAnyRulePrompt": { + "message": "ทั้งหมด", + "description": "" + }, + "popupImageRulePrompt": { + "message": "รูปภาพ", + "description": "" + }, + "popup3pAnyRulePrompt": { + "message": "บุคคลที่ 3", + "description": "" + }, + "popup3pPassiveRulePrompt": { + "message": "CSS/รูปภาพ บุคคลที่ 3", + "description": "" + }, + "popupInlineScriptRulePrompt": { + "message": "สคริปท์อินไลน์", + "description": "" + }, + "popup1pScriptRulePrompt": { + "message": "สคริปภายใน", + "description": "" + }, + "popup3pScriptRulePrompt": { + "message": "สคริปท์บุคคลที่3", + "description": "" + }, + "popup3pFrameRulePrompt": { + "message": "กรอบบุคคลที่3", + "description": "" + }, + "popupHitDomainCountPrompt": { + "message": "โดเมนที่เชื่อมต่อ", + "description": "appears in popup" + }, + "popupHitDomainCount": { + "message": "{{count}} ใน {{total}}", + "description": "appears in popup" + }, + "popupVersion": { + "message": "เวอร์ชัน", + "description": "Example of use: Version 1.26.4" + }, + "popup3pScriptFilter": { + "message": "สคริปต์", + "description": "Appears as an option to filter out firewall rows" + }, + "popup3pFrameFilter": { + "message": "กรอบ", + "description": "Appears as an option to filter out firewall rows" + }, + "pickerCreate": { + "message": "สร้าง", + "description": "English: Create" + }, + "pickerPick": { + "message": "เลือก", + "description": "English: Pick" + }, + "pickerQuit": { + "message": "ออก", + "description": "English: Quit" + }, + "pickerPreview": { + "message": "ตัวอย่าง", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + }, + "pickerNetFilters": { + "message": "ฟิลเตอร์เครื่อข่าย", + "description": "English: header for a type of filter in the element picker dialog" + }, + "pickerCosmeticFilters": { + "message": "ฟิลเตอร์", + "description": "English: Cosmetic filters" + }, + "pickerCosmeticFiltersHint": { + "message": "คลิก, Ctrl-คลิก", + "description": "English: Click, Ctrl-click" + }, + "pickerContextMenuEntry": { + "message": "บล็อคองค์ประกอบ", + "description": "An entry in the browser's contextual menu" + }, + "settingsCollapseBlockedPrompt": { + "message": "ซ่อนตัวยึดตําแหน่งขององค์ประกอบที่ถูกบล็อก", + "description": "English: Hide placeholders of blocked elements" + }, + "settingsIconBadgePrompt": { + "message": "แสดงจำนวนคำขอเครือข่ายที่ถูกปฏิเสธบนไอคอน", + "description": "English: Show the number of blocked requests on the icon" + }, + "settingsTooltipsPrompt": { + "message": "ปิดคำอธิบาย", + "description": "A checkbox in the Settings pane" + }, + "settingsContextMenuPrompt": { + "message": "Make use of context menu where appropriate", + "description": "English: Make use of context menu where appropriate" + }, + "settingsColorBlindPrompt": { + "message": "เป็นมิตรกับคนตาบอดสี", + "description": "English: Color-blind friendly" + }, + "settingsAppearance": { + "message": "รูปแบบการแสดงผล", + "description": "Section for controlling user interface appearance" + }, + "settingsThemeLabel": { + "message": "รูปแบบการแสดงผล", + "description": "Label for checkbox to enable a custom dark theme" + }, + "settingsThemeAccent0Label": { + "message": "Custom accent color", + "description": "Label for checkbox to pick an accent color" + }, + "settingsCloudStorageEnabledPrompt": { + "message": "เปิดการเก็บข้อมูลบน Cloud", + "description": "" + }, + "settingsAdvancedUserPrompt": { + "message": "ฉันเป็นผู้ใช้ขั้นสูง (โปรดอ่านเอกสารสำคัญ)", + "description": "Checkbox to let user access advanced, technical features" + }, + "settingsPrefetchingDisabledPrompt": { + "message": "ปิดใช้งานการดึงข้อมูลล่วงหน้า (เพื่อป้องกันการเชื่อมต่อสำหรับคำขอเครือข่ายที่ถูกบล็อก)", + "description": "English: " + }, + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Disable hyperlink auditing", + "description": "English: " + }, + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "ป้องกันไม่ให้ WebRTC รั่วไหลที่อยู่ IP ภายในเครื่อง", + "description": "English: " + }, + "settingPerSiteSwitchGroup": { + "message": "Default behavior", + "description": "" + }, + "settingPerSiteSwitchGroupSynopsis": { + "message": "These default behaviors can be overridden on a per-site basis", + "description": "" + }, + "settingsNoCosmeticFilteringPrompt": { + "message": "Disable cosmetic filtering", + "description": "" + }, + "settingsNoLargeMediaPrompt": { + "message": "ปิดกั้นองค์ประกอบชนิด Media ที่มีขนาดใหญ่กว่า {{input}} KB", + "description": "" + }, + "settingsNoRemoteFontsPrompt": { + "message": "ฟอนต์เครื่องที่บล็อก", + "description": "" + }, + "settingsNoScriptingPrompt": { + "message": "ปิดการใช้งาน JavaScript", + "description": "The default state for the per-site no-scripting switch" + }, + "settingsNoCSPReportsPrompt": { + "message": "บล็อกรายงาน CSP", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" + }, + "settingsUncloakCnamePrompt": { + "message": "เปิดเผยชื่อตามหลักเกณฑ์", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" + }, + "settingsAdvanced": { + "message": "ขั้นสูง", + "description": "Section for controlling advanced-user settings" + }, + "settingsAdvancedSynopsis": { + "message": "เป็นฟีเจอร์ที่เหมาะสำหรับผู้ใช้ที่เชี่ยวชาญเท่านั้น", + "description": "Description of section controlling advanced-user settings" + }, + "settingsAdvancedUserSettings": { + "message": "การตั้งค่าขั้นสูง", + "description": "For the tooltip of a link which gives access to advanced settings" + }, + "settingsLastRestorePrompt": { + "message": "การคืนค่าครั้งล่าสุด:", + "description": "English: Last restore:" + }, + "settingsLastBackupPrompt": { + "message": "การสำรองข้อมูลครั้งล่าสุด", + "description": "English: Last backup:" + }, + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} ตัวกรองเครือข่าย + {{cosmeticFilterCount}} ตกแต่งตัวกรองจาก:", + "description": "Appears at the top of the _3rd-party filters_ pane" + }, + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} ใช้ไปแล้วจาก {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "3pAutoUpdatePrompt1": { + "message": "อัปเดตรายการตัวกรองอัตโนมัติ", + "description": "A checkbox in the _3rd-party filters_ pane" + }, + "3pUpdateNow": { + "message": "อัปเดตเดี๋ยวนี้", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pPurgeAll": { + "message": "ล้างแคชทั้งหมด", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pParseAllABPHideFiltersPrompt1": { + "message": "แยกวิเคราะห์และบังคับใช้ฟิลเตอร์ตกแต่ง", + "description": "English: Parse and enforce Adblock+ element hiding filters." + }, + "3pParseAllABPHideFiltersInfo": { + "message": "ฟิลเตอร์ตกแต่งทำหน้าที่ซ่อนองค์ประกอบในหน้าเว็บซึ่งถือว่าเป็นภาพที่รบกวนสายตา และไม่สามารถบล็อกได้โดยกลไกการกรองตามคำขอของเครือข่าย", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + }, + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignore generic cosmetic filters", + "description": "This will cause uBO to ignore all generic cosmetic filters." + }, + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "ตัวกรองส่วนแสดงผลทั่วไปคือตัวกรองที่สร้างขึ้นเพื่อใช้กับทุกเว็บไซต์ การเปิดใช้งานตัวเลือกนี้จะช่วยลดการใช้หน่วยความจำและ CPU ที่เพิ่มขึ้นบนหน้าเว็บ ซึ่งเกิดจากการทำงานของตัวกรองเหล่านี้\n\nแนะนำให้เปิดใช้งานตัวเลือกนี้บนอุปกรณ์ที่มีประสิทธิภาพต่ำ", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." + }, + "3pSuspendUntilListsAreLoaded": { + "message": "ระงับกิจกรรมเครือข่ายจนกว่าจะโหลดรายการตัวกรองทั้งหมด", + "description": "A checkbox in the 'Filter lists' pane" + }, + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" + }, + "3pApplyChanges": { + "message": "Apply changes", + "description": "English: Apply changes" + }, + "3pGroupDefault": { + "message": "Built-in", + "description": "Filter lists section name" + }, + "3pGroupAds": { + "message": "โฆษณา", + "description": "Filter lists section name" + }, + "3pGroupPrivacy": { + "message": "ความเป็นส่วนตัว", + "description": "Filter lists section name" + }, + "3pGroupMalware": { + "message": "Malware domains", + "description": "Filter lists section name" + }, + "3pGroupSocial": { + "message": "วิดเจ็ตโซเชียล", + "description": "Filter lists section name" + }, + "3pGroupCookies": { + "message": "คำประกาศการใช้คุ้กกี้", + "description": "Filter lists section name" + }, + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "Filter lists section name" + }, + "3pGroupMultipurpose": { + "message": "Multipurpose", + "description": "Filter lists section name" + }, + "3pGroupRegions": { + "message": "ภูมิภาค, ภาษา", + "description": "Filter lists section name" + }, + "3pGroupCustom": { + "message": "กำหนดเอง", + "description": "Filter lists section name" + }, + "3pImport": { + "message": "นำเข้า...", + "description": "The label for the checkbox used to import external filter lists" + }, + "3pExternalListsHint": { + "message": "หนึ่ง URL ต่อบรรทัด URL ที่ไม่ถูกต้องจะถูกละเว้น", + "description": "Short information about how to use the textarea to import external filter lists by URL" + }, + "3pExternalListObsolete": { + "message": "ล้าสมัย", + "description": "used as a tooltip for the out-of-date icon beside a list" + }, + "3pViewContent": { + "message": "view content", + "description": "used as a tooltip for eye icon beside a list" + }, + "3pLastUpdate": { + "message": "อัพเดตล่าสุด: {{ago}}", + "description": "used as a tooltip for the clock icon beside a list" + }, + "3pUpdating": { + "message": "กำลังอัปเดต...", + "description": "used as a tooltip for the spinner icon beside a list" + }, + "3pNetworkError": { + "message": "ความผิดพลาดของเครือข่ายขวางกั้นการอัปเดต", + "description": "used as a tooltip for error icon beside a list" + }, + "1pTrustWarning": { + "message": "ไม่อนุญาตให้เพิ่มตัวกรองจากแหล่งที่มาที่ไม่น่าเชื่อถือ", + "description": "Warning against copy-pasting filters from random sources" + }, + "1pEnableMyFiltersLabel": { + "message": "เปิดใช้งานการปรับแต่งตัวกรองของฉัน", + "description": "Label for the checkbox use to enable/disable 'My filters' list" + }, + "1pTrustMyFiltersLabel": { + "message": "อนุญาตการปรับแต่งตัวกรองที่ต้องมีความน่าเชื่อถือ", + "description": "Label for the checkbox use to trust the content of 'My filters' list" + }, + "1pImport": { + "message": "นำเข้าและเพิ่มต่อท้าย…", + "description": "Button in the 'My filters' pane" + }, + "1pExport": { + "message": "ส่งออก", + "description": "Button in the 'My filters' pane" + }, + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" + }, + "1pApplyChanges": { + "message": "นำไปใช้", + "description": "English: Apply changes" + }, + "rulesPermanentHeader": { + "message": "กฏถาวร", + "description": "header" + }, + "rulesTemporaryHeader": { + "message": "กฏชั่วคราว", + "description": "header" + }, + "rulesRevert": { + "message": "คืนกลับ", + "description": "This will remove all temporary rules" + }, + "rulesCommit": { + "message": "ยืนยัน", + "description": "This will persist temporary rules" + }, + "rulesEdit": { + "message": "แก้ไข", + "description": "Will enable manual-edit mode (textarea)" + }, + "rulesEditSave": { + "message": "บันทึก", + "description": "Will save manually-edited content and exit manual-edit mode" + }, + "rulesEditDiscard": { + "message": "ละทิ้ง", + "description": "Will discard manually-edited content and exit manual-edit mode" + }, + "rulesImport": { + "message": "นำเข้าจากไฟล์", + "description": "" + }, + "rulesExport": { + "message": "ส่งออกไปยังไฟล์", + "description": "Button in the 'My rules' pane" + }, + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" + }, + "rulesHint": { + "message": "รายการเงื่อนไขตัวกรองแบบไดนามิกของคุณ", + "description": "English: List of your dynamic filtering rules." + }, + "rulesFormatHint": { + "message": "ข้อกำหนดเงื่อนไข: การดำเนินการประเภทแหล่งปลายทาง (เอกสารฉบับเต็ม)", + "description": "English: dynamic rule syntax and full documentation." + }, + "rulesSort": { + "message": "เรียง", + "description": "English: label for sort option." + }, + "rulesSortByType": { + "message": "ประเภทกฎ", + "description": "English: a sort option for list of rules." + }, + "rulesSortBySource": { + "message": "แหล่งที่มา", + "description": "English: a sort option for list of rules." + }, + "rulesSortByDestination": { + "message": "ปลายทาง", + "description": "English: a sort option for list of rules." + }, + "whitelistPrompt": { + "message": "ระบุไซต์ที่เชื่อถือได้เพื่อกำหนดว่าควรปิดการใช้งาน uBlock Origin ที่หน้าเว็บใด พิมพ์หนึ่งรายการต่อบรรทัด", + "description": "A concise description of the 'Trusted sites' pane." + }, + "whitelistImport": { + "message": "นำเข้าและรวม", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExport": { + "message": "ส่งออก", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" + }, + "whitelistApply": { + "message": "ใช้การเปลี่ยนแปลง", + "description": "English: Apply changes" + }, + "logRequestsHeaderType": { + "message": "ประเภท", + "description": "English: Type" + }, + "logRequestsHeaderDomain": { + "message": "โดเมน", + "description": "English: Domain" + }, + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" + }, + "logRequestsHeaderFilter": { + "message": "ตัวกรอง", + "description": "English: Filter" + }, + "logAll": { + "message": "ทั้งหมด", + "description": "Appears in the logger's tab selector" + }, + "logBehindTheScene": { + "message": "ตาราง", + "description": "Pretty name for behind-the-scene network requests" + }, + "loggerCurrentTab": { + "message": "แท็บปัจจุบัน", + "description": "Appears in the logger's tab selector" + }, + "loggerReloadTip": { + "message": "โหลดเนื้อหาแท็บปัจจุบันใหม่", + "description": "Tooltip for the reload button in the logger page" + }, + "loggerDomInspectorTip": { + "message": "สลับตัวตรวจสอบ DOM", + "description": "Tooltip for the DOM inspector button in the logger page" + }, + "loggerPopupPanelTip": { + "message": "สลับแผงป๊อปอัป", + "description": "Tooltip for the popup panel button in the logger page" + }, + "loggerInfoTip": { + "message": "uBlock Origin wiki: ตัวลงบันทึก", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "ล้างบันทึก", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "หยุดการบันทึก Log (ลบทิ้งทั้งหมด)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "ยกเลิกการหยุดบันทึกชั่วคราว", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "สลับตัวกรองบันทึก", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "ตัวกรองเนื้อหาบันทึก", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "ตัวเลือกตัวกรองบันทึก", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "ไม่", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "บล๊อกอยู่", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "อนุญาต", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "แก้ไขแล้ว", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "ฝ่ายที่ 1", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "บุคคลที่ 3", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "รายละเอียด", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "ตัวกรอง", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "รายการตัวกรอง", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "กฎ", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "บริบท", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "ปฐมบท", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "การรวมกลุ่ม", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "ประเภท", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "เงื่อนไข URL", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "บริบท:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "ประเภท", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "ตัวกรองแบบคงที่", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} การร้องขอเครือข่ายของ {{type}} {{br}}ซึ่ง URL ตรงกันกับ {{url}} {{br}}และมีต้นทางที่ {{origin}},{{br}}{{importance}} มีตัวกรองที่ยกเว้นตรงกัน", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "บล็อก", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "อนุญาต", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "ประเภท “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "ประเภทใดก็ได้", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "จาก “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "จากที่ใดก็ได้", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "ยกเว้นเมื่อ", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "ถึงแม้ว่า", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "ตัวกรองแบบคงที่ {{filter}} พบใน:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "ตัวกรองแบบคงที่ไม่พบในรายการตัวกรองที่เปิดอยู่", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "รายการบันทึกที่ไม่ครบถ้วนทั้ง 3 เงื่อนไขตามด้านล่างจะถูกละทิ้งโดยอัตโนมัติ", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "สงวนรายการ {{input}} นาที", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "สงวนจำนวนมากที่สุด {{input}} หน้าโหลดต่อแท็บ", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "สงวนจำนวนมากที่สุด {{input}} รายการต่อแท็บ", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "ใช้ {{input}} บรรทัดต่อรายการในโหมดการขยายแนวตั้ง", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "ซ่อนคอลัมน์", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} เวลา", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} ตัวกรอง/กฏ", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} บริบท", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} การจัดกลุ่ม", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "รายการ", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "ตาราง", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "ธรรมดา", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "ทำเครื่องหมายลง", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "เปิด", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "สร้างรายงานใหม่", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "ค้นหารายงานคล้ายกันบน GitHub", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "เอกสารอ้างอิง", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "อ่านเอกสารข้อมูลที่ uBlock/wiki เพื่อเรียนรู้ฟีเจอร์ทั้งหมดของ uBlock Origin", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "คำถามและการสนับสนุน", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "การตอบคำถามและการสนับสนุนอื่น ๆ ที่เตรียมไว้ให้บน subreddit /r/uBlockOrigin", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "คัดกรองปัญหา/เว็บไซต์ที่ไม่สมบูรณ์", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "รายงานปัญหาการกรองด้วยเว็บไซต์เฉพาะที่ uBlockOrigin/uAssets ตัวติดตามปัญหา. ต้องใช้บัญชี GitHub", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "สำคัญ: หลีกเลี่ยงการใช้ตัวบล๊อกอื่น ๆ ร่วมกันกับ uBlock Origin ซึ่งอาจทำให้เกิดปัญหาในการกรองของหน้าเว็บไซต์ที่ต้องการ", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "เคล็ดลับ: ให้แน่ใจว่ารายการตัวกรองของคุณได้รับการอัปเดตแล้ว ตัวบันทึก เป็นเครื่องมือหลักในการวินิจฉัยปัญหาที่เกี่ยวเนื่อง", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "รายงานข้อผิดพลาด", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "รายงานปัญหาด้วย uBlock Origin เอง uBlockOrigin/uBlock-issue ปัญหาตัวติดตาม. ต้องใช้บัญชี GitHub", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "ข้อมูลการแก้ไขปัญหา", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "ด้านล่างนี้เป็นข้อมูลทางเทคนิคซึ่งอาจเป็นประโยชน์ในกรณีที่อาสาสมัครพยายามให้การช่วยเหลือในการแก้ไขปัญหาให้คุณ", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "รายงานปัญหาตัวกรอง", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "เพื่อเป็นการลดภาระอาสาสมัครจากการรายงานซ้ำซ้อน โปรดตรวจสอบก่อนว่าปัญหาดังกล่าวได้รับการรายงานไปแล้วหรือยัง หมายเหตุ: คลิกที่ปุ่มจะเป็นการส่งต้นทางของหน้าเว็บไปยัง GitHub", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "มีการอัปเดตรายการตัวกรองประจำวัน ให้แน่ใจว่าปัญหาของคุณยังไม่ได้ระบุไว้ในรายการตัวกรองล่าสุด", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "ตรวจสอบว่าปัญหายังคงอยู่หลังจากมีการโหลดหน้าเว็บเพจที่มีปัญหาซ้ำแล้ว", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "ที่อยู่ของเว็บเพจ:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "เว็บเพจ…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- เลือกรายการ --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "แสดงโฆษณาหรือสิ่งที่ตกค้างอยู่", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "มีโอเวอร์เลย์หรือสิ่งอื่น ๆ ที่รบกวน", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "ตรวจหา uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "มีปัญหาที่เกี่ยวเนื่องกับความเป็นส่วนตัว", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "ความผิดปกติเมื่อเปิดใช้งาน uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "เปิดแท็บหรือหน้าต่างที่ไม่ต้องการ", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "นำไปสู่แบดแวร์ ฟิชชิ่ง", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "ติดป้ายเว็บเพจว่าเป็น “NSFW” (“ไม่ปลอดภัยกับงาน (Not Safe For Work)”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "นโยบายความเป็นส่วนตัว", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "บันทึกการเปลี่ยนแปลง", + "description": "" + }, + "aboutCode": { + "message": "ซอร์สโค้ด (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "ผู้ร่วมพัฒนา", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "ซอร์สโค้ด", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "การแปลภาษา", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "รายการตัวกรอง", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "External dependencies (GPLv3-compatible):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO's ถือครองรายการตัวกรองที่เก็บไว้ที่ CDNs:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "CDN ที่สุ่มเลือกจะถูกใช้เมื่อจำเป็นต้องอัปเดตรายการตัวกรอง", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "แบ็กอัพไปยังไฟล์…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "คืนค่าจากไฟล์…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "ปรับเป็นการตั้งค่าเริ่มต้น", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "การตั้งค่าทั้งหมดของคุณจะถูกเขียนทับโดยใช้ข้อมูลที่แบ็กอัพไว้บน {{time}} และ uBlock₀ จะรีสตาร์ท\n\nเขียนทับการตั้งค่าทั้งหมดด้วยข้อมูลที่แบ็กอัพหรือไม่?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "ไม่สามารถอ่านข้อมูลได้หรือข้อมูลไม่ถูกต้อง", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "การตั้งค่าทั้งหมดของคุณจะถูกลบทิ้ง และ uBlock₀ จะรีสตาร์ท\n\nรีเซ็ต uBlock₀ เป็นค่าเริ่มต้นโรงงาน?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "เครือข่ายผิดพลาด: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "สมัครสมาชิก", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "เมื่อนาทีที่แล้ว", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} นาทีที่แล้ว", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "เมื่อชั่วโมงที่แล้ว", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} ชั่วโมงที่แล้ว", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "เมื่อวันก่อน", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} วันที่แล้ว", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "แสดงแดชบอร์ด", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "แสดงบันทึก", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "ปิด", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "เพจถูกบล็อค", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin ป้องกันไม่ให้โหลดหน้าต่อไปนี้:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "เนื่องจากตัวกรองดังต่อไปนี้", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "ไม่ระบุพารามิเตอร์", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "พบใน:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "ย้อนกลับ", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "ปิดหน้าต่างนี้", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "ไม่ต้องแจ้งเตือนอีกเกี่ยวกับเว็บไซต์นี้", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "ปิดใช้งานการปิดกั้นสำหรับ {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "ชั่วคราว", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "ถาวร", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "ดำเนินการ", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "เว็บเพจที่บล๊อกต้องการเด้งไปเว็บไซต์อื่น หากคุณต้องการดำเนินการต่อ คุณจะถูกนำทางโดยตรงไปที่: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "สาเหตุ", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "มัลแวร์", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "ตัวติดตาม", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "น่าสงสัย", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "ส่งออกไปที่เก็บบนคลาวด์", + "description": "tooltip" + }, + "cloudPull": { + "message": "นำเข้าจากที่เก็บบนคลาวด์", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "นำเข้าจากที่เก็บบนคลาวด์และผสานเข้ากับการตั้งค่าปัจจุบัน", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "ชื่ออุปกรณ์นี้:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "คำเตือน! ปรับเปลี่ยนการตั้งค่าขั้นสูงเหล่านี้ด้วยความระมัดระวัง", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "ยืนยัน", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "ใช้การเปลี่ยนแปลง", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "คืนค่ากลับ", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "ไบต์", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "บล๊อกองค์ประกอบในเฟรม…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "สมัครรับรายชื่อตัวกรอง...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "อนุญาตองค์ประกอบชนิด Media ขนาดใหญ่ชั่วคราว", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "ดูต้นฉบับ", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "พิมพ์ทางลัด", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "สลับการล็อกการเลื่อน", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "คัดลอกไปยังคลิปบอร์ด", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "เลือกทั้งหมด", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "สลับตัวกรองการตกแต่ง", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "สลับ JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "ผ่อนปรนโหมดการบล๊อก", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "หน่วยความจำที่ใช้: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "กิโลไบต์", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "เมกะไบต์", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "คลิกเพื่อโหลด", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "ข้อผิดพลาด: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "ไม่สามารถกรองได้สมบูรณ์เมื่อตอนเริ่มเบราว์เซอร์ โหลดหน้าเว็บใหม่เพื่อให้การกรองสมบูรณ์", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" + } +} diff --git a/src/_locales/tr/messages.json b/src/_locales/tr/messages.json index d223813a84d16..b74076ba48d69 100644 --- a/src/_locales/tr/messages.json +++ b/src/_locales/tr/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Sonunda, etkili bir engelleyici. İşlemci ve belleği zorlamaz.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Sonunda, etkili bir engelleyici. İşlemciyi ve belleği yormaz.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Kontrol paneli", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Kontrol paneli", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Ayarlar", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Uyarı! Kaydedilmemiş değişiklikleriniz var", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"3. taraf süzgeçler", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Kal", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Süzgeçlerim", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Yok say", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Kurallarım", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Ayarlar", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Beyaz liste", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filtre listeleri", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Günlükçü", - "description":"Title for the logger window" + "1pPageName": { + "message": "Filtrelerim", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Hakkında", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Kurallarım", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Tıklama: uBlock₀'i bu site için devre dışı bırak\/etkinleştir.\n\nCtrl+tıklama: uBlock₀'i sadece bu sayfa için devre dışı bırak.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Güvenilen siteler", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"engellenen istekler", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Kısayollar", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"bu sayfada", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Günlükçü", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} veya %{{percent}}", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Hakkında", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"yüklendiğinden beri", - "description":"English: since install" + "supportPageName": { + "message": "Destek", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"ya da", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — Kaynak görüntüleyici", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Kontrol panelini açmak için tıklayın", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Gelişmiş ayarlar", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Öğe seçme moduna gir", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Tıklama: uBlock₀'i bu site için devre dışı bırak/etkinleştir.\n\nCtrl+tıklama: uBlock₀'i yalnızca bu sayfada devre dışı bırak.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Günlükçüyü açar", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "uBlock₀'i bu sitede devre dışı bırakmak için tıklayın.\n\nuBlock₀'i yalnızca bu sayfada devre dışı bırakmak için Ctrl+tıklayın.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Bu site için açılır pencere engellemeyi aç\/kapa", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "uBlock₀'i bu sitede etkinleştirmek için tıklayın.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Bu site için büyük medya öğelerini engellemeyi aç\/kapa", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "engellenen istekler", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Bu site için kozmetik süzmeyi aç\/kapa", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "bu sayfada", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Bu site için uzak yazıtiplerini engellemeyi aç\/kapa", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} (%{{percent}})", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Genel kurallar: bu sütun tüm sitelere uygulanan kurallar içindir.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "kurulumdan beri", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Yerel kurallar: bu sütun yalnızca geçerli siteye uygulanan kurallar içindir.\nYerel kurallar genel kuralları geçersiz kılar.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "ya da", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Değişikliklerinizi kalıcı kılmak için tıklayın.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Bu sayfada engellenen", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Değişikliklerinizi geri almak için tıklayın.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Kurulumdan beri engellenen", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"tümü", - "description":"" + "popupDomainsConnected_v2": { + "message": "Bağlanılan alan adları", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"resimler", - "description":"" + "popupTipDashboard": { + "message": "Kontrol panelini açar", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"3. taraf", - "description":"" + "popupTipZapper": { + "message": "Öge silme moduna gir", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"3. taraf css\/resim", - "description":"" + "popupTipPicker": { + "message": "Öge seçme moduna gir", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"satır içi betikleri", - "description":"" + "popupTipLog": { + "message": "Günlükçüyü açar", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"1. taraf betikler", - "description":"" + "popupTipReport": { + "message": "Bu web sitesinde bir sorunu bildir", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"3. taraf betikler", - "description":"" + "popupTipNoPopups": { + "message": "Bu site için açılır pencere engellemeyi aç/kapat", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"3. taraf çerçeveler", - "description":"" + "popupTipNoPopups1": { + "message": "Bu sitede açılır pencerelerin tümünü engellemek için tıklayın", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"bağlanılan adresler", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Bu sitede açılır pencerelerin tümünü artık engellememek için tıklayın", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{total}} taneden {{count}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Bu site için büyük medya ögelerini engellemeyi aç/kapat", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Oluştur", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Bu sitede büyük medya ögelerini engellemek için tıklayın", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Seç", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Bu sitede büyük medya ögelerini artık engellememek için tıklayın", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Çık", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Bu site için kozmetik filtrelemeyi aç/kapat", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Ön İzleme", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Bu sitede, kozmetik filtrelemeyi devre dışı bırakmak için tıklayın", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Ağ süzgeçleri", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Bu sitede, kozmetik filtrelemeyi etkinleştirmek için tıklayın", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Kozmetik süzgeçler", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Bu site için uzak yazı tiplerini engellemeyi aç/kapat", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Tıkla, Ctrl-tıkla", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Bu sitede uzak yazı tiplerini engellemek için tıklayın", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Ögeyi engelle", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Bu sitede uzak yazı tiplerini artık engellememek için tıklayın", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Engellenen reklamların yerlerini gizle", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "JavaScript'i bu sitede devre dışı bırakmak için tıklayın", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Engellenmiş reklam sayısını simge üzerinde göster", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Artık bu sitede JavaScript'i devre dışı bırakmamak için tıklayın", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"İpuçlarını kapat", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Açılır pencereler", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Uygun olduğunda içerik menüsünü kullan", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Büyük medya ögeleri", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Renk körü dostu", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Kozmetik filtreleme", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Bulut depo desteğini etkinleştir", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Uzak yazı tipleri", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Deneyimli bir kullanıcıyım (Okunması gerekli<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Kaynak ön getirimini devre dışı bırak (engellenmiş ağ isteklerine herhangi bir bağlantı kurulmasını engellemek için)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Daha fazla", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Köprü denetimini devre dışı bırak", - "description":"English: " + "popupLessButton_v2": { + "message": "Daha az", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"WebRTC'nin yerel IP adreslerini sızdırmasını engelle", - "description":"English: " + "popupTipGlobalRules": { + "message": "Genel kurallar: bu sütun tüm sitelere uygulanan kurallar içindir.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Varsayılan davranış", - "description":"" + "popupTipLocalRules": { + "message": "Yerel kurallar: bu sütun yalnızca geçerli siteye uygulanan kurallar içindir.\nYerel kurallar genel kuralları geçersiz kılar.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Bu varsayılan davranışlar site bazında geçersiz kılınabilir", - "description":"" + "popupTipSaveRules": { + "message": "Değişikliklerinizi kalıcı kılmak için tıklayın.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Kozmetik süzgeçleri devre dışı bırak", - "description":"" + "popupTipRevertRules": { + "message": "Değişikliklerinizi geri almak için tıklayın.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Belirlenenden büyük medya öğelerini engelle {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "tümü", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Uzak yazıtiplerini engelle", - "description":"" + "popupImageRulePrompt": { + "message": "resimler", + "description": "" }, - "settingsStorageUsed":{ - "message":"Kullanılan Alan: {{value}} bayt", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "3. taraf", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Son geri yükleme:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "3. taraf CSS/resimler", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Son yedekleme:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "satır içi betikleri", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} ağ süzgeci + {{cosmeticFilterCount}} kozmetik süzgeç:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "1. taraf betikler", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{total}} taneden {{used}} adedi kullanıldı", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "3. taraf betikler", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Süzgeç listelerini otomatik güncelle.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "3. taraf çerçeveler", + "description": "" }, - "3pUpdateNow":{ - "message":"Şimdi güncelle", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "bağlanılan adresler", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Tüm önbelleği temizle", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{total}} taneden {{count}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Kozmetik süzgeçleri incele ve uygula.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Sürüm", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Bu seçenek Adblock Plus-uyumlu “öğe gizleme” süzgeçlerinin<\/a> işlenmesini ve uygulanmasını sağlar. Bu süzgeçler aslında kozmetiktir, bir web sayfasında görsel rahatsızlık yaratan ve ağ isteği-tabanlı süzme motoru tarafından engellenemeyecek olan öğelerin gizlenmesine yarar.<\/p>

      Bu özelliği etkinleştirmek uBlock₀'in bellek kullanımını artırır.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "betik", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Genel kozmetik süzgeçleri yoksay.", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "çerçeve", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Genel kozmetik süzgeçler tüm web sayfalarına uygulanan kozmetik süzgeçlerdir.

      uBlock₀ tarafından verimli bir şekilde işlenmesine rağmen genel kozmetik süzgeçler bazı web sayfalarında ölçülebilir bellek ve CPU ek yüküne neden olabilir, özellikle büyük ve uzun süreli olanlar.

      Bu seçeneğin etkinleştirmesi, web sayfalarına eklenen genel kozmetik süzgeçlerin işlenmesinden kaynaklı bellek ve CPU ek yükünü ortadan kaldıracaktır ve ek olarak uBlock₀'un kendi bellek izini de azaltacaktır.

      Daha az güçlü cihazlarda bu seçeneğin etkinleştirilmesi tavsiye edilir.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Oluştur", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Engellenmiş alan adlarının listesi", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Seç", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Değişiklikleri uygula", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Çık", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Reklamlar", - "description":"English: Ads" + "pickerPreview": { + "message": "Ön İzleme", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Gizlilik", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Ağ filtreleri", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Zararlı alan adları", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Kozmetik filtreler", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Sosyal", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Tıkla, Ctrl-tıkla", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Çok-amaçlı", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Ögeyi engelle…", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Bölgeler, diller", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Engellenmiş ögelerin yertutucularını gizle", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Özel", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Engellenen istek sayısını simge üstünde göster", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Her satırda bir URL. ‘!’ ile başlayan satırlar göz ardı edilir. Geçersiz URL'ler sessizce yoksayılır.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "İpuçlarını kapat", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Uygula", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Uygun olduğunda içerik menüsünü kullan", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"önbelleği temizle", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Renk körü dostu", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"yeni sürüm mevcut", - "description":"English: new version available" + "settingsAppearance": { + "message": "Görünüm", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"eski", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Tema", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Son güncelleme: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Özel vurgu rengi", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Her satırda bir süzgeç. Süzgeç bir alan adı veya Adblock Plus uyumlu bir süzgeç olabilir. ‘!’ ile başlayan satırlar yok sayılır.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Bulut depolama desteğini etkinleştir", + "description": "" }, - "1pImport":{ - "message":"İçe aktar ve sonuna ekle", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "İleri düzey kullanıcıyım", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Dışa aktar", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Kaynak ön getirimini devre dışı bırak (engellenmiş ağ istekleri için her bağlantıyı engellemek için)", + "description": "English: " }, - "1pExportFilename":{ - "message":"ublock-statik-süzgeçlerim_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Köprü denetimini devre dışı bırak", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Değişiklikleri uygula", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "WebRTC'nin yerel IP adreslerini sızdırmasını engelle", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Kalıcı kurallar", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Varsayılan davranış", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Geçici kurallar", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Bu varsayılan davranışlar site bazında geçersiz kılınabilir", + "description": "" }, - "rulesRevert":{ - "message":"Geri al", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Kozmetik filtreleri devre dışı bırak", + "description": "" }, - "rulesCommit":{ - "message":"İşle", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "{{input}} KB'tan büyük medya ögelerini engelle", + "description": "" }, - "rulesEdit":{ - "message":"Düzenle", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Uzak yazı tiplerini engelle", + "description": "" }, - "rulesEditSave":{ - "message":"Kaydet", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "JavaScript'i devre dışı bırak", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"İptal et", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "CSP raporlarını engelle", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Dosyadan içe aktar...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Kuralsal isimleri ortaya çıkar", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Dosyaya aktar", - "description":"" + "settingsAdvanced": { + "message": "Gelişmiş", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"ublock-dinamik-kurallarım_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Yalnız teknik kullanıcılara uygun ayarlar", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Dinamik süzme kurallarınızın listesi.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "gelişmiş ayarlar", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Kural sözdizimi: kaynak hedefi türü işlemi<\/code> (bütün belgeler<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Son geri yükleme:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"uBlock₀'in devre dışı bırakılacağı alan adları listeniz. Her satırda bir girdi. Geçersiz alan adları sessizce yok sayılır.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Son yedekleme:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"İçe aktar ve sonuna ekle", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} ağ filtresi + {{cosmeticFilterCount}} kozmetik filtre:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Dışa aktar", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{total}} taneden {{used}} adedi kullanıldı", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"ublock-beyazlistem_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Filtre listelerini kendiliğinden güncelle", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Değişiklikleri uygula", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Şimdi güncelle", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Tür", - "description":"English: Type" + "3pPurgeAll": { + "message": "Tüm önbellekleri temizle", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Alan adı", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Kozmetik filtreleri incele ve uygula", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Kozmetik filtreler, bir web sayfasında görsel rahatsızlık yaratan ve ağ isteği-tabanlı filtreleme motorlarınca engellenemeyen ögelerin gizlenmesini sağlar.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Süzgeç", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Genel kozmetik filtreleri yok say", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Tümü", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Genel kozmetik filtreler tüm web sayfalarına uygulanacak kozmetik filtrelerdir. Bu seçeneğin etkinleştirilmesi, genel kozmetik filtrelerin işlenmesi nedeniyle web sayfalarına eklenen bellek ve işlemci yükünü ortadan kaldırır.\n\nDaha az güçlü aygıtlarda bu seçeneğin etkinleştirilmesi önerilir.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Sahne arkası", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Ağ etkinliğini, tüm filtre listeleri yüklenene kadar askıya al", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"günlük kayıtlarını süz", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Engellenmiş alan adlarının listesi", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Maksimum günlük kayıt sayısı", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Değişiklikleri uygula", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Bağlam:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Yerleşik", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tür:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Reklamlar", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Dinamik URL süzme", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Gizlilik", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Statik süzme", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Kötü amaçlı yazılım koruması, güvenlik.", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"Bu adres ile eşleşen {{url}} {{br}}ve kaynağı {{origin}} olan, {{type}} ağ isteklerini {{br}}eşleşen istisna süzgeci {{importance}} {{action}}.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Sosyal medya tuşları", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Engelle", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Çerez bildirimleri", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"İzin ver", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Can sıkıcı ögeler", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"“{{type}}” türündeki", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Çok-amaçlı", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"herhangi bir türdeki", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Bölgeler, diller", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"“{{origin}}” adresi", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Özel", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"herhangi bir yer", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "İçe aktar…", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"olmasa da", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Her satırda bir URL. Geçersiz URL'ler sessizce yok sayılacaktır.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"olsa da", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Güncel değil.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statik süzgecin {{filter}} bulunduğu listeler:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "içeriği görüntüle", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Değişiklikler", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Son güncelleme: {{ago}}.\nGüncelleştirmeye zorlamak için tıklayın.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Viki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Güncelleniyor…", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Destek", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Bir ağ hatası kaynağın güncellenmesini engelledi.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Kaynak kodu (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Güvenilmeyen kaynaklardan filtre eklemeyin.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Katkıda bulunanlar", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Özel filtrelerimi etkinleştir", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Dosyaya yedekle", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Güven gerektiren özel filtrelere izin ver", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"ublock-yedek_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "İçe aktar ve ekle…", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Dosyadan geri yükle...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Dışa aktar…", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Varsayılan ayarlara sıfırla...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "ublock-statik-filtrelerim_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Tüm ayarlarınız {{time}} tarihinde yedeklenmiş veriler kullanarak değiştirilecek ve uBlock₀ yeniden başlayacak. \n\nYedeklenmiş verileriniz kullanılarak mevcut tüm ayarlarınız değiştirilsin mi?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Değişiklikleri uygula", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Veri okunamıyor ya da geçersiz", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Kalıcı kurallar", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Tüm ayarlarınızı silinecek, ve uBlock₀ yeniden başlayacak.\n\nuBlock₀ fabrika ayarlarına geri dönsün mü?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Geçici kurallar", + "description": "header" }, - "errorCantConnectTo":{ - "message":"{{url}} adresine bağlanılamıyor", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Geri al", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Aşağıdaki URL, özel süzgeç listenize eklensin mi?\n\nBaşlık: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "İşle", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"1 dakika önce", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Düzenle", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} dakika önce", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Kaydet", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"1 saat önce", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "İptal et", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} saat önce", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Dosyadan al…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"1 gün önce", - "description":"English: a day ago" + "rulesExport": { + "message": "Dosyaya aktar…", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} gün önce", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "ublock-dinamik-kurallarım_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Kontrol Panelini Göster", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Dinamik filtreleme kurallarınızın listesi.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Günlükçüyü Göster", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Kural sözdizimi: kaynak hedefi türü işlemi (bütün belgeler).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"kapalı", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Sıralama:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock aşağıdaki sayfanın yüklenmesini engelledi:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Kural türü", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Aşağıdaki süzgeçten dolayı", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Kaynak", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"parametresiz", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Hedef", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Bulunduğu liste:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Güvenilen site yönergeleri, uBlock Origin'in devre dışı bırakılması gerektiği web sayfalarını belirler. Her satırda bir girdi.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Geri dön", - "description":"English: Go back" + "whitelistImport": { + "message": "İçe aktar ve ekle…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Bu pencereyi kapat", - "description":"English: Close this window" + "whitelistExport": { + "message": "Dışa aktar…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"{{hostname}} için katı engellemeyi devre dışı bırak", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "ublock-güvenilen-sitelerim_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Geçici olarak", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Değişiklikleri uygula", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Kalıcı olarak", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Tür", + "description": "English: Type" }, - "cloudPush":{ - "message":"Bulut depoya aktar", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Alan adı", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Bulut depodan al", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Bulut depolamadan içeri aktar ve şu anki ayarlarla birleştir", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Filtre", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Tümü", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Bu cihazın adı:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Sekmesiz", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Gönder", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Geçerli sekme", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Geri al", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Sekme içeriğini tekrar yükle", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"byte", - "description":"" + "loggerDomInspectorTip": { + "message": "DOM araştırıcısını aç/kapat", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Geçici olarak büyük medya öğelerine izin ver", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Açılır paneli aç/kapat", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"Bu girdi en sonda olmalıdır", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin viki: Günlükçü", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Günlükçüyü temizle", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Günlükçüyü duraklat (tüm gelen veriyi yok say)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Günlükçüyü devam ettir", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Günlük filtrelemeyi aç/kapat", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "günlükçü içeriğini filtrele", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Günlükçü filtreleme seçenekleri", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Değil", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "olaylı", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "engelli", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "izinli", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "düzenlendi", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "1. taraf", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "3. taraf", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Ayrıntılar", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Filtre", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Filtre listesi", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Kural", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Bağlam", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Kök bağlam", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Taraf", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Tür", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL kuralı", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Bağlam:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Tür:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Statik filtre", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{url}} URL adresi ile eşleşen {{br}}ve kaynağı {{origin}} olan,{{br}}eşleşen bir istisna filtresi {{importance}} {{br}}{{type}} ağ isteklerini {{action}} {{br}}.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Engelle", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "İzin ver", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "“{{type}}” türündeki", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "her türdeki", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "“{{origin}}” adresi", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "her yerden", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "olmasa da", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "olsa da", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Statik filtrenin {{filter}} bulunduğu listeler:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Statik filtre, şu anda etkin olan filtre listelerinde bulunamadı", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Aşağıdaki üç koşulu sağlamayan günlükçü girdileri kendiliğinden yok sayılacaktır:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Son {{input}} dakikadaki girdileri sakla", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Her sekme için en çok {{input}} sayfa yüklemesi sakla", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Her sekme için en çok {{input}} girdi sakla", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Dikey genişletilmiş modda, her girdi için {{input}} satır kullan", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Sütunları gizle:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Tarih", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Filtre/kural", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Bağlam", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Taraf", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Liste", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Tablo", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Yalın", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Aç", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "GitHub'da yeni rapor oluştur", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "GitHub'da benzer raporları bul", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Belgeler", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "uBlock Origin'in özelliklerinin tamamı hakkında bilgi edinmek için uBlock/wiki adresindeki belgeri okuyun.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Sorular ve destek", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Sorulara cevaplar ve diğer türlü yardım desteği /r/uBlockOrigin subreddit'inde sunulmaktadır.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filtre sorunları/web sitesi bozuk", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Belirli web siteleriyle ilgili filtre sorunlarını uBlockOrigin/uAssets sorun izleyicisine bildirin. Github hesabı gerektirir.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Önemli: uBlock Origin'le birlikte, belirli web sitelerinde filtre sorunlarına neden olabileceği için, diğer benzer amaçlı engelleyicileri kullanmaktan kaçının.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "İpuçları: Filtre listenizin güncelliğinden emin olun. Günlükçü filtre bağlantılı sorunları tanılamada temel araçtır.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Hata raporu", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "uBlock Origin'in kendisiyle ilgili sorunları uBlockOrigin/uBlock-issue sorun izleyicisine bildirin. Github hesabı gerektirir.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Hata Giderme Bilgisi", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Aşağıdaki, gönüllüler size bir sorunu çözmede yardım etmeye çalışırken, faydalı olabilecek teknik bilgidir.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Bir filtre sorunu bildirin", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Gönüllüleri yinelenen bildirimlerle meşgul etmemek için lütfen sorunun daha önce bildirilip bildirilmediğini kontrol edin.\nNot: Butona tıklamak, sayfanın kaynağının GitHub'a gönderilmesine neden olacaktır.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filtre listeleri günlük olarak güncellenir. Sorununuzun en son filtre listelerinde zaten ele alınıp alınmadığından emin olun.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Sorunlu web sayfasını yeniden yükleyerek sorunun devam ettiğini doğrulayın.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Web sayfasının adresi:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Web sayfası…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Bir girdi seçin --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Reklam veya reklam artıkları gösteriyor", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Kaplamaları veya diğer sıkıntıları var", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "uBlock Origin’i algılıyor", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Gizlilikle ilgili sorunları var", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "uBlock Origin etkinken bozuluyor", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "İstenmeyen sekme veya pencereler açıyor", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Kötü niyetli yazılıma yönlendiriyor, oltalama", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Web sayfasını uygunsuz (“NSFW”) olarak etiketle (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Gizlilik ilkesi", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Değişiklik günlüğü", + "description": "" + }, + "aboutCode": { + "message": "Kaynak kodu (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Katkıda bulunanlar", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Kaynak kodu", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Çeviriler", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Filtre listeleri", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Dış bağımlılıklar (GPLv3-uyumlu):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO'nun kendi filtre listeleri ücretsiz olarak şu CDN'lerde barındırılır:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Bir filtre listesinin güncellenmesi gerektiğinde rastgele seçilen bir CDN kullanılır", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Dosyaya yedekle…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "ublock-yedeğim_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Dosyadan geri yükle…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Varsayılan ayarlara sıfırla…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Tüm ayarlarınız {{time}} tarihinde yedeklenmiş veriler kullanarak değiştirilecek ve uBlock₀ yeniden başlayacak. \n\nYedeklenmiş verileriniz kullanılarak var olan tüm ayarlarınız değiştirilsin mi?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Veri okunamadı veya geçersiz", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Tüm ayarlarınızı silinecek, ve uBlock₀ yeniden başlayacak.\n\nuBlock₀ fabrika ayarlarına sıfırlansın mı?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Ağ hatası: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Abone ol", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "bir dakika önce", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} dakika önce", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "bir saat önce", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} saat önce", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "bir gün önce", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} gün önce", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Kontrol Panelini Göster", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Günlükçüyü Göster", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "kapalı", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Sayfa engellendi", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin aşağıdaki sayfanın yüklenmesini engelledi:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Bu filtre nedeniyle:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "değişkensiz", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Bulunduğu liste:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Geri git", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Bu pencereyi kapat", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Bu site için beni bir daha uyarma", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "{{hostname}} için katı engellemeyi devre dışı bırak", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Geçici olarak", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Kalıcı olarak", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Devam et", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Engellenen sayfa sizi başka bir siteye yönlendirmek istiyor. Devam etmek isterseniz doğrudan şuraya yönlendirileceksiniz: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Sebep:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Kötü niyetli", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "İzleyici", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Güvenilmez", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Bulut depolamaya aktar", + "description": "tooltip" + }, + "cloudPull": { + "message": "Bulut depolamadan içe aktar", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Bulut depolamadan içe aktar ve şu anki ayarlarla birleştir", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Bu aygıtın adı:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Uyarı! Bu gelişmiş ayarları değiştirmenin sorumluluğu size aittir.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Gönder", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Değişiklikleri uygula", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Geri al", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "byte", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Çerçevedeki ögeyi engelle…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Filtre listesine abone ol…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Geçici olarak büyük medya ögelerine izin ver", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Kaynağı görüntüle…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Bir kısayol girin", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Kilitli kaydırmayı aç/kapat", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Panoya kopyala", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Tümünü seç", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Kozmetik filtrelemeyi aç/kapat", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "JavaScript'i Aç/Kapat", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Engelleme modunu gevşet", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Kullanılan depolama: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Yüklemek için tıkla", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Hata sayısı: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Tarayıcı açılışında düzgün filtreleme yapılamadı.\nDüzgün filtreleme için sayfayı yenileyin.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Bu girdi en sonda olmalıdır", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/uk/messages.json b/src/_locales/uk/messages.json index 88482903fcac5..21a8867f68cd9 100644 --- a/src/_locales/uk/messages.json +++ b/src/_locales/uk/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Ефективний блокувальник реклами таки з’явився. Не навантажує процесор та пам'ять.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Ефективний блокувальник реклами таки з’явився. Не навантажує процесор та пам'ять.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"µBlock — Панель керування", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "µBlock — Панель керування", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Налаштування", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Увага! Є незбережені зміни", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Сторонні фільтри", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Залишитись", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Власні фільтри", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Ігнорувати", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Мої правила", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Налаштування", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Білий список", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Списки фільтрів", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Журнал мережевих запитів", - "description":"Title for the logger window" + "1pPageName": { + "message": "Власні фільтри", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Про програму", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Мої правила", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Натиснення: вимикає\/умикає µBlock для поточного сайту.\n\nCtrl+натиснення: вимикає µBlock тільки для цієї сторінки.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Білий список", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"запитів заблоковано", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Комбінації клавіш", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"на цій сторінці", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Журнал мережевих запитів", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} або {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Про програму", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"від моменту встановлення", - "description":"English: since install" + "supportPageName": { + "message": "Підтримка", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"або", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ – Переглядач ресурсів", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Клацніть, щоб відкрити приладну дошку", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Розширені налаштування", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Перейти у режим вибору елементів", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Натиснення: вимикає/умикає uBlock₀ для поточного сайту.\n\nCtrl+натиснення: вимикає uBlock₀ тільки для цієї сторінки.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Перейти до журналу запитів", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Натисніть для вимкнення uBlock₀ для поточного сайту.\n\nНатисніть з Ctrl для вимкнення uBlock₀ лише для цієї сторінки.", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Увімкнути блокування всіх виринаючих вікон цього сайту", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Натисніть, щоб увімкнути uBlock₀ для цього сайту.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Перемкнути блокування великих медіа елементів на цьому сайті", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "запитів заблоковано", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Переключити косметичний фільтр для цього сайту", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "на цій сторінці", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Перемкнути блокування віддалених шрифтів для цього сайту", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} або {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Глобальні правила: цей стовпчик для правил, що застосовуються для всіх сайтів.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "від моменту встановлення", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Локальні правила: цей стовпчик для правил, що застосовуються лише для цього сайту.\nЛокальні правила замінюють глобальні.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "або", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Натисніть, щоб зробити ваші зміни постійними.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Заблоковано на цій сторінці", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Натисніть, щоб відкинути ваші зміни.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Заблоковано з моменту встановлення", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"всі", - "description":"" + "popupDomainsConnected_v2": { + "message": "Підключені домени", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"зображення", - "description":"" + "popupTipDashboard": { + "message": "Перейти до панелі керування", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"сторонні", - "description":"" + "popupTipZapper": { + "message": "Перейти в режим блокування елементів", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"сторонні css\/зображення", - "description":"" + "popupTipPicker": { + "message": "Перейти у режим вибору елементів", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"вбудовані сценарії", - "description":"" + "popupTipLog": { + "message": "Перейти до журналу запитів", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"Основні скрипти", - "description":"" + "popupTipReport": { + "message": "Повідомити про помилку на цьому вебсайті", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"Сторонні скрипти", - "description":"" + "popupTipNoPopups": { + "message": "Увімкнути блокування всіх виринаючих вікон цього сайту", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"Сторонні фрейми", - "description":"" + "popupTipNoPopups1": { + "message": "Натисніть, щоб заблокувати всі спливні вікна на цьому сайті", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"доменів під’єднано", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Натисніть для скасування блокування всіх спливних вікон на цьому сайті", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} з {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Увімк/Вимк блокування великих медіа елементів на цьому сайті", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Створити", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Натисніть для блокування великих медіаелементів на цьому сайті", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Вибрати", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Натисніть для скасування блокування великих медіаелементів на цьому сайті", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Вийти", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Переключити косметичний фільтр для цього сайту", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Попередній перегляд", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Натисніть для вимкнення косметичних фільтрів на цьому сайті", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Мережні фільтри", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Натисніть для увімкнення косметичних фільтрів на цьому сайті", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Косметичні фільтри", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Перемкнути блокування віддалених шрифтів для цього сайту", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Клік, Ctrl-клік", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Натисніть для блокування віддалених шрифтів на цьому сайті", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Заблокувати елемент", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Натисніть для скасування блокування віддалених шрифтів на цьому сайті", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Ховати заповнювачі заблокованих елементів", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Натисніть, щоб повністю вимкнути JavaScript на цьому сайті", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Показувати кількість заблокованих запитів на піктограмі", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Натисніть, щоб скасувати вимкнення JavaScript на цьому сайті", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Вимкнути підказки", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Спливні вікна", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Використовувати контекстне меню там, де це можливо", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Великі медіаелементи", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Підтримка дальтонізму", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Косметичне фільтрування", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Увімкнути підтримку хмарного сховища", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Віддалені шрифти", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Я досвідчений користувач (Обов’язково для прочитання<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavasScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Вимкнути передзавантаження (щоб унеможливити будь-які з’єднання для заблокованих мережевих запитів)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Більше", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Вимкнути перевірку та попередження щодо гіперпосилань", - "description":"English: " + "popupLessButton_v2": { + "message": "Менше", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Унеможливити витік локальної IP-адреси через WebRTC", - "description":"English: " + "popupTipGlobalRules": { + "message": "Глобальні правила: цей стовпчик для правил, що застосовуються для всіх сайтів.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Стандартні налаштування", - "description":"" + "popupTipLocalRules": { + "message": "Локальні правила: цей стовпчик для правил, що застосовуються лише цього сайту.\nЛокальні правила замінюють глобальні.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Ці стандартні налаштування можуть бути перевизначені для кожного сайту окремо", - "description":"" + "popupTipSaveRules": { + "message": "Натисніть, щоб зробити ваші зміни постійними.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Вимкнути косметичні фільтри", - "description":"" + "popupTipRevertRules": { + "message": "Натисніть, щоб відкинути ваші зміни.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Блокувати медіа елементи розміром від {{input:number}} кБ", - "description":"" + "popupAnyRulePrompt": { + "message": "всі", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Блокувати сторонні шрифти", - "description":"" + "popupImageRulePrompt": { + "message": "зображення", + "description": "" }, - "settingsStorageUsed":{ - "message":"Використано: {{value}} байт", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "сторонні", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Востаннє відновлено:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "Сторонні CSS/зображення", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Остання резервна копія:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "вбудовані сценарії", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} мережевих фільтрів + {{cosmeticFilterCount}} косметичних фільтрів з:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "Основні скрипти", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"використовується {{used}} з {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "Сторонні скрипти", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Автоматично оновити списки фільтрів.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "Сторонні фрейми", + "description": "" }, - "3pUpdateNow":{ - "message":"Оновити зараз", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "доменів під’єднано", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Очистити всі кеші", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} з {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Розбір та застосування фільтрів приховування елементів Adblock+.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Версія", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Ця опція вмикає аналіз та застосування Adblock Plus-сумісних фільтрів “приховання елементв” <\/a>. По суті це косметичні фільтри – приховують елементи сторінки, які візуально дратують і не можуть бути блоковані механізмом фільтрації мережевих запитів.<\/p>

      Увімкнення цієї функції збільшує споживання пам’яті µBlock<\/i>'ом.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "скрипт", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ігнорувати загальні косметичні фільтри.", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "рамка", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Загальні косметичні фільтри — це косметичні фільтри, які повинні застосовуватися до всіх веб-сторінок.

      Хоча uBlock і звертається з ними ефективно, вони все одно можуть вимагати значну кількість ресурсів на деяких, особливо великих, сторінках.

      Увімкнення цього параметра знизить споживання ресурсів таких сторінок від застосування загальних косметичних фільтрів, а також знизить споживання пам'яті самого uBlock.

      Рекомендується увімкнути цей параметр на слабких пристроях.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Створити", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Перелік заблокованих хостів", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Вибрати", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Застосувати зміни", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Вийти", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Реклама", - "description":"English: Ads" + "pickerPreview": { + "message": "Попередній перегляд", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Конфіденційність", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Мережні фільтри", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Домени шкідливих програм", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Косметичні фільтри", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Соціальні", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Клік, Ctrl-клік", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Універсальні", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Заблокувати елемент", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Регіони, мови", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Ховати заповнювачі заблокованих елементів", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Користувацькі", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Показувати кількість заблокованих запитів на піктограмі", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Одне посилання на рядок. Рядки, що починаються з ‘!’ будуть проігноровані. Невірні посилання будуть тихо проігноровані.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Вимкнути підказки", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Проаналізувати", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Використовувати контекстне меню там, де це можливо", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"очистити кеш", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Підтримка дальтонізму", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"наявна нова версія", - "description":"English: new version available" + "settingsAppearance": { + "message": "Зовнішній вигляд", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"застаріле", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Тема", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Востаннє оновленно: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Індивідуальний колір акценту", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Один фільтр на рядок. Фільтром може бути адреса сайту або фільтр у Adblock Plus-сумісному записі. Рядки, що починаються з ‘!’ ігноруються.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Увімкнути підтримку хмарного сховища", + "description": "" }, - "1pImport":{ - "message":"Імпортувати та додати", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Я досвідчений користувач", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Експортувати", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Вимкнути передзавантаження (щоб унеможливити будь-які з’єднання для заблокованих мережевих запитів)", + "description": "English: " }, - "1pExportFilename":{ - "message":"ublock-custom-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Вимкнути перевірку гіперпосилань", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Застосувати зміни", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Унеможливити витік локальної IP-адреси через WebRTC", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Постійні правила", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Типові налаштування", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Тимчасові правила", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Усталені налаштування можуть бути перевизначеними для кожного сайту окремо", + "description": "" }, - "rulesRevert":{ - "message":"Скасувати зміни", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Вимкнути косметичні фільтри", + "description": "" }, - "rulesCommit":{ - "message":"Затвердити", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Блокувати медіа елементи розміром від {{input:number}} кБ", + "description": "" }, - "rulesEdit":{ - "message":"Редагувати", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Блокувати сторонні шрифти", + "description": "" }, - "rulesEditSave":{ - "message":"Зберегти", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Вимкнути JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Відкинути", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Блокувати CSP-звіти", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":" Імпортувати з файлу...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Показати CNAME назви", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Експорт до файлу...", - "description":"" + "settingsAdvanced": { + "message": "Додатково", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Функції, що потрібні лише технічним користувачам", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Список правил динамічного фільтрування.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "розширені налаштування", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Синтаксис правил: джерело призначення тип дія<\/code> (повна документація<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Востаннє відновлено:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Список тих доменів, для яких µBlock буде вимикатись. Один запис на рядок. Недопустимі назви будуть ігноруватись.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Остання резервна копія:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Імпортувати та додати", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} мережевих фільтрів + {{cosmeticFilterCount}} косметичних фільтрів з:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Експортувати", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "використовується {{used}} з {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Автоматично оновити списки фільтрів.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Застосувати зміни", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Оновити зараз", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Тип", - "description":"English: Type" + "3pPurgeAll": { + "message": "Очистити всі кеші", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Домен", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Розбір та застосування фільтрів приховування елементів Adblock+.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"Адреса", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Косметичні фільтри служать для приховування елементів на вебсторінці, які вважаються візуально неприємними та не можуть бути заблоковані мережевими механізмами фільтрації на основі запитів.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Фільтр", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Ігнорувати загальні косметичні фільтри", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Все", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Загальні косметичні фільтри — це ті косметичні фільтри, які призначені для застосування на всіх вебсайтах. Увімкнення цієї опції усуне навантаження на пам'ять і процесор, що додається до вебсторінок у результаті обробки загальних косметичних фільтрів.\n\nРадимо вмикати цю опцію на менш потужних пристроях.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"За лаштунками", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Призупинити мережеві операції доки всі списки фільтрів не завантажаться", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"фільтр журналу записів", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Перелік заблокованих хостів", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Максимальна кількість записів в журналі", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Застосувати зміни", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Контекст:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Вбудовані", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Тип:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Реклама", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Динамічна фільтрація посилань", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Конфіденційність", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Статична фільтрація", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Домени шкідливих програм", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} мережеві запити {{type}}, {{br}}посилання яких збігаються з {{url}} {{br}}та які {{origin}},{{br}}{{importance}} є відповідний фільтр-виняток.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Віджети соціальних мереж", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Блокувати", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Повідомлення про файли cookie", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Дозволити", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Надокучливості", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"типу „{{type}}“", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Універсальні", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"будь-якого типу", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Регіони, мови", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"походять із „{{origin}}“", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Користувацькі", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"мають будь-яке походження", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Імпорт...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"крім випадків, коли", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Одне посилання на рядок. Невірні посилання будуть проігноровані без попередження.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"навіть якщо", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Застарілий.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Статичний фільтр {{filter}} знайдено в:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "переглянути вміст", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Журнал змін", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Останнє оновлення: {{ago}}\nКлацніть для примусового оновлення.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Вікі", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Оновлюється...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Підтримка", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Оновлення не вдалося, у зв'язку з помилкою мережі.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Джерельний код (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Не додавати фільтри з невідомих джерел.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Учасники", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Увімкнути власні фільтри", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Зберегти резервну копію у файл...", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Дозволити власні фільтри, які потребують довіри", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Імпортувати та додати", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Відновити з файлу...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Експортувати", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Відновити параметри за замовчанням...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "ublock-custom-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Всі ваші налаштування будуть перезаписані з резервної копії від {{time}} та µBlock буде перезапущено.\n\nПерезаписати всі налаштування використовуючи резервну копію?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Застосувати зміни", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Дані помилкові або не можуть бути прочитані", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Постійні правила", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Ваші налаштування буде видалено та µBlock буде перезапущено.\n\nПовернути µBlock до початкових налаштувань?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Тимчасові правила", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Не вдалося підключитися до {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Скасувати зміни", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"µBlock: Додати це посилання до списку ваших фільтрів?\n\nНазва: \"{{title}}\"\nПосилання: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Затвердити", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"хвилину тому", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Редагувати", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} хвилин(и) тому", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Зберегти", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"годину тому", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Відкинути", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} годин(и) тому", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Імпорт з файлу…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"день тому", - "description":"English: a day ago" + "rulesExport": { + "message": "Експорт до файлу...", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} дні(в) тому", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Показати панель керування", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Список правил динамічного фільтрування.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Показати журнал мережевих запитів", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Синтаксис правил: джерело призначення тип дія (повна документація).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"Відключений", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Сортування:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock запобіг завантаженню наступної сторінки:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Тип правила", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Через наступний фільтр", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Джерело", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"без параметрів", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Призначення", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Знайдено в:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Ваш список адрес сайтів, для яких µBlock буде неактивним. Додайте по одному запису на рядок. Невірні адреси будуть проігноровані без попереджень та закоментовані.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Повернутись назад", - "description":"English: Go back" + "whitelistImport": { + "message": "Імпортувати та додати", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Зачинити це вікно", - "description":"English: Close this window" + "whitelistExport": { + "message": "Експортувати", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Вимкнути повне блокування для {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Тимчасово", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Застосувати зміни", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Завжди", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Тип", + "description": "English: Type" }, - "cloudPush":{ - "message":"Експортувати до хмарного сховища", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Домен", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Імпортувати із хмарного сховища", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "Адреса", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Імпортувати з хмарного сховища та обєднати з поточними налаштуваннями", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Фільтр", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Все", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Назва цього пристрою:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "За лаштунками", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Надіслати", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Поточна вкладка", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Скасувати зміни", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Перезавантажити вміст вкладки", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"байтів", - "description":"" + "loggerDomInspectorTip": { + "message": "Перемкнути інспектор DOM", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Тимчасово дозволити великі медіа елементи", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Перемкнути панель, що спливає", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"Цей запис має бути останнім", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: журнал", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Очистити журнал", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Поставити журнал на паузу (ігнорувати всі вхідні дані)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Увімкнути журнал", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Перемкнути фільтрування журналу", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "фільтр журналу записів", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Опції фільтрування журналу", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Ні", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "насичений", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "заблокований", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "дозволений", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "модифікований", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "основний", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "сторонній", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Деталі", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Фільтр", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Список фільтрів", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Правило", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Контекст", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Кореневий контекст", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Членство", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Тип", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL-адреса", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL правило", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Контекст:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Тип:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Статичний фільтр", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} мережеві запити {{type}}, {{br}}посилання яких збігаються з {{url}} {{br}}та які {{origin}},{{br}}{{importance}} є відповідний фільтр-виняток.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Блокувати", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Дозволити", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "типу „{{type}}“", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "будь-якого типу", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "походять із „{{origin}}“", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "мають будь-яке походження", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "крім випадків, коли", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "навіть якщо", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Статичний фільтр {{filter}} знайден у:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Статичний фільтр не знайдений в жодному списку увімкнених у цей момент фільтрів", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Записи журналу, що не відповідають всім трьом нижченаведеним умовам, будуть автоматично відхилені:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Зберегти записи за останні {{input}} хв", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Зберегти щонайбільше {{input}} завантажень сторінки у вкладці", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Зберегти щонайбільше {{input}} елементів у вкладці", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Використовувати {{input}} рядків на елемент у вертикальному режимі", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Приховати стовпці:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} час", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} фільтр/правило", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} контекст", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} членство", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Список", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Таблиця", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Простий", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Відкрити", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Створити новий звіт", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Знайти подібні звіти", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Документація", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Прочитайте документацію на uBlock/вікі, щоб дізнатися про всі функції uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Запитання та підтримка", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Відповіді на запитання та інші види підтримки довідки надаються на /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Проблеми з фільтрами/сайт не працює", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Повідомити про проблеми фільтра на певних вебсайтах до відстежувача проблем uBlockOrigin/uAssets. Потрібен обліковий запис GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Важливо: Уникайте використання інших блокувальників аналогічного призначення разом із uBlock Origin, оскільки це може спричинити проблеми з фільтрами на певних вебсайтах.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Поради: Переконайтеся, що списки фільтрів оновлено. Журнал — основний засіб визначення проблем пов'язаних з фільтром.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Звіт про ваду", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Повідомити про проблеми самого uBlock Origin відстежувач проблем uBlockOrigin/uBlock-issue. Потрібен обліковий запис GitHub.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Інформація про усунення несправностей", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Внизу наведено технічні дані, які можуть бути корисними, коли волонтери намагатимуться допомогти вам розв'язати проблему.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Повідомити про ваду фільтра", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Щоб не обтяжувати волонтерів повторюваними звітами, переконайтеся, що про проблему ще не повідомлялося.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Списки фільтрів оновлюються щоденно. Переконайтесь, що ваша проблема все ще не виправлена в найсвіжішому списку фільтрів", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Переконайтесь, що проблема все ще присутня після перезавантаження проблемної сторінки", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Адреса вебсторінки:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Вебсторінка...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Указати проблему --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "З'являється реклама або залишки оголошень", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Накладання або інші прикрощі", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Виявляє uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Пов'язані з приватністю проблеми", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Щось не працює, якщо увімкнено uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Відкриває небажані вкладки або вікна", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Веде до шкідливого ПЗ, фішингу", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Позначити цю сторінку «NSFW» («Небезпечно для роботи»)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Політика конфіденційності", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Журнал змін", + "description": "" + }, + "aboutCode": { + "message": "Джерельний код (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Учасники", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Вихідний код", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Переклади", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Списки фільтрів", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Зовнішні залежності (сумісні з GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Списки власних фільтрів uBO вільно розміщуються на таких CDN:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "Випадково вибраний CDN застосовуватиметься, коли список фільтрів потрібно оновити", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Зберегти резервну копію у файл...", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Відновити з файлу…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Відновити початкові налаштування...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Всі ваші налаштування будуть перезаписані з резервної копії від {{time}} та µBlock буде перезапущено.\n\nПерезаписати всі налаштування використовуючи резервну копію?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Дані помилкові або не можуть бути прочитані", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Ваші налаштування буде видалено та µBlock буде перезапущено.\n\nПовернути µBlock до початкових налаштувань?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Помилка мережі: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Підписатись", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "хвилину тому", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} хвилин(и) тому", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "годину тому", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} годин(и) тому", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "день тому", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} дні(в) тому", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Показати панель керування", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Показати журнал мережевих запитів", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "Відключений", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Сторінка заблокована", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock запобіг завантаженню наступної сторінки:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Через наступний фільтр", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "без параметрів", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Знайдено в:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Повернутись назад", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Зачинити це вікно", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Не нагадуйте мені про цей сайт", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Вимкнути повне блокування для {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Тимчасово", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Завжди", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Продовжити", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Заблокована сторінка хоче переадресувати на інший сайт. Якщо ви вирішите продовжити, ви перейдете безпосередньо на: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Причина:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Зловмисні", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Трекер", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Сумнівний вміст", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Експортувати до хмарного сховища", + "description": "tooltip" + }, + "cloudPull": { + "message": "Імпортувати із хмарного сховища", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Імпортувати з хмари та об'єднати з чинними налаштуваннями", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Назва цього пристрою:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Увага! Змінюйте ці розширені налаштування на власний ризик.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Надіслати", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Застосувати зміни", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Скасувати зміни", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "байтів", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Заблокувати елемент у фреймі", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Підписатися на список фільтрів...", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Тимчасово дозволити великі медіа елементи", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Перегляд джерела...", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Уведіть комбінацію", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Перемкнути замкнуту прокрутку", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Скопіювати до буферу обміну", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Вибрати все", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Увімкнути/вимкнути косметичні фільтри", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Перемкнути JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Послаблений режим блокування", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Використано: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "КБ", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "МБ", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "ГБ", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Натисніть, щоб завантажити", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Помилки: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Неможливо правильно фільтрувати під час запуску браузера.\nПерезапустіть сторінку для гарантії правильного фільтрування", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Цей запис має бути останнім", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/ur/messages.json b/src/_locales/ur/messages.json new file mode 100644 index 0000000000000..4c4bc4e48a109 --- /dev/null +++ b/src/_locales/ur/messages.json @@ -0,0 +1,1314 @@ +{ + "extName": { + "message": "uBlock Origin", + "description": "extension name." + }, + "extShortDesc": { + "message": "آخر کار، ایک مؤثر اشتہار کو روکنے والا، یہ کم cpu اور میموری لیتا ہے.", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "dashboardName": { + "message": "uBlock₀ — کنٹرول پینل", + "description": "English: uBlock₀ — Dashboard" + }, + "dashboardUnsavedWarning": { + "message": "خبردار! آپ نے محفوظ نہیں کیا", + "description": "A warning in the dashboard when navigating away from unsaved changes" + }, + "dashboardUnsavedWarningStay": { + "message": "Stay here", + "description": "Label for button to prevent navigating away from unsaved changes" + }, + "dashboardUnsavedWarningIgnore": { + "message": "Ignore", + "description": "Label for button to ignore unsaved changes" + }, + "settingsPageName": { + "message": "ترتیبات", + "description": "appears as tab name in dashboard" + }, + "3pPageName": { + "message": "فلٹر کی فہرستیں", + "description": "appears as tab name in dashboard" + }, + "1pPageName": { + "message": "میرے فلٹر", + "description": "appears as tab name in dashboard" + }, + "rulesPageName": { + "message": "میرے اصول", + "description": "appears as tab name in dashboard" + }, + "whitelistPageName": { + "message": "اِن کی اجازت ہے", + "description": "appears as tab name in dashboard" + }, + "shortcutsPageName": { + "message": "شارٹ کٹ", + "description": "appears as tab name in dashboard" + }, + "statsPageName": { + "message": "uBlock₀ — ریکارڈ", + "description": "Title for the logger window" + }, + "aboutPageName": { + "message": "متعلق", + "description": "appears as tab name in dashboard" + }, + "supportPageName": { + "message": "Support", + "description": "appears as tab name in dashboard" + }, + "assetViewerPageName": { + "message": "uBlock₀ — اثاثے", + "description": "Title for the asset viewer page" + }, + "advancedSettingsPageName": { + "message": "اعلیٰ ترتیبات", + "description": "Title for the advanced settings page" + }, + "popupPowerSwitchInfo": { + "message": "کلک: uBlock اس سائٹ کے لیے فعال/ غیرفعال کریں.\n\nکنٹرول + کلک: uBlock صرف اس صفحہ پر غیرفعال کریں.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + }, + "popupPowerSwitchInfo1": { + "message": "کلک کر کے uBlock اس سائٹ کے لیے غیرفعال کریں.\n\nکنٹرول + کلک: uBlock صرف اس صفحے کے لیے غیرفعال کریں.", + "description": "Message to be read by screen readers" + }, + "popupPowerSwitchInfo2": { + "message": "کلک کر کے uBlock اس سائٹ کے لیے فعال کریں.", + "description": "Message to be read by screen readers" + }, + "popupBlockedRequestPrompt": { + "message": "درخواستیں بلاک ہیں", + "description": "English: requests blocked" + }, + "popupBlockedOnThisPagePrompt": { + "message": "اس صفحے پر", + "description": "English: on this page" + }, + "popupBlockedStats": { + "message": "{{count}} یا {{percent}}%", + "description": "Example: 15 (13%)" + }, + "popupBlockedSinceInstallPrompt": { + "message": "تنصیب سے لے کر اب تک", + "description": "English: since install" + }, + "popupOr": { + "message": "یا", + "description": "English: or" + }, + "popupBlockedOnThisPage_v2": { + "message": "اس صفحے سےختم کر دیا گیا ہے", + "description": "For the new mobile-friendly popup design" + }, + "popupBlockedSinceInstall_v2": { + "message": "Blocked since install", + "description": "For the new mobile-friendly popup design" + }, + "popupDomainsConnected_v2": { + "message": "Domains connected", + "description": "For the new mobile-friendly popup design" + }, + "popupTipDashboard": { + "message": "کنٹرول پینل کھولیں", + "description": "English: Click to open the dashboard" + }, + "popupTipZapper": { + "message": "عناصر تباہ کرنے کا موڈ", + "description": "Tooltip for the element-zapper icon in the popup panel" + }, + "popupTipPicker": { + "message": "عناصر چننے کا موڈ", + "description": "English: Enter element picker mode" + }, + "popupTipLog": { + "message": "ریکارڈ کار کھولیں", + "description": "Tooltip used for the logger icon in the panel" + }, + "popupTipReport": { + "message": "Report an issue on this website", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipNoPopups": { + "message": "اس سائٹ پر آنے والے تمام پاپ اپ کو روکیں یا آنے دیں", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups1": { + "message": "کلِک کر کے اس سائٹ کے تمام پاپ اپ کو روک کریں", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2": { + "message": "کلِک کر کے اس سائٹ کے تمام پاپ اپ کی اجازت دیں", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoLargeMedia": { + "message": "اس سائٹ پر بڑے میڈیا والی اشیاء کو روک دیں", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia1": { + "message": "کلک کر کے اس سائٹ پر بڑے میڈیا والی اشیاء کو روک دیں", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2": { + "message": "کلک کر کے اس سائٹ پر بڑے میڈیا والی اشیاء کی اجازت د‌یں", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoCosmeticFiltering": { + "message": "اس سائٹ کے لئے کاسمیٹک فلٹر کو فعال یا غیر فعال کریں", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering1": { + "message": "اس سائٹ کے لئے کاسمیٹک فلٹر کو غیر فعال کریں", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2": { + "message": "اس سائٹ کے لئے کاسمیٹک فلٹر کو فعال کریں", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoRemoteFonts": { + "message": "اس سائٹ پر آنے والے تمام remote فانٹ کو روکیں یا آنے دیں", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts1": { + "message": "کلِک کر کے اس سائٹ کے تمام remote فانٹ کو روک کریں", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts2": { + "message": "کلِک کر کے اس سائٹ کے تمام remote فانٹ کی اجازت دیں", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoScripting1": { + "message": "کلک کر کے اس سائٹ پہ جاواسِکرپٹ غیرفعال کریں", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupTipNoScripting2": { + "message": "کلک کر کے اس سائٹ پر جاوا سکرپٹ چلنے دیں", + "description": "Tooltip for the no-scripting per-site switch" + }, + "popupNoPopups_v2": { + "message": "Pop-up windows", + "description": "Caption for the no-popups per-site switch" + }, + "popupNoLargeMedia_v2": { + "message": "Large media elements", + "description": "Caption for the no-large-media per-site switch" + }, + "popupNoCosmeticFiltering_v2": { + "message": "Cosmetic filtering", + "description": "Caption for the no-cosmetic-filtering per-site switch" + }, + "popupNoRemoteFonts_v2": { + "message": "Remote fonts", + "description": "Caption for the no-remote-fonts per-site switch" + }, + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" + }, + "popupMoreButton_v2": { + "message": "مزید", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton_v2": { + "message": "کم", + "description": "Label to be used to hide popup panel sections" + }, + "popupTipGlobalRules": { + "message": "گلوبل اصول: اس کالم میں وہ اصول ہیں جو تمام ویب سائٹوں پر لاگو ہوں گے.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." + }, + "popupTipLocalRules": { + "message": "مقامی اصول: اس کالم میں وہ اصول ہیں جو صرف موجودہ سائٹ پر لاگو ہوں گے.\nمقامی اصول کو گلوبل اصولوں پر ترجیح دی جائے گی.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." + }, + "popupTipSaveRules": { + "message": "اپنی تبدیلیوں کو مستقل کرنے کے لیے کلک کریں.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." + }, + "popupTipRevertRules": { + "message": "اپنی تبدیلیوں کو کالعدم کرنے کے لیے کلک کریں.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + }, + "popupAnyRulePrompt": { + "message": "تمام", + "description": "" + }, + "popupImageRulePrompt": { + "message": "تصاویر", + "description": "" + }, + "popup3pAnyRulePrompt": { + "message": "فریق ثالث", + "description": "" + }, + "popup3pPassiveRulePrompt": { + "message": "فریق ثالث کی Css/ تصاویر", + "description": "" + }, + "popupInlineScriptRulePrompt": { + "message": "ان لائن سکرپٹس", + "description": "" + }, + "popup1pScriptRulePrompt": { + "message": "فریق اول کی سکرپٹس", + "description": "" + }, + "popup3pScriptRulePrompt": { + "message": "فریق ثالث کی سکرپٹس", + "description": "" + }, + "popup3pFrameRulePrompt": { + "message": "فریق ثالث کے فریم", + "description": "" + }, + "popupHitDomainCountPrompt": { + "message": "domains connected", + "description": "appears in popup" + }, + "popupHitDomainCount": { + "message": "{{count}} out of {{total}}", + "description": "appears in popup" + }, + "popupVersion": { + "message": "Version", + "description": "Example of use: Version 1.26.4" + }, + "popup3pScriptFilter": { + "message": "script", + "description": "Appears as an option to filter out firewall rows" + }, + "popup3pFrameFilter": { + "message": "frame", + "description": "Appears as an option to filter out firewall rows" + }, + "pickerCreate": { + "message": "بنائیں", + "description": "English: Create" + }, + "pickerPick": { + "message": "چُنیں", + "description": "English: Pick" + }, + "pickerQuit": { + "message": "بند کریں", + "description": "English: Quit" + }, + "pickerPreview": { + "message": "دیکھیں", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + }, + "pickerNetFilters": { + "message": "نیٹورک کے فلٹر", + "description": "English: header for a type of filter in the element picker dialog" + }, + "pickerCosmeticFilters": { + "message": "کاسمیٹک فلٹر", + "description": "English: Cosmetic filters" + }, + "pickerCosmeticFiltersHint": { + "message": "کلک، کنٹرول + کلک", + "description": "English: Click, Ctrl-click" + }, + "pickerContextMenuEntry": { + "message": "عنصر کو روکیں", + "description": "An entry in the browser's contextual menu" + }, + "settingsCollapseBlockedPrompt": { + "message": "روکے ہوئے عناصر جس جگہ پے تھے اس جگہ کو غائب کر دیں", + "description": "English: Hide placeholders of blocked elements" + }, + "settingsIconBadgePrompt": { + "message": "آئکن پر روکی ہوئی درخواستوں کی تعداد دکھائیں", + "description": "English: Show the number of blocked requests on the icon" + }, + "settingsTooltipsPrompt": { + "message": "مفید معلومات والے پیغامات مت دکھائیں", + "description": "A checkbox in the Settings pane" + }, + "settingsContextMenuPrompt": { + "message": "Make use of context menu where appropriate", + "description": "English: Make use of context menu where appropriate" + }, + "settingsColorBlindPrompt": { + "message": "Color-blind friendly", + "description": "English: Color-blind friendly" + }, + "settingsAppearance": { + "message": "Appearance", + "description": "Section for controlling user interface appearance" + }, + "settingsThemeLabel": { + "message": "Theme", + "description": "Label for checkbox to enable a custom dark theme" + }, + "settingsThemeAccent0Label": { + "message": "Custom accent color", + "description": "Label for checkbox to pick an accent color" + }, + "settingsCloudStorageEnabledPrompt": { + "message": "Enable cloud storage support", + "description": "" + }, + "settingsAdvancedUserPrompt": { + "message": "I am an advanced user", + "description": "Checkbox to let user access advanced, technical features" + }, + "settingsPrefetchingDisabledPrompt": { + "message": "Disable pre-fetching (to prevent any connection for blocked network requests)", + "description": "English: " + }, + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Disable hyperlink auditing", + "description": "English: " + }, + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Prevent WebRTC from leaking local IP addresses", + "description": "English: " + }, + "settingPerSiteSwitchGroup": { + "message": "Default behavior", + "description": "" + }, + "settingPerSiteSwitchGroupSynopsis": { + "message": "These default behaviors can be overridden on a per-site basis", + "description": "" + }, + "settingsNoCosmeticFilteringPrompt": { + "message": "Disable cosmetic filtering", + "description": "" + }, + "settingsNoLargeMediaPrompt": { + "message": "Block media elements larger than {{input}} KB", + "description": "" + }, + "settingsNoRemoteFontsPrompt": { + "message": "Block remote fonts", + "description": "" + }, + "settingsNoScriptingPrompt": { + "message": "جاوا سکرپٹ بند کریں", + "description": "The default state for the per-site no-scripting switch" + }, + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" + }, + "settingsUncloakCnamePrompt": { + "message": "Uncloak canonical names", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" + }, + "settingsAdvanced": { + "message": "Advanced", + "description": "Section for controlling advanced-user settings" + }, + "settingsAdvancedSynopsis": { + "message": "Features suitable only for technical users", + "description": "Description of section controlling advanced-user settings" + }, + "settingsAdvancedUserSettings": { + "message": "اعلیٰ ترتیبات", + "description": "For the tooltip of a link which gives access to advanced settings" + }, + "settingsLastRestorePrompt": { + "message": "آخری ریسٹور:", + "description": "English: Last restore:" + }, + "settingsLastBackupPrompt": { + "message": "آخری بیک اپ:", + "description": "English: Last backup:" + }, + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:", + "description": "Appears at the top of the _3rd-party filters_ pane" + }, + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} used out of {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "3pAutoUpdatePrompt1": { + "message": "Auto-update filter lists", + "description": "A checkbox in the _3rd-party filters_ pane" + }, + "3pUpdateNow": { + "message": "ابھی اپڈیٹ کریں", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pPurgeAll": { + "message": "Purge all caches", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pParseAllABPHideFiltersPrompt1": { + "message": "Parse and enforce cosmetic filters", + "description": "English: Parse and enforce Adblock+ element hiding filters." + }, + "3pParseAllABPHideFiltersInfo": { + "message": "Cosmetic filters serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the network request-based filtering engines.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + }, + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignore generic cosmetic filters", + "description": "This will cause uBO to ignore all generic cosmetic filters." + }, + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." + }, + "3pSuspendUntilListsAreLoaded": { + "message": "Suspend network activity until all filter lists are loaded", + "description": "A checkbox in the 'Filter lists' pane" + }, + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" + }, + "3pApplyChanges": { + "message": "Apply changes", + "description": "English: Apply changes" + }, + "3pGroupDefault": { + "message": "Built-in", + "description": "Filter lists section name" + }, + "3pGroupAds": { + "message": "اشتہارات", + "description": "Filter lists section name" + }, + "3pGroupPrivacy": { + "message": "رازداری", + "description": "Filter lists section name" + }, + "3pGroupMalware": { + "message": "Malware protection, security", + "description": "Filter lists section name" + }, + "3pGroupSocial": { + "message": "Social widgets", + "description": "Filter lists section name" + }, + "3pGroupCookies": { + "message": "Cookie notices", + "description": "Filter lists section name" + }, + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "Filter lists section name" + }, + "3pGroupMultipurpose": { + "message": "Multipurpose", + "description": "Filter lists section name" + }, + "3pGroupRegions": { + "message": "علاقے، زبانیں", + "description": "Filter lists section name" + }, + "3pGroupCustom": { + "message": "مخصوص", + "description": "Filter lists section name" + }, + "3pImport": { + "message": "درآمد...", + "description": "The label for the checkbox used to import external filter lists" + }, + "3pExternalListsHint": { + "message": "One URL per line. Invalid URLs will be silently ignored.", + "description": "Short information about how to use the textarea to import external filter lists by URL" + }, + "3pExternalListObsolete": { + "message": "Out of date.", + "description": "used as a tooltip for the out-of-date icon beside a list" + }, + "3pViewContent": { + "message": "view content", + "description": "used as a tooltip for eye icon beside a list" + }, + "3pLastUpdate": { + "message": "Last update: {{ago}}.\nClick to force an update.", + "description": "used as a tooltip for the clock icon beside a list" + }, + "3pUpdating": { + "message": "اپڈیٹ ہو رہا ہے", + "description": "used as a tooltip for the spinner icon beside a list" + }, + "3pNetworkError": { + "message": "A network error prevented the resource from being updated.", + "description": "used as a tooltip for error icon beside a list" + }, + "1pTrustWarning": { + "message": "Do not add filters from untrusted sources.", + "description": "Warning against copy-pasting filters from random sources" + }, + "1pEnableMyFiltersLabel": { + "message": "Enable my custom filters", + "description": "Label for the checkbox use to enable/disable 'My filters' list" + }, + "1pTrustMyFiltersLabel": { + "message": "Allow custom filters requiring trust", + "description": "Label for the checkbox use to trust the content of 'My filters' list" + }, + "1pImport": { + "message": "Import and append…", + "description": "Button in the 'My filters' pane" + }, + "1pExport": { + "message": "برآمد کریں", + "description": "Button in the 'My filters' pane" + }, + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" + }, + "1pApplyChanges": { + "message": "Apply changes", + "description": "English: Apply changes" + }, + "rulesPermanentHeader": { + "message": "مستقل اصول", + "description": "header" + }, + "rulesTemporaryHeader": { + "message": "عارضی اصول", + "description": "header" + }, + "rulesRevert": { + "message": "Revert", + "description": "This will remove all temporary rules" + }, + "rulesCommit": { + "message": "Commit", + "description": "This will persist temporary rules" + }, + "rulesEdit": { + "message": "تدوین کریں", + "description": "Will enable manual-edit mode (textarea)" + }, + "rulesEditSave": { + "message": "محفوظ کریں", + "description": "Will save manually-edited content and exit manual-edit mode" + }, + "rulesEditDiscard": { + "message": "مسترد کریں", + "description": "Will discard manually-edited content and exit manual-edit mode" + }, + "rulesImport": { + "message": "فائل سے درآمد...", + "description": "" + }, + "rulesExport": { + "message": "فائل میں برآمد کریں", + "description": "Button in the 'My rules' pane" + }, + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" + }, + "rulesHint": { + "message": "List of your dynamic filtering rules.", + "description": "English: List of your dynamic filtering rules." + }, + "rulesFormatHint": { + "message": "Rule syntax: source destination type action (full documentation).", + "description": "English: dynamic rule syntax and full documentation." + }, + "rulesSort": { + "message": "Sort:", + "description": "English: label for sort option." + }, + "rulesSortByType": { + "message": "Rule type", + "description": "English: a sort option for list of rules." + }, + "rulesSortBySource": { + "message": "Source", + "description": "English: a sort option for list of rules." + }, + "rulesSortByDestination": { + "message": "Destination", + "description": "English: a sort option for list of rules." + }, + "whitelistPrompt": { + "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line.", + "description": "A concise description of the 'Trusted sites' pane." + }, + "whitelistImport": { + "message": "Import and append…", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExport": { + "message": "برآمد کریں", + "description": "Button in the 'Trusted sites' pane" + }, + "whitelistExportFilename": { + "message": "my-ublock-trusted-sites_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" + }, + "whitelistApply": { + "message": "تبدیلیاں لاگو کریں", + "description": "English: Apply changes" + }, + "logRequestsHeaderType": { + "message": "نوعیت", + "description": "English: Type" + }, + "logRequestsHeaderDomain": { + "message": "ڈومین", + "description": "English: Domain" + }, + "logRequestsHeaderURL": { + "message": "پته", + "description": "English: URL" + }, + "logRequestsHeaderFilter": { + "message": "فلٹر", + "description": "English: Filter" + }, + "logAll": { + "message": "تمام", + "description": "Appears in the logger's tab selector" + }, + "logBehindTheScene": { + "message": "Tabless", + "description": "Pretty name for behind-the-scene network requests" + }, + "loggerCurrentTab": { + "message": "موجودہ ٹیب", + "description": "Appears in the logger's tab selector" + }, + "loggerReloadTip": { + "message": "Reload the tab content", + "description": "Tooltip for the reload button in the logger page" + }, + "loggerDomInspectorTip": { + "message": "Toggle the DOM inspector", + "description": "Tooltip for the DOM inspector button in the logger page" + }, + "loggerPopupPanelTip": { + "message": "Toggle the popup panel", + "description": "Tooltip for the popup panel button in the logger page" + }, + "loggerInfoTip": { + "message": "uBlock Origin wiki: The logger", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Clear logger", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Pause logger (discard all incoming data)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Unpause logger", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Toggle logger filtering", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "filter logger content", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Logger filtering options", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "نہیں", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "روکے ہوئے", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "اجازت والے", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "modified", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "فریق اول", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "فریق ثالث", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "تفصیلات", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "فلٹر", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "فلٹر کی فہرست", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "اصول", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "سیاق", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Root context", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Partyness", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "نوعیت", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "پته", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL rule", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "سیاق:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "نوعیت:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Static filter", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "روکیں", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "اجازت دیں", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "نوعیت \"{{type}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "کسی بھی نوعیت", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "\"{{origin}}\" سے", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "کہیں سے بھی", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "except when", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "even if", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Static filter {{filter}} found in:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Static filter could not be found in any of the currently enabled filter lists", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Preserve entries from the last {{input}} minutes", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Preserve at most {{input}} page loads per tab", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Preserve at most {{input}} entries per tab", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Use {{input}} lines per entry in vertically expanded mode", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "چھپائیں کالم:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} وقت", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} فلٹر / اصول", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Context", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Partyness", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "فہرست", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "ٹیبل", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Plain", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Open", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Create new report on GitHub", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Find similar reports on GitHub", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Documentation", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Read the documentation at uBlock/wiki to learn about all of uBlock Origin's features.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Questions and support", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Answers to questions and other kinds of help support is provided on the subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Filter issues/website is broken", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Important: Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Tips: Be sure your filter lists are up to date. The logger is the primary tool to diagnose filter-related issues.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Bug report", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Report issues with uBlock Origin itself to the uBlockOrigin/uBlock-issue issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Troubleshooting Information", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported. Note: clicking the button will cause the page's origin to be sent to GitHub.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Verify that the issue still exists after reloading the problematic web page.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the web page:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The web page…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBlock Origin is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the web page as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Privacy policy", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Changelog", + "description": "" + }, + "aboutCode": { + "message": "Source code (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Contributors", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Source code", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Translations", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Filter lists", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "External dependencies (GPLv3-compatible):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO's own filter lists are freely hosted on the following CDNs:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "A randomly picked CDN is used when a filter list needs to be updated.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Back up to file…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Restore from file…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Reset to default settings…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "The data could not be read or is invalid", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "نیٹورک مسئلہ: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Subscribe", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "ایک منٹ پہلے", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} منٹ پہلے", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "ایک گھنٹہ پہلے", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} گھنٹے پہلے", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "ایک دن پہلے", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} دن پہلے", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "کنٹرول پینل دکھائیں", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Show Logger", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "بند", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Page blocked", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin has prevented the following page from loading:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "This happened because of the following filter:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "without parameters", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "The filter has been found in:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "واپس جائیں", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "اس ونڈو کو بند کریں", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Disable strict blocking for {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "عارضی طور پر", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "مستقل طور پر", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Proceed", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Reason:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Malicious", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Tracker", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Disreputable", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "کلاؤڈ سٹوریج میں برآمد کریں", + "description": "tooltip" + }, + "cloudPull": { + "message": "کلاؤڈ سٹوریج میں درآمد کریں", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "کلاؤڈ سٹوریج سے درآمد کر کے موجودہ ترتیبات کے ساتھ ضم کریں", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "اس آلے کا نام:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Warning! Change these advanced settings at your own risk.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "جمع کرائیں", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "تبدیلیاں لاگو کریں", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "کالعدم کریں", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Block element in frame…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Subscribe to filter list…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Temporarily allow large media elements", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "View source code…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Type a shortcut", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Toggle locked scrolling", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "کلپ بورڈ پر نقل کریں", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Select all", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Toggle cosmetic filtering", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Toggle JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Relax blocking mode", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Storage used: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Click to load", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Errors: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" + } +} diff --git a/src/_locales/vi/messages.json b/src/_locales/vi/messages.json index 9cda652aa1e15..fae9d5ce4dafd 100644 --- a/src/_locales/vi/messages.json +++ b/src/_locales/vi/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"Cuối cùng, đã có một công cụ chặn quảng cáo hiệu quả, tiêu tốn ít CPU và bộ nhớ.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Cuối cùng, đã có một công cụ chặn quảng cáo hiệu quả, tiêu tốn ít CPU và bộ nhớ.", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Bảng điều khiển", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Bảng điều khiển", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Cấu hình", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "Cảnh báo! Bạn có các thay đổi chưa được lưu", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"Bộ lọc bên thứ ba", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "Ở lại", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"Bộ lọc của tôi", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "Bỏ qua", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"Quy tắc của tôi", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Cài đặt", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Danh sách trắng", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Danh sách bộ lọc", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Nhật ký các yêu cầu", - "description":"Title for the logger window" + "1pPageName": { + "message": "Bộ lọc của tôi", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"Giới thiệu", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Quy tắc của tôi", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"Nhấp chuột: vô hiệu\/kích hoạt uBlock₀ cho trang này.\nCtrl + nhấp chuột: chỉ vô hiệu uBlock₀ trên trang này.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "Trang tin cậy", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"yêu cầu đã chặn", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "Phím tắt", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"trên trang này", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — Nhật ký các yêu cầu", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} hoặc {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "Giới thiệu", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"từ lúc cài đặt", - "description":"English: since install" + "supportPageName": { + "message": "Hỗ trợ", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"hoặc", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ - Trình xem nội dung", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"Bấm để mở bảng điều khiển", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "Cài đặt nâng cao", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"Chuyển sang chế độ chọn phần tử", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "Nhấp chuột: vô hiệu/kích hoạt uBlock₀ cho trang này.\nCtrl + nhấp chuột: chỉ vô hiệu uBlock₀ trên trang này.", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"Mở nhật ký", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "Nhấp chuột để tắt uBlock₀ đối với toàn bộ tên miền này (site). \n\nCtrl + nhấp chuột để tắt uBlock₀ chỉ tại trang này (page).", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"Bật\/tắt chặn popup của trang này", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "Nhấp để bật uBlock₀ trên trang này.", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"Bật tắt chặn yếu tố đa phương tiện lớn trên trang này", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "yêu cầu đã chặn", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"Bật\/tắt bộ lọc phần tử trên trang này", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "trên trang này", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"Bật tắt chặn font từ xa trên trang này", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} hoặc {{percent}}%", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"Quy tắc chung: cột này dành cho quy tắc áp dụng cho mọi trang.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "từ lúc cài đặt", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"Quy tắc nội bộ: cột này dành cho quy tắc chỉ áp dụng cho trang hiện tại.\nQuy tắc nội bộ sẽ thay thế quy tắc chung.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "hoặc", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"Bấm để thay đổi vĩnh viễn.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "Đã chặn trên trang này", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"Bấm để hoàn tác thay đổi.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "Bị chặn kể từ khi cài đặt", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"tất cả", - "description":"" + "popupDomainsConnected_v2": { + "message": "Tên miền đã kết nối", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"hình ảnh", - "description":"" + "popupTipDashboard": { + "message": "Mở bảng điều khiển", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"bên thứ ba", - "description":"" + "popupTipZapper": { + "message": "Chuyển sang chế độ chặn phần tử tạm thời", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"css\/hình ảnh bên thứ ba", - "description":"" + "popupTipPicker": { + "message": "Chuyển sang chế độ chọn phần tử", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"script cùng dòng", - "description":"" + "popupTipLog": { + "message": "Mở nhật ký", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"script bên thứ nhất", - "description":"" + "popupTipReport": { + "message": "Báo cáo lỗi trên trang này", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"script bên thứ ba", - "description":"" + "popupTipNoPopups": { + "message": "Bật/tắt chặn popup của trang này", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"khung bên thứ ba", - "description":"" + "popupTipNoPopups1": { + "message": "Nhấp để chặn tất cả cửa sổ bật lên trên trang này", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"tên miền đã kết nối", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "Bấm để bỏ chặn tất cả cửa sổ bật lên trên trang này", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} trên tổng {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "Bật tắt chặn yếu tố đa phương tiện lớn trên trang này", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"Tạo", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "Nhấp để chặn các thành phần đa phương tiện lớn trên trang này", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"Chọn", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "Nhấp để ngừng chặn các thành phần đa phương tiện kích thước lớn trên trang này", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"Thoát", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "Bật/tắt bộ lọc phần tử trên trang này", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"Xem trước", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "Nhấn để tắt bộ lọc phần tử ẩn trên trang này", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"Các bộ lọc mạng", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "Nhấn để bật bộ lọc phần tử ẩn trên trang này", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"Bộ lọc phần tử ẩn", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "Bật tắt chặn font từ xa trên trang này", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"Nhấp chuột, Ctrl-nhấp chuột", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "Nhấp để chặn phông tải về trên trang này", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"Chặn phần tử", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "Bấm để ngừng chặn remote fonts trên trang này", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"Ẩn các phần giữ chỗ của những phần tử bị chặn", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "Nhấp để vô hiệu hóa JavaScript trên trang này", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"Hiển thị số lượng yêu cầu bị chặn trên biểu tượng", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "Nhấp để ngừng vô hiệu hóa JavaScript trên trang này", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"Vô hiệu mách nước", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "Cửa sổ bật lên", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"Dùng menu ngữ cảnh nơi thích hợp", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "Thành phần đa phương tiện kích thước lớn", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"Thân thiện với người mù màu", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "Lọc phần tử hiển thị", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Kích hoạt hỗ trợ lưu trữ trực tuyến", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "Remote fonts", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"Tôi là một người dùng có kinh nghiệm (Yêu cầu đọc qua<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Vô hiệu tải trước (để chặn bất kỳ kết nối với những yêu cầu mạng đã chặn)", - "description":"English: " + "popupMoreButton_v2": { + "message": "Mở rộng", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Vô hiệu giám sát siêu liên kết", - "description":"English: " + "popupLessButton_v2": { + "message": "Ít hơn", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Ngặn WebRTC làm lộ địa chỉ IP nội bộ", - "description":"English: " + "popupTipGlobalRules": { + "message": "Quy tắc chung: cột này dành cho quy tắc áp dụng cho mọi trang.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"Hành vi mặc định", - "description":"" + "popupTipLocalRules": { + "message": "Quy tắc nội bộ: cột này dành cho quy tắc chỉ áp dụng cho trang hiện tại.\nQuy tắc nội bộ sẽ thay thế quy tắc chung.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Những hành vi này có thể thay thế tiêu chuẩn từng trang", - "description":"" + "popupTipSaveRules": { + "message": "Bấm để thay đổi vĩnh viễn.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Vô hiệu lọc phần tử ẩn", - "description":"" + "popupTipRevertRules": { + "message": "Bấm để hoàn tác thay đổi.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"Chặn yếu tố đa phương tiện lớn hơn {{input:number}} kB", - "description":"" + "popupAnyRulePrompt": { + "message": "tất cả", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Chặn font từ xa", - "description":"" + "popupImageRulePrompt": { + "message": "hình ảnh", + "description": "" }, - "settingsStorageUsed":{ - "message":"Bộ nhớ đã dùng: {{value}} byte", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "bên thứ ba", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Lần phục hồi trước:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "CSS/hình ảnh từ bên thứ ba", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"Lần sao lưu trước:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "script cùng dòng", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} bộ lọc mạng + {{cosmeticFilterCount}} bộ lọc phần tử ẩn từ:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "script bên thứ nhất", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"Đã dùng {{used}} trên {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "script bên thứ ba", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"Các danh sách bộ lọc tự cập nhật.", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "khung bên thứ ba", + "description": "" }, - "3pUpdateNow":{ - "message":"Cập nhật ngay", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "tên miền đã kết nối", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"Dọn tất cả bộ nhớ đệm", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} trên tổng {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Phân tích và thi hành bộ lọc phần tử ẩn.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "Phiên bản", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      Tuỳ chọn này kích hoạt phân tích và áp dụng các bộ lọc “ẩn phần tử” tương thích với Adblock Plus<\/a>. Những bộ lọc này dùng để ẩn phần tử trong một trang web được xem là gây phiền hà đến thị giác và không thể chặn bởi bộ lọc dựa địa chỉ trang web.<\/p>

      Kích hoạt tính năng này sẽ tăng mức sử dụng bộ nhớ của uBlock₀.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "tập lệnh", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Bỏ qua bộ lọc phần tử ẩn chung", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "khung", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      Bộ lọc phần tử ẩn chung là là những bộ lọc phần tử ẩn áp dụng cho tất cả các website.

      Mặc dù được xử lý hiệu quả bởi uBlock₀, các bộ lọc phần tử ẩn chung vẫn chiếm dụng bộ nhớ và CPU quá mức trên một số trang web, đặc biệt là các trang lớn và lâu năm.

      Kích hoạt tuỳ chọn này sẽ loại bỏ sử dụng bộ nhớ và CPU quá mức thêm vào trang web nhờ khả năng xử lý các bộ lọc phần tử ẩn chung và cũng làm giảm sử dụng bộ nhớ của uBlock₀.

      Chúng tôi khuyến cáo bạn nên kích hoạt tuỳ chọn này trên các thiết bị không quá mạnh.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "Tạo", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Danh sách những máy chủ bị chặn", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "Chọn", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"Áp dụng các thay đổi", - "description":"English: Apply changes" + "pickerQuit": { + "message": "Thoát", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"Quảng cáo", - "description":"English: Ads" + "pickerPreview": { + "message": "Xem trước", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"Riêng tư", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "Các bộ lọc mạng", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"Các tên miền nguy hiểm", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "Bộ lọc phần tử ẩn", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"Xã hội", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "Nhấp chuột, Ctrl-nhấp chuột", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"Đa chức năng", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "Chặn phần tử…", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"Khu vực, ngôn ngữ", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "Ẩn các phần giữ chỗ của những phần tử bị chặn", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"Tuỳ chỉnh", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "Hiển thị số lượng yêu cầu bị chặn trên biểu tượng", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"Một URL cho mỗi dòng. Dòng bắt đầu với ‘!’sẽ bị bỏ qua. Các URL không hợp lệ sẽ được bỏ qua âm thầm.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "Vô hiệu mách nước", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"Phân tích", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "Dùng menu ngữ cảnh nơi thích hợp", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"dọn bộ nhớ đệm", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "Thân thiện với người mù màu", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"có phiên bản mới", - "description":"English: new version available" + "settingsAppearance": { + "message": "Diện mạo", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"đã cũ", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "Giao diện", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"Cập nhật trước: {{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "Tùy chọn màu nền", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"Một bộ lọc trên mỗi dòng. Một bộ lọc có thể là một tên máy chủ đơn giản, hoặc một bộ lọc Adblock Plus tương thích. Những dòng bắt đầu với ‘!’ sẽ bị bỏ qua.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "Kích hoạt hỗ trợ lưu trữ trực tuyến", + "description": "" }, - "1pImport":{ - "message":"Nhập và thêm vào", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "Tôi là một người dùng có kinh nghiệm (Yêu cầu đọc qua)", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"Xuất", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "Vô hiệu tải trước (để chặn bất kỳ kết nối với những yêu cầu mạng đã chặn)", + "description": "English: " }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Vô hiệu giám sát siêu liên kết", + "description": "English: " }, - "1pApplyChanges":{ - "message":"Áp dụng các thay đổi", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Ngặn WebRTC làm lộ địa chỉ IP nội bộ", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"Quy tắc vĩnh viễn", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "Hành vi mặc định", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"Quy tắc tạm thời", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Những hành vi này có thể thay thế tiêu chuẩn từng trang", + "description": "" }, - "rulesRevert":{ - "message":"Phục hồi", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "Vô hiệu lọc phần tử ẩn", + "description": "" }, - "rulesCommit":{ - "message":"Xác nhận", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "Chặn phần tử đa phương tiện kich thước lớn hơn {{input}} KB", + "description": "" }, - "rulesEdit":{ - "message":"Chỉnh sửa", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "Chặn font từ xa", + "description": "" }, - "rulesEditSave":{ - "message":"Lưu", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "Vô hiệu hóa JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"Huỷ", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "Chặn các báo cáo CSP", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"Nhập từ tập tin...", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "Chặn tên miền theo dõi mạo danh từ bên thứ ba (CNAME Trackers)", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"Xuất ra tập tin", - "description":"" + "settingsAdvanced": { + "message": "Nâng cao", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "Các tính năng chỉ phù hợp với kỹ thuật viên", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"Danh sách quy tắc lọc chủ động.", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "cài đặt nâng cao", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"Quy tắc cú pháp: nguồn đích loại hành động<\/code> (tài liệu đầy đủ<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "Lần phục hồi trước:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"Danh sách tên các máy chủ mà uBlock₀ sẽ bị chặn. Một mục nhập trên mỗi dòng. Tên máy chủ không hợp lệ sẽ được tự động bỏ qua.", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "Lần sao lưu trước:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"Nhập và thêm vào", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} bộ lọc mạng + {{cosmeticFilterCount}} bộ lọc phần tử ẩn từ:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"Xuất", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "Đã dùng {{used}} trên {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "Các danh sách bộ lọc tự cập nhật.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"Áp dụng các thay đổi", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "Cập nhật ngay", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"Loại", - "description":"English: Type" + "3pPurgeAll": { + "message": "Dọn tất cả bộ nhớ đệm", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"Tên miền", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Phân tích và thi hành bộ lọc phần tử ẩn.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "Bộ lọc phần tử dùng để ẩn các yếu tố trong một trang web mà gây khó chịu cho người dùng và những yếu tố không thể chặn bằng cách dùng bộ lọc mạng.", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"Bộ lọc", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "Bỏ qua bộ lọc phần tử ẩn chung", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"Tất cả", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "Bộ lọc phần tử chung là những bộ lọc phần tử được áp dụng cho cho mọi trang web. Kích hoạt tùy chọn này sẽ giảm bớt sức nặng lên cpu và bộ nhớ do không còn phải xử lí các bộ lọc phần tử chung.\n\nTùy chọn này được khuyến nghị kích hoạt trên thiết bị cấu hình thấp.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"Behind the scene", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "Ngắt kết nối mạng cho đến khi tất cả các bộ lọc đã được tải", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"lọc mục ghi nhận", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "Danh sách những máy chủ bị chặn", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"Số mục ghi nhận tối đa", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "Áp dụng các thay đổi", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"Ngữ cảnh:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "Dựng sẵn", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"Loại:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "Quảng cáo", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"Lọc URL chủ động", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "Riêng tư", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"Bộ lọc tĩnh", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "Bảo vệ phần mềm độc hại, bảo mật", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} yêu cầu mạng của {{type}} {{br}}có địa chỉ URL phù hợp {{url}} {{br}}và từ nguồn {{origin}},{{br}}{{importance}} có một bộ lọc loại trừ phù hợp.", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "Tiện ích xã hội", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Chặn", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Các thông báo cookie", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Cho phép", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "Phiền toái", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"loại “{{type}}”", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "Đa chức năng", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"mọi loại", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "Khu vực, ngôn ngữ", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"từ “{{origin}}”", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "Tuỳ chỉnh", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"từ mọi nơi", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "Nhập...", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"loại trừ khi", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "Một URL mỗi dòng. URL không hợp lệ sẽ âm thầm bị bỏ qua.", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"loại trừ nếu", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "Đã cũ.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Bộ lọc tĩnh {{filter}} phát hiện trong:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "xem nội dung", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"Thay đổi", - "description":"English: Change log" + "3pLastUpdate": { + "message": "Cập nhật lần cuối: {{ago}}.\nBấm để buộc cập nhật.", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "Đang cập nhật...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"Hỗ trợ", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "Lỗi mạng ngăn tài nguyên được cập nhật.", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"Mã nguồn (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "Không thêm các bộ lọc từ các nguồn không đáng tin cậy.", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"Những người đóng góp", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "Bật bộ lọc tùy chỉnh của tôi", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"Sao lưu vào tập tin...", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "Cho phép các bộ lọc tùy chỉnh yêu cầu sự tin cậy", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "Nhập và thêm vào…", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"Khôi phục từ tập tin...", - "description":"English: Restore from file..." + "1pExport": { + "message": "Xuất…", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"Đặt lại cấu hình mặc định...", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"Các thiết lập của bạn sẽ bị ghi đè bởi dữ liệu đã lưu vào lúc {{time}}, và uBlock₀ sẽ khởi động lại. \n\nGhi đè các thiết lập hiện tại bằng dữ liệu đã lưu?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "Áp dụng các thay đổi", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"Không thể đọc dữ liệu hoặc dữ liệu không hợp lệ", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "Quy tắc vĩnh viễn", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"Các thiết lập sẽ bị xóa và uBlock₀ sẽ khởi động lại. \n\nThiết lập uBlock₀ về cấu hình ban đầu?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "Quy tắc tạm thời", + "description": "header" }, - "errorCantConnectTo":{ - "message":"Không thể kết nối đến {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "Phục hồi", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀: Thêm URL dưới đây vào bộ lọc tuỳ biến của bạn?\n\nTên: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "Xác nhận", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"một phút trước", - "description":"English: a minute ago" + "rulesEdit": { + "message": "Chỉnh sửa", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} phút trước", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "Lưu", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"một giờ trước", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "Huỷ", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} giờ trước", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "Nhập từ tập tin…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"một ngày trước", - "description":"English: a day ago" + "rulesExport": { + "message": "Xuất ra tập tin…", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} ngày trước", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"Hiện bảng điều khiển", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "Danh sách quy tắc lọc chủ động.", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"Hiện nhật ký", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "Quy tắc cú pháp: nguồn đích loại hành động (tài liệu đầy đủ).", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"tắt", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "Sắp xếp:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBloc Origin đã chặn tải trang sau:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "Loại quy tắc", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"Vì bộ lọc sau", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "Nguồn", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"không có thông số", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "Đích", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"Tìm thấy trong:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "Các đường dẫn trang web đáng tin cậy cố định mà uBlock Origin sẽ bị vô hiệu hóa trên trang đó. Một mục nhập cho mỗi dòng.", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"Trở lại", - "description":"English: Go back" + "whitelistImport": { + "message": "Nhập và thêm vào…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"Đóng cửa sổ này", - "description":"English: Close this window" + "whitelistExport": { + "message": "Xuất…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"Vô hiệu chặn nghiêm ngặt cho {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "my-ublock-trusted-sites_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"Tạm thời", - "description":"English: Temporarily" + "whitelistApply": { + "message": "Áp dụng các thay đổi", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"Vĩnh viễn", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "Loại", + "description": "English: Type" }, - "cloudPush":{ - "message":"Xuất ra lưu trữ trực tuyến", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "Tên miền", + "description": "English: Domain" }, - "cloudPull":{ - "message":"Nhập từ lưu trữ trực tuyến", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"Nhập từ bộ lưu trữ trực tuyến và ghép với các thiết lập hiện tại", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "Bộ lọc", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "logAll": { + "message": "Tất cả", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"Tên thiết bị này:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "Tabless", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"Gửi", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "Thẻ hiện tại", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"Phục hồi", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "Tải lại nội dung thẻ", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"byte", - "description":"" + "loggerDomInspectorTip": { + "message": "Chuyển đổi trình kiểm tra DOM", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Tạm thời cho phép yếu tố đa phương tiện lớn", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "Đóng/mở hộp thoại popup", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"Đây là mục cuối", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki: Các logger", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "Xoá nhật ký", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "Tạm dừng nhật ký (loại bỏ tất cả dữ liệu đang nhập vào)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "Tiếp tục tác vụ nhật ký", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "Đóng/mở lọc tác vụ log", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "lọc mục ghi nhận", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "Lựa chọn lọc tác vụ log", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "Không phải", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "eventful", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "bị chặn", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "được phép", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "đã sửa đổi", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "Bên thứ nhất", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "Bên thứ ba", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "Chi tiết", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "Bộ lọc", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "Danh sách bộ lọc", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "Quy tắc", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "Ngữ cảnh", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "Ngữ cảnh gốc", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "Nguồn khác bên thứ nhất", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "Kiểu", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "Quy tắc URL", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "Ngữ cảnh:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Loại:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "Bộ lọc tĩnh", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} yêu cầu mạng của {{type}} {{br}}có địa chỉ URL phù hợp {{url}} {{br}}và từ nguồn {{origin}},{{br}}{{importance}} có một bộ lọc loại trừ phù hợp.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Chặn", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Cho phép", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "loại “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "mọi loại", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "từ “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "từ mọi nơi", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "loại trừ khi", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "loại trừ nếu", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Đã phát hiện bộ lọc tĩnh {{filter}} trong:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "Không tìm thấy bộ lọc tĩnh trong bất kỳ danh sách bộ lọc hiện đang được bật", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "Các mục Logger mà không đáp ứng tất cả ba điều kiện dưới đây sẽ được tự động loại bỏ:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "Giữ lại các mục từ {{input}} phút trước", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "Giữ lại nhiều nhất {{input}} trang được tải trên mỗi thẻ", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "Giữ lại tối đa {{input}} mục trên mỗi thẻ", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "Sử dụng {{input}} dòng trên mỗi entry trong chế độ mở rộng theo chiều dọc", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "Ẩn cột:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} Thời gian", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} Bộ lọc/quy tắc", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} Ngữ cảnh", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} Partyness", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "Danh sách", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "Bảng", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "Không có định dạng", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Đánh dấu", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "Mở", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "Tạo báo cáo mới", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "Tìm các báo cáo tương tự", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "Tài liệu hướng dẫn", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "Đọc tài liệu tại uBlock/wiki để tìm hiểu về các tính năng của uBlock Origin.", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "Hỗ trợ trả lời thắc mắc", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "Bạn có thể tìm thấy câu trả lời cho các thắc mắc của mình hoặc sự trợ giúp cho các vấn đề khác tại subreddit /r/uBlockOrigin.", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "Lỗi bộ lọc/ Trang web lỗi", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "Báo cáo lỗi bộ lọc với tên miền cụ thể cho uBlockOrigin/uAssets issue tracker. Cần tài khoản GitHub ", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "Chú ý: Tránh sử dụng các bộ chặn có chức năng tương tự song song uBlock Origin vì có thể gây ra lỗi bộ lọc trên nhiều trang web.", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "Mẹo: Hãy đảm bảo các bộ lọc của bạn được cập nhật đầy đủ. Nhật ký là một công cụ hữu hiệu để chẩn đoán các lỗi bộ lọc.", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "Báo cáo lỗi", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "Báo cáo lỗi cho uBlock Origin cho uBlockOrigin/uBlock-issue issue tracker. Cần tài khoản GitHub", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "Thông tin chẩn đoán lỗi", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "Đây là các thông tin kỹ thuật có thể giúp ích khi khắc phục lỗi.", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "Báo cáo lỗi bộ lọc cụ thể", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "Để tránh tạo thêm gánh nặng cho các tình nguyện viên, hãy chắc chắn rằng chưa từng có vấn đề tương tự được báo cáo.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "Danh sách bộ lọc được cập nhật hàng ngày. Hãy đảm bảo vấn đề của bạn chưa được giải quyết trong danh sách bộ lọc gần đây nhất.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "Xác nhận rằng sự cố vẫn tồn tại kể cả sau khi đã tải lại trong web có vấn đề.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Địa chỉ trang web:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Trang web…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Chọn một lỗi --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Vẫn hiện quảng cáo hoặc vùng chứa quảng cáo", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Xuất hiện lớp phủ hoặc các phần tử phiền toái khác", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Phát hiện uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Có các cấn đề về quyền riêng tư", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Trục trặc khi bật uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Xuất hiện các tab và cửa sổ ngoài mong muốn", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Dẫn đến phần mềm độc hại, lừa đảo", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Đánh dấu \"NFSW\" - Not Safe For Work cho trang web.( Tìm hiểu về \"Not Safe For Work\")", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "Chính sách bảo mật", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "Nhật ký thay đổi", + "description": "" + }, + "aboutCode": { + "message": "Mã nguồn (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Những người đóng góp", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Mã nguồn", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Bản dịch", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Danh sách bộ lọc", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Các phụ thuộc bên ngoài (tương thích GPLv3):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "Danh sách các bộ lọc của riêng uBO được lưu trữ miễn phí tại các CDN sau:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "CDN được chọn ngẫu nhiên khi cần cập nhật danh sách bộ lọc.", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "Sao lưu vào tệp…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Khôi phục từ tập tin…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Đặt lại cài đặt mặc định…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "Các thiết lập của bạn sẽ bị ghi đè bởi dữ liệu đã lưu vào lúc {{time}}, và uBlock₀ sẽ khởi động lại. \n\nGhi đè các thiết lập hiện tại bằng dữ liệu đã lưu?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "Không thể đọc dữ liệu hoặc dữ liệu không hợp lệ", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "Các thiết lập sẽ bị xóa và uBlock₀ sẽ khởi động lại. \n\nThiết lập uBlock₀ về cấu hình ban đầu?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Lỗi kết nối: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "Đăng ký", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "một phút trước", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} phút trước", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "một giờ trước", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} giờ trước", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "một ngày trước", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} ngày trước", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Hiện bảng điều khiển", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Hiện nhật ký", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "tắt", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "Trang bị chặn", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBloc Origin đã chặn tải trang sau:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "Vì bộ lọc sau", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "không có thông số", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Tìm thấy trong:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Trở lại", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Đóng cửa sổ này", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "Đừng cảnh báo tôi lần nữa về trang web này", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "Vô hiệu chặn nghiêm ngặt cho {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Tạm thời", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Vĩnh viễn", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "Tiếp tục", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "Trang đã chặn muốn chuyển hướng sang trang khác. Nếu đồng ý, bạn sẽ được chuyển hướng sang {{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "Lý do:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "Độc hại", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "Bộ theo dõi", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "Không đáng tin cậy", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "Xuất ra lưu trữ trực tuyến", + "description": "tooltip" + }, + "cloudPull": { + "message": "Nhập từ lưu trữ trực tuyến", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Nhập từ bộ lưu trữ trực tuyến và ghép với các thiết lập hiện tại", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Tên thiết bị này:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Cảnh báo! Bạn phải chịu trách nhiệm cho những nguy cơ khi thay đổi các cài đặt nâng cao này.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Gửi", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Áp dụng các thay đổi", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Phục hồi", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "byte", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "Chặn phần tử trong khung…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "Đăng ký danh sách bộ lọc…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Tạm thời cho phép yếu tố đa phương tiện lớn", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "Xem mã nguồn…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "Nhập phím tắt", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "Đóng/mở khóa cuộn", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "Sao chép vào bảng tạm", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "Chọn tất cả", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "Bật/tắt lọc phần tử", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "Cho phép/Vô hiệu hoá JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "Nới lỏng chế độ chặn", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "Bộ nhớ đã dùng: {{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "Bấm để tải", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "Lỗi: {{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "Không thể lọc đúng cách khi khởi chạy trình duyệt. Tải lại trang để đảm bảo lọc thích hợp.", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "Đây là mục cuối", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/zh_CN/messages.json b/src/_locales/zh_CN/messages.json index 80935322536c1..a06a37e051974 100644 --- a/src/_locales/zh_CN/messages.json +++ b/src/_locales/zh_CN/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"一款高效的网络请求过滤工具,占用极低的内存和 CPU。", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "一款高效的网络请求过滤工具,占用极低的内存和 CPU。", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ 控制面板", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — 控制面板", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"设置", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "警告!您有未保存的更改", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"第三方规则列表", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "留下", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"自定义规则列表", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "忽略", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"自定义规则", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "设置", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"白名单", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "规则列表", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — 网络请求日志", - "description":"Title for the logger window" + "1pPageName": { + "message": "自定义静态规则", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"关于", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "自定义动态规则", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"单击:对此网站禁用\/启用 uBlock₀。\n\nCtrl + 单击:在此页面上禁用 uBlock₀。", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "白名单", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"请求已拦截", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "快捷键", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"此页面", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — 记录器", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} 或称 {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "关于", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"总计", - "description":"English: since install" + "supportPageName": { + "message": "支持", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"或称", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — 资源查看器", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"单击打开控制面板", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "高级设置", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"进入元素选择器模式", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "单击:对此网站禁用/启用 uBlock₀。\n\nCtrl + 单击:仅对此页面禁用 uBlock₀。", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"查看网络请求日志", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "单击:对此网站禁用 uBlock₀ 。\n\nCtrl + 单击:仅在此页面上禁用 uBlock₀ 。", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"禁止此网站弹出任何窗口", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "单击:对此网站启用 uBlock₀ 。", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"是否屏蔽在此网站上较大的媒体元素", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "已拦截请求", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"不对此网站应用修饰规则", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "在此页面", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"阻止此网站的第三方字体", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"全局规则:此列的规则作用于所有网站。", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "自安装后", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"本地规则:此列的规则仅作用于当前网站。\n本地规则优先于全局规则。", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "或", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"使更改永久生效。", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "在此页面已拦截", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"还原更改。", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "自安装后已拦截", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"全部", - "description":"" + "popupDomainsConnected_v2": { + "message": "已连接的域名", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"图像", - "description":"" + "popupTipDashboard": { + "message": "打开控制面板", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"第三方", - "description":"" + "popupTipZapper": { + "message": "进入临时移除元素模式", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"第三方 css\/图片", - "description":"" + "popupTipPicker": { + "message": "进入元素选择器模式", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"内联脚本", - "description":"" + "popupTipLog": { + "message": "打开记录器", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"第一方脚本", - "description":"" + "popupTipReport": { + "message": "报告此网站上的问题", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"第三方脚本", - "description":"" + "popupTipNoPopups": { + "message": "是否禁止此网站的所有弹出窗口", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"第三方框架", - "description":"" + "popupTipNoPopups1": { + "message": "单击屏蔽此网站所有弹窗", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"作用到的域", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "单击取消屏蔽此网站所有弹窗", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} \/ {{total}} 个域", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "是否屏蔽此网站上较大的媒体元素", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"创建", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "单击以屏蔽此网站上较大的媒体元素", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"选择", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "单击取消屏蔽此网站大型媒体元素", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"放弃", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "是否对此网站应用元素过滤规则", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"预览", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "单击禁用此网站上的元素过滤", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"URL 过滤规则", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "单击启用针对此网站的元素过滤规则", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"元素过滤规则", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "是否屏蔽此网站的第三方字体", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"单击,Ctrl + 单击", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "单击屏蔽此网站上的远程字体", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"屏蔽元素", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "单击取消屏蔽此网站上的远程字体", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"隐藏已屏蔽元素的占位符", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "单击禁用此网站的所有脚本", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"在图标上显示拦截请求数", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "单击以取消禁用此网站的所有脚本", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"不显示悬停提示", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "弹出窗口", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"加入右键菜单", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "大型媒体元素", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"适合色盲人士", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "页面元素过滤", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"启用云端储存", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "远程字体", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"我是高级用户(必读<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"禁止预读取(拦截对已屏蔽网络请求的任何连接)", - "description":"English: " + "popupMoreButton_v2": { + "message": "更多", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"禁用超链接审计(hyperlink auditing)", - "description":"English: " + "popupLessButton_v2": { + "message": "更少", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"防止 WebRTC 泄露本地IP地址", - "description":"English: " + "popupTipGlobalRules": { + "message": "全局规则:此列的规则作用于所有网站。", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"默认行为", - "description":"" + "popupTipLocalRules": { + "message": "本地规则:此列的规则仅作用于当前网站。\n本地规则优先于全局规则。", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"这些默认行为可以在各网站上覆盖", - "description":"" + "popupTipSaveRules": { + "message": "点击以使更改永久生效。", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"禁用元素过滤规则", - "description":"" + "popupTipRevertRules": { + "message": "点击以撤销更改。", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"屏蔽大于 {{input:number}} kB 的媒体元素", - "description":"" + "popupAnyRulePrompt": { + "message": "全部", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"屏蔽远程字体", - "description":"" + "popupImageRulePrompt": { + "message": "图片", + "description": "" }, - "settingsStorageUsed":{ - "message":"已用空间:{{value}} 字节", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "第三方", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"上次恢复:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "第三方 CSS/图像", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"上次备份:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "内联脚本", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"当前使用了 {{netFilterCount}} 个 URL 过滤规则和 {{cosmeticFilterCount}} 个元素过滤规则:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "第一方脚本", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"已使用 {{used}} \/ {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "第三方脚本", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"自动更新规则列表。", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "第三方框架", + "description": "" }, - "3pUpdateNow":{ - "message":"立即更新", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "已连接域名", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"清除所有缓存", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} / {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"解析并应用元素过滤规则。", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "版本", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      此选项将启用与 Adblock Plus 兼容的“元素隐藏”规则的解析和应用<\/a>。这些过滤规则本质上只是装饰美化,它们用来隐藏一个网页上被认为碍眼且不能被网络请求过滤引擎所屏蔽的视觉元素。<\/p>

      启用这项功能将增加 uBlock₀<\/i> 的内存使用量。<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "脚本", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"忽略通用元素过滤规则。", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "框架", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      通用元素过滤规则是应用到所有网站的元素过滤规则。

      尽管 uBlock₀ 能很有效率地处理,通用元素过滤规则在一些网页上仍可能导致可见的内存和 CPU 占用增长,尤其是大和长期的内容。

      启用此选项将解除这些添加到网页以处理通用元素过滤规则导致的内存和 CPU 占用,同时降低 uBlock₀ 本身的内存占用。

      推荐低性能设备启用此选项。", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "创建", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"被屏蔽站点列表", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "选择", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"应用更改", - "description":"English: Apply changes" + "pickerQuit": { + "message": "放弃", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"广告", - "description":"English: Ads" + "pickerPreview": { + "message": "预览", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"隐私", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "URL 过滤规则", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"恶意软件", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "元素过滤规则", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"社交", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "单击,Ctrl + 单击", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"多用途", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "屏蔽元素…", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"地区语言", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "隐藏已屏蔽元素的占位符", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"自定义", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "在图标上显示拦截请求数", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"一行一条 URL。以 ‘!’ 开头的行将被忽略,无效的 URL 也将被忽略。", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "不显示悬停提示", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"解析", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "添加“屏蔽元素”到右键菜单", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"清除缓存", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "适合色盲人士", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"有新版本可用", - "description":"English: new version available" + "settingsAppearance": { + "message": "外观", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"过时的版本", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "主题", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"上次更新:{{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "自定义强调色", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"一行一条过滤规则。每条规则可以是一个普通的主机名或者是一条 Adblock Plus 兼容的过滤规则。以 ‘!’ 开头的行将被忽略。", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "启用云端储存", + "description": "" }, - "1pImport":{ - "message":"导入并添加", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "我是高级用户", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"导出", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "禁止预读取(拦截对已屏蔽网络请求的任何连接)", + "description": "English: " }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "禁用超链接审计(hyperlink auditing)", + "description": "English: " }, - "1pApplyChanges":{ - "message":"应用更改", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "防止 WebRTC 泄露本地 IP 地址", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"永久规则", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "默认行为", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"临时规则", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "这些默认行为可被针对各网站的设置取代", + "description": "" }, - "rulesRevert":{ - "message":"还原", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "禁用元素过滤规则", + "description": "" }, - "rulesCommit":{ - "message":"提交", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "屏蔽大于 {{input}} KB 的媒体元素", + "description": "" }, - "rulesEdit":{ - "message":"编辑", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "屏蔽远程字体", + "description": "" }, - "rulesEditSave":{ - "message":"保存", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "禁用 JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"取消", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "屏蔽 CSP 报告", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"从文件导入…", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "将代理域名映射至真实域名", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"导出到文件", - "description":"" + "settingsAdvanced": { + "message": "高级", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "仅适合专家级用户的功能。", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"自定义动态过滤规则列表。", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "高级设置", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"规则语法:来源 目标 资源类型 操作<\/code>(完整文档<\/a>)。", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "上次恢复:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"您的列表中针对 uBlock₀ 的主机名将被禁用。一行一条规则。无效的主机名将直接被忽略。", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "上次备份:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"导入并添加", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "当前使用了 {{netFilterCount}} 个 URL 过滤规则和 {{cosmeticFilterCount}} 个元素过滤规则:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"导出", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} / {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "自动更新过滤规则", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"应用更改", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "立即更新", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"类型", - "description":"English: Type" + "3pPurgeAll": { + "message": "清除所有缓存", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"域名", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "解析并应用元素过滤规则", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "元素过滤规则用于隐藏网页中碍眼,且不能被基于网络请求的过滤引擎屏蔽的元素。", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"过滤", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "忽略通用元素过滤规则", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"全部", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "通用元素过滤规则是应用到所有网站的元素过滤规则。启用此选项将消除网站因处理通用元素过滤规则而增加的内存和 CPU 占用。\n\n推荐在低性能设备上启用此选项。", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"后台", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "过滤规则列表全部加载完成前暂停网络连接", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"过滤日志条目", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "被屏蔽站点列表", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"日志条目最大数量", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "应用更改", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"上下文:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "内置", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"类型:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "广告", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"动态 URL 过滤", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "隐私", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"静态规则", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "恶意软件防护、安全", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} URL 匹配{{br}}{{url}}{{br}}且来源于 {{origin}} 的 {{type}} 的网络请求,{{br}}{{importance}}有一个匹配的例外规则。", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "社交网络小部件", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"拦截", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Cookie提醒", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"允许", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "骚扰", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"“{{type}}”类型", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "多用途", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"任何类型", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "区域、语言", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"来源于 \"{{origin}}\"", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "自定义", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"所有范围", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "导入…", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"除非", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "一行一条网址。无效网址将被忽略。", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"即使", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "过久未更新。", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"静态规则 {{filter}} 被包含于:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "查看内容", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"更新日志", - "description":"English: Change log" + "3pLastUpdate": { + "message": "上次更新:{{ago}}。\n点击此处要求更新。", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "正在更新...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"帮助", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "资源更新因网络错误受阻。", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"源代码 (GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "请勿添加未信任来源的过滤规则。", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"贡献者", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "启用自定义过滤规则", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"备份到文件", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "允许需信任的自定义过滤规则", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "导入并添加…", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"从文件还原…", - "description":"English: Restore from file..." + "1pExport": { + "message": "导出…", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"重置为默认设置…", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"您的所有设置将被备份于 {{time}} 的数据覆盖,并且 uBlock₀ 将重新启动。\n确定要用备份的数据覆盖全部现有设置吗?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "应用更改", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"数据无法读取或无效", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "永久规则", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"您的设置将被清除,uBlock₀ 将重新启动。\n\n确定将 uBlock₀ 重置到初始状态?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "临时规则", + "description": "header" }, - "errorCantConnectTo":{ - "message":"无法连接到 {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "恢复", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀:添加下列 URL 到您的自定义规则列表吗?\n\n标题: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "提交", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"一分钟前", - "description":"English: a minute ago" + "rulesEdit": { + "message": "编辑", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} 分钟前", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "保存", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"一小时前", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "取消", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} 小时前", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "从文件导入…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"一天前", - "description":"English: a day ago" + "rulesExport": { + "message": "导出到文件...", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} 天前", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"显示控制面板", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "您的动态过滤规则列表。", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"显示网络日志记录器", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "规则语法:来源主机名称 目标主机名称 连接请求类型 操作完整说明)。", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"关", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "排列:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock₀ 阻止了下列页面加载:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "规则类型", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"因为下列过滤规则", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "来源", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"无参数", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "目标", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"被包含于:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "白名单中的规则匹配的页面不会被 uBlock Origin 过滤或阻挡。每行一条规则。", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"返回", - "description":"English: Go back" + "whitelistImport": { + "message": "导入并添加…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"关闭此窗口", - "description":"English: Close this window" + "whitelistExport": { + "message": "导出…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"不对 {{hostname}} 进行严格屏蔽", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "my-ublock-trusted-sites_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"暂时", - "description":"English: Temporarily" + "whitelistApply": { + "message": "应用更改", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"永久", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "类型", + "description": "English: Type" }, - "cloudPush":{ - "message":"导出到云端储存", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "域名", + "description": "English: Domain" }, - "cloudPull":{ - "message":"从云端储存导入", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"从云存储导入并与当前设置合并", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "过滤规则", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"…\n…", - "description":"" + "logAll": { + "message": "全部", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"此设备名称:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "后台网络请求", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"提交", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "当前标签页", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"还原", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "重新加载此标签页的内容", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"字节", - "description":"" + "loggerDomInspectorTip": { + "message": "是否打开 DOM 探查器", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"临时允许较大媒体元素", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "是否打开弹出式面板", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"此条目必须是最后一个", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki:记录器", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "清空记录", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "暂停记录(放弃所有传入数据)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "取消暂停记录", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "是否启用记录器筛选", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "筛选记录条目", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "记录器筛选设定", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "非", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "已应用规则", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "已拦截", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "已允许", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "已修改", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "第一方", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "第三方", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "详细资料", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "过滤规则", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "规则列表", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "规则", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "上下文", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "根上下文", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "第一方/第三方", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "类型", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "URL", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "URL 规则", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "上下文:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "类型:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "静态规则", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "当 URL 匹配 {{url}},{{br}}且来源于 {{origin}} 时,{{br}}{{action}} {{type}} 的网络请求,{{br}}{{importance}} 有一个匹配的例外规则。", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "拦截", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "允许", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "“{{type}}”类型", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "任何类型", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "来源于 \"{{origin}}\"", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "任何地方", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "除非", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "即使", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "静态规则 {{filter}} 被包含于:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "无法在当前启用的任何过滤规则列表中找到静态规则", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "不符合以下任一状况的记录将会被自动清除:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "最多保留 {{input}} 分钟以内的记录", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "每个分页最多保留 {{input}} 次内容加载产生的记录", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "每个分页最多保留 {{input}} 条记录", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "垂直扩展模式下每项使用 {{input}} 行", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "隐藏栏位:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} 时间", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} 过滤规则", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} 上下文", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} 第一方/第三方", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "列表", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "表格", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "纯文字", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "打开", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "创建新报告", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "查找类似报告", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "文档", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "请至 uBlock/wiki 参阅 uBlock Origin 的所有功能以及使用说明。", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "疑难解答", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "若想进行普通的咨询或是需要其他帮助,请至 Reddit 的 /r/uBlockOrigin 板块寻求解答。", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "过滤规则问题/网页被损坏", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "将有关特定网站的过滤规则问题反馈至 uBlockOrigin/uAssets 问题跟踪器需要 GitHub 账号。", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "重要:避免同时使用类似 uBlock Origin 的过滤软件,这可能导致在特定的网站上遇到过滤规则问题。", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "小提示:确保在使用最新的过滤规则列表。日志记录器是诊断过滤规则问题的首选工具。", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "错误报告", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "将 uBlock Origin 本身的问题反馈至 uBlockOrigin/uBlock-issue 问题跟踪器需要 GitHub 账号。", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "故障排查相关信息", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "以下生成的技术报告或有助于他人帮你解决问题。", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "报告过滤规则的问题", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "请确认该问题未有其他人上报过,避免重复提交报告给维护者带来额外负担。", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "过滤规则列表每天都会更新。请确认您的问题无法用最新的过滤规则列表解决。", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "请验证重新加载问题页面后问题依然存在。", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "网址:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "该网页…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- 选择其中一项 --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "显示广告或广告残留", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "存在遮盖或类似问题", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "检测出 uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "存在隐私相关问题", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "启用 uBlock Origin 后出现异常", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "打开不需要的标签页或窗口", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "指向恶意软件、钓鱼网站", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "将该网页标记为 “NSFW”(“工作场所不宜”)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "隐私政策", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "更新日志", + "description": "" + }, + "aboutCode": { + "message": "源代码 (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "贡献者", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "源代码", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "翻译", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "过滤规则列表", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "外部依赖(兼容 GPLv3 协议):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO 本身提供的过滤规则列表免费托管于下列 CDN:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "需要更新过滤规则列表时会随机选用一个 CDN。", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "备份到文件…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "从文件还原…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "重置为默认设置", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "您的所有设置将被备份于 {{time}} 的数据覆盖,并且 uBlock₀ 将重新启动。\n确定要用备份的数据覆盖全部现有设置吗?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "无法读取数据,或数据无效", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "您的设置将被清除,uBlock₀ 将重新启动。\n\n确定将 uBlock₀ 重置到初始状态?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "网络错误:{{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "订阅", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "1 分钟前", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} 分钟前", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "1 小时前", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} 小时前", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "1 天前", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} 天前", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "显示控制面板", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "显示记录器", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "关", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "页面已被屏蔽", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin 阻止了下列页面加载:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "因为下列过滤规则:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "不带参数", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "被包含于:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "返回", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "关闭此窗口", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "不再针对此网站作出警告", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "不对 {{hostname}} 进行严格屏蔽", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "暂时", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "永久", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "继续加载", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "被屏蔽的网页想重定向到另一个网站。如果您选择继续,将直接导航到:{{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "原因:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "恶意网站", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "跟踪器", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "不受信任", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "导出到云端储存", + "description": "tooltip" + }, + "cloudPull": { + "message": "从云端储存导入", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "从云存储导入并与当前设置合并", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "此设备名称:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "警告!更改这些高级设置可能造成问题,请自担风险。", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "提交", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "应用更改", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "还原", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "字节", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "屏蔽框架中的内容…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "订阅规则列表…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "临时允许较大媒体元素", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "查看源代码…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "键入快捷键", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "是否启用同步滚动", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "复制到剪贴板", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "全选", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "是否应用元素过滤规则", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "JavaScript 开关", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "放宽拦截限制", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "已用存储:{{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "单击以加载", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "错误:{{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "无法在浏览器启动时正常过滤。请重新加载此页面以确保正常过滤。", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "此条目必须是最后一个", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/_locales/zh_TW/messages.json b/src/_locales/zh_TW/messages.json index b5758fe600e48..f7dea64a97283 100644 --- a/src/_locales/zh_TW/messages.json +++ b/src/_locales/zh_TW/messages.json @@ -1,694 +1,1314 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock Origin", + "description": "extension name." }, - "extShortDesc":{ - "message":"終於出現了,一個高效率的阻擋器,使用不多的 CPU 及記憶體資源。", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "終於有一款高效能的封鎖工具。對 CPU 和記憶體的占用極低。", + "description": "this will be in the Chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — 控制台", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — 控制台", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"設定", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarning": { + "message": "警告!變更尚未儲存。", + "description": "A warning in the dashboard when navigating away from unsaved changes" }, - "3pPageName":{ - "message":"第三方過濾規則", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningStay": { + "message": "留在這裡", + "description": "Label for button to prevent navigating away from unsaved changes" }, - "1pPageName":{ - "message":"自訂過濾規則", - "description":"appears as tab name in dashboard" + "dashboardUnsavedWarningIgnore": { + "message": "忽略", + "description": "Label for button to ignore unsaved changes" }, - "rulesPageName":{ - "message":"自訂動態過濾規則", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "設定", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"白名單", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "過濾規則清單", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — 網路請求日誌", - "description":"Title for the logger window" + "1pPageName": { + "message": "自訂靜態過濾規則", + "description": "appears as tab name in dashboard" }, - "aboutPageName":{ - "message":"關於", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "自訂動態過濾規則", + "description": "appears as tab name in dashboard" }, - "popupPowerSwitchInfo":{ - "message":"點擊:對此網站 停用\/啟用 uBlock₀ 。\n\nCtrl + 點擊:僅在此頁面停用 uBlock₀ 。", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "whitelistPageName": { + "message": "受信任網站", + "description": "appears as tab name in dashboard" }, - "popupBlockedRequestPrompt":{ - "message":"已阻擋的連線請求", - "description":"English: requests blocked" + "shortcutsPageName": { + "message": "快捷鍵", + "description": "appears as tab name in dashboard" }, - "popupBlockedOnThisPagePrompt":{ - "message":"在此頁面上", - "description":"English: on this page" + "statsPageName": { + "message": "uBlock₀ — 記錄器", + "description": "Title for the logger window" }, - "popupBlockedStats":{ - "message":"{{count}} 或 {{percent}}%", - "description":"Example: 15 or 13%" + "aboutPageName": { + "message": "關於", + "description": "appears as tab name in dashboard" }, - "popupBlockedSinceInstallPrompt":{ - "message":"自安裝後", - "description":"English: since install" + "supportPageName": { + "message": "支援", + "description": "appears as tab name in dashboard" }, - "popupOr":{ - "message":"或", - "description":"English: or" + "assetViewerPageName": { + "message": "uBlock₀ — 資源檢視器", + "description": "Title for the asset viewer page" }, - "popupTipDashboard":{ - "message":"點一下開啟控制台", - "description":"English: Click to open the dashboard" + "advancedSettingsPageName": { + "message": "進階設定", + "description": "Title for the advanced settings page" }, - "popupTipPicker":{ - "message":"進入元素選擇器模式", - "description":"English: Enter element picker mode" + "popupPowerSwitchInfo": { + "message": "點擊:在這個網站停用/啟用 uBlock₀。\n\nCtrl + 點擊:僅在這個頁面停用 uBlock₀。", + "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupTipLog":{ - "message":"查看連線請求日誌", - "description":"Tooltip used for the logger icon in the panel" + "popupPowerSwitchInfo1": { + "message": "點擊:在這個網站停用 uBlock₀ 。\n\nCtrl + 點擊:僅在這個頁面停用 uBlock₀ 。", + "description": "Message to be read by screen readers" }, - "popupTipNoPopups":{ - "message":"切換是否阻擋此網站的所有彈出型視窗", - "description":"Tooltip for the no-popups per-site switch" + "popupPowerSwitchInfo2": { + "message": "點擊以在這個網站啟用 uBlock₀。", + "description": "Message to be read by screen readers" }, - "popupTipNoLargeMedia":{ - "message":"切換封鎖此網站的大型媒體元素", - "description":"Tooltip for the no-large-media per-site switch" + "popupBlockedRequestPrompt": { + "message": "已阻擋的連線請求", + "description": "English: requests blocked" }, - "popupTipNoCosmeticFiltering":{ - "message":"切換是否在此網站過濾網頁元素", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupBlockedOnThisPagePrompt": { + "message": "在此頁面", + "description": "English: on this page" }, - "popupTipNoRemoteFonts":{ - "message":"切換封鎖此網站的遠端字體", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 (13%)" }, - "popupTipGlobalRules":{ - "message":"全域規則:此欄位的規則會套用至所有網站。", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupBlockedSinceInstallPrompt": { + "message": "自安裝後", + "description": "English: since install" }, - "popupTipLocalRules":{ - "message":"區域規則:此欄位的規則僅會套用至目前網站。\n區域規則會覆蓋過全域規則。", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupOr": { + "message": "或", + "description": "English: or" }, - "popupTipSaveRules":{ - "message":"點擊此處讓變更永久生效。", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupBlockedOnThisPage_v2": { + "message": "已在這個頁面攔截", + "description": "For the new mobile-friendly popup design" }, - "popupTipRevertRules":{ - "message":"點擊此處還原變更。", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupBlockedSinceInstall_v2": { + "message": "安裝後已攔截", + "description": "For the new mobile-friendly popup design" }, - "popupAnyRulePrompt":{ - "message":"全部", - "description":"" + "popupDomainsConnected_v2": { + "message": "已連接的網域", + "description": "For the new mobile-friendly popup design" }, - "popupImageRulePrompt":{ - "message":"圖片", - "description":"" + "popupTipDashboard": { + "message": "開啟控制台", + "description": "English: Click to open the dashboard" }, - "popup3pAnyRulePrompt":{ - "message":"第三方", - "description":"" + "popupTipZapper": { + "message": "進入元素臨時移除模式", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popup3pPassiveRulePrompt":{ - "message":"第三方階層式樣式表 (CSS)/圖片", - "description":"" + "popupTipPicker": { + "message": "進入元素選擇器模式", + "description": "English: Enter element picker mode" }, - "popupInlineScriptRulePrompt":{ - "message":"行內腳本", - "description":"" + "popupTipLog": { + "message": "開啟記錄器", + "description": "Tooltip used for the logger icon in the panel" }, - "popup1pScriptRulePrompt":{ - "message":"第一方腳本", - "description":"" + "popupTipReport": { + "message": "回報網站問題", + "description": "Tooltip used for the 'chat' icon in the panel" }, - "popup3pScriptRulePrompt":{ - "message":"第三方腳本", - "description":"" + "popupTipNoPopups": { + "message": "切換是否阻擋此網站的所有彈出型視窗", + "description": "Tooltip for the no-popups per-site switch" }, - "popup3pFrameRulePrompt":{ - "message":"第三方框架", - "description":"" + "popupTipNoPopups1": { + "message": "點擊以封鎖網站的所有彈出式視窗", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCountPrompt":{ - "message":"已連結的域名", - "description":"appears in popup" + "popupTipNoPopups2": { + "message": "點擊以解除封鎖網站的所有彈出式視窗", + "description": "Tooltip for the no-popups per-site switch" }, - "popupHitDomainCount":{ - "message":"{{count}} \/ {{total}}", - "description":"appears in popup" + "popupTipNoLargeMedia": { + "message": "切換是否封鎖此網站的大型媒體元素", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerCreate":{ - "message":"建立", - "description":"English: Create" + "popupTipNoLargeMedia1": { + "message": "點擊以封鎖此網站的大型媒體元素", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerPick":{ - "message":"選擇", - "description":"English: Pick" + "popupTipNoLargeMedia2": { + "message": "點擊以解除封鎖此網站的大型媒體元素", + "description": "Tooltip for the no-large-media per-site switch" }, - "pickerQuit":{ - "message":"離開", - "description":"English: Quit" + "popupTipNoCosmeticFiltering": { + "message": "切換是否在此網站過濾網頁元素", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerPreview":{ - "message":"預覽", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popupTipNoCosmeticFiltering1": { + "message": "點擊以停用此網站的網頁元素過濾", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerNetFilters":{ - "message":"網址過濾規則", - "description":"English: header for a type of filter in the element picker dialog" + "popupTipNoCosmeticFiltering2": { + "message": "點擊以啟用網站的網頁元素過濾功能", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "pickerCosmeticFilters":{ - "message":"元素隱藏過濾規則", - "description":"English: Cosmetic filters" + "popupTipNoRemoteFonts": { + "message": "切換是否封鎖此網站的遠端字體", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerCosmeticFiltersHint":{ - "message":"點擊,按住 Ctrl 鍵點擊", - "description":"English: Click, Ctrl-click" + "popupTipNoRemoteFonts1": { + "message": "點擊以封鎖此網站的遠端字型", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "pickerContextMenuEntry":{ - "message":"阻擋元素", - "description":"English: Block element" + "popupTipNoRemoteFonts2": { + "message": "點擊以解除封鎖網站的遠端字型", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "settingsCollapseBlockedPrompt":{ - "message":"隱藏已阻擋的元素的預留位置", - "description":"English: Hide placeholders of blocked elements" + "popupTipNoScripting1": { + "message": "點擊以停用網站的 JavaScript", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsIconBadgePrompt":{ - "message":"在圖示上顯示已被阻擋的連線請求數量", - "description":"English: Show the number of blocked requests on the icon" + "popupTipNoScripting2": { + "message": "點擊以重新啟用網站的 JavaScript", + "description": "Tooltip for the no-scripting per-site switch" }, - "settingsTooltipsPrompt":{ - "message":"關閉提示文字功能", - "description":"A checkbox in the Settings pane" + "popupNoPopups_v2": { + "message": "彈出式視窗", + "description": "Caption for the no-popups per-site switch" }, - "settingsContextMenuPrompt":{ - "message":"使用階層式內容功能表", - "description":"English: Make use of context menu where appropriate" + "popupNoLargeMedia_v2": { + "message": "大型媒體元素", + "description": "Caption for the no-large-media per-site switch" }, - "settingsColorBlindPrompt":{ - "message":"使用對色盲友善的色彩", - "description":"English: Color-blind friendly" + "popupNoCosmeticFiltering_v2": { + "message": "網頁元素過濾", + "description": "Caption for the no-cosmetic-filtering per-site switch" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"啟用雲端儲存空間的支援", - "description":"" + "popupNoRemoteFonts_v2": { + "message": "遠端字型", + "description": "Caption for the no-remote-fonts per-site switch" }, - "settingsAdvancedUserPrompt":{ - "message":"我是進階的使用者(必讀資訊<\/a>)", - "description":"English: " + "popupNoScripting_v2": { + "message": "JavaScript", + "description": "Caption for the no-scripting per-site switch" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"關閉預讀功能(用以避免已經阻擋的網域的任何連線)", - "description":"English: " + "popupMoreButton_v2": { + "message": "更多", + "description": "Label to be used to show popup panel sections" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"停用超連結監測", - "description":"English: " + "popupLessButton_v2": { + "message": "更少", + "description": "Label to be used to hide popup panel sections" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"預防 WebRTC 洩漏本地 IP 地址", - "description":"English: " + "popupTipGlobalRules": { + "message": "全域規則:此欄位的規則會套用至所有網站。", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "settingPerSiteSwitchGroup":{ - "message":"預設行為", - "description":"" + "popupTipLocalRules": { + "message": "區域規則:此欄位的規則僅套用至當前網站。\n區域規則會覆蓋全域規則。", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"這些預設行為可再依各網站調整", - "description":"" + "popupTipSaveRules": { + "message": "點擊以永久儲存變更。", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"停用元素隱藏過濾規則", - "description":"" + "popupTipRevertRules": { + "message": "點擊以撤銷變更。", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "settingsNoLargeMediaPrompt":{ - "message":"封鎖超過 {{input:number}} kB 的媒體元素", - "description":"" + "popupAnyRulePrompt": { + "message": "全部", + "description": "" }, - "settingsNoRemoteFontsPrompt":{ - "message":"封鎖遠端字體", - "description":"" + "popupImageRulePrompt": { + "message": "圖片", + "description": "" }, - "settingsStorageUsed":{ - "message":"儲存空間:已使用 {{value}} 位元組", - "description":"English: Storage used: {{}} bytes" + "popup3pAnyRulePrompt": { + "message": "第三方", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"最後還原:", - "description":"English: Last restore:" + "popup3pPassiveRulePrompt": { + "message": "第三方 CSS / 圖片", + "description": "" }, - "settingsLastBackupPrompt":{ - "message":"最後備份:", - "description":"English: Last backup:" + "popupInlineScriptRulePrompt": { + "message": "內聯腳本", + "description": "" }, - "3pListsOfBlockedHostsPrompt":{ - "message":"目前已使用 {{netFilterCount}} 個網址過濾規則 + {{cosmeticFilterCount}} 個元素隱藏過濾規則:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "popup1pScriptRulePrompt": { + "message": "第一方腳本", + "description": "" }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"在 {{total}} 個中,已使用 {{used}} 個", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "popup3pScriptRulePrompt": { + "message": "第三方腳本", + "description": "" }, - "3pAutoUpdatePrompt1":{ - "message":"自動更新過濾規則列表", - "description":"A checkbox in the _3rd-party filters_ pane" + "popup3pFrameRulePrompt": { + "message": "第三方框架", + "description": "" }, - "3pUpdateNow":{ - "message":"立即更新", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCountPrompt": { + "message": "已連結的網域", + "description": "appears in popup" }, - "3pPurgeAll":{ - "message":"清除所有快取", - "description":"A button in the in the _3rd-party filters_ pane" + "popupHitDomainCount": { + "message": "{{count}} / {{total}}", + "description": "appears in popup" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"解析並套用 Adblock+ 元素隱藏過濾規則。", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "popupVersion": { + "message": "版本", + "description": "Example of use: Version 1.26.4" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

      啟用此選項後,您就可以使用 與 Adblock Plus 相容的「元素隱藏」過濾規則<\/a>。這些過濾規則可用來隱藏網頁中礙眼,卻又不能被網路請求的過濾引擎所阻擋的元素。<\/p>

      啟用這項功能後將增加 uBlock₀ <\/i> 的記憶體使用量。<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "popup3pScriptFilter": { + "message": "程式碼", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"忽略一般元素隱藏過濾規則。", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "popup3pFrameFilter": { + "message": "框架元素", + "description": "Appears as an option to filter out firewall rows" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

      一般元素過濾規則是指會套用於所有網站的規則。

      雖然 uBlock₀ 會有效率地處理這些規則,但這些規則還是可能會在某些網頁中造成許多多餘的記憶體與 CPU 使用率,尤其是在較長又較舊的網頁。

      開啟此選項後將可避免處理一般元素過濾規則時,鎖造成多餘的記憶體與 CPU 使用率,也能降低 uBlock₀ 本身的記憶體用量。

      建議您在效能較差的裝置中開啟此選項。", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "pickerCreate": { + "message": "建立", + "description": "English: Create" }, - "3pListsOfBlockedHostsHeader":{ - "message":"已阻擋的主機列表", - "description":"English: Lists of blocked hosts" + "pickerPick": { + "message": "選擇", + "description": "English: Pick" }, - "3pApplyChanges":{ - "message":"套用變更", - "description":"English: Apply changes" + "pickerQuit": { + "message": "放棄", + "description": "English: Quit" }, - "3pGroupAds":{ - "message":"廣告", - "description":"English: Ads" + "pickerPreview": { + "message": "預覽", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "3pGroupPrivacy":{ - "message":"隱私", - "description":"English: Privacy" + "pickerNetFilters": { + "message": "網址過濾規則", + "description": "English: header for a type of filter in the element picker dialog" }, - "3pGroupMalware":{ - "message":"惡意域名", - "description":"English: Malware domains" + "pickerCosmeticFilters": { + "message": "元素隱藏過濾規則", + "description": "English: Cosmetic filters" }, - "3pGroupSocial":{ - "message":"社交", - "description":"English: Social" + "pickerCosmeticFiltersHint": { + "message": "點擊,按住 Ctrl 鍵點擊", + "description": "English: Click, Ctrl-click" }, - "3pGroupMultipurpose":{ - "message":"多用途", - "description":"English: Multipurpose" + "pickerContextMenuEntry": { + "message": "阻擋元素…", + "description": "An entry in the browser's contextual menu" }, - "3pGroupRegions":{ - "message":"地區,語言", - "description":"English: Regions, languages" + "settingsCollapseBlockedPrompt": { + "message": "隱藏已阻擋元素的佔位元素", + "description": "English: Hide placeholders of blocked elements" }, - "3pGroupCustom":{ - "message":"自訂", - "description":"English: Custom" + "settingsIconBadgePrompt": { + "message": "在圖示上顯示被阻擋的連線請求的數量", + "description": "English: Show the number of blocked requests on the icon" }, - "3pExternalListsHint":{ - "message":"每行一個網址。以“!”開頭的行將被忽略。無效的網址將被忽略。", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "settingsTooltipsPrompt": { + "message": "停用提示框", + "description": "A checkbox in the Settings pane" }, - "3pExternalListsApply":{ - "message":"解析", - "description":"English: Parse" + "settingsContextMenuPrompt": { + "message": "將 uBlock Origin 加入右鍵選單", + "description": "English: Make use of context menu where appropriate" }, - "3pExternalListPurge":{ - "message":"清除快取", - "description":"English: purge cache" + "settingsColorBlindPrompt": { + "message": "使用對色盲友善的色彩", + "description": "English: Color-blind friendly" }, - "3pExternalListNew":{ - "message":"有新版本", - "description":"English: new version available" + "settingsAppearance": { + "message": "外觀", + "description": "Section for controlling user interface appearance" }, - "3pExternalListObsolete":{ - "message":"已過期", - "description":"a filter list is 'out of date' (possibly needs to be updated)" + "settingsThemeLabel": { + "message": "佈景主題", + "description": "Label for checkbox to enable a custom dark theme" }, - "3pLastUpdate":{ - "message":"最後更新:{{ago}}", - "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'" + "settingsThemeAccent0Label": { + "message": "自訂強調顏色", + "description": "Label for checkbox to pick an accent color" }, - "1pFormatHint":{ - "message":"每行一個過濾規則。一個規則可以是一個平凡的主機名稱或者是一個與 Adblock Plus 相容的過濾規則。以“!”開頭的行將被忽略。", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "settingsCloudStorageEnabledPrompt": { + "message": "啟用雲端儲存空間的支援", + "description": "" }, - "1pImport":{ - "message":"匯入並加入", - "description":"English: Import and append" + "settingsAdvancedUserPrompt": { + "message": "我是進階使用者", + "description": "Checkbox to let user access advanced, technical features" }, - "1pExport":{ - "message":"匯出", - "description":"English: Export" + "settingsPrefetchingDisabledPrompt": { + "message": "停用「預先取回連結」(避免連接至已阻擋的網路請求)", + "description": "English: " }, - "1pExportFilename":{ - "message":"我的-ublock-靜態過濾規則_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "停用超連結監測", + "description": "English: " }, - "1pApplyChanges":{ - "message":"套用變更", - "description":"English: Apply changes" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "防止 WebRTC 洩漏本機 IP 位址", + "description": "English: " }, - "rulesPermanentHeader":{ - "message":"永久規則", - "description":"header" + "settingPerSiteSwitchGroup": { + "message": "預設行為", + "description": "" }, - "rulesTemporaryHeader":{ - "message":"臨時規則", - "description":"header" + "settingPerSiteSwitchGroupSynopsis": { + "message": "這些預設行為可再依各網站調整", + "description": "" }, - "rulesRevert":{ - "message":"還原", - "description":"This will remove all temporary rules" + "settingsNoCosmeticFilteringPrompt": { + "message": "停用元素隱藏過濾規則", + "description": "" }, - "rulesCommit":{ - "message":"提交", - "description":"This will persist temporary rules" + "settingsNoLargeMediaPrompt": { + "message": "封鎖超過 {{input}} KB 的媒體元素", + "description": "" }, - "rulesEdit":{ - "message":"編輯", - "description":"Will enable manual-edit mode (textarea)" + "settingsNoRemoteFontsPrompt": { + "message": "封鎖遠端字型", + "description": "" }, - "rulesEditSave":{ - "message":"儲存", - "description":"Will save manually-edited content and exit manual-edit mode" + "settingsNoScriptingPrompt": { + "message": "停用 JavaScript", + "description": "The default state for the per-site no-scripting switch" }, - "rulesEditDiscard":{ - "message":"捨棄", - "description":"Will discard manually-edited content and exit manual-edit mode" + "settingsNoCSPReportsPrompt": { + "message": "封鎖內容安全策略報告", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, - "rulesImport":{ - "message":"從檔案匯入…", - "description":"" + "settingsUncloakCnamePrompt": { + "message": "揭露網域「正規名稱」", + "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513" }, - "rulesExport":{ - "message":"匯出至檔案…", - "description":"" + "settingsAdvanced": { + "message": "進階", + "description": "Section for controlling advanced-user settings" }, - "rulesDefaultFileName":{ - "message":"我的-ublock-動態過濾規則_{{datetime}}.txt", - "description":"default file name to use" + "settingsAdvancedSynopsis": { + "message": "僅適合技術使用者的功能", + "description": "Description of section controlling advanced-user settings" }, - "rulesHint":{ - "message":"您的動態過濾規則列表", - "description":"English: List of your dynamic filtering rules." + "settingsAdvancedUserSettings": { + "message": "進階設定", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "rulesFormatHint":{ - "message":"規則語法:來源主機名稱 目標主機名稱 連線請求類型 操作<\/code>(完整說明<\/a>)。", - "description":"English: dynamic rule syntax and full documentation." + "settingsLastRestorePrompt": { + "message": "上次還原:", + "description": "English: Last restore:" }, - "whitelistPrompt":{ - "message":"列表裡的主機名稱將被 uBlock₀ 停用。每行一個規則。無效的主機名稱將被忽略掉。", - "description":"English: Your list of host names for which uBlock₀ will be disabled. One host name per line. Invalid host names will be silently ignored." + "settingsLastBackupPrompt": { + "message": "上次備份:", + "description": "English: Last backup:" }, - "whitelistImport":{ - "message":"匯入並加入", - "description":"English: Import and append" + "3pListsOfBlockedHostsPrompt": { + "message": "目前已使用 {{netFilterCount}} 個網址過濾規則 + {{cosmeticFilterCount}} 個元素隱藏過濾規則:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "whitelistExport":{ - "message":"匯出", - "description":"English: Export" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} / {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "whitelistExportFilename":{ - "message":"我的-ublock-白名單_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "3pAutoUpdatePrompt1": { + "message": "自動更新過濾規則", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "whitelistApply":{ - "message":"套用變更", - "description":"English: Apply changes" + "3pUpdateNow": { + "message": "立即更新", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderType":{ - "message":"類型", - "description":"English: Type" + "3pPurgeAll": { + "message": "清除所有快取", + "description": "A button in the in the _3rd-party filters_ pane" }, - "logRequestsHeaderDomain":{ - "message":"域名", - "description":"English: Domain" + "3pParseAllABPHideFiltersPrompt1": { + "message": "解析並套用元素隱藏過濾規則", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "logRequestsHeaderURL":{ - "message":"網址", - "description":"English: URL" + "3pParseAllABPHideFiltersInfo": { + "message": "「網頁元素過濾規則」負責隱藏網頁中被認為礙眼,且不能被網路請求過濾引擎阻擋的元素。", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "logRequestsHeaderFilter":{ - "message":"過濾規則", - "description":"English: Filter" + "3pIgnoreGenericCosmeticFilters": { + "message": "忽略一般元素隱藏過濾規則", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "logAll":{ - "message":"全部", - "description":"Appears in the logger's tab selector" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "「通用網頁元素過濾規則」是會套用在所有網站上的網頁元素過濾規則。啟用此選項會消除網頁處理此類規則時增加的額外記憶體與 CPU 使用量。\n\n建議在效能較弱的裝置上啟用此選項。", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "logBehindTheScene":{ - "message":"背景的網路連線請求", - "description":"Pretty name for behind-the-scene network requests" + "3pSuspendUntilListsAreLoaded": { + "message": "在所有過濾器清單載入完成前暫停網路活動", + "description": "A checkbox in the 'Filter lists' pane" }, - "logFilterPrompt":{ - "message":"過濾日誌項目", - "description":"English: filter log entries" + "3pListsOfBlockedHostsHeader": { + "message": "被阻擋網域的列表", + "description": "English: Lists of blocked hosts" }, - "logMaxEntriesTip":{ - "message":"最大日誌項目的數量", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "3pApplyChanges": { + "message": "套用變更", + "description": "English: Apply changes" }, - "loggerURLFilteringContextLabel":{ - "message":"環境:", - "description":"Label for the context selector" + "3pGroupDefault": { + "message": "內置", + "description": "Filter lists section name" }, - "loggerURLFilteringTypeLabel":{ - "message":"類型:", - "description":"Label for the type selector" + "3pGroupAds": { + "message": "廣告", + "description": "Filter lists section name" }, - "loggerURLFilteringHeader":{ - "message":"動態網址過濾", - "description":"Small header to identify the dynamic URL filtering section" + "3pGroupPrivacy": { + "message": "隱私", + "description": "Filter lists section name" }, - "loggerStaticFilteringHeader":{ - "message":"靜態過濾", - "description":"Small header to identify the static filtering section" + "3pGroupMalware": { + "message": "惡意軟體防護與安全性", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentence":{ - "message":"當網址符合 {{url}} {{br}} 並且來自 {{origin}} 時,{{br}} {{action}} {{type}} 的網路請求。{{br}}{{importance}} 已有符合的過濾器。", - "description":"Used in the static filtering wizard" + "3pGroupSocial": { + "message": "社交媒體小工具", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"封鎖", - "description":"Used in the static filtering wizard" + "3pGroupCookies": { + "message": "Cookie 通知", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"允許", - "description":"Used in the static filtering wizard" + "3pGroupAnnoyances": { + "message": "嫌惡元素", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartType":{ - "message":"類型「{{type}}」", - "description":"Used in the static filtering wizard" + "3pGroupMultipurpose": { + "message": "多用途", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"任何類型", - "description":"Used in the static filtering wizard" + "3pGroupRegions": { + "message": "地區、語言", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"來自「{{origin}}」", - "description":"Used in the static filtering wizard" + "3pGroupCustom": { + "message": "自訂", + "description": "Filter lists section name" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"來自任何地方", - "description":"Used in the static filtering wizard" + "3pImport": { + "message": "匯入…", + "description": "The label for the checkbox used to import external filter lists" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"除非", - "description":"Used in the static filtering wizard" + "3pExternalListsHint": { + "message": "每行一個網址。無效網址將被忽略。", + "description": "Short information about how to use the textarea to import external filter lists by URL" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"就算", - "description":"Used in the static filtering wizard" + "3pExternalListObsolete": { + "message": "過久未更新。", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"在下列清單中找到靜態過濾器 {{filter}}:", - "description":"Below this sentence, the filter lists in which the filter was found" + "3pViewContent": { + "message": "查看內容", + "description": "used as a tooltip for eye icon beside a list" }, - "aboutChangelog":{ - "message":"更新日誌", - "description":"English: Change log" + "3pLastUpdate": { + "message": "上次更新時間:{{ago}}。\n按這裡以強制更新。", + "description": "used as a tooltip for the clock icon beside a list" }, - "aboutWiki":{ - "message":"共筆系統", - "description":"English: project' wiki on Github" + "3pUpdating": { + "message": "更新中…", + "description": "used as a tooltip for the spinner icon beside a list" }, - "aboutSupport":{ - "message":"支援", - "description":"A link for where to get support" + "3pNetworkError": { + "message": "因網路錯誤無法更新資源。", + "description": "used as a tooltip for error icon beside a list" }, - "aboutCode":{ - "message":"原始程式碼(GPLv3)", - "description":"English: Source code (GPLv3)" + "1pTrustWarning": { + "message": "切勿加入來歷不明的過濾規則。", + "description": "Warning against copy-pasting filters from random sources" }, - "aboutContributors":{ - "message":"貢獻者", - "description":"English: Contributors" + "1pEnableMyFiltersLabel": { + "message": "啟用自訂過濾器", + "description": "Label for the checkbox use to enable/disable 'My filters' list" }, - "aboutBackupDataButton":{ - "message":"備份到檔案…", - "description":"English: Backup to file" + "1pTrustMyFiltersLabel": { + "message": "允許需要信任的自訂過濾規則", + "description": "Label for the checkbox use to trust the content of 'My filters' list" }, - "aboutBackupFilename":{ - "message":"我的-ublock-備份_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "1pImport": { + "message": "匯入並加入…", + "description": "Button in the 'My filters' pane" }, - "aboutRestoreDataButton":{ - "message":"從檔案還原…", - "description":"English: Restore from file..." + "1pExport": { + "message": "匯出…", + "description": "Button in the 'My filters' pane" }, - "aboutResetDataButton":{ - "message":"重置為預設設定", - "description":"English: Reset to default settings..." + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "aboutRestoreDataConfirm":{ - "message":"您所有的設定將會被 {{time}} 的備份資料覆蓋,並將重新啟動 uBlock₀。\n\n您確定要用備份資料蓋過目前的所有設定嗎?", - "description":"Message asking user to confirm restore" + "1pApplyChanges": { + "message": "套用變更", + "description": "English: Apply changes" }, - "aboutRestoreDataError":{ - "message":"資料無法讀取或無效", - "description":"Message to display when an error occurred during restore" + "rulesPermanentHeader": { + "message": "永久規則", + "description": "header" }, - "aboutResetDataConfirm":{ - "message":"您所有的設定都將被移除,並將重新啟動 uBlock₀。\n\n您確定要將 uBlock₀ 回復為原廠設定?", - "description":"Message asking user to confirm reset" + "rulesTemporaryHeader": { + "message": "臨時規則", + "description": "header" }, - "errorCantConnectTo":{ - "message":"無法連接到 {{url}}", - "description":"English: Network error: unable to connect to {{url}}" + "rulesRevert": { + "message": "還原", + "description": "This will remove all temporary rules" }, - "subscriberConfirm":{ - "message":"uBlock₀:確定要新增下列網址至自訂過濾規則清單?\n\n標題:「{{title}}」\n網址:{{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "rulesCommit": { + "message": "提交", + "description": "This will persist temporary rules" }, - "elapsedOneMinuteAgo":{ - "message":"1 分鐘前", - "description":"English: a minute ago" + "rulesEdit": { + "message": "編輯", + "description": "Will enable manual-edit mode (textarea)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} 分鐘前", - "description":"English: {{value}} minutes ago" + "rulesEditSave": { + "message": "儲存", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "elapsedOneHourAgo":{ - "message":"1 小時前", - "description":"English: an hour ago" + "rulesEditDiscard": { + "message": "捨棄", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} 小時前", - "description":"English: {{value}} hours ago" + "rulesImport": { + "message": "從檔案匯入…", + "description": "" }, - "elapsedOneDayAgo":{ - "message":"1 天前", - "description":"English: a day ago" + "rulesExport": { + "message": "匯出至檔案…", + "description": "Button in the 'My rules' pane" }, - "elapsedManyDaysAgo":{ - "message":"{{value}} 天前", - "description":"English: {{value}} days ago" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "showDashboardButton":{ - "message":"顯示控制台", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "rulesHint": { + "message": "您的動態過濾規則清單。", + "description": "English: List of your dynamic filtering rules." }, - "showNetworkLogButton":{ - "message":"顯示網路連線請求日誌", - "description":"Firefox\/Fennec-specific: Show Logger" + "rulesFormatHint": { + "message": "規則語法:來源主機名稱 目標主機名稱 連線請求類型 操作完整說明)。", + "description": "English: dynamic rule syntax and full documentation." }, - "fennecMenuItemBlockingOff":{ - "message":"關閉", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "rulesSort": { + "message": "排序:", + "description": "English: label for sort option." }, - "docblockedPrompt1":{ - "message":"uBlock₀ 已防止下列的頁面載入:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "rulesSortByType": { + "message": "規則類型", + "description": "English: a sort option for list of rules." }, - "docblockedPrompt2":{ - "message":"因為下列的過濾", - "description":"English: Because of the following filter" + "rulesSortBySource": { + "message": "來源", + "description": "English: a sort option for list of rules." }, - "docblockedNoParamsPrompt":{ - "message":"不帶參數", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "rulesSortByDestination": { + "message": "目的地", + "description": "English: a sort option for list of rules." }, - "docblockedFoundIn":{ - "message":"在下列清單找到:", - "description":"English: List of filter list names follows" + "whitelistPrompt": { + "message": "信任名單中的規則適用的頁面不會被 uBlock Origin 過濾或阻擋。每行一個規則。", + "description": "A concise description of the 'Trusted sites' pane." }, - "docblockedBack":{ - "message":"返回", - "description":"English: Go back" + "whitelistImport": { + "message": "匯入並加入…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedClose":{ - "message":"關閉此視窗", - "description":"English: Close this window" + "whitelistExport": { + "message": "匯出…", + "description": "Button in the 'Trusted sites' pane" }, - "docblockedProceed":{ - "message":"關閉針對 {{hostname}} 的嚴謹阻擋", - "description":"English: Disable strict blocking for {{hostname}} ..." + "whitelistExportFilename": { + "message": "my-ublock-trusted-sites_{{datetime}}.txt", + "description": "The default filename to use for import/export purpose" }, - "docblockedDisableTemporary":{ - "message":"暫時地", - "description":"English: Temporarily" + "whitelistApply": { + "message": "套用變更", + "description": "English: Apply changes" }, - "docblockedDisablePermanent":{ - "message":"永久地", - "description":"English: Permanently" + "logRequestsHeaderType": { + "message": "類型", + "description": "English: Type" }, - "cloudPush":{ - "message":"匯出至雲端儲存空間", - "description":"tooltip" + "logRequestsHeaderDomain": { + "message": "網域", + "description": "English: Domain" }, - "cloudPull":{ - "message":"從雲端儲存空間匯入", - "description":"tooltip" + "logRequestsHeaderURL": { + "message": "網址", + "description": "English: URL" }, - "cloudPullAndMerge":{ - "message":"自雲端匯入,並與目前設定合併", - "description":"tooltip" + "logRequestsHeaderFilter": { + "message": "過濾規則", + "description": "English: Filter" }, - "cloudNoData":{ - "message":"... ...", - "description":"" + "logAll": { + "message": "全部", + "description": "Appears in the logger's tab selector" }, - "cloudDeviceNamePrompt":{ - "message":"此裝置的名稱:", - "description":"used as a prompt for the user to provide a custom device name" + "logBehindTheScene": { + "message": "背景網路連線請求", + "description": "Pretty name for behind-the-scene network requests" }, - "genericSubmit":{ - "message":"送出", - "description":"for generic 'submit' buttons" + "loggerCurrentTab": { + "message": "目前分頁", + "description": "Appears in the logger's tab selector" }, - "genericRevert":{ - "message":"還原", - "description":"for generic 'revert' buttons" + "loggerReloadTip": { + "message": "重新載入分頁內容", + "description": "Tooltip for the reload button in the logger page" }, - "genericBytes":{ - "message":"位元組", - "description":"" + "loggerDomInspectorTip": { + "message": "切換是否啟用 DOM 檢視器", + "description": "Tooltip for the DOM inspector button in the logger page" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"暫時允許大型媒體元素", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "loggerPopupPanelTip": { + "message": "切換是否啟用彈出式面板", + "description": "Tooltip for the popup panel button in the logger page" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "loggerInfoTip": { + "message": "uBlock Origin wiki:記錄器", + "description": "Tooltip for the top-right info label in the logger page" + }, + "loggerClearTip": { + "message": "清除記錄", + "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" + }, + "loggerPauseTip": { + "message": "暫停記錄(捨棄所有傳入資料)", + "description": "Tooltip for the pause button in the logger page" + }, + "loggerUnpauseTip": { + "message": "取消暫停記錄", + "description": "Tooltip for the play button in the logger page" + }, + "loggerRowFiltererButtonTip": { + "message": "切換是否啟用記錄篩選", + "description": "Tooltip for the row filterer button in the logger page" + }, + "logFilterPrompt": { + "message": "篩選記錄條目", + "description": "Placeholder string for logger output filtering input field" + }, + "loggerRowFiltererBuiltinTip": { + "message": "記錄器篩選設定", + "description": "Tooltip for the button to bring up logger output filtering options" + }, + "loggerRowFiltererBuiltinNot": { + "message": "非", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinEventful": { + "message": "已套用規則", + "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" + }, + "loggerRowFiltererBuiltinBlocked": { + "message": "已封鎖", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinAllowed": { + "message": "已允許", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltinModified": { + "message": "已修改", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin1p": { + "message": "第一方", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerRowFiltererBuiltin3p": { + "message": "第三方", + "description": "A keyword in the built-in row filtering expression" + }, + "loggerEntryDetailsHeader": { + "message": "詳細資料", + "description": "Small header to identify the 'Details' pane for a specific logger entry" + }, + "loggerEntryDetailsFilter": { + "message": "過濾規則", + "description": "Label to identify a filter field" + }, + "loggerEntryDetailsFilterList": { + "message": "過濾規則清單", + "description": "Label to identify a filter list field" + }, + "loggerEntryDetailsRule": { + "message": "規則", + "description": "Label to identify a rule field" + }, + "loggerEntryDetailsContext": { + "message": "來源", + "description": "Label to identify a context field (typically a hostname)" + }, + "loggerEntryDetailsRootContext": { + "message": "主內容", + "description": "Label to identify a root context field (typically a hostname)" + }, + "loggerEntryDetailsPartyness": { + "message": "第一方/第三方", + "description": "Label to identify a field providing partyness information" + }, + "loggerEntryDetailsType": { + "message": "類型", + "description": "Label to identify the type of an entry" + }, + "loggerEntryDetailsURL": { + "message": "網址", + "description": "Label to identify the URL of an entry" + }, + "loggerURLFilteringHeader": { + "message": "網址規則", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerURLFilteringContextLabel": { + "message": "上下文:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "類型:", + "description": "Label for the type selector" + }, + "loggerStaticFilteringHeader": { + "message": "靜態過濾", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "當網址符合 {{url}},{{br}}並且來自 {{origin}} 時,{{br}}{{action}} {{type}} 的網路請求,{{br}}{{importance}} 已有符合的過濾例外規則。", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "封鎖", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "允許", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "{{type}} 類型", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "任何類型", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "來自「{{origin}}」", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "來自任何地方", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "除非", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "就算", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "在下列清單中找到靜態過濾規則 {{filter}}:", + "description": "Below this sentence, the filter list(s) in which the filter was found" + }, + "loggerStaticFilteringFinderSentence2": { + "message": "無法在任何目前已啟用的過濾規則清單中找到靜態過濾規則", + "description": "Message to show when a filter cannot be found in any filter lists" + }, + "loggerSettingDiscardPrompt": { + "message": "未符合以下所有條件的記錄將會被自動捨棄:", + "description": "Logger setting: A sentence to describe the purpose of the settings below" + }, + "loggerSettingPerEntryMaxAge": { + "message": "最多保留 {{input}} 分鐘以內的記錄", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxLoads": { + "message": "每個分頁最多保留 {{input}} 次內容載入產生的記錄", + "description": "A logger setting" + }, + "loggerSettingPerTabMaxEntries": { + "message": "每個分頁最多保留 {{input}} 條記錄", + "description": "A logger setting" + }, + "loggerSettingPerEntryLineCount": { + "message": "在垂直延展模式中每條記錄顯示 {{input}} 行", + "description": "A logger setting" + }, + "loggerSettingHideColumnsPrompt": { + "message": "隱藏欄位:", + "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" + }, + "loggerSettingHideColumnTime": { + "message": "{{input}} 時間", + "description": "A label for the time column" + }, + "loggerSettingHideColumnFilter": { + "message": "{{input}} 過濾規則", + "description": "A label for the filter or rule column" + }, + "loggerSettingHideColumnContext": { + "message": "{{input}} 上下文", + "description": "A label for the context column" + }, + "loggerSettingHideColumnPartyness": { + "message": "{{input}} 第一方/第三方", + "description": "A label for the partyness column" + }, + "loggerExportFormatList": { + "message": "清單", + "description": "Label for radio-button to pick export format" + }, + "loggerExportFormatTable": { + "message": "表格", + "description": "Label for radio-button to pick export format" + }, + "loggerExportEncodePlain": { + "message": "純文字", + "description": "Label for radio-button to pick export text format" + }, + "loggerExportEncodeMarkdown": { + "message": "Markdown", + "description": "Label for radio-button to pick export text format" + }, + "supportOpenButton": { + "message": "開啟", + "description": "Text for button which open an external web page in Support pane" + }, + "supportReportSpecificButton": { + "message": "建立新報告", + "description": "Text for button which open an external web page in Support pane" + }, + "supportFindSpecificButton": { + "message": "尋找類似報告", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS1H": { + "message": "文件", + "description": "Header of 'Documentation' section in Support pane" + }, + "supportS1P1": { + "message": "欲了解 uBlock Origin 所有的功能,請詳閱 uBlock/wiki 中的文件。", + "description": "First paragraph of 'Documentation' section in Support pane" + }, + "supportS2H": { + "message": "問題與支援", + "description": "Header of 'Questions and support' section in Support pane" + }, + "supportS2P1": { + "message": "如有問題或需要其他類型的幫助,可以在 /r/uBlockOrigin subreddit 獲得協助與解答。", + "description": "First paragraph of 'Questions and support' section in Support pane" + }, + "supportS3H": { + "message": "過濾器問題 / 網站被破壞", + "description": "Header of 'Filter issues' section in Support pane" + }, + "supportS3P1": { + "message": "請到 uBlockOrigin/uAssets 議題追蹤系統回報特定網站的過濾器問題。需要 GitHub 帳號。", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P2": { + "message": "特別注意:不要把其他同性質的阻擋工具跟 uBlock Origin 混用,否則可能會在特定網站造成過濾問題。", + "description": "Second paragraph of 'Filter issues' section in Support pane" + }, + "supportS3P3": { + "message": "小提示:請確定您的過濾器清單已經更新至最新版本。我們主要用「記錄器」來分析過濾器相關問題。", + "description": "Third paragraph of 'Filter issues' section in Support pane" + }, + "supportS4H": { + "message": "錯誤回報", + "description": "Header of 'Bug report' section in Support pane" + }, + "supportS4P1": { + "message": "請到 uBlockOrigin/uBlock-issue 議題追蹤系統回報 uBlock Origin 本身的問題。需要 GitHub 帳號。", + "description": "First paragraph of 'Bug report' section in Support pane" + }, + "supportS5H": { + "message": "疑難排解資訊", + "description": "Header of 'Troubleshooting Information' section in Support pane" + }, + "supportS5P1": { + "message": "以下是志願者嘗試幫您解決問題時,可能會用到的技術資訊:", + "description": "First paragraph of 'Troubleshooting Information' section in Support pane" + }, + "supportS6H": { + "message": "回報過濾規則的問題", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS6P1S1": { + "message": "為避免增加志願者的負擔,請先確認此問題是否已被回報過。請注意:點選按鈕會將本頁的來源傳送到 GitHub。", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S1": { + "message": "過濾器清單每天更新,請確保問題尚未在最新版本中解決。", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6P2S2": { + "message": "重新載入有問題的網頁後,驗證問題是否仍然存在。", + "description": "A paragraph in the filter issue reporter section" + }, + "supportS6URL": { + "message": "網址:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "這個網頁…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- 挑選一種情況 --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "會顯示廣告或殘留空位", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "含有覆蓋物或其他滋擾物", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "偵測到 uBlock Origin", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "有隱私權相關問題", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "開啟 uBlock Origin 的時候運作不正常", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "會開啟不必要的分頁或視窗", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "導向惡意軟體、釣魚網站", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "將網頁標記為「NSFW」(工作場所不宜)", + "description": "A checkbox to use for NSFW sites" + }, + "aboutPrivacyPolicy": { + "message": "隱私權條款", + "description": "Link to privacy policy on GitHub (English)" + }, + "aboutChangelog": { + "message": "變更日誌", + "description": "" + }, + "aboutCode": { + "message": "原始碼(GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "貢獻者", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "原始碼", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "翻譯", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "過濾規則清單", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "外部相依套件(與 GPLv3 相容):", + "description": "Shown in the About pane" + }, + "aboutCDNs": { + "message": "uBO 自家的過濾規則清單由下列 CDN 免費代管:", + "description": "Shown in the About pane" + }, + "aboutCDNsInfo": { + "message": "當過濾清單需要更新時,將隨機選擇一組 CDN 連線下載。", + "description": "Shown in the About pane" + }, + "aboutBackupDataButton": { + "message": "備份至檔案…", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "從檔案還原…", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "重設為預設設定…", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "您所有的設定將會被 {{time}} 的備份資料覆蓋,並將重新啟動 uBlock₀。\n\n您確定要用備份資料蓋過目前的所有設定嗎?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "無法讀取資料,或資料無效", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "您所有的設定都將被移除,並將重新啟動 uBlock₀。\n\n您確定要將 uBlock₀ 回復為原廠設定?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "網路錯誤:{{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscribeButton": { + "message": "訂閱", + "description": "For the button used to subscribe to a filter list" + }, + "elapsedOneMinuteAgo": { + "message": "1 分鐘前", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} 分鐘前", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "1 小時前", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} 小時前", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "1 天前", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} 天前", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "顯示控制台", + "description": "Firefox/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "顯示記錄器", + "description": "Firefox/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "關閉", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedTitle": { + "message": "已封鎖頁面", + "description": "Used as a title for the document-blocked page" + }, + "docblockedPrompt1": { + "message": "uBlock Origin 已防止下列頁面載入:", + "description": "Used in the strict-blocking page" + }, + "docblockedPrompt2": { + "message": "因為下列過濾規則:", + "description": "Used in the strict-blocking page" + }, + "docblockedNoParamsPrompt": { + "message": "不帶參數", + "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "在下列清單找到:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "返回", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "關閉此視窗", + "description": "English: Close this window" + }, + "docblockedDontWarn": { + "message": "不再針對此網站作出警告", + "description": "Label for checkbox in document-blocked page" + }, + "docblockedProceed": { + "message": "停止針對 {{hostname}} 的嚴格封鎖", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "暫時", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "永久", + "description": "English: Permanently" + }, + "docblockedDisable": { + "message": "繼續", + "description": "Button text to navigate to the blocked page" + }, + "docblockedRedirectPrompt": { + "message": "被阻擋的頁面想要重定向到另一個網站。如果您選擇繼續,將直接導航至:{{url}}", + "description": "Text warning about an incoming redirect" + }, + "docblockedReasonLabel": { + "message": "理由:", + "description": "The label which prepend the actual reason why a page was blocked" + }, + "docblockedReasonMalicious": { + "message": "惡意軟體", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonTracker": { + "message": "追蹤器", + "description": "An actual reason why a page was blocked" + }, + "docblockedReasonDisreputable": { + "message": "聲名狼藉", + "description": "An actual reason why a page was blocked" + }, + "cloudPush": { + "message": "匯出至雲端儲存空間", + "description": "tooltip" + }, + "cloudPull": { + "message": "從雲端儲存空間匯入", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "自雲端匯入,並與目前設定合併", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "該裝置的名稱:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "警告!修改進階設定時,請自負風險。", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "送出", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "套用變更", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "還原", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "位元組", + "description": "" + }, + "contextMenuBlockElementInFrame": { + "message": "阻擋框架元素中的內容…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuSubscribeToList": { + "message": "訂閱過濾規則清單…", + "description": "An entry in the browser's contextual menu" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "暫時允許大型媒體元素", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "contextMenuViewSource": { + "message": "檢視原始碼…", + "description": "A context menu entry, to view the source code of the target resource" + }, + "shortcutCapturePlaceholder": { + "message": "鍵入快速鍵", + "description": "Placeholder string for input field used to capture a keyboard shortcut" + }, + "genericMergeViewScrollLock": { + "message": "切換是否啟用同步捲動", + "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" + }, + "genericCopyToClipboard": { + "message": "複製到剪貼簿", + "description": "Label for buttons used to copy something to the clipboard" + }, + "genericSelectAll": { + "message": "全選", + "description": "Label for buttons used to select all text in editor" + }, + "toggleCosmeticFiltering": { + "message": "切換是否啟用元素隱藏過濾規則", + "description": "Label for keyboard shortcut used to toggle cosmetic filtering" + }, + "toggleJavascript": { + "message": "切換 JavaScript", + "description": "Label for keyboard shortcut used to toggle no-scripting switch" + }, + "relaxBlockingMode": { + "message": "放寬封鎖模式", + "description": "Label for keyboard shortcut used to relax blocking mode" + }, + "storageUsed": { + "message": "儲存空間用量:{{value}} {{unit}}", + "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" + }, + "KB": { + "message": "KB", + "description": "short for 'kilobytes'" + }, + "MB": { + "message": "MB", + "description": "short for 'megabytes'" + }, + "GB": { + "message": "GB", + "description": "short for 'gigabytes'" + }, + "clickToLoad": { + "message": "點擊以載入", + "description": "Message used in frame placeholders" + }, + "linterMainReport": { + "message": "錯誤:{{count}}", + "description": "Summary of number of errors as reported by the linter " + }, + "unprocessedRequestTooltip": { + "message": "無法在瀏覽器啟動的時候正確過濾頁面。請重新載入來確保過濾正確。", + "description": "A warning which will appear in the popup panel if needed" + }, + "dummy": { + "message": "此條目須為最後一個", + "description": "so we dont need to deal with comma for last entry" } -} \ No newline at end of file +} diff --git a/src/about.html b/src/about.html index 855170e966206..e747a93051d2a 100644 --- a/src/about.html +++ b/src/about.html @@ -2,7 +2,10 @@ + + uBlock — About + @@ -10,27 +13,52 @@ -

      - + + + + - - - - + + + + diff --git a/src/advanced-settings.html b/src/advanced-settings.html new file mode 100644 index 0000000000000..b55bdbad6cf58 --- /dev/null +++ b/src/advanced-settings.html @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + +
      +

      info-circle +

      +   +

      + +
      + + + + + + + + + + + + + + + + diff --git a/src/asset-viewer.html b/src/asset-viewer.html index bfabd8829ff95..5cfc73ebe06e8 100644 --- a/src/asset-viewer.html +++ b/src/asset-viewer.html @@ -2,22 +2,50 @@ -uBlock — Asset - + + + + + + + + + + + - -
      + +
      + + + spinner + +
      +
      + + + + + + + + + + + - - + + + + + + + + + diff --git a/src/background.html b/src/background.html index a8463068e76c3..63e27aa189fb4 100644 --- a/src/background.html +++ b/src/background.html @@ -2,36 +2,11 @@ -uBlock Origin +uBlock Origin Background Page - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + diff --git a/src/blank.html b/src/blank.html new file mode 100644 index 0000000000000..be329a5cc9426 --- /dev/null +++ b/src/blank.html @@ -0,0 +1,11 @@ + + + + + + +uBO blank + + + + diff --git a/src/cloud-ui.html b/src/cloud-ui.html new file mode 100644 index 0000000000000..366cf72a64f6c --- /dev/null +++ b/src/cloud-ui.html @@ -0,0 +1,23 @@ + + + + + + + +
      +
      + + + + +
      +
      cog
      +
      +   +
      +
      +
      +
      + + diff --git a/src/code-viewer.html b/src/code-viewer.html new file mode 100644 index 0000000000000..caddbdaab87f4 --- /dev/null +++ b/src/code-viewer.html @@ -0,0 +1,54 @@ + + + + + + +Code viewer + + + + + + + + + + + + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/css/1p-filters.css b/src/css/1p-filters.css index 5f71e1e666079..6e449484da60b 100644 --- a/src/css/1p-filters.css +++ b/src/css/1p-filters.css @@ -1,15 +1,33 @@ -div > p:first-child { - margin-top: 0; +html { + height: 100vh; + height: 100svh; + overflow: hidden; + width: 100vw; } -div > p:last-child { - margin-bottom: 0; +body { + display: flex; + flex-direction: column; + height: 100%; + justify-content: stretch; + overflow: hidden; + overflow-y: auto; + width: 100%; + } +.body { + flex-shrink: 0; + } +/* https://github.com/uBlockOrigin/uBlock-issues/issues/3058 */ +:root.mobile body { + min-height: unset; } -.userFilters { - box-sizing: border-box; - font-size: small; - height: 60vh; +html:not(.mobile) [data-i18n="1pTrustWarning"] { + font-weight: bold; + } +.codeMirrorContainer { + flex-grow: 1; + } +#userFilters { + min-height: 8em; text-align: left; - white-space: pre; - width: 100%; word-wrap: normal; } diff --git a/src/css/3p-filters.css b/src/css/3p-filters.css index 09942e15b0e29..f5bed6b8b42f5 100644 --- a/src/css/3p-filters.css +++ b/src/css/3p-filters.css @@ -1,190 +1,237 @@ -ul { - padding: 0; - list-style-type: none; +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } +body { + margin-bottom: 6rem; + } +#actions { + background-color: var(--surface-1); + position: sticky; + top: 0; + z-index: 10; + } +#buttonUpdate.active { + pointer-events: none; } -#options li { - margin-bottom: 0.5em; +#buttonUpdate.active .fa-icon svg, +body.working #buttonUpdate:not(.disabled) .fa-icon svg { + animation: spin 1s linear infinite; + transform-origin: 50%; } -#lists { - margin: 0.5em 0 0 0; - padding-left: 1em; - padding-right: 0em; + +body.updating #actions, +body.working #actions { + cursor: progress; } -body[dir=rtl] #lists { - padding-left: 0em; - padding-right: 1em; +body.updating #actions #buttonUpdate, +body.working #actions button { + pointer-events: none; } -#lists > li { - margin: 0.5em 0 0 0; + +.listExpander { + font-size: 18px; padding: 0; - list-style-type: none; } -#lists > .groupEntry > .geName { +.listExpander:first-child { + justify-content: flex-start; + min-width: 20px; + } +.listExpander:not(:first-child) { + color: var(--checkbox-checked-ink); + fill: var(--checkbox-checked-ink); + } +.listExpander svg { + transform: rotate(90deg); + transform-origin: 50%; + } + +#lists .fa-icon:hover { + transform: scale(1.25); + } + +#lists .rootstats.expanded .listExpander svg { + transform: rotate(180deg); + } + +#lists .searchfield { + margin-block-start: calc(var(--font-size) * 0.75); + margin-inline-start: var(--checkbox-size); + } +#lists.searchMode > .listEntries .listEntries, +#lists.searchMode > .listEntries .listEntry.searchMatch { + display: flex !important; + } +#lists.searchMode > .listEntries .listEntry { + display: none; + } +#lists.searchMode > .listEntries .listExpander { + visibility: hidden; + } + +#listsOfBlockedHostsPrompt { cursor: pointer; - font-size: 110%; } -#lists > .groupEntry > .geCount { - font-size: 90%; + +#lists .listEntries { + display: flex; + flex-direction: column; + margin-inline-start: var(--checkbox-size); + } +#lists > .listEntries { + margin-inline-start: 0; } -#lists > .groupEntry:not(:first-child) > .geName:before { - color: #aaa; - content: '\2212 '; +#lists .listEntry { + align-items: flex-start; + flex-direction: column; + margin-bottom: 0; + margin-inline-start: 0; + white-space: nowrap; } -#lists > .groupEntry.collapsed > .geName:before { - color: #aaa; - content: '+ '; +#lists .listEntry[data-key="user"] { + margin-top: 0; } -#lists > .groupEntry > ul { - margin: 0.25em 0 0 0; +#lists .listEntry > .detailbar { + column-gap: calc(var(--default-gap-xxsmall) + 2px); + display: inline-flex; } -#lists > .groupEntry.collapsed > ul { +#lists .listEntry[data-key="user"] > .detailbar { display: none; } -li.listEntry { - font-size: 14px; - margin: 0 auto 0 auto; - margin-left: 3em; - margin-right: 0em; - text-indent: -2em; +#lists .listEntry[data-role="node"].expanded > .detailbar .listExpander svg { + transform: rotate(180deg); } -body[dir=rtl] li.listEntry { - margin-left: 0em; - margin-right: 1em; +#lists .listEntry[data-parent="root"]:not(.expanded) > .listEntries > .listEntry:not(.checked):not(.isDefault):not(.stickied) { + display: none; } -li.listEntry > * { - text-indent: 0; - unicode-bidi: embed; +#lists .listEntry:not([data-parent="root"]):not(.expanded) > .listEntries > .listEntry { + display: none; } -li.listEntry > a:nth-of-type(2) { - font-size: 16px; - opacity: 0.7; +#lists .nodestats { + align-self: flex-end; + color: var(--info0-ink); + fill: var(--info0-ink); + cursor: default; + font-size: var(--font-size-smaller); +} +#lists .iconbar { + column-gap: var(--default-gap-xxsmall); + color: var(--info0-ink); + fill: var(--info0-ink); + display: inline-flex; + flex-direction: row; + font-size: 120%; + } +#lists .iconbar a { + color: var(--info0-ink); + fill: var(--info0-ink); + } +#lists .iconbar .fa-icon { + display: none; } -li.listEntry > a:nth-of-type(2), -li.listEntry > a:nth-of-type(2):visited { - color: mediumblue; +#lists .iconbar .content { + display: inline-flex; } -li.listEntry > a:nth-of-type(2):hover { - opacity: 1; +#lists .iconbar a.towiki { + display: inline-flex; } -li.listEntry > a:nth-of-type(3) { - font-size: 13px; - opacity: 0.5; +#lists .listEntry > .detailbar .iconbar a.support { + display: inline-flex; } -.dim { - opacity: 0.5; +#lists .listEntry > .detailbar .iconbar a.support[href="#"] { + display: none; } -#buttonApply { - display: initial; - position: fixed; - right: 1em; - z-index: 10; +#lists .iconbar .remove, +#lists .iconbar .unsecure, +#lists .iconbar .failed { + color: var(--info3-ink); + fill: var(--info3-ink); + cursor: pointer; } -body[dir=rtl] #buttonApply { - right: auto; - left: 1em; +#lists .listEntry.external > .detailbar .iconbar .remove { + display: inline-flex; } -#buttonApply.disabled { +#lists .listEntry > .detailbar .iconbar a.mustread { + color: var(--info1-ink); + fill: var(--info1-ink); + display: inline-flex; + } +#lists .listEntry > .detailbar .iconbar a.mustread[href="#"] { display: none; } -span.status { - border: 1px solid transparent; - color: #444; - display: inline-block; - font-size: smaller; - line-height: 1; - margin: 0 0 0 0.5em; - opacity: 0.8; - padding: 1px 2px; +#lists .listEntry .leafstats { + align-items: flex-end; + color: var(--info0-ink); + fill: var(--info0-ink); + display: none; + font-size: var(--font-size-xsmall); + margin-inline-start: calc(var(--checkbox-size) + var(--checkbox-margin-end)); +} +#lists .listEntry > .detailbar .leafstats { + margin-inline-start: 0; + } +#lists .listEntry.checked > .leafstats, +#lists .listEntry.checked > .detailbar .leafstats { + display: inline-flex; +} +#lists .iconbar .status { + cursor: default; + display: none; } -span.unsecure { - background-color: hsl(0, 100%, 88%); - border-color: hsl(0, 100%, 83%); +#lists .listEntry.checked.unsecure > .detailbar .iconbar .unsecure { + display: inline-flex; + } +#lists .listEntry.failed > .detailbar .iconbar .failed { + display: inline-flex; } -span.purge { - border-color: #ddd; - background-color: #eee; +#lists .iconbar .cache { cursor: pointer; } -span.purge:hover { - opacity: 1; +#lists .listEntry.checked.cached:not(.obsolete) > .detailbar .iconbar .cache { + display: inline-flex; } -span.obsolete, -span.new { - background-color: hsl(36, 100%, 80%); - border-color: hsl(36, 100%, 75%); +#lists .listEntry.cached.recent:not(.obsolete) > .detailbar .iconbar .cache { + color: var(--dashboard-happy-green); + fill: var(--dashboard-happy-green); } -#externalListsDiv { - margin: 2em auto 0 2em; +#lists .iconbar .obsolete { + color: var(--info2-ink); + fill: var(--info2-ink); } -body[dir=rtl] #externalListsDiv { - margin: 2em 2em 0; +body:not(.updating,.working) #lists .listEntry.checked.obsolete > .detailbar .iconbar .obsolete { + display: inline-flex; } -#externalLists { - box-sizing: border-box; - font-size: smaller; - height: 10em; - white-space: pre; - width: 100%; - word-wrap: normal; +#lists .iconbar .updating { + transform-origin: 50%; } -body #busyOverlay { - background-color: transparent; - bottom: 0; - cursor: wait; - display: none; - left: 0; - position: fixed; - right: 0; - top: 0; - z-index: 1000; +body.updating #lists .listEntry.checked.obsolete > .detailbar .iconbar .updating, +body.working #lists .listEntry.checked.obsolete:not(.cached) > .detailbar .iconbar .updating { + animation: spin 1s steps(8) infinite; + display: inline-flex; } -body.busy #busyOverlay { - display: block; + +#lists .listEntry.toRemove .checkbox { + visibility: hidden; } -#busyOverlay > div:nth-of-type(1) { - background-color: white; - bottom: 0; - left: 0; - opacity: 0.75; - position: absolute; - right: 0; - top: 0; +#lists .listEntry.toRemove .listname { + text-decoration: line-through; } -#busyOverlay > div:nth-of-type(2) { - background-color: #eee; - border: 1px solid transparent; - border-color: #80b3ff #80b3ff hsl(216, 100%, 75%); - border-radius: 3px; - box-sizing: border-box; - height: 3em; - left: 10%; - position: absolute; - bottom: 75%; - width: 80%; - } -#busyOverlay > div:nth-of-type(2) > div:nth-of-type(1) { - background-color: hsl(216, 100%, 75%); - background-image: linear-gradient(#a8cbff, #80b3ff); - background-repeat: repeat-x; - border: 0; - box-sizing: border-box; - color: #222; - height: 100%; - left: 0; - padding: 0; - position: absolute; - width: 25%; + +#lists .listEntry[data-role="import"].expanded .listExpander svg { + transform: rotate(180deg); + } +#lists .listEntry[data-role="import"].expanded textarea { + visibility: visible; } -#busyOverlay > div:nth-of-type(2) > div:nth-of-type(2) { - background-color: transparent; - border: 0; +#lists .listEntry[data-role="import"] textarea { + border: 1px solid #ccc; box-sizing: border-box; - height: 100%; - left: 0; - line-height: 3em; - overflow: hidden; - position: absolute; - text-align: center; - top: 0; + display: block; + font-size: smaller; + height: 6em; + margin: 0; + resize: vertical; + visibility: hidden; + white-space: pre; width: 100%; } diff --git a/src/css/about.css b/src/css/about.css index 20d78cbf79eff..8c3afcdc95c9f 100644 --- a/src/css/about.css +++ b/src/css/about.css @@ -1,4 +1,3 @@ -ul { - padding-__MSG_@@bidi_start_edge__: 1em; - margin-__MSG_@@bidi_start_edge__: 1em; +body { + margin-bottom: 6rem; } diff --git a/src/css/advanced-settings.css b/src/css/advanced-settings.css new file mode 100644 index 0000000000000..10225dd950eee --- /dev/null +++ b/src/css/advanced-settings.css @@ -0,0 +1,27 @@ +html { + height: 100vh; + height: 100svh; + overflow: hidden; + width: 100vw; + } +body { + display: flex; + flex-direction: column; + height: 100%; + justify-content: stretch; + overflow: hidden; + width: 100%; + } +.body { + flex-shrink: 0; + } +.codeMirrorContainer { + flex-grow: 1; + } +#advancedSettings { + border: var(--default-gap-xxsmall) solid var(--surface-2); + text-align: left; + } +.CodeMirror-wrap pre { + word-break: break-all; + } diff --git a/src/css/asset-viewer.css b/src/css/asset-viewer.css new file mode 100644 index 0000000000000..d2df68a1ed818 --- /dev/null +++ b/src/css/asset-viewer.css @@ -0,0 +1,80 @@ +/** + uBlock Origin - a browser extension to block requests. + Copyright (C) 2014-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 +*/ + +body { + border: 0; + display: flex; + flex-direction: column; + height: 100vh; + height: 100svh; + margin: 0; + overflow: hidden; + padding: 0; + width: 100vw; + } +#subscribe { + display: flex; + flex-shrink: 0; + justify-content: space-between; + max-height: 6em; + padding-inline-end: 0.5em; + } +#subscribe.hide { + display: none; + } +.logo { + background-color: #fffa; + flex-shrink: 0; + width: 2em; + } +#subscribePrompt { + display: inline-flex; + flex-direction: column; + padding: 0.5em; + } +#subscribePrompt > span { + font-weight: bold; + } +#subscribePrompt > a { + font-size: 14px; + word-break: break-all; + } +#subscribe > button { + align-self: center; + } +#subscribe > .fa-icon { + color: var(--accent-ink-1); + fill: var(--accent-ink-1); + font-size: 20px; + } +body.loading #subscribe > button, +body:not(.loading) #subscribe > .fa-icon { + display: none; + } +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } +body.loading #subscribe > .fa-icon > svg { + animation: spin 1s steps(8) infinite; + } +#content { + flex-grow: 1; + } diff --git a/src/css/click2load.css b/src/css/click2load.css new file mode 100644 index 0000000000000..b6d39249e4800 --- /dev/null +++ b/src/css/click2load.css @@ -0,0 +1,53 @@ +/** + uBlock Origin - a browser extension to block requests. + Copyright (C) 2014-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 +*/ + +body { + align-items: center; + border: 1px solid var(--ubo-red); + box-sizing: border-box; + display: flex; + flex-direction: column; + height: 100vh; + padding: 0 2px; + position: relative; + width: 100vw; + } + +.logo { + left: 0; + padding: 2px 1px; + position: absolute; + top: 0; + } + +#frameURL { + font-family: monospace; + font-size: 90%; + overflow-y: auto; + word-break: break-all; + } +#frameURL > a { + font-size: 1rem; + } + +#clickToLoad { + cursor: default; + margin-bottom: 1em; + } diff --git a/src/css/cloud-ui.css b/src/css/cloud-ui.css index a9519fc6922dc..1891a1dd3e053 100644 --- a/src/css/cloud-ui.css +++ b/src/css/cloud-ui.css @@ -1,92 +1,104 @@ #cloudWidget { - background: url("../img/cloud.png") hsl(216, 100%, 93%); - border-radius: 3px; + background-color: var(--surface-2); margin: 0.5em 0; - padding: 1em; + min-width: max-content; position: relative; } #cloudWidget.hide { display: none; } -#cloudWidget > button { - display: inline-block; - font-family: FontAwesome; - font-size: 160%; - font-style: normal; - font-weight: normal; - line-height: 1; - padding: 0.2em 0.25em 0.1em 0.25em; +#cloudWidget div { + display: flex; + } +#cloudToolbar { + align-items: flex-start; + flex-wrap: nowrap; + justify-content: space-between; + } +#cloudToolbar > div:first-of-type { + margin: 0.5em; + } +#cloudToolbar button { + padding: 0 0.25em; position: relative; - vertical-align: baseline; } -#cloudWidget > button[disabled] { +#cloudToolbar button .fa-icon { + font-size: 180%; + } +#cloudToolbar button[disabled] { visibility: hidden; } -#cloudPush:after { - content: '\f0ee'; +#cloudToolbar button.error { + color: var(--info3-ink); + } +#cloudPullAndMerge { + margin-left: 0.25em; } -#cloudPull:before, -#cloudPullAndMerge:before { - content: '\f0ed'; -} -#cloudPullAndMerge:after { - content: '\f067'; - font-size: 50%; +#cloudPullAndMerge > span:nth-of-type(2) { + font-size: 90%; position: absolute; right: 0; - top: 10%; + top: 0; } -#cloudWidget > span { - color: gray; - display: inline-block; +#cloudInfo { + flex-shrink: 0; font-size: 90%; margin: 0 1em; + overflow: hidden; padding: 0; - vertical-align: bottom; - white-space: pre; + white-space: pre-line; } -#cloudWidget > .nodata { +#cloudCapacity { + background-color: var(--surface-3); + height: 4px; } -#cloudWidget > #cloudCog { - cursor: pointer; - display: inline-block; - font-size: 110%; - margin: 0; - opacity: 0.5; - padding: 4px; - position: absolute; - top: 0; +#cloudCapacity > div { + background-color: var(--cloud-total-used-surface); } -body[dir="ltr"] #cloudWidget > #cloudCog { - right: 0; +#cloudCapacity > div > div { + background-color: var(--cloud-used-surface); } -body[dir="rtl"] #cloudWidget > #cloudCog { - left: 0; +#cloudError { + color: var(--info3-ink); + flex-grow: 1; + flex-shrink: 2; + font-size: small; + margin: 0 0.5em 0.5em 0.5em; } -#cloudWidget > #cloudCog:hover { - opacity: 1; +#cloudError:empty { + display: none; + } +#cloudCog { + color: var(--ink-3); + fill: var(--ink-3); + cursor: pointer; + font-size: 110%; + justify-content: flex-end; + padding: 0.4em; + } +#cloudCog:hover { + color: inherit; + fill: inherit; } -#cloudWidget > #cloudOptions { +#cloudWidget #cloudOptions { align-items: center; - -webkit-align-items: center; - background-color: rgba(0, 0, 0, 0.75); - bottom: 0; + background-color: var(--surface-1); + bottom: 2px; display: none; - justify-content: center; - -webkit-justify-content: center; - left: 0; - position: fixed; - right: 0; - top: 0; - z-index: 2000; + font-size: small; + padding: 0.5em; + position: absolute; + right: 2px; + text-align: center; + top: 2px; + z-index: 10; } -#cloudWidget > #cloudOptions.show { - display: flex; - display: -webkit-flex; +#cloudWidget #cloudOptions label { + display: inline-flex; + flex-direction: column; + align-items: flex-start; } -#cloudWidget > #cloudOptions > div { - background-color: white; - border-radius: 3px; - padding: 1em; - text-align: center; +#cloudWidget #cloudOptions.show { + display: flex; + white-space: nowrap; } diff --git a/src/css/code-viewer.css b/src/css/code-viewer.css new file mode 100644 index 0000000000000..40b5114487db1 --- /dev/null +++ b/src/css/code-viewer.css @@ -0,0 +1,68 @@ +body { + border: 0; + display: flex; + flex-direction: column; + height: 100vh; + height: 100svh; + margin: 0; + overflow: hidden; + padding: 0; + width: 100vw; + } +#header { + background-color: var(--cm-gutter-surface); + border-bottom: 1px solid var(--surface-1); + padding: var(--default-gap-xsmall); + position: relative; + z-index: 1000000; + } +#header input[type="url"] { + box-sizing: border-box; + font-size: var(--font-size-smaller); + width: 100%; + } +#header:focus-within #pastURLs { + display: flex; + } +#currentURL { + display: flex; + gap: 0.5rem; + } +#currentURL > .fa-icon { + padding: 0 0.5rem; + } +#currentURL > .fa-icon:hover { + background-color: var(--surface-3); + } +#pastURLs { + background-color: var(--surface-0); + border: 1px solid var(--border-1); + display: none; + flex-direction: column; + font-size: var(--font-size-smaller); + position: absolute; + } +#pastURLs > span { + cursor: pointer; + overflow: hidden; + padding: 2px 4px; + text-overflow: ellipsis; + white-space: nowrap; + width: 75vw; + } +#pastURLs > span.selected { + font-weight: bold; + } +#pastURLs > span:hover { + background-color: var(--surface-1); + } +#content { + flex-grow: 1; + } + +.cm-href { + cursor: pointer; + } +.cm-href:hover { + text-decoration: underline; + } diff --git a/src/css/codemirror.css b/src/css/codemirror.css new file mode 100644 index 0000000000000..d56d8c0da1a13 --- /dev/null +++ b/src/css/codemirror.css @@ -0,0 +1,364 @@ +.codeMirrorContainer { + line-height: 1.25; + overflow: hidden; + position: relative; + } +.codeMirrorContainer.cm-maximized { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; + } +.CodeMirror { + background-color: var(--surface-0); + box-sizing: border-box; + color: var(--ink-1); + flex-grow: 1; + font-size: var(--monospace-size); + height: 100%; + width: 100%; + } +.CodeMirror-cursor { + border-color: var(--cm-cursor); + } +.CodeMirror-selected { + background-color: var(--cm-selection-surface); + } +.CodeMirror-focused .CodeMirror-selected { + background-color: var(--cm-selection-focused-surface); + } +.CodeMirror-foldmarker { + color: var(--cm-foldmarker-ink); + cursor: pointer; + font-family: sans-serif; + font-weight: bold; + } +.CodeMirror-foldgutter-folded::after { + content: '\25B6'; + } +.CodeMirror-foldgutter-open::after { + content: '\25BC'; + } +.CodeMirror-gutters { + background-color: var(--cm-gutter-surface); + border-color: var(--cm-gutter-border); + } +.CodeMirror-line::selection, +.CodeMirror-line > span::selection, +.CodeMirror-line > span > span::selection { + background-color: var(--cm-selection-focused-surface); + } +.CodeMirror-linenumber { + color: var(--cm-gutter-ink); + } +.CodeMirror-lines { + padding-bottom: 6rem; + } +.CodeMirror-matchingbracket { + color: unset; + } +.CodeMirror-matchingbracket { + background-color: var(--cm-matchingbracket) !important; + color: inherit !important; + font-weight: bold; + } + +.CodeMirror-search-match { + background: none; + background-color: var(--cm-search-match-surface); + border: 0; + opacity: 1; + } + +/* For when panels are used */ +.codeMirrorContainer > div:not([class^="CodeMirror"]) { + display: flex; + flex-direction: column; + height: 100%; + } + +.codeMirrorContainer.codeMirrorBreakAll .CodeMirror-wrap pre { + word-break: break-all; + } + +.cm-theme-override .cm-s-default .cm-comment { + color: var(--sf-comment-ink); + } +.cm-theme-override .cm-s-default .cm-def { + color: var(--sf-def-ink); + } +.cm-theme-override .cm-s-default .cm-directive { + color: var(--sf-directive-ink); + font-weight: bold; + } +.cm-theme-override .cm-s-default .cm-error { + color: inherit; + } +.cm-theme-override .cm-s-default .cm-error, +.CodeMirror-linebackground.error { + background-color: var(--sf-error-surface); + text-decoration: var(--sf-error-ink) dashed underline; + } +.cm-theme-override .cm-s-default .cm-link { + text-decoration: none; + } +.cm-theme-override .cm-s-default .cm-link:hover { + color: var(--link-ink); + } +.cm-theme-override .cm-s-default .cm-keyword { + color: var(--sf-keyword-ink); + } +.cm-theme-override .cm-s-default .cm-negative { + color: var(--cm-negative); + } +.cm-theme-override .cm-s-default .cm-positive { + color: var(--cm-positive); + } +.cm-theme-override .cm-s-default .cm-notice { + text-decoration-color: var(--sf-notice-ink); + text-decoration-style: solid; + text-decoration-line: underline; + } +.cm-theme-override .cm-s-default .cm-unicode { + text-decoration-color: var(--sf-unicode-ink); + text-decoration-style: dashed; + text-decoration-line: underline; + } +.cm-theme-override .cm-s-default .cm-tag { + color: var(--sf-tag-ink); + } +.cm-theme-override .cm-s-default .cm-value { + color: var(--sf-value-ink); + } +.cm-theme-override .cm-s-default .cm-variable { + color: var(--sf-variable-ink); + } +.cm-theme-override .cm-s-default .CodeMirror-activeline .cm-ext-js .cm-variable { + text-decoration: underline color-mix(in srgb, var(--sf-variable-ink) 30%, transparent) solid 3px; + text-decoration-skip-ink: none; + } +.cm-theme-override .cm-s-default .cm-warning { + background-color: var(--sf-warning-surface); + text-decoration: underline var(--sf-warning-ink); + } +.cm-theme-override .cm-s-default .cm-readonly { + color: var(--sf-readonly-ink); + } + +/* Rules */ +.cm-s-default .cm-allowrule { + color: var(--df-allow-ink); + font-weight: bold; + } +.cm-s-default .cm-blockrule { + color: var(--df-block-ink); + font-weight: bold; + } +.cm-s-default .cm-nooprule { + color: var(--df-noop-ink); + font-weight: bold; + } +.cm-s-default .cm-sortkey { + color: var(--sf-keyword-ink); + } + +.cm-search-widget { + background-color: var(--cm-gutter-surface); + border-bottom: 1px solid var(--cm-gutter-border); + cursor: default; + direction: ltr; + display: flex; + flex-shrink: 0; + flex-wrap: wrap; + justify-content: space-between; + line-height: 1.5; + padding: var(--default-gap-xsmall); + row-gap: var(--default-gap-xsmall); + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + z-index: 1000; + } +.cm-search-widget > * { + flex-grow: 1; + } +.cm-search-widget > :last-child { + text-align: end; + } + +.cm-search-widget .cm-maximize { + fill: none; + flex-grow: 0; + font-size: 130%; + height: 1em; + stroke-width: 3px; + stroke: var(--ink-0); + width: 1em; + } +.cm-search-widget .cm-maximize * { + pointer-events: none; + } +.codeMirrorContainer[data-maximizable="false"] .cm-search-widget .cm-maximize { + display: none; + } +.codeMirrorContainer .cm-search-widget .cm-maximize svg > path:nth-child(2), +.codeMirrorContainer.cm-maximized .cm-search-widget .cm-maximize svg > path:nth-child(1) { + display: none; + } +.codeMirrorContainer.cm-maximized .cm-search-widget .cm-maximize svg > path:nth-child(2) { + display: initial; + } +html:not(.mobile) .cm-search-widget .cm-maximize:hover { + transform: scale(1.2); + } + +.cm-search-widget-input { + display: inline-flex; + flex-grow: 1; + flex-wrap: nowrap; + } +.cm-search-widget .fa-icon { + font-size: 140%; + } +html:not(.mobile) .cm-search-widget .fa-icon:not(.fa-icon-ro):hover { + transform: scale(1.2); + } +.cm-search-widget-input input { + flex-grow: 1; + max-width: min(16em, 40svw); + } +.cm-search-widget-count { + align-items: center; + display: inline-flex; + flex-grow: 0; + font-size: var(--font-size-smaller); + visibility: hidden; + } +.cm-search-widget[data-query] .cm-search-widget-count { + visibility: visible; + } +.cm-search-widget[data-query] .cm-search-widget-count:empty { + visibility: hidden; + } +.cm-search-widget .sourceURL[href=""] { + display: none; + } +:root.mobile .cm-search-widget .sourceURL[href=""] { + display: none; + } + +.cm-linter-widget { + align-items: center; + display: none; + flex-grow: 1; + } +.cm-linter-widget:not([data-lint="0"]) { + display: inline-flex; + } +.cm-linter-widget .cm-linter-widget-count { + color: var(--accent-surface-1); + fill: var(--accent-surface-1); + font-size: var(--font-size-smaller); + } + +.cm-searching.cm-overlay { + background-color: var(--cm-searching-surface) !important; + border: 0; + color: var(--cm-searching-ink) !important; + } + +.CodeMirror-merge { + border-color: var(--cm-gutter-border); + } +.CodeMirror-merge-copy, +.CodeMirror-merge-copy-reverse { + color: var(--cm-merge-copy-ink); + } +.CodeMirror-merge-l-chunk { + background-color: var(--cm-merge-chunk-surface); + } +.CodeMirror-merge-l-chunk-start, +.CodeMirror-merge-l-chunk-end { + border-color: var(--cm-merge-chunk-border); + } +.CodeMirror-merge-l-deleted { + background-image: none; + } +.CodeMirror-merge-l-inserted { + background-image: none; + } +/* This probably needs to be added to CodeMirror repo */ +.CodeMirror-merge-gap { + background-color: var(--cm-gutter-surface); + border-color: var(--cm-gutter-border); + vertical-align: top; + } +.CodeMirror-merge-scrolllock { + color: var(--cm-merge-copy-ink); + } +.CodeMirror-merge-spacer { + background-color: var(--cm-merge-chunk-surface); + } + +.CodeMirror-hints { + z-index: 10000; + } + +/* Must appear after other background color declarations to be sure it + * overrides them + * */ +.CodeMirror-activeline-background { + background-color: var(--cm-active-line); + } + +.CodeMirror-lintmarker { + height: calc(var(--font-size) - 2px); + margin-top: 1px; + position: relative; + } +.CodeMirror-lintmarker > * { + position: absolute; + } +.CodeMirror-lintmarker[data-error="y"] { + background-color: var(--sf-error-ink); + } +.CodeMirror-lintmarker .msg { + background-color: var(--surface-0); + border: 1px solid var(--sf-error-ink); + color: var(--ink-1); + display: none; + filter: drop-shadow(2px 2px 4px #0008); + left: 100%; + padding: var(--default-gap-xsmall); + top: -2px; + white-space: pre; + } +.CodeMirror-lintmarker svg { + height: 70%; + left: 15%; + top: 15%; + width: 70%; + } +.CodeMirror-lintmarker[data-error="y"] svg { + display: none; + } +.CodeMirror-lintmarker[data-fold="start"] { + fill: var(--cm-foldmarker-ink); + } +.CodeMirror-lintmarker[data-fold="start"].folded svg { + transform: rotate(-90deg); + } +.CodeMirror-lintmarker[data-fold="end"] { + fill: var(--border-2); + } +.CodeMirror-lintmarker[data-error="y"]:hover > span, +.CodeMirror-lintmarker[data-error="y"] > span:hover { + display: initial; + } + +/* https://github.com/uBlockOrigin/uBlock-issues/issues/3645 */ +.CodeMirror-vscrollbar { + pointer-events: initial !important; + } + diff --git a/src/css/common.css b/src/css/common.css index 29b3e2ca0b1aa..1089a7c5920cd 100644 --- a/src/css/common.css +++ b/src/css/common.css @@ -1,62 +1,384 @@ +@charset "UTF-8"; +/* https://protocol.mozilla.org/assets/docs/css/protocol.css */ @font-face { - font-family: 'FontAwesome'; + font-family: Inter; + font-style: normal; font-weight: normal; + src: url('fonts/Inter/Inter-Regular.woff2') format('woff2'); +} +@font-face { + font-family: Inter; font-style: normal; - src: url('fonts/fontawesome-webfont.ttf') format('truetype'); - } -.fa { - display: inline-block; - font-family: FontAwesome; + font-weight: 600; + src: url('fonts/Inter/Inter-SemiBold.woff2') format('woff2'); +} +@font-face { + font-family: Metropolis; font-style: normal; font-weight: normal; - line-height: 1; - vertical-align: middle; + src: url('fonts/Metropolis/Metropolis-Regular.woff2') format('woff2'); +} +@font-face { + font-family: Metropolis; + font-style: normal; + font-weight: 600; + src: url('fonts/Metropolis/Metropolis-SemiBold.woff2') format('woff2'); +} + +/** + Common uBO spacing. + Ref: https://github.com/uBlockOrigin/uBlock-issues/issues/1005 +*/ +:root { + --default-gap-xxlarge: 40px; + --default-gap-xlarge: 32px; + --default-gap-large: 24px; + --default-gap: 16px; + --default-gap-small: 12px; + --default-gap-xsmall: 8px; + --default-gap-xxsmall: 4px; + --button-font-size: max(calc(var(--font-size) * 0.875), 14px); } + +/* Common uBO styles */ body { - background-color: white; - color: black; - font: 14px/1.3 sans-serif; - } -/* I designed the button with: http://charliepark.org/bootstrap_buttons/ */ -button.custom { - padding: 0.6em 1em; - border: 1px solid transparent; - border-color: #ccc #ccc #bbb #bbb; - border-radius: 3px; - background-color: hsl(216, 0%, 75%); - background-image: linear-gradient(#f2f2f2, #dddddd); - background-repeat: repeat-x; - color: #000; - opacity: 0.8; - } -button.custom.disabled, -button.custom[disabled] { - border-color: #ddd #ddd hsl(36, 0%, 85%); - background-color: hsl(36, 0%, 72%); - background-image: linear-gradient(#f2f2f2, #dddddd); - color: #666; - opacity: 0.6; + background-color: var(--surface-1); + border: 0; + box-sizing: border-box; + color: var(--ink-1); + fill: var(--ink-1); + font-family: var(--font-family); + font-size: var(--font-size); + line-height: 1.5; + margin: 0; + padding: 0; + } +a:not(.fa-icon) { + color: var(--link-ink); + fill: var(--link-ink); + } +a:not(.fa-icon):hover { + color: var(--link-hover-ink); + fill: var(--link-hover-ink); + } +code, .code { + background-color: var(--surface-2); + font-family: monospace; + font-size: var(--monospace-size); + padding: 2px 4px; + } +hr { + border: 0; + border-top: 1px solid var(--surface-2); + margin: 1em 0; + } +textarea { + font-size: 90%; + } +button { + align-items: center; + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + border: var(--button-border-size) solid var(--ink-1); + border-radius: var(--button-border-radius); + background-color: var(--button-surface); + color: var(--button-ink); + display: inline-flex; + fill: var(--button-ink); + font-size: var(--button-font-size); + justify-content: center; + min-height: 36px; + padding: 0 var(--font-size); + position: relative; + vertical-align: middle; + } +button.vflex { + height: 100%; + min-height: unset; + padding-bottom: 0; + padding-top: 0; + } +button > .hover { + background-color: var(--elevation-up-surface); + border-radius: var(--button-border-radius); + height: 100%; + left: 0; + opacity: 0; + pointer-events: none; + position: absolute; + top: 0; + width: 100%; + z-index: 100; + } +button:not(.disabled):not([disabled]):hover > .hover { + opacity: var(--elevation-up1-opacity); + } +button.notext:not(.disabled):not([disabled]):hover > .hover { + opacity: var(--elevation-up2-opacity); + } +button.active { + } +button.disabled, +button[disabled] { + background-color: var(--button-disabled-surface); + color: var(--button-ink); + fill: var(--button-ink); + filter: var(--button-disabled-filter); + pointer-events: none; + } +button.preferred:not(.disabled):not([disabled]) { + background-color: var(--button-preferred-surface); + color: var(--button-preferred-ink); + fill: var(--button-preferred-ink); + } +button.preferred:not(.disabled):not([disabled]):hover > .hover { + background-color: var(--elevation-down-surface); + opacity: var(--elevation-down1-opacity); + } +button.iconified.notext { + background-color: transparent; + } +button.iconified > .fa-icon { + font-size: 120%; + padding-left: 0; + padding-right: 0; + } +button.iconified > .fa-icon + [data-i18n] { + padding-right: 0; + padding-left: 0.4em; + } +body[dir="rtl"] button.iconified > .fa-icon + [data-i18n] { + padding-right: 0.4em; + padding-left: 0; + } +label { + align-items: center; + display: inline-flex; + position: relative; + } +section.notice { + background-color: var(--notice-surface); + box-shadow: var(--notice-surface-shadow); + color: var(--notice-ink); + } +:root:not(.classic) section.notice a { + color: var(--surface-2); + } + +/** + Checkbox design borrowed from: + - https://material.io/components/selection-controls + Motivation: + - To comply with design suggestions to make uBO comply with + Firefox Preview design guidelines. + - To have a single checkbox design across all platforms. +*/ +.checkbox { + box-sizing: border-box; + display: inline-flex; + flex-shrink: 0; + height: var(--checkbox-size); + margin: 0; + margin-inline-end: var(--checkbox-margin-end); + -webkit-margin-end: var(--checkbox-margin-end); + position: relative; + width: var(--checkbox-size); + } +label:hover .checkbox:not([disabled]) { + background-color: var(--surface-2); + } +.checkbox > input[type="checkbox"] { + box-sizing: border-box; + height: 100%; + margin: 0; + min-width: var(--checkbox-size); + opacity: var(--native-control-opacity); + position: absolute; + width: 100%; + } +.checkbox > input[type="checkbox"] + svg { + background-color: transparent; + border: 2px solid var(--checkbox-ink); + border-radius: 2px; + box-sizing: border-box; + fill: none; + height: 100%; + opacity: calc(1 - var(--native-control-opacity)); + pointer-events: none; + position: absolute; + stroke: none; + stroke-width: 3.12px; + width: 100%; + } +.checkbox > input[type="checkbox"]:checked + svg { + background-color: var(--checkbox-checked-ink); + border-color: var(--checkbox-checked-ink); + stroke: var(--surface-1); + } +.checkbox[disabled], +.checkbox[disabled] ~ span { + filter: var(--checkbox-disabled-filter); + } +.checkbox.partial > input[type="checkbox"]:checked + svg { + background-color: var(--surface-1); + border-color: var(--checkbox-checked-ink); + stroke: var(--checkbox-checked-ink); + } + +.radio { + --margin-end: calc(var(--font-size) * 0.75); + box-sizing: border-box; + display: inline-flex; + flex-shrink: 0; + height: calc(var(--checkbox-size) + 2px); + margin: 0; + margin-inline-end: var(--margin-end); + -webkit-margin-end: var(--margin-end); + position: relative; + width: calc(var(--checkbox-size) + 2px); + } +.radio > input[type="radio"] { + box-sizing: border-box; + height: 100%; + margin: 0; + min-width: var(--checkbox-size); + opacity: var(--native-control-opacity); + position: absolute; + width: 100%; + } +.radio > input[type="radio"] + svg { + background-color: transparent; + box-sizing: border-box; + height: 100%; + opacity: calc(1 - var(--native-control-opacity)); pointer-events: none; + position: absolute; + width: 100%; + } +.radio > input[type="radio"] + svg > path { + fill: var(--checkbox-ink); + } +.radio > input[type="radio"] + svg > circle { + fill: transparent; } -button.custom:hover { - opacity: 1.0; +label:hover .radio > input[type="radio"]:not(:checked) + svg > circle { + fill: var(--surface-3); } -button.important { - padding: 0.6em 1em; - border: 1px solid transparent; - border-color: #ffcc7f #ffcc7f hsl(36, 100%, 73%); - border-radius: 3px; - background-color: hsl(36, 100%, 75%); - background-image: linear-gradient(#ffdca8, #ffcc7f); - background-repeat: repeat-x; - color: #222; - opacity: 0.8; +.radio > input[type="radio"]:checked + svg > path, +.radio > input[type="radio"]:checked + svg > circle { + fill: var(--checkbox-checked-ink); } -button.important:hover { - opacity: 1.0; + +select { + padding: 2px; } -.hiddenFileInput { + +.searchfield { + align-items: center; + column-gap: var(--default-gap-xxsmall); + display: inline-flex; + position: relative; + } +.searchfield .fa-icon { + color: var(--ink-4); + fill: var(--ink-4); + font-size: 1em !important; + left: 2px; + position: absolute; + transform: none; + } +.searchfield input:not(:placeholder-shown) ~ .fa-icon { + display: none; + } + +.hidden { + display: none; height: 0; visibility: hidden; width: 0; } +.subtil { + color: var(--subtil-ink); + cursor: default; + opacity: 66%; + } +.fieldset { + margin: var(--font-size); + } +.fieldset-header { + color: var(--fieldset-header-ink); + font-size: 14px; + font-weight: 600; + letter-spacing: 0.5px; + } +.ul { + margin: 1em 0; + } +.li { + align-items: center; + display: flex; + margin: calc(var(--font-size) * 0.75) 0; + } +.liul { + margin: 0.5em 0; + margin-inline-start: 2em; + -webkit-margin-start: 2em; + } +@media (max-width: 640px) { + button.iconified > .fa-icon { + font-size: 1.2rem; + padding: 0; + } + button.iconified:not(.dontshrink) > [data-i18n] { + display: none; + } + } + +.countryFlag { + height: var(--font-size); + position: relative; + top: calc(var(--font-size) / 7); + max-width: calc(var(--font-size) * 1.5); + } + +.logo { + align-items: center; + display: inline-flex; + padding: 0 0.5em; + width: 1.25em; + } +.logo > img { + width: 100%; + } + +.wikilink[href=""] { + display: none; + } +.wikilink.fa-icon { + color: var(--info0-ink); + fill: var(--info0-ink); + padding: var(--default-gap-xxsmall) var(--default-gap-xsmall); + } +.wikilink.fa-icon:hover { + transform: scale(1.2); + } +.wikilink.fa-icon > svg { + height: 1.25rem; + width: 1.25rem; + } + +/* high dpi devices */ +:root.hidpi button { + font-family: Metropolis, sans-serif; + font-weight: 600; + letter-spacing: 0.5px; + } +:root.hidpi .fieldset-header { + font-family: Metropolis, sans-serif; + } + +/* touch-screen devices */ +:root.mobile label { + flex-grow: 1 + } diff --git a/src/css/dashboard-common.css b/src/css/dashboard-common.css index f5c3d161c1d0b..261aa9a518c30 100644 --- a/src/css/dashboard-common.css +++ b/src/css/dashboard-common.css @@ -1,10 +1,8 @@ -body { - margin: 0; - padding: 0 0.5em 0.5em 0.5em; +body > div.body { + padding: 0 0.5em; } h2, h3 { margin: 1em 0; - font-family: sans-serif; } h2 { font-size: 18px; @@ -15,72 +13,43 @@ h3 { a { text-decoration: none; } -a.info { - color: black; - opacity: 0.3; +.fa-icon.info { + color: var(--info0-ink); + fill: var(--info0-ink); + font-size: 115%; } -a.info:hover { - opacity: 0.9 +.fa-icon.info:hover { + transform: scale(1.25); } -a.info.important { - color: orangered; +.fa-icon.info.important { + color: var(--info2-ink); + fill: var(--info2-ink); } -button { - padding: 0.33em; - } -div > p:first-child { - margin-top: 0; - } -div > p:last-child { - margin-bottom: 0; +.info.very-important { + color: var(--info3-ink); + fill: var(--info3-ink); } input[type="number"] { width: 5em; } -input[type="checkbox"][disabled] + label { - opacity: 0.4; - } -.para { - width: 40em; - } -.synopsis { - font-size: small; - opacity: 0.8; - } -.whatisthis { - margin: 0 0 0 8px; - border: 0; - padding: 0 0 4px 0; - width: 16px; - height: 16px; - background: url('../img/help16.png') no-repeat; - cursor: pointer; - opacity: 0.5; - vertical-align: middle; - } -.whatisthis:hover { - opacity: 1.0; - } -.whatisthis-expandable { - margin: 0.5em 0 1em 1.25em; - padding: 0.5em; - display: none; - border: 1px dotted black; - background-color: #F8F8F8; - font-size: 13px; - } -.whatisthis-expandable > p { - margin-top: 1em; - margin-bottom: 0; - } -.whatisthis-expandable > p:first-child { - margin-top: 0; - } -.whatisthis-expandable.whatisthis-expanded { - display: block; - } -.warn { - margin: 0; - padding: 5px; - background-color: #FEDAE0; +@media (max-height: 640px), (max-height: 800px) and (max-width: 480px) { + .body > p, + .body > ul { + margin: 0.5em 0; + } + .vverbose { + display: none !important; + } + } +/** + On mobile device, the on-screen keyboard may take up + so much space that it overlaps the content being edited. + The rule below makes it possible to scroll the edited + content within view. +*/ +:root.mobile { + overflow: auto; + } +:root.mobile body { + min-height: 600px; } diff --git a/src/css/dashboard.css b/src/css/dashboard.css index ad800d10f98b1..bff9fa15922f8 100644 --- a/src/css/dashboard.css +++ b/src/css/dashboard.css @@ -1,82 +1,120 @@ html, body { - margin: 0; - border: 0; - padding: 0; - position: relative; - width: 100%; - height: 100%; + background-color: var(--surface-0); + display: flex; + flex-direction: column; + height: 100vh; + height: 100svh; + justify-content: stretch; overflow: hidden; + position: relative; + width: 100vw; + } +body.notReady { + display: none; } #dashboard-nav { + align-items: center; + background-color: var(--surface-1); border: 0; - font-size: 16px; - margin: 0; + border-bottom: 1px solid var(--border-1); + display: flex; + flex-shrink: 0; + justify-content: space-between; + overflow-x: hidden; padding: 0; + position: sticky; top: 0; width: 100%; z-index: 10; } -#dashboard-nav-widgets { - margin: 0; - border-bottom: 1px solid #ccc; - padding: 4px 0 0; - white-space: nowrap; - background-color: white; - } -#dashboard-nav-widgets span { - padding: 0 0.5em; - font-size: larger; +#dashboard-nav > span { + display: flex; + flex-wrap: nowrap; + overflow-x: auto; } .tabButton { - background-color: #eee; - border: 1px solid #ccc; - border-top-left-radius: 3px; - border-top-right-radius: 3px; - border-bottom: 1px solid #ccc; - color: black; - cursor: pointer; - display: inline-block; - font: inherit; - margin: 0; - padding: 4px; - position: relative; + background-color: transparent; + border: 0; + border-bottom: 3px solid transparent; + border-radius: 0; + color: var(--dashboard-tab-ink); + fill: var(--dashboard-tab-ink); + font-family: var(--font-family); + font-size: var(--font-size); + padding: 0.7em 1.4em calc(0.7em - 3px); text-decoration: none; - top: 1px; + white-space: nowrap; } .tabButton:focus { outline: 0; } -.tabButton:active,.tabButton:visited { - color: inherit; +/* + * TODO: support keyboard-driven navigation + * +.tabButton:not(:active):focus { + background-color: var(--dashboard-tab-focus-surface); } + */ .tabButton.selected { - background-color: white; - border-bottom: 1px solid white; + background-color: var(--dashboard-tab-active-surface); + border-bottom: 3px solid var(--dashboard-tab-active-ink); + color: var(--dashboard-tab-active-ink); + fill: var(--dashboard-tab-active-ink); } iframe { - margin: 0; + background-color: transparent; border: 0; + flex-grow: 1; + margin: 0; padding: 0; - background-color: transparent; width: 100%; } +#unsavedWarning { + display: none; + left: 0; + position: absolute; + width: 100%; + z-index: 20; + } +#unsavedWarning.on { + display: initial; + } +#unsavedWarning > div:first-of-type { + padding: 0.5em; + } +#unsavedWarning > div:last-of-type { + height: 100vh; + height: 100svh; + position: absolute; + width: 100vw; + } + +body .tabButton[data-pane="no-dashboard.html"] { + display: none; + } +body.noDashboard #dashboard-nav { + display: none; + } + +/* high dpi devices */ +:root.hidpi .tabButton { + font-family: Metropolis, sans-serif; + font-weight: 600; + letter-spacing: 0.5px; + } + +/* hover-able devices */ +:root.desktop .tabButton { + cursor: default; + } +:root.desktop .tabButton:not(.selected) { + cursor: pointer; + } +:root.desktop .tabButton:not(.selected):hover { + background-color: var(--dashboard-tab-hover-surface); + border-bottom-color: var(--dashboard-tab-hover-border); + } -@media (max-width: 600px) { - #dashboard-nav { - position: relative; - } - #dashboard-nav-widgets { - padding: 0; - } - [data-i18n="extName"] { - display: none; - } - .tabButton { - border-radius: 0; - border-top: 0; - display: block; - } - .tabButton.selected { - border-bottom: 1px solid #ccc; - } +:root.mobile #dashboard-nav .logo { + display: none; } diff --git a/src/css/devtools.css b/src/css/devtools.css new file mode 100644 index 0000000000000..bb4c40dc873d0 --- /dev/null +++ b/src/css/devtools.css @@ -0,0 +1,23 @@ +html { + height: 100vh; + height: 100svh; + overflow: hidden; + width: 100vw; + } +body { + display: flex; + flex-direction: column; + height: 100%; + justify-content: stretch; + overflow: hidden; + width: 100%; + } +.body { + flex-shrink: 0; + } +.codeMirrorContainer { + flex-grow: 1; + } +#console { + text-align: left; + } diff --git a/src/css/document-blocked.css b/src/css/document-blocked.css new file mode 100644 index 0000000000000..96eb4a7834596 --- /dev/null +++ b/src/css/document-blocked.css @@ -0,0 +1,183 @@ +/** + uBlock Origin - a browser extension to block requests. + Copyright (C) 2018-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 +*/ + +body { + display: flex; + padding: var(--default-gap-xxlarge) var(--default-gap-small); + justify-content: center; + } +body.loading { + opacity: 0; + } +:root.mobile body { + padding: var(--default-gap-small); + } + +#rootContainer { + width: min(100%, 640px); + } +#rootContainer > * { + margin: 0 0 var(--default-gap-xxlarge) 0; + } +:root.mobile #rootContainer > * { + margin-bottom: var(--default-gap-xlarge); + } + +p { + margin: 0.5em 0; + } +a { + text-decoration: none; + } +.code { + font-size: 13px; + word-break: break-all; + } +#warningSign { + color: var(--accent-surface-1); + fill: var(--accent-surface-1); + font-size: 96px; + line-height: 1; + width: 100%; + } +:root.mobile #warningSign { + font-size: 64px; + } +#theURL { + color: var(--ink-2); + padding: 0; + } +#theURL > * { + margin: 0; + } +#theURL > p { + position: relative; + z-index: 10; + } +#theURL > p > span:first-of-type { + display: block; + max-height: 3lh; + overflow-y: auto; + } +:root.mobile #theURL > p > span:first-of-type { + max-height: 3lh; + } +#theURL #toggleParse { + background-color: transparent; + top: 100%; + box-sizing: border-box; + color: var(--ink-3); + fill: var(--ink-3); + cursor: pointer; + font-size: 1.2rem; + padding: var(--default-gap-xxsmall); + position: absolute; + transform: translate(0, -50%); + } +#theURL:not(.collapsed) #toggleParse > span:first-of-type { + display: none; + } +#theURL.collapsed #toggleParse > span:last-of-type { + display: none; + } +body[dir="ltr"] #toggleParse { + right: 0; + } +body[dir="rtl"] #toggleParse { + left: 0; + } +#theURL > p:hover #toggleParse { + transform: translate(0, -50%) scale(1.15); + } +#parsed { + background-color: var(--surface-1); + border: 4px solid var(--surface-2); + font-size: small; + overflow-x: auto; + padding: var(--default-gap-xxsmall); + text-align: initial; + text-overflow: ellipsis; + } +#theURL.collapsed > #parsed { + display: none; + } +#parsed ul, #parsed li { + list-style-type: none; + } +#parsed li { + white-space: nowrap; + } +#parsed span { + display: inline-block; + } +#parsed span:first-of-type { + font-weight: bold; + } + +.why-extra a { + white-space: nowrap; +} +.why-extra ul { + display: flex; + flex-direction: column; + margin: 0; + padding-inline-start: var(--default-gap-xsmall); + } +details > *:not(summary) { + margin-inline-start: 1em; + } + +#urlskip a { + display: block; + max-height: 3lh; + overflow-y: auto; + word-break: break-all; + } +:root.mobile #urlskip a { + max-height: 3lh; + } + +#actionContainer { + display: flex; + justify-content: space-between; + } +:root.mobile #actionContainer { + justify-content: center; + display: flex; + flex-direction: column; + } +#actionContainer > button { + margin-bottom: 2rem + } + +.filterList { + white-space: nowrap; + } +.filterList .filterListSupport[href="#"] { + display: none; + } +.filterList .filterListSupport:not([href="#"]) { + margin-inline-start: 0.25em; + } + +/* Small-screen devices */ +:root.mobile button { + width: 100%; + } diff --git a/src/css/dom-inspector.css b/src/css/dom-inspector.css new file mode 100644 index 0000000000000..2f2ca14e1eba1 --- /dev/null +++ b/src/css/dom-inspector.css @@ -0,0 +1,41 @@ +html#ublock0-inspector, +#ublock0-inspector body { + background: transparent; + box-sizing: border-box; + height: 100vh; + height: 100svh; + margin: 0; + overflow: hidden; + width: 100vw; +} +#ublock0-inspector :focus { + outline: none; +} +#ublock0-inspector svg { + box-sizing: border-box; + height: 100%; + left: 0; + pointer-events: none; + position: fixed; + top: 0; + width: 100%; +} +#ublock0-inspector svg > path { + stroke-width: 1px; + } +#ublock0-inspector svg > path:nth-of-type(1) { + fill: rgba(255,0,0,0.2); + stroke: #F00; +} +#ublock0-inspector svg > path:nth-of-type(2) { + fill: rgba(0,255,0,0.2); + stroke: #0F0; +} +#ublock0-inspector svg > path:nth-of-type(3) { + fill: rgba(255,0,0,0.2); + stroke: #F00; +} +#ublock0-inspector svg > path:nth-of-type(4) { + fill: rgba(0,0,255,0.1); + stroke: #00F; +} diff --git a/src/css/dyna-rules.css b/src/css/dyna-rules.css index 04259d7d824e2..9a6bd8d5c0a3b 100644 --- a/src/css/dyna-rules.css +++ b/src/css/dyna-rules.css @@ -1,171 +1,80 @@ -div > p:first-child { - margin-top: 0; +html { + height: 100vh; + height: 100svh; + overflow: hidden; + width: 100vw; + } +body { + display: flex; + flex-direction: column; + height: 100%; + justify-content: stretch; + overflow: hidden; + width: 100%; } -div > p:last-child { - margin-bottom: 0; +.body { + flex-shrink: 0; } -code { - background-color: #eee; - font: 11px monospace; - padding: 2px 4px; -} #diff { border: 0; - border-top: 1px solid #eee; - margin: 0; - padding: 0.5em 0 0 0; white-space: nowrap; - font-size: 0; /* otherwise spaces between inline-blocks will be rendered */ } -#diff .pane { +#diff .tools > * { + margin-bottom: 1em; + } +#diff .ruleActions { border: 0; box-sizing: border-box; display: inline-block; - font: 12px/1.8 monospace; - margin: 0; padding: 0; - position: relative; - white-space: normal; - width: 50%; - } -#diff .pane .rulesContainer { - position: relative; - min-height: 150px; /* too short is confusing */ - } -#diff .ruleActions { - padding: 0 0 1em 0; text-align: center; + vertical-align: top; + width: 50%; + white-space: nowrap; } -body[dir="ltr"] #revertButton:after { - content: '\2009\f061'; - font-family: FontAwesome; - font-style: normal; - font-weight: normal; - line-height: 1; - vertical-align: baseline; - display: inline-block; - } -body[dir="rtl"] #revertButton:after { - content: '\2009\f060'; - font-family: FontAwesome; - font-style: normal; - font-weight: normal; - line-height: 1; - vertical-align: baseline; - display: inline-block; +#diff .ruleActions .fieldset-header { + margin: 0.5em 0; } -body[dir="ltr"] #commitButton:before { - content: '\f060\2009'; - font-family: FontAwesome; - font-style: normal; - font-weight: normal; - line-height: 1; - vertical-align: baseline; - display: inline-block; + +#ruleFilter { + align-items: center; + background-color: var(--surface-2); + direction: ltr; + display: flex; + justify-content: center; + padding: 0.5em 0; } -body[dir="rtl"] #commitButton:before { - content: '\f061\2009'; - font-family: FontAwesome; - font-style: normal; - font-weight: normal; - line-height: 1; - vertical-align: baseline; - display: inline-block; +#ruleFilter #diffCollapse { + padding: 0 0.5em; + font-size: 150%; } -#revertButton, -#commitButton, -#diff.edit #editEnterButton { - opacity: 0.25; - pointer-events: none; +#ruleFilter #diffCollapse.active { + transform: scale(1, -1); } -#editStopButton, -#editCancelButton { - display: none; + +.codeMirrorContainer { + flex-grow: 1; } -#diff.dirty:not(.edit) #revertButton, -#diff.dirty:not(.edit) #commitButton { - opacity: 1; - pointer-events: auto; +.codeMirrorContainer .CodeMirror { + background-color: var(--surface-1); } -#diff.edit #editStopButton, -#diff.edit #editCancelButton { - display: initial; +.CodeMirror-merge, .CodeMirror-merge-pane, .CodeMirror-merge .CodeMirror { + box-sizing: border-box; + height: 100%; } -#diff.edit #importButton, -#diff.edit #exportButton { +body.editing .CodeMirror-merge-copy, +body.editing .CodeMirror-merge-copy-reverse { display: none; } -#diff ul { - border: 0; - border-top: 1px solid #eee; - list-style-type: none; - margin: 0; - overflow: hidden; - padding: 1em 0 0 0; - } -#diff.edit .right ul { - visibility: hidden; - } -#diff .left { - border-right: 1px solid #eee; - } -#diff .right > ul { - color: #888; - } -#diff li { - background-color: #ddd; - direction: ltr; - padding: 0; - text-align: left; - white-space: nowrap; - padding-left: 3px; /* a bit of padding; must also be in textarea */ - } -#diff li:nth-child(even) { - background-color: #eee; - } -#diff .right li { - opacity: 0.5; - } -#diff .right li:hover { +body.editing .CodeMirror-merge-editor .CodeMirror { + background-color: var(--surface-0); } -#diff .right li.notLeft { - color: #000; - opacity: 1; - } -#diff .right li.notRight { - color: #000; - } -#diff .right li.toRemove { - color: #000; - text-decoration: line-through; - opacity: 1; - } -#diff textarea { - background-color: #f8f8ff; - border: 0; - color: black; - margin: 0; - border-top: 1px solid #eee; - direction: ltr; - font: 12px monospace; - line-height: 1.8; - overflow: hidden; - overflow-y: auto; - padding: 1em 0 0 3px; /* same left and top padding as ul/li */ - position: absolute; - top: 0; +body[dir="rtl"] .CodeMirror-merge-pane-rightmost { + right: unset; left: 0; - width: 100%; - height: 100%; - box-sizing: border-box; - resize: none; - visibility: hidden; - white-space: pre; /* this implies nowrap; break only on \n and
      . - nowrap doesn't consistently - respect \n's (example: Safari) per the CSS spec: - http://www.w3.org/wiki/CSS/Properties/white-space */ - word-wrap: normal; - } -#diff.edit textarea { - visibility: visible; +} + +/* mobile devices */ +:root.mobile #diff .tools { + overflow: auto; } diff --git a/src/css/epicker-ui.css b/src/css/epicker-ui.css new file mode 100644 index 0000000000000..a8aa13908526d --- /dev/null +++ b/src/css/epicker-ui.css @@ -0,0 +1,297 @@ +:root { + --quit-button-size: max(4em, min(6em, calc(100vw / 8), calc(100vh / 8))); +} + +html#ublock0-epicker, +#ublock0-epicker body { + background: transparent; + cursor: not-allowed; + height: 100vh; + height: 100svh; + margin: 0; + overflow: hidden; + width: 100vw; +} +#ublock0-epicker :focus { + outline: none; +} +#ublock0-epicker aside { + background-color: var(--surface-1); + border: 1px solid var(--border-2); + box-sizing: border-box; + cursor: default; + display: flex; + flex-direction: column; + max-width: min(32rem, 100vw - 4px); + min-width: min(24rem, 100vw - 4px); + overflow-y: auto; + position: fixed; + width: min(32rem, 100vw - 4px); + z-index: 100; +} +#ublock0-epicker.zap aside { + bottom: unset !important; + min-width: unset !important; + top: 50%; + transform: translateY(-50%); + width: unset !important; +} +#ublock0-epicker.zap aside > section, +#ublock0-epicker.zap aside > ul, +#ublock0-epicker.zap aside > #windowbar > div:not(#quit) { + display: none; +} +#ublock0-epicker.zap aside > #windowbar > #quit { + width: var(--quit-button-size); + height: var(--quit-button-size); +} +#ublock0-epicker:not(.paused) aside, +#ublock0-epicker.minimized aside { + min-width: min(16rem, 100vw - 4px); + overflow: hidden; + width: min(16rem, 100vw - 4px); +} +#ublock0-epicker:not(.paused) aside > *:not(#windowbar), +#ublock0-epicker.minimized aside > *:not(#windowbar) { + display: none; +} +#ublock0-epicker aside > *:not(:first-child) { + padding: 0 2px; +} + +#ublock0-epicker #toolbar { + display: flex; + justify-content: space-between; +} +#ublock0-epicker #toolbar button { + min-width: 5em; + } +#ublock0-epicker ul { + margin: 0.25em 0 0 0; +} +#ublock0-epicker.preview #preview { + background-color: var(--button-preferred-surface); + color: var(--button-preferred-ink); +} +#ublock0-epicker section { + border: 0; + box-sizing: border-box; + display: inline-block; + width: 100%; +} +#ublock0-epicker section > div:first-child { + border: 1px solid var(--surface-3); + margin: 0; + position: relative; +} +#ublock0-epicker section.invalidFilter > div:first-child { + border-color: var(--error-surface); +} +#ublock0-epicker section .codeMirrorContainer { + border: none; + box-sizing: border-box; + height: 10em; + max-height: min(10em, 10vh); + min-height: 1em; + padding: 2px; + width: 100%; + } +.CodeMirror-lines, +.CodeMirror pre { + padding: 0; + } + +#ublock0-epicker section .resultsetWidgets { + display: flex; + font-size: var(--font-size-smaller); + } +#resultsetModifiers { + align-items: flex-end; + display: inline-flex; + flex-grow: 1; + justify-content: space-evenly; + } +#resultsetModifiers.hide > * { + visibility: hidden; + } +.resultsetModifier { + border: 0; + pointer-events: auto; + position: relative; + width: 40%; + } +.resultsetModifier > span { + align-items: flex-end; + display: flex; + height: 100%; + pointer-events: none; + width: 100%; + } +.resultsetModifier > span > span { + margin: 2px 0; + } +.resultsetModifier > span > span:nth-of-type(1) { + background-color: var(--checkbox-checked-ink); + border-inline-end: 1px solid var(--surface-3); + display: inline-block; + flex-shrink: 0; + height: 6px; + } +.resultsetModifier > span > span:nth-of-type(2) { + background-color: var(--checkbox-checked-ink); + clip-path: polygon( + calc(50% - 2px) 0%, + 0% calc(100% - 6px), + 0% 100%, + 100% 100%, + 100% calc(100% - 6px), + calc(50% + 2px) 0% + ); + display: inline-block; + flex-shrink: 0; + height: 20px; + width: 20px; + } +.resultsetModifier > span > span:nth-of-type(3) { + background-color: var(--surface-3); + border-inline-start: 1px solid var(--surface-3); + display: inline-block; + flex-grow: 1; + height: 6px; + } +.resultsetModifier input { + border: 0; + height: 100%; + left: 0; + margin: 0; + opacity: 0; + padding: 0; + position: absolute; + top: 0; + width: 100%; + } +#resultsetCount { + align-items: center; + background-color: var(--surface-3); + color: var(--ink-1); + display: inline-flex; + justify-content: center; + min-width: 2.2em; + } +#ublock0-epicker section.invalidFilter #resultsetCount { + background-color: var(--error-surface); + color: var(--ink-100); +} +#ublock0-epicker section > div:first-child + div { + direction: ltr; + margin: 2px 0; + text-align: right; +} +#ublock0-epicker ul { + padding: 0; + list-style-type: none; + text-align: left; + overflow: hidden; +} +#ublock0-epicker #candidateFilters { + max-height: min(18em, 18vh); + overflow-y: auto; +} +#ublock0-epicker .changeFilter > li > span:nth-of-type(1) { + font-weight: bold; +} +#ublock0-epicker .changeFilter > li > span:nth-of-type(2) { + font-size: smaller; + color: gray; +} +#ublock0-epicker #candidateFilters [data-i18n] { + font-size: 90%; +} +#ublock0-epicker #candidateFilters .changeFilter { + list-style-type: none; + margin: 0 0 0 1em; + overflow: hidden; + text-align: left; +} +#ublock0-epicker #candidateFilters .changeFilter li { + border: 1px solid transparent; + cursor: pointer; + direction: ltr; + font: 12px monospace; + white-space: nowrap; +} +#ublock0-epicker #candidateFilters .changeFilter li.active { + border: 1px dotted rgb(var(--blue-50)); + } +#ublock0-epicker #candidateFilters .changeFilter li:hover { + background-color: var(--surface-2); +} + +#ublock0-epicker svg#sea { + cursor: crosshair; + box-sizing: border-box; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +#ublock0-epicker.paused svg#sea { + cursor: not-allowed; +} +#ublock0-epicker svg#sea > path:first-child { + fill: rgba(0,0,0,0.5); + fill-rule: evenodd; +} +#ublock0-epicker svg#sea > path + path { + stroke: #F00; + stroke-width: 0.5px; + fill: rgba(255,63,63,0.20); +} +#ublock0-epicker.zap svg#sea > path + path { + stroke: #FF0; + stroke-width: 0.5px; + fill: rgba(255,255,63,0.20); +} +#ublock0-epicker.preview svg#sea > path { + fill: rgba(0,0,0,0.10); +} +#ublock0-epicker.preview svg#sea > path + path { + stroke: none; +} + + +#ublock0-epicker #windowbar { + display: flex; +} +#ublock0-epicker #windowbar svg { + fill: none; + pointer-events: none; + stroke: var(--ink-1); + stroke-width: 3px; +} +#ublock0-epicker #windowbar #move { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAECAYAAACtBE5DAAAAFElEQVQI12NgwAfKy8v/M5ANYLoBshgEyQo6H9UAAAAASUVORK5CYII='); + cursor: grab; + flex-grow: 1; + opacity: 0.8; +} +#ublock0-epicker aside.moving #windowbar #move { + cursor: grabbing; +} +#windowbar #quit, +#windowbar #minimize { + height: 2em; + width: 2em; +} +#windowbar #quit:hover, +#windowbar #minimize:hover { + background-color: var(--surface-2) +} +#ublock0-epicker.minimized #windowbar #minimize svg > path, +#windowbar #minimize svg > rect { + display: none; +} +#ublock0-epicker.minimized #windowbar #minimize svg > rect { + display: initial; +} diff --git a/src/css/fa-icons.css b/src/css/fa-icons.css new file mode 100644 index 0000000000000..639811f2e92df --- /dev/null +++ b/src/css/fa-icons.css @@ -0,0 +1,154 @@ +.fa-icon { + align-items: center; + background-color: transparent; + border: 0; + display: inline-flex; + justify-content: center; + margin: 0; + padding: 0 0.1em; + position: relative; + user-select: none; + vertical-align: text-bottom; + -webkit-user-select: none; + } +.fa-icon > * { + pointer-events: none; + } +/* +.fa-icon.disabled, +.fa-icon[disabled] { + color: var(--button-disabled-ink); + fill: var(--button-disabled-ink); + filter: var(--button-disabled-filter); + stroke: var(--button-disabled-ink); + pointer-events: none; + } +*/ +.fa-icon > .fa-icon-badge, +.fa-icon.disabled > .fa-icon-badge { + visibility: hidden; + } +.fa-icon.fa-icon-badged > .fa-icon-badge { + bottom: -20%; + display: inline-block; + font: 60% sans-serif; + left: calc(100% - 0.2em); + position: absolute; + visibility: visible; + } +.fa-icon.fa-icon-hflipped > svg { + transform: scale(-1, 1); + transform-origin: 50%; + } +.fa-icon.fa-icon-vflipped > svg { + transform: scale(1, -1); + transform-origin: 50%; + } +.fa-icon.fa-icon-rotright > svg { + transform: rotate(90deg); + transform-origin: 50%; + } +.fa-icon.fa-icon-rotleft > svg { + transform: rotate(-90deg); + transform-origin: 50%; + } + +.fa-icon > svg { + height: 1em; + overflow: visible; + width: 1em; + } + +.fa-icon > .fa-icon_bar-chart { + width: calc(1em * 2048 / 1792); + } +.fa-icon > .fa-icon_cloud-download, +.fa-icon > .fa-icon_cloud-upload, +.fa-icon > .fa-icon_cogs, +.fa-icon > .fa-icon_eraser, +.fa-icon > .fa-icon_film { + width: calc(1em * 1920 / 1792); + } +.fa-icon > .fa-icon_code { + width: calc(1em * 1830 / 1792); + } +.fa-icon > .fa-icon_exclamation-triangle { + width: calc(1em * 1794 / 1792); + } +.fa-icon > .fa-icon_clipboard, +.fa-icon > .fa-icon_comment-alt, +.fa-icon > .fa-icon_external-link, +.fa-icon > .fa-icon_eye-dropper, +.fa-icon > .fa-icon_eye-open, +.fa-icon > .fa-icon_eye-slash, +.fa-icon > .fa-icon_files-o, +.fa-icon > .fa-icon_list-alt { + width: calc(1em * 1792 / 1792); + } +.fa-icon > .fa-icon_sun, +.fa-icon > .fa-icon_sun-o { + width: calc(1em * 1708 / 1792); + } +.fa-icon > .fa-icon_book, +.fa-icon > .fa-icon_download-alt, +.fa-icon > .fa-icon_font, +.fa-icon > .fa-icon_search, +.fa-icon > .fa-icon_spinner, +.fa-icon > .fa-icon_unlink, +.fa-icon > .fa-icon_upload-alt, +.fa-icon > .fa-icon_volume-up, +.fa-icon > .fa-icon_zoom-in, +.fa-icon > .fa-icon_zoom-out { + width: calc(1em * 1664 / 1792); + } +.fa-icon > .fa-icon_terminal { + width: calc(1em * 1651 / 1792); + } +.fa-icon > .fa-icon_magic { + width: calc(1em * 1637 / 1792); + } +.fa-icon > .fa-icon_home { + width: calc(1em * 1612 / 1792); + } +.fa-icon > .fa-icon_check { + width: calc(1em * 1550 / 1792); + } +.fa-icon > .fa-icon_cog, +.fa-icon > .fa-icon_clock-o, +.fa-icon > .fa-icon_floppy-o, +.fa-icon > .fa-icon_info-circle, +.fa-icon > .fa-icon_pause-circle-o, +.fa-icon > .fa-icon_play-circle-o, +.fa-icon > .fa-icon_power-off, +.fa-icon > .fa-icon_question-circle, +.fa-icon > .fa-icon_refresh, +.fa-icon > .fa-icon_save, +.fa-icon > .fa-icon_sliders, +.fa-icon > .fa-icon_undo { + width: calc(1em * 1536 / 1792); + } +.fa-icon > .fa-icon_arrow-right { + width: calc(1em * 1472 / 1792); + } +.fa-icon > .fa-icon_filter { + width: calc(1em * 1410 / 1792); + } +.fa-icon > .fa-icon_plus, +.fa-icon > .fa-icon_trash-o { + width: calc(1em * 1408 / 1792); + } +.fa-icon > .fa-icon_times { + width: calc(1em * 1188 / 1792); + } +.fa-icon > .fa-icon_angle-up, +.fa-icon > .fa-icon_double-angle-up, +.fa-icon > .fa-icon_lock, +.fa-icon > .fa-icon_unlock-alt { + width: calc(1em * 1152 / 1792); + } +.fa-icon > .fa-icon_double-angle-left { + width: calc(1em * 966 / 1792); + } +.fa-icon > .fa-icon_bolt { + width: calc(1em * 896 / 1792); + } diff --git a/src/css/fonts/Inter/Inter-Regular.woff2 b/src/css/fonts/Inter/Inter-Regular.woff2 new file mode 100644 index 0000000000000..2bcd222ecfae9 Binary files /dev/null and b/src/css/fonts/Inter/Inter-Regular.woff2 differ diff --git a/src/css/fonts/Inter/Inter-SemiBold.woff2 b/src/css/fonts/Inter/Inter-SemiBold.woff2 new file mode 100644 index 0000000000000..fbae113d2855e Binary files /dev/null and b/src/css/fonts/Inter/Inter-SemiBold.woff2 differ diff --git a/src/css/fonts/Inter/LICENSE.txt b/src/css/fonts/Inter/LICENSE.txt new file mode 100644 index 0000000000000..d6882801bb84a --- /dev/null +++ b/src/css/fonts/Inter/LICENSE.txt @@ -0,0 +1,93 @@ +Copyright (c) 2016-2020 The Inter Project Authors +https://github.com/rsms/inter + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION AND CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/src/css/fonts/Metropolis/Metropolis-Regular.woff2 b/src/css/fonts/Metropolis/Metropolis-Regular.woff2 new file mode 100644 index 0000000000000..f50bf3422e703 Binary files /dev/null and b/src/css/fonts/Metropolis/Metropolis-Regular.woff2 differ diff --git a/src/css/fonts/Metropolis/Metropolis-SemiBold.woff2 b/src/css/fonts/Metropolis/Metropolis-SemiBold.woff2 new file mode 100644 index 0000000000000..fad6dfdece70a Binary files /dev/null and b/src/css/fonts/Metropolis/Metropolis-SemiBold.woff2 differ diff --git a/src/css/fonts/Metropolis/README.md b/src/css/fonts/Metropolis/README.md new file mode 100644 index 0000000000000..ce01464d34cc5 --- /dev/null +++ b/src/css/fonts/Metropolis/README.md @@ -0,0 +1,25 @@ +# Metropolis + +A modern, geometric typeface. Influenced by other popular geometric, minimalist sans-serif typefaces of the new millennium. Designed for optimal readability at small point sizes while beautiful at large point sizes. + +![Metropolis](./Specimens/Metro-1.png) + +--- + +![Metropolis](./Specimens/Metro-2.png) + +### Where am I? + +See [Documentation](./Documentation/Documentation.md). + +### The Unlicense + +Contributions welcome. + +### Contact + +Reachable via chris.m.simpson [at] icloud.com or tweet @ChrisMSimpson. + +### Support + +There is none. Oh, you meant support me? I dare you to click the sponsor button above. diff --git a/src/css/fonts/Metropolis/UNLICENSE b/src/css/fonts/Metropolis/UNLICENSE new file mode 100644 index 0000000000000..68a49daad8ff7 --- /dev/null +++ b/src/css/fonts/Metropolis/UNLICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/src/css/fonts/OFL.txt b/src/css/fonts/OFL.txt deleted file mode 100644 index f1a20ac1a8ade..0000000000000 --- a/src/css/fonts/OFL.txt +++ /dev/null @@ -1,97 +0,0 @@ -Copyright (c) , (), -with Reserved Font Name . -Copyright (c) , (), -with Reserved Font Name . -Copyright (c) , (). - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/src/css/fonts/fontawesome-webfont.ttf b/src/css/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 96a3639cdde5e..0000000000000 Binary files a/src/css/fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/src/css/logger-ui-inspector.css b/src/css/logger-ui-inspector.css index 420df1bb6d423..3d5dc77f1018a 100644 --- a/src/css/logger-ui-inspector.css +++ b/src/css/logger-ui-inspector.css @@ -1,12 +1,19 @@ #domInspector { display: none; + overflow: hidden; } #inspectors.dom #domInspector { - display: block; + display: flex; } #domInspector .permatoolbar .highlightMode.invert { transform: rotate(180deg); } +#domInspector button.vExpandToggler > .fa-icon { + transform: scaleY(-1) + } +#domInspector button.vCompactToggler > .fa-icon { + transform: scaleY(1) + } #domInspector .vscrollable { overflow-x: auto; } @@ -14,7 +21,7 @@ padding-left: 0.5em; } #domInspector ul { - background-color: #fff; + background-color: var(--surface-1); margin: 0; padding-left: 1em; } @@ -25,19 +32,25 @@ #domInspector li.isCosmeticHide, #domInspector li.isCosmeticHide ul, #domInspector li.isCosmeticHide li { - background-color: #fee; + background-color: var(--surface-2); } #domInspector li > * { + display: inline-block; + line-height: 1.2; margin-right: 1em; + vertical-align: middle; + } +#domInspector li > span { + color: #aaa; } #domInspector li > span:first-child { - color: #000; + color: var(--ink-1); cursor: default; - display: inline-block; + font-size: 1rem; margin-right: 0; opacity: 0.5; + padding: 0 4px 0 1px; visibility: hidden; - width: 1em; } #domInspector li > span:first-child:hover { opacity: 1; @@ -54,30 +67,51 @@ } #domInspector li.branch.show > span:first-child:before { content: '\25be'; - visibility: visible; } #domInspector li.branch.hasCosmeticHide > span:first-child:before { color: red; } #domInspector li > code { cursor: pointer; - font: 12px/1.4 monospace; + font-family: monospace; + overflow: hidden; + text-overflow: ellipsis; } #domInspector li > code.off { text-decoration: line-through; } -#domInspector li > span { - color: #aaa; - } #domInspector li > code.filter { - color: red; + color: var(--cm-negative); } + #domInspector li > ul { + display: block; + } +#domInspector li:not(.hasCosmeticHide):not(.isCosmeticHide):not(.show) > ul { + display: none; + } + +#domInspector li:not(.hasCosmeticHide):not(.isCosmeticHide):not(.show) { + display: none; + } +#domInspector #domTree > li { + display: block; + } +#domInspector:not(.vExpanded) ul { + display: block; + } +#domInspector li > ul > li:not(.hasCosmeticHide):not(.isCosmeticHide) { display: none; } -#domInspector li.show > ul { +#domInspector li.show > ul > li:not(.hasCosmeticHide):not(.isCosmeticHide) { display: block; } +#domInspector li:not(.hasCosmeticHide):not(.isCosmeticHide) { + display: block; + } +#domInspector.hCompact li > code:first-of-type { + max-width: 12em; + } #cosmeticFilteringDialog .dialog { text-align: center; diff --git a/src/css/logger-ui.css b/src/css/logger-ui.css index 949754500f406..38e434f56e37c 100644 --- a/src/css/logger-ui.css +++ b/src/css/logger-ui.css @@ -1,96 +1,121 @@ body { - background-color: white; - border: 0; - color: black; - margin: 0; - overflow: hidden; - padding: 0; - } -input:focus { - background-color: #ffe; + display: flex; + flex-direction: column; + height: 100vh; + height: 100svh; + overflow-y: hidden; + width: 100vw; } textarea { box-sizing: border-box; direction: ltr; - resize: none; + min-height: 6rem; + resize: vertical; width: 100%; } .permatoolbar { - background-color: white; + background-color: var(--surface-1); border: 0; box-sizing: border-box; + display: flex; + flex-shrink: 0; font-size: 120%; - left: 0; + justify-content: space-between; margin: 0; - padding: 0.25em 0.5em; - position: absolute; - top: 0; - z-index: 10; + padding: 0.25em; } -.permatoolbar .button { - background-color: white; - border: none; - box-sizing: border-box; - cursor: pointer; - display: inline-block; - font-size: 150%; - margin: 0; - padding: 8px; +.permatoolbar > div { + display: flex; } -.permatoolbar .button.disabled { - opacity: 0.2; - pointer-events: none; +.permatoolbar button.iconified { + padding-left: var(--default-gap-xsmall); + padding-right: var(--default-gap-xsmall); } -.permatoolbar .button.active { - font-weight: bold; +.permatoolbar button.active { + fill: rgb(var(--primary-50)); } -.permatoolbar .button:hover { - background-color: #eee; +.permatoolbar button > .fa-icon { + font-size: 180%; } -.permatoolbar > div { - white-space: nowrap; +#pageSelector { + min-width: 10em; + padding: 0.25em 0; + width: 50vw; } -.permatoolbar > div > * { - vertical-align: middle; +#showpopup { + display: inline-flex; + align-items: center; } -#pageSelector { - width: 28em; - padding: 0.2em 0; +#showpopup img { + filter: grayscale(100%); + height: auto; + width: 1em; + } +#info { + fill: #ccc; + } +#info:hover { + fill: #000; } +/* + https://github.com/gorhill/uBlock/issues/3293 + => https://devhints.io/css-system-font-stack +*/ #inspectors { - bottom: 0; - position: absolute; - top: 0; - width: 100%; + display: flex; + flex-direction: column; + flex-grow: 1; + flex-wrap: nowrap; + font-family: "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + overflow: hidden; + position: relative; } .inspector { - border-top: 1px solid #ccc; - bottom: 0; - position: absolute; - top: 0; - width: 100%; + border-top: 1px solid var(--border-4); + display: flex; + flex-direction: column; + height: 100%; + } +.inspector .permatoolbar { + border-bottom: 1px solid var(--border-1); } .vscrollable { - bottom: 0; + direction: ltr; + flex-grow: 1; + font-size: var(--font-size-smaller); + height: 1px; /* necessary for proper space allocation by flex boxes */ overflow-x: hidden; overflow-y: auto; - position: absolute; - top: 0; - width: 100%; } -#netInspector { - font: 13px sans-serif; +#domInspector button.vExpandToggler > .fa-icon { + transform: scaleY(1) + } +.inspector:not(.vExpanded) button.vCompactToggler > .fa-icon { + transform: scaleY(-1) + } +.hCompact button.hCompactToggler > .fa-icon { + transform: scaleX(-1) } + #inspectors.dom #netInspector { display: none; } -#netInspector #compactViewToggler.button:before { - content: '\f102'; - } -#netInspector.compactView #compactViewToggler.button:before { - content: '\f103'; + +#netInspector #pause > .fa-icon[data-i18n-title="loggerUnpauseTip"] { + display: none; +} +#netInspector.paused #pause > .fa-icon[data-i18n-title="loggerPauseTip"] { + display: none; +} +#netInspector.paused #pause > .fa-icon[data-i18n-title="loggerUnpauseTip"] { + display: inline-flex; + fill: #5F9EA0; +} +#netInspector #filterExprGroup { + display: flex; + position: relative; } #netInspector #filterButton { opacity: 0.25; @@ -99,226 +124,426 @@ textarea { opacity: 1; } #netInspector #filterInput { - min-width: 18em; + border: 1px solid gray; + display: inline-flex; } -#netInspector #filterInput.bad { - background-color: #fee; +#netInspector #filterInput > input { + border: 0; + min-width: 16em; } -#netInspector #maxEntries { - margin: 0 2em; +#netInspector #filterExprButton { + transform: scaleY(-1); } -#netInspector table { - border: 0; - border-collapse: collapse; - direction: ltr; - table-layout: fixed; - width: 100%; +#netInspector #filterExprButton:hover { + background-color: transparent; + } +#netInspector #filterExprButton.expanded { + transform: scaleY(1); + } +#netInspector #filterExprPicker { + background-color: var(--surface-0); + border: 1px solid gray; + display: none; + position: absolute; + flex-direction: column; + font-size: small; + top: 100%; + z-index: 100; } -#netInspector table > colgroup > col:nth-of-type(1) { - width: 5em; +body[dir="ltr"] #netInspector #filterExprPicker { + right: 0; } -#netInspector table > colgroup > col:nth-of-type(2) { - width: 2.5em; +body[dir="rtl"] #netInspector #filterExprPicker { + left: 0; } -#netInspector table > colgroup > col:nth-of-type(3) { - width: 20%; + +#netInspector #filterExprGroup:hover #filterExprButton.expanded ~ #filterExprPicker { + display: flex; } -#netInspector table > colgroup > col:nth-of-type(4) { - width: 2.5em; +#netInspector #filterExprPicker > div { + border: 1px dotted #ddd; + border-left: 0; + border-right: 0; + display: flex; + padding: 0.5em; } -#netInspector table > colgroup > col:nth-of-type(5) { - width: 6em; +#netInspector #filterExprPicker > div:first-of-type { + border-top: 0; } -#netInspector table > colgroup > col:nth-of-type(6) { - width: calc(100% - 16em - 20%); +#netInspector #filterExprPicker > div:last-of-type { + border-bottom: 0; } -#netInspector.f table tr.f { - display: none; +#netInspector #filterExprPicker div { + display: flex; + } +#netInspector #filterExprPicker span[data-filtex] { + align-items: center; + border: 1px solid transparent; + cursor: pointer; + display: inline-flex; + margin: 0 0.5em 0 0; + padding: 0.25em; + white-space: nowrap; + } +#netInspector #filterExprPicker span[data-filtex]:last-of-type { + margin: 0; + } +#netInspector #filterExprPicker span[data-filtex]:hover { + background-color: rgb(var(--primary-70) / 25%); + border: 1px solid rgb(var(--primary-70)); + } +#netInspector #filterExprPicker span.on[data-filtex], +#filterExprButton.active { + background-color: rgb(var(--primary-70) / 40%); + } +#netInspector #filterExprPicker span.on[data-filtex] { + border: 1px solid rgb(var(--primary-70)); } -#netInspector tr.cat_info { - color: #00f; +#netInspector .vscrollable { + overflow: hidden; } -#netInspector tr.blocked { - background-color: rgba(192, 0, 0, 0.1); +#vwRenderer { + box-sizing: border-box; + height: 100%; + overflow: hidden; + position: relative; + width: 100%; } -body.colorBlind #netInspector tr.blocked { - background-color: rgba(0, 19, 110, 0.1); +#vwRenderer #vwScroller { + height: 100%; + overflow-x: hidden; + overflow-y: auto; + position: absolute; + width: 100%; + } +#vwRenderer #vwScroller #vwVirtualContent { + overflow: hidden; + } +#vwRenderer #vwContent { + left: 0; + overflow: hidden; + position: absolute; + width: 100%; + } +#vwRenderer .logEntry { + background-color: var(--surface-1); + display: block; + left: 0; + overflow: hidden; + position: absolute; + width: 100%; + } +#vwRenderer .logEntry:empty { + display: none; + } +#vwRenderer .logEntry > div { + border-bottom: 1px dotted var(--border-1); + box-sizing: border-box; + display: flex; + height: 100%; + max-height: 200px; + white-space: nowrap; + } +#vwRenderer .logEntry > div[data-status="1"], +.netFilteringDialog > .panes > .details > div[data-status="1"] { + background-color: rgb(var(--popup-cell-block-surface-rgb) / 50%); + } +#vwRenderer .logEntry > div[data-status="1"][data-modifier], +.netFilteringDialog > .panes > .details > div[data-status="1"][data-modifier] { + background-color: var(--logger-modified-surface); } -#netInspector tr.nooped { +#vwRenderer .logEntry > div[data-status="3"] { background-color: rgba(108, 108, 108, 0.1); } -body.colorBlind #netInspector tr.nooped { +:root.colorBlind #vwRenderer .logEntry > div[data-status="3"] { background-color: rgba(96, 96, 96, 0.1); } -#netInspector tr.allowed { - background-color: rgba(0, 160, 0, 0.1); +#vwRenderer .logEntry > div[data-status="2"], +.netFilteringDialog > .panes > .details > div[data-status="2"] { + background-color: rgb(var(--popup-cell-allow-surface-rgb) / 50%); } -body.colorBlind #netInspector tr.allowed { - background-color: rgba(255, 194, 57, 0.1) +#vwRenderer .logEntry > div[data-tabid="-1"] { + text-shadow: 0 0.2em 0.4em #aaa; } -#netInspector tr.cb, #netInspector tr.rr { - background-color: rgba(255, 255, 0, 0.1); +#vwRenderer .logEntry > div.extendedRealm, +#vwRenderer .logEntry > div.redirect { + background-color: var(--logger-redirected-surface); } -#netInspector tr.maindoc { +#vwRenderer .logEntry > div.extendedRealm.scriptlet { + background-color: var(--logger-scriptlet-surface); + } +:root.colorBlind #vwRenderer .logEntry > div.extendedRealm, +:root.colorBlind #vwRenderer .logEntry > div.redirect { + background-color: rgba(0, 19, 110, 0.1); + } +#vwRenderer .logEntry > div[data-aliasid] { + color: var(--popup-cell-cname-ink); + } +#vwRenderer .logEntry > div[data-type="tabLoad"] { background-color: #666; color: white; - text-align: center; + } +#vwRenderer .logEntry > div[data-type="error"] { + color: var(--cm-negative); + } +#vwRenderer .logEntry > div[data-type="info"] { + color: var(--sf-def-ink); + } +#vwRenderer .logEntry > div.voided { + opacity: 0.5; + } +#vwRenderer .logEntry > div.voided:hover { + opacity: 0.7; } -body #netInspector td { - border: 1px solid #ccc; - border-top: none; - min-width: 0.5em; - padding: 3px; - vertical-align: top; - white-space: normal; +#vwRenderer .logEntry > .fields > span { + border-left: 1px dotted var(--border-1); + box-sizing: border-box; + display: inline-block; + height: 100%; + overflow: hidden; + padding: 2px; + vertical-align: middle; + white-space: nowrap; word-break: break-all; - word-wrap: break-word; } -#netInspector tr td { - border-top: 1px solid #ccc; +#vwRenderer .logEntry > div:hover > span { + background-color: rgba(0,0,0,0.04); } -#netInspector tr td:first-of-type { - border-left: none; +body[dir="ltr"] #vwRenderer .logEntry > .fields > span:first-child { + border-left: 0; } -#netInspector tr td:last-of-type { - border-right: none; +body[dir="rtl"] #vwRenderer .logEntry > .fields > span:first-child { + border-right: 0; } -#netInspector.compactView td { - overflow: hidden; +#vwRenderer .logEntry > div > span:nth-of-type(1) { + } +#vwRenderer .logEntry > div > span:nth-of-type(2) { + } +#vwRenderer .logEntry > .fields > span:nth-of-type(2) { text-overflow: ellipsis; - white-space: nowrap; } - -#netInspector tr td:nth-of-type(1) { - text-align: right; - white-space: nowrap; +#vwRenderer .logEntry > .fields.messageRealm > span:nth-of-type(2) ~ span { + display: none; } -#netInspector tr td:nth-of-type(2) { - text-align: center; - white-space: nowrap; +.vExpanded #vwRenderer #vwContent .logEntry > .fields > span:nth-of-type(2) { + overflow-y: auto; + white-space: pre-line; } -#netInspector tr.tab_bts > td:nth-of-type(2):before { - content: '\f070'; - font: 1em FontAwesome; +#vwRenderer .logEntry > .fields.messageRealm[data-type="tabLoad"] > span:nth-of-type(2) { + text-align: center; } -#netInspector tr.tab:not(.canMtx) { - opacity: 0.3; +#vwRenderer .logEntry > .fields.extendedRealm > span:nth-of-type(2) > span:first-of-type { + display: none; } -#netInspector tr.tab:not(.canMtx):hover { - opacity: 0.7; +#vwRenderer .logEntry > .fields.extendedRealm.isException > span:nth-of-type(2) > span:last-of-type { + text-decoration: line-through rgba(0,0,255,0.7); } -#netInspector tr.tab:not(.canMtx) > td:nth-of-type(2):before { - content: '\f00d'; - font: 1em FontAwesome; +#vwRenderer .logEntry > .fields > span:nth-of-type(3) { + font-family: monospace; + padding-left: 0.3em; + padding-right: 0.3em; + text-align: center; } -body:not(.popupOn) #netInspector tr.canMtx td:nth-of-type(2) { - cursor: zoom-in; +#netInspector:not(.vExpanded) #vwRenderer .logEntry > .fields > span:nth-of-type(4) { + text-align: right; } -body:not(.popupOn) #netInspector tr.canMtx td:nth-of-type(2):hover { - background: #ccc; +#vwRenderer #vwContent .logEntry > .fields > span:nth-of-type(4) { + text-overflow: ellipsis; } -#netInspector tr.canLookup td:nth-of-type(3) { - cursor: zoom-in; +.vExpanded #vwRenderer #vwContent .logEntry > .fields > span:nth-of-type(4) { + overflow-y: auto; + text-overflow: clip; + white-space: pre-line; } -#netInspector tr.cat_net td:nth-of-type(4), -#netInspector tr.cat_cosmetic td:nth-of-type(4), -#netInspector tr.cat_redirect td:nth-of-type(4) { - font: 12px monospace; +#vwRenderer .logEntry > .fields > span:nth-of-type(5) { text-align: center; - white-space: nowrap; } -#netInspector tr.cat_net td:nth-of-type(4) { - cursor: pointer; +#vwRenderer .logEntry > .fields > span:nth-of-type(3), +#vwRenderer .logEntry > .fields > span:nth-of-type(5), +#vwRenderer .logEntry > .fields > span:nth-of-type(7) { + white-space: nowrap !important; + } +#vwRenderer .logEntry > .fields > span:nth-of-type(8) { position: relative; } -#netInspector tr.cat_net td:nth-of-type(4):hover { - background: #ccc; +#vwRenderer #vwContent .logEntry > .fields > span:nth-of-type(8) { + text-overflow: ellipsis; } -#netInspector tr.cat_net td:nth-of-type(6) > span > b { - font-weight: bold; +.vExpanded #vwRenderer #vwContent .logEntry > .fields > span:nth-of-type(8) { + overflow-y: auto; + white-space: pre-line; } -#netInspector tr td:nth-of-type(6) b { - font-weight: normal; +#vwRenderer .logEntry > .fields > span:nth-of-type(8) b { + font-weight: bold; } -#netInspector tr.blocked td:nth-of-type(6) b { - background-color: rgba(192, 0, 0, 0.2); +#vwRenderer .logEntry > div[data-status="1"] > span:nth-of-type(8) b, +.netFilteringDialog > .panes > .details > div[data-status="1"] b { + background-color: rgb(var(--popup-cell-block-surface-rgb) / 100%); } -body.colorBlind #netInspector tr.blocked td:nth-of-type(6) b { - background-color: rgba(0, 19, 110, 0.2); +#vwRenderer .logEntry > div[data-status="1"][data-modifier] > span:nth-of-type(8) b, +.netFilteringDialog > .panes > .details > div[data-status="1"][data-modifier] b { + background-color: var(--logger-modified-em-surface); } -#netInspector tr.nooped td:nth-of-type(6) b { +#vwRenderer .logEntry > div[data-status="3"] > span:nth-of-type(8) b { background-color: rgba(108, 108, 108, 0.2); } -body.colorBlind #netInspector tr.nooped td:nth-of-type(6) b { +:root.colorBlind #vwRenderer .logEntry > div[data-status="3"] > span:nth-of-type(8) b { background-color: rgba(96, 96, 96, 0.2); } -#netInspector tr.allowed td:nth-of-type(6) b { - background-color: rgba(0, 160, 0, 0.2); - } -body.colorBlind #netInspector tr.allowed td:nth-of-type(6) b { - background-color: rgba(255, 194, 57, 0.2); +#vwRenderer .logEntry > div[data-status="2"] > span:nth-of-type(8) b, +.netFilteringDialog > .panes > .details > div[data-status="2"] b { + background-color: rgb(var(--popup-cell-allow-surface-rgb) / 100%); } - -#popupContainer { - background: white; - border: 1px solid gray; - border-radius: 3px; - box-sizing: border-box; +#vwRenderer .logEntry > .fields > span:nth-of-type(8) a { + align-items: center; + background-color: dimgray; + color: white; display: none; - overflow: hidden; - position: fixed; + height: min(100%, 1.5em); + justify-content: center; + padding: 0.1em; + opacity: 0.4; + position: absolute; right: 0; + text-decoration: none; top: 0; - z-index: 200; + width: 1.5em; } -#netInspector.popupOn #popupContainer { - display: block; +#netInspector.vExpanded #vwRenderer .logEntry > .fields > span:nth-of-type(8) a { + bottom: 0px; + height: unset; + padding: 0.2em; + top: unset; } -#popupContainer > div { - background: #aaa; - border: 0; +#vwRenderer .logEntry > .fields > span:nth-of-type(8) a::after { + content: '\2197'; } -body[dir="ltr"] #popupContainer > div { - text-align: right; +#vwRenderer .logEntry > .fields.networkRealm > span:nth-of-type(8):hover a { + display: inline-flex; } -body[dir="rtl"] #popupContainer > div { - text-align: left; +#vwRenderer .logEntry > .fields > span:nth-of-type(8) a:hover { + opacity: 1; } -#popupContainer > div > span { - color: #eee; - cursor: pointer; - display: inline-block; - font: 14px FontAwesome; - padding: 0 3px; + +@keyframes unrollRow { + to { + box-shadow: 0 2px 3px 0 #444; + height: auto; + max-height: 200px; + z-index: 1; } -#popupContainer > div > span:hover { - color: white; +} +@keyframes unrollRowCell { + to { + height: auto; + overflow-y: auto; + white-space: pre-wrap; } -#popupContainer > iframe { - border: 0; - padding: 0; - margin: 0; +} +#netInspector:not(.vExpanded) #vwRenderer .logEntry:hover { + animation-delay: 0.8s; + animation-fill-mode: forwards; + animation-name: unrollRow; + animation-timing-function: step-start; + } +#netInspector:not(.vExpanded) #vwRenderer .logEntry:hover > .fields > span { + animation-delay: 0.8s; + animation-fill-mode: forwards; + animation-name: unrollRowCell; + animation-timing-function: step-start; + } + +#vwRenderer #vwBottom { + background-color: #00F; + height: 0; + overflow: hidden; width: 100%; } -#popupContainer.hide { - width: 6em !important; +#vwRenderer #vwLineSizer { + left: 0; + pointer-events: none; + position: absolute; + top: 0; + visibility: hidden; + width: 100%; + } + +#inspectors .entryTools { + background-color: var(--surface-0); + flex-basis: 50%; + } +#inspectors .entryTools:empty { + display: none; + } + +.closeButton { + stroke: var(--ink-1); + stroke-width: 3px; + width: 1.6em; + height: 1.6em; + bottom: calc(100% + 2px); + } +body[dir="ltr"] .closeButton { + right: 0; + } +body[dir="rtl"] .closeButton { + left: 0; + } +.closeButton:hover { + background-color: var(--surface-2) !important; + } +.closeButton > * { + pointer-events: none; + } + +#inspectors #infoInspector { + flex-basis: 200%; } -#popupContainer.hide > iframe { +#inspectors:not(.console) #infoInspector { display: none; } +#inspectors #infoInspector .vscrollable { + font-family: monospace; + font-size: small; + } +#inspectors #infoInspector .vscrollable > div { + border-bottom: 1px dotted gray; + padding: 0.2em; + white-space: pre-wrap; + word-break: break-all; + } +#inspectors #infoInspector .vscrollable > div:first-of-type { + } +#inspectors #infoInspector .vscrollable > div[data-type="error"] { + color: var(--cm-negative); + } -.modalDialog { +#popupContainer { + background-color: var(--surface-1); + border: 1px solid gray; + bottom: 0; + display: none; + max-height: min(800px, calc(100vh - 2rem)); + max-height: min(800px, calc(100svh - 2rem)); + min-width: 360px; + overflow: hidden; + position: fixed; + right: 0; + z-index: 200; + } +#inspectors.popupOn #popupContainer { + display: block; + } + +#modalOverlay { align-items: center; - -webkit-align-items: center; background-color: rgba(0, 0, 0, 0.5); border: 0; bottom: 0; - display: flex; - display: -webkit-flex; + display: none; justify-content: center; - -webkit-justify-content: center; left: 0; margin: 0; position: fixed; @@ -326,25 +551,40 @@ body[dir="rtl"] #popupContainer > div { top: 0; z-index: 400; } +#modalOverlay.on { + display: flex; + } +#modalOverlay > div { + position: relative; + } +#modalOverlay .closeButton { + background-color: var(--surface-1); + position: absolute; + } -.modalDialog .dialog { - background-color: white; - border: 2px solid white; +#modalOverlayContainer { + background-color: var(--surface-1); + border: 0; box-sizing: border-box; - width: 80%; + padding: 1em; + max-height: 90vh; + overflow-y: auto; + width: 90vw; } -#netFilteringDialog .dialog p { - line-height: 2em; +.netFilteringDialog { + font-size: var(--font-size-smaller); } - -#netFilteringDialog .dialog select { - max-width: 75%; +.netFilteringDialog a { + text-decoration: none; + } +.netFilteringDialog select { + max-width: 50vw; outline: none; - padding: 0.2em; + text-overflow: ellipsis; } - -#netFilteringDialog .dialog > div.preview { +.netFilteringDialog > .preview { + align-items: center; /* http://lea.verou.me/css3patterns/ */ background-color: #aaa; background-image: @@ -366,130 +606,215 @@ body[dir="rtl"] #popupContainer > div { ); background-position:0 0, 9px 9px; background-size: 18px 18px; + display: flex; + justify-content: center; + margin-bottom: 1em; + padding: 0.5em; text-align: center; } -#netFilteringDialog .dialog > div.preview > * { +.netFilteringDialog > .preview > * { max-width: 100%; - max-height: 40vh; + max-height: 20vh; } - -#netFilteringDialog .dialog table { - border: 0; - border-collapse: collapse; - table-layout: fixed; - width: 100%; - } -#netFilteringDialog .dialog table > colgroup > col:nth-of-type(1) { - width: 3.8em; - } -#netFilteringDialog .dialog table > colgroup > col:nth-of-type(2) { +.netFilteringDialog > .preview > span { + background-color: var(--surface-3); + cursor: pointer; + padding: 1em; } -#netFilteringDialog .dialog td { - border: 0; - padding: 0; - vertical-align: middle; - } -#netFilteringDialog .dialog > div.headers { - border-bottom: 1px solid #888; - position: relative; +.netFilteringDialog > .headers { + align-items: center; + border-bottom: 1px solid var(--border-4); + display: flex; + justify-content: space-between; + line-height: 2; } -#netFilteringDialog .dialog > div.headers > span.header { - background-color: #eee; - border: 1px solid #aaa; - border-bottom: 1px solid #888; +.netFilteringDialog > .headers .header { + border: 1px solid var(--border-2); + border-bottom: 1px solid var(--border-4); border-top-left-radius: 4px; border-top-right-radius: 4px; - color: #888; + color: var(--border-2); cursor: pointer; display: inline-block; - font-size: small; - line-height: 2em; - margin-left: 0.5em; + margin-inline-end: 4px; padding: 0 1em; position: relative; - text-align: center; top: 1px; } -#netFilteringDialog .dialog > div.headers > span.header.selected { - background-color: white; - border-color: #888; - border-bottom: 1px solid white; - color: black; - } -#netFilteringDialog .dialog > div.headers > span.tools { - display: inline-block; - position: absolute; - top: 50%; - transform: translate(0, -50%); +.netFilteringDialog[data-pane="details"] > .headers [data-pane="details"], +.netFilteringDialog[data-pane="dynamic"] > .headers [data-pane="dynamic"], +.netFilteringDialog[data-pane="static"] > .headers [data-pane="static"] { + background-color: var(--surface-0); + border-color: var(--border-4); + border-bottom: 1px solid transparent; + color: var(--ink-1); } -body[dir="ltr"] #netFilteringDialog .dialog > div.headers > span.tools { - right: 0.1em; - } -body[dir="rtl"] #netFilteringDialog .dialog > div.headers > span.tools { - left: 0.1em; +.netFilteringDialog > .headers > .tools { + bottom: 0; + display: flex; + height: 100%; + margin-inline-start: 2rem; } -#netFilteringDialog .dialog > div.headers > span.tools > span { +.netFilteringDialog > .headers > .tools > span { + color: var(--ink-3); + fill: var(--ink-3); cursor: pointer; - font-size: 1.2em; + font-size: 1.5em; + padding: 0 0.25em; text-align: center; } -#netFilteringDialog .dialog > div.containers { - height: 40vh; +.netFilteringDialog > .headers > .tools > span:hover { + color: var(--ink-1); + fill: var(--ink-1); + } +.netFilteringDialog.extendedRealm > .headers .dynamic, +.netFilteringDialog.extendedRealm > .panes > .dynamic { + display: none; + } +.netFilteringDialog.extendedRealm > .headers .static, +.netFilteringDialog.extendedRealm > .panes > .static { + display: none; + } +.netFilteringDialog > div.panes { overflow: hidden; overflow-y: auto; + padding-top: 1em; } -#netFilteringDialog .dialog > div.containers > div { +.netFilteringDialog > div.panes > div { display: none; } -#netFilteringDialog .dialog > div.containers > div.selected { - display: block; +.netFilteringDialog[data-pane="details"] > .panes > [data-pane="details"], +.netFilteringDialog[data-pane="dynamic"] > .panes > [data-pane="dynamic"], +.netFilteringDialog[data-pane="static"] > .panes > [data-pane="static"] { + display: flex; + flex-direction: column; + padding: 0 var(--default-gap-xsmall) var(--default-gap-xsmall) var(--default-gap-xsmall); + } +.netFilteringDialog > .panes > .details > div { + align-items: stretch; + background-color: var(--surface-2); + border: 0; + border-bottom: 1px solid var(--surface-0); + display: flex; + } +.netFilteringDialog > .panes > .details > div > span { + padding: 0.5em; + } +.netFilteringDialog > .panes > .details > div > span:nth-of-type(1) { + border: 0; + flex-grow: 0; + flex-shrink: 0; + text-align: right; + width: 8em; + } +body[dir="ltr"] .netFilteringDialog > .panes > .details > div > span:nth-of-type(1) { + border-right: 1px solid var(--surface-0); + } +body[dir="rtl"] .netFilteringDialog > .panes > .details > div > span:nth-of-type(1) { + border-left: 1px solid var(--surface-0); + } +.netFilteringDialog > .panes > .details > div > span:nth-of-type(2) { + flex-grow: 1; + max-height: 10vh; + overflow: hidden auto; + white-space: pre-line + } +.netFilteringDialog > .panes > .details > div > span:nth-of-type(2):not(.prose) { + word-break: break-all; + } +.netFilteringDialog > .panes > .details > div > span:nth-of-type(2) .listEntry { + display: inline-flex; + } +.netFilteringDialog > .panes > .details > div > span:nth-of-type(2) .fa-icon { + font-size: 110%; + opacity: 0.5; + } +.netFilteringDialog > .panes > .details > div > span:nth-of-type(2) .fa-icon:hover { + opacity: 1; + } +.netFilteringDialog > .panes > .details .exceptor { + align-items: center; + border-left: 1px solid var(--surface-0); + cursor: pointer; + display: inline-flex; + font-family: monospace; + opacity: 0.8; + } +.netFilteringDialog > .panes > .details .exceptor:hover { + opacity: 1; + } +.netFilteringDialog > .panes > .details .exceptored .filter { + text-decoration: line-through; + } +.netFilteringDialog > .panes > .details .exceptored .exceptor { + background-color: rgb(var(--primary-50) / 50%); } -#netFilteringDialog .dialog > div.containers > div.dynamic > table.toolbar select { - font: 14px; - height: 2.5em; +.netFilteringDialog > .panes > .details .exceptor::before { + content: '@@'; } -#netFilteringDialog .dialog > div.containers > div.dynamic > table.toolbar #saveRules { +.netFilteringDialog.extendedRealm > .panes > .details .exceptor::before { + content: '#@#'; + } +.netFilteringDialog > div.panes > .dynamic > .toolbar { + padding-bottom: 1em; + } +.netFilteringDialog > div.panes > .dynamic .row { + display: flex; + min-height: 2.2em; + } +.netFilteringDialog > div.panes > .dynamic .row > span:nth-of-type(1) { + align-self: stretch; + border: 0; + display: inline-flex; + flex-grow: 0; + flex-shrink: 0; + text-align: center; + width: 4.5em; + } +body[dir="ltr"] .netFilteringDialog > div.panes > .dynamic .row > span:nth-of-type(1) { + border-right: 1px solid var(--surface-0); + } +body[dir="rtl"] .netFilteringDialog > div.panes > .dynamic .row > span:nth-of-type(1) { + border-left: 1px solid var(--surface-0); + } +.netFilteringDialog > div.panes > .dynamic .row > span:nth-of-type(2) { + align-self: center; + padding: 0 0.5em; + } +.netFilteringDialog > div.panes > .dynamic > .toolbar #saveRules { background-color: #ffe; border: 1px solid #ddc; border-radius: 4px; - color: #888; - font-size: 1.8em; - margin: 0.1em; - padding: 0.25em 0.5em; + fill: #888; + cursor: pointer; + font-size: 2em; visibility: hidden; + width: 100%; } -body.dirty #netFilteringDialog .dialog > div.containers > div.dynamic > table.toolbar #saveRules { +body.dirty .netFilteringDialog > div.panes > .dynamic > .toolbar #saveRules { visibility: visible; } -#netFilteringDialog .dialog > div.containers > div.dynamic > table.toolbar #saveRules:hover { - color: black; +.netFilteringDialog > div.panes > .dynamic > .toolbar #saveRules:hover { + fill: black; } -#netFilteringDialog .dialog > div.containers > div.dynamic > table.toolbar tr.entry { +.netFilteringDialog > div.panes > .dynamic > .toolbar .entry { display: none; } -#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry { - background-color: #e6e6e6; +.netFilteringDialog > div.panes > .dynamic .entry { + background-color: var(--surface-2); border: 0; - border-bottom: 1px solid white; - font-size: 13px; + border-bottom: 1px solid var(--surface-0); } -#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry:hover { - background-color: #f0f0f0; +.netFilteringDialog > div.panes > .dynamic .entry:hover { + background-color: var(--surface-3); } -#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td:first-of-type { - border: 0; - border-right: 1px solid white; - text-align: center; - } -#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action { +.netFilteringDialog > div.panes > .dynamic .entry > .action { background-color: transparent; border: 0; cursor: pointer; - height: 2em; - width: 100%; } -#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action > span { +.netFilteringDialog > div.panes > .dynamic .entry > .action > span { background-color: transparent; border: 0; display: inline-block; @@ -498,97 +823,197 @@ body.dirty #netFilteringDialog .dialog > div.containers > div.dynamic > table.to visibility: hidden; width: 33.33%; } -#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.allow { +.netFilteringDialog > div.panes > .dynamic .entry > .action.allow { background-color: rgba(0, 160, 0, 0.3); } -body.colorBlind #netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.allow { +:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action.allow { background-color: rgba(255, 194, 57, 0.4); } -#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.noop { +.netFilteringDialog > div.panes > .dynamic .entry > .action.noop { background-color: rgba(108, 108, 108, 0.3); } -body.colorBlind #netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.noop { +:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action.noop { background-color: rgba(96, 96, 96, 0.4); } -#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.block { +.netFilteringDialog > div.panes > .dynamic .entry > .action.block { background-color: rgba(192, 0, 0, 0.3); } -body.colorBlind #netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.block { +:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action.block { background-color: rgba(0, 19, 110, 0.4); } -#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.own.allow { +.netFilteringDialog > div.panes > .dynamic .entry > .action.own.allow { background-color: rgba(0, 160, 0, 1); } -body.colorBlind #netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.own.allow { +:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action.own.allow { background-color: rgba(255, 194, 57, 1); } -#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.own.noop, -body.colorBlind #netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.own.noop { +.netFilteringDialog > div.panes > .dynamic .entry > .action.own.noop, +:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action.own.noop { background-color: rgba(108, 108, 108, 1); } -#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.own.block { +.netFilteringDialog > div.panes > .dynamic .entry > .action.own.block { background-color: rgba(192, 0, 0, 1); } -body.colorBlind #netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action.own.block { +:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action.own.block { background-color: rgba(0, 19, 110, 1); } -#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action:not(.own):hover > span { +.netFilteringDialog > div.panes > .dynamic .entry > .action:not(.own):hover > span { opacity: 0.2; visibility: visible; } -#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action:not(.own):hover > span:hover { +.netFilteringDialog > div.panes > .dynamic .entry > .action:not(.own):hover > span:hover { opacity: 0.75; } -#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action > span.allow { +.netFilteringDialog > div.panes > .dynamic .entry > .action > .allow { background-color: rgb(0, 160, 0); } -body.colorBlind #netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action > span.allow { +:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action > .allow { background-color: rgb(255, 194, 57); } -#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action > span.noop { +.netFilteringDialog > div.panes > .dynamic .entry > .action > .noop { background-color: rgb(108, 108, 108); } -#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action > span.block { +.netFilteringDialog > div.panes > .dynamic .entry > .action > .block { background-color: rgb(192, 0, 0); } -body.colorBlind #netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td > div.action > span.block { +:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action > .block { background-color: rgb(0, 19, 110); } -#netFilteringDialog .dialog > div.containers > div.dynamic tr.entry > td.url { +.netFilteringDialog > div.panes > .dynamic .entry > .url { overflow: hidden; - padding-left: 4px; text-overflow: ellipsis; white-space: nowrap; } -#netFilteringDialog .dialog > div.containers > div.static > p { - margin: 0.75em 0; +.netFilteringDialog > div.panes > div.static > div { + line-height: 2; } -#netFilteringDialog .dialog > div.containers > div.static textarea { +.netFilteringDialog > div.panes > div.static textarea { height: 6em; + word-break: break-all; } -#netFilteringDialog .dialog > div.containers > div.static > p:nth-of-type(2) { +.netFilteringDialog > div.panes > div.static > div:nth-of-type(2) { text-align: center; } -#filterFinderDialog .dialog { - padding: 1em; +#filterFinderDialog { + word-break: break-all; } -#filterFinderDialog .dialog code { +#filterFinderDialog code { background: #eee; font-size: 85%; padding: 3px; - word-break: break-all; + unicode-bidi: plaintext; + white-space: pre-wrap; } -#filterFinderDialog .dialog ul { +#filterFinderDialog ul { font-size: larger; } -#filterFinderDialog .dialog > *:first-child { +#filterFinderDialog .filterFinderListEntry { + align-items: flex-end; + display: flex; + } +#filterFinderDialog .filterFinderListEntry a { + text-decoration: none; + } +#filterFinderDialog .filterFinderListEntry a.fa-icon { + margin: 0 0.5em; + opacity: 0.6; + } +#filterFinderDialog .filterFinderListEntry a.fa-icon:hover { + opacity: 1; + } +#filterFinderDialog .filterFinderListEntry a.fa-icon[href=""] { + display: none; + } +#filterFinderDialog > *:first-child { margin-top: 0; } -#filterFinderDialog .dialog > *:last-child { +#filterFinderDialog > *:last-child { margin-bottom: 0; } +#loggerStatsDialog .sortedEntries { + display: flex; + flex-direction: column; + font-size: smaller; + } +#loggerStatsDialog .sortedEntries > div { + display: flex; + } +#loggerStatsDialog .sortedEntries > div > span:first-of-type { + flex-grow: 0; + flex-shrink: 0; + padding: 0 2em 0 0; + text-align: right; + width: 3em; + } +#loggerStatsDialog .sortedEntries > div > span:last-of-type { + flex-grow: 1; + flex-shrink: 1; + white-space: pre; + } + +#loggerExportDialog { + display: flex; + flex-direction: column; + } +#loggerExportDialog .options { + display: flex; + justify-content: space-between; + margin-bottom: 1em; + } +#loggerExportDialog .options > div { + display: inline-flex; + } +#loggerExportDialog .options span[data-i18n] { + border: 1px solid rgb(var(--primary-70)); + cursor: pointer; + font-size: 90%; + margin: 0; + padding: 0.5em; + white-space: nowrap; + } +#loggerExportDialog .options span[data-i18n]:hover { + background-color: rgb(var(--primary-70) / 40%); + } +#loggerExportDialog .options span.on[data-i18n], +#loggerExportDialog .options span.pushbutton:active { + background-color: rgb(var(--primary-70) / 40%); + } +#loggerExportDialog .output { + font-size: small; + height: 80vh; + padding: 0.5em; + white-space: pre-wrap; + } + +#loggerSettingsDialog { + display: flex; + flex-direction: column; + } +#loggerSettingsDialog > div { + padding-bottom: 1em; + } +#loggerSettingsDialog > div:last-of-type { + padding-bottom: 0; + } +#loggerSettingsDialog ul { + padding: 0; + } +body[dir="ltr"] #loggerSettingsDialog ul { + padding-left: 2em; + } +body[dir="rtl"] #loggerSettingsDialog ul { + padding-right: 2em; + } +#loggerSettingsDialog li { + list-style-type: none; + margin: 0.5em 0 0 0; + } +#loggerSettingsDialog input { + max-width: 6em; + } + .hide { - display: none; + display: none !important; } diff --git a/src/css/popup-fenix.css b/src/css/popup-fenix.css new file mode 100644 index 0000000000000..b845562d3a4fc --- /dev/null +++ b/src/css/popup-fenix.css @@ -0,0 +1,779 @@ + /* External CSS values override */ +.fa-icon.fa-icon-badged > .fa-icon-badge { + bottom: auto; + top: -20%; + } + +/* Internal CSS values */ +:root body { + overflow: hidden; + } +:root body, +:root.mobile body { + --font-size: 14px; + --popup-gap: var(--font-size); + --popup-gap-thin: calc(0.5 * var(--popup-gap)); + --popup-gap-extra-thin: calc(0.25 * var(--popup-gap)); + --popup-main-min-width: 18em; + --popup-firewall-min-width: 30em; + --popup-rule-cell-width: 5em; + font-size: var(--font-size); + line-height: 20px; + } +:root body.loading { + opacity: 0; + } +a { + color: var(--ink-1); + fill: var(--ink-1); + text-decoration: none; + } +:focus { + outline: 0; + } + +#panes { + align-items: stretch; + display: flex; + flex-direction: row-reverse; + padding: 0; + position: relative; + } +#main { + align-self: flex-start; + max-width: 340px; + min-width: var(--popup-main-min-width); + } +:root.portrait #main { + align-self: inherit; + } +hr { + border: 0; + border-top: 1px solid var(--hr-ink); + margin: 0; + padding: 0; + } + +#sticky { + background-color: var(--surface-1); + position: sticky; + top: 0; + z-index: 100; + } +#stickyTools { + align-items: stretch; + display: flex; + justify-content: space-between; + margin: var(--popup-gap-extra-thin) 0; + } +#switch { + color: var(--popup-power-ink); + cursor: pointer; + display: flex; + fill: var(--popup-power-ink); + flex-grow: 1; + font-size: 96px; + justify-content: center; + margin: var(--popup-gap) 0; + padding: 0; + stroke: none; + stroke-width: 64; + } +body.off #switch { + fill: var(--surface-1); + stroke: var(--checkbox-ink); + } +.rulesetTools { + background-color: transparent; + border: 0; + box-sizing: border-box; + display: flex; + flex-direction: column; + justify-content: space-between; + width: 25%; + } +.rulesetTools [id] { + background-color: var(--popup-ruleset-tool-surface); + border-radius: 4px; + cursor: pointer; + fill: var(--popup-ruleset-tool-ink); + flex-grow: 1; + font-size: 2.2em; + padding: 0; + visibility: hidden; + } +.rulesetTools [id]:not(:first-of-type) { + margin-block-start: 1px; + } +.rulesetTools [id] > svg { + fill: var(--ink-4); + } +body.needReload #refresh, +body.needSave #saveRules, +body.needSave #revertRules { + visibility: visible; + } +#hostname { + background-color: var(--popup-toolbar-surface); + margin: 0; + padding: var(--popup-gap-thin) 0; + text-align: center; + white-space: normal; + + } +#hostname > span { + word-break: break-all; + } +#hostname > span + span { + font-weight: 600; + } + +#basicStats { + column-gap: var(--popup-gap); + display: grid; + grid-template: auto / auto; + margin: var(--popup-gap) var(--popup-gap) var(--popup-gap-thin) var(--popup-gap); + } +#basicStats > span { + justify-self: center; + white-space: nowrap; + } +#basicStats > [data-i18n] { + font-size: 95%; + } +#basicStats > [data-i18n] + span { + font-size: 105%; + margin-bottom: var(--popup-gap-thin); + } +:root.portrait #basicStats { + grid-template: auto / auto auto; + margin-bottom: 0; + } +:root.portrait #basicStats > span { + font-size: inherit; + justify-self: stretch; + margin-bottom: var(--popup-gap); + white-space: unset; + } +:root.portrait #basicStats > [data-i18n] { + } +:root.portrait #basicStats > [data-i18n] + span { + text-align: end; + } + +.itemRibbon { + column-gap: var(--popup-gap); + display: grid; + grid-auto-columns: 1fr; + grid-auto-flow: column; + grid-template: auto / 1fr 1fr; + margin: var(--popup-gap); + } +.itemRibbon > span + span { + text-align: end; + } + +.toolRibbon { + align-items: start; + background-color: var(--popup-toolbar-surface); + display: grid; + grid-auto-columns: 1fr; + grid-auto-flow: column; + grid-template: auto / repeat(4, 1fr); + justify-items: center; + margin: 0; + white-space: normal; + } +.toolRibbon .tool { + cursor: pointer; + display: flex; + flex-direction: column; + font-size: 1.4em; + min-width: 32px; + padding: var(--popup-gap) + var(--popup-gap-thin); + unicode-bidi: embed; + visibility: hidden; + } +.toolRibbon .tool:hover { + color: var(--ink-1); + fill: var(--ink-1); + } +.toolRibbon .tool.enabled { + visibility: visible; + } +.toolRibbon .tool .caption { + font: 10px/12px sans-serif; + margin-top: 6px; + text-align: center; + } +:root.mobile.no-tooltips .toolRibbon .tool { + font-size: 1.6em; + } + +#basicTools .needPick:not(.canPick) { + visibility: hidden; + } + +#extraTools .fa-icon { + align-self: center; + position: relative; + } +#extraTools .fa-icon > .nope { + height: 1.1em; + left: 50%; + position: absolute; + stroke: var(--popup-icon-x-ink); + stroke-width: 2; + transform: translateX(-50%); + visibility: hidden; + width: 1.1em; + } +#extraTools > span.on .fa-icon >.nope { + visibility: visible; + } + +#unprocessedRequestWarning { + align-items: center; + background-color: #fc0; + color: rgb(var(--ink-80)); + stroke: rgb(var(--ink-80)); + display: none; + font-size: var(--font-size-smaller); + padding: var(--popup-gap-thin); + } +:root.warn #unprocessedRequestWarning { + display: flex; + } +#unprocessedRequestWarning > .dismiss { + flex-shrink: 0; + width: calc(var(--font-size) - 2px); + } +#unprocessedRequestWarning > .dismiss > svg { + width: 100%; + } + +#moreOrLess { + column-gap: 0; + display: grid; + grid-template: auto / 1fr 1fr; + justify-items: stretch; + margin: 1px 0 0 0; + } +#moreOrLess > span { + cursor: pointer; + margin: 0; + padding: var(--popup-gap-thin) var(--popup-gap); + user-select: none; + white-space: nowrap; + } +:root.mobile #moreOrLess > span { + padding: var(--popup-gap); + } +#moreButton .fa-icon { + transform: rotate(180deg); + } +#lessButton { + border-inline-start: 1px solid var(--surface-1); + text-align: end; + } +#moreButton.disabled, +#lessButton.disabled { + pointer-events: none; + visibility: hidden; + } + +#firewall { + border: 0; + flex-shrink: 1; + font-size: 90%; + margin: 0; + max-height: 600px; + max-width: 460px; + min-width: var(--popup-firewall-min-width); + padding: 0; + position: relative; + overflow-y: auto; + } +:root.desktop #firewall { + margin-inline-start: 1px; + } +:root.desktop body.vMin #firewall { + max-height: 100vh; + max-height: 100svh; + } +#firewall > * { + direction: ltr; + } +#firewall > section { + align-items: flex-start; + display: flex; + left: 0; + position: absolute; + z-index: 50; + } +#firewall > section .fa-icon { + color: var(--ink-4); + fill: var(--ink-4); + font-size: 150%; + padding: var(--popup-gap-thin); + } +#firewall > section:hover .fa-icon { + color: var(--ink-1); + fill: var(--ink-1); + } +#firewall.showBlocked > section .fa-icon, +#firewall.showAllowed > section .fa-icon, +#firewall.hideBlocked > section .fa-icon, +#firewall.hideAllowed > section .fa-icon, +#firewall.show3pScript > section .fa-icon, +#firewall.show3pFrame > section .fa-icon, +#firewall.hide3pScript > section .fa-icon, +#firewall.hide3pFrame > section .fa-icon { + color: rgb(var(--primary-70)); + fill: rgb(var(--primary-70)); + } +#firewall > section .filterExpressions { + background-color: var(--surface-0); + border: 1px solid var(--border-4); + display: none; + } +#firewall > section:hover .filterExpressions { + display: flex; + flex-direction: column; + } +#firewall > section .filterExpressions div { + border-bottom: 1px dotted #ddd; + padding: 0.25em; + } +#firewall > section .filterExpressions div:last-of-type { + border-bottom: 0; + } +#firewall > section .filterExpressions span { + cursor: default; + display: inline-flex; + margin: 0 0.25em 0 0; + padding: 0.5em; + white-space: nowrap; + border: 1px solid var(--surface-0); + } +#firewall > section .filterExpressions span:last-of-type { + margin: 0; + } +:root:not(.mobile) #firewall > section .filterExpressions span:not(.on):hover { + background-color: rgb(var(--primary-70) / 15%); + border: 1px solid rgb(var(--primary-70)); + } +#firewall > section .filterExpressions span.on { + background-color: rgb(var(--primary-70) / 40%); + border: 1px solid rgb(var(--primary-70)); + } +#firewall > div { + border: 0; + display: flex; + margin: 0; + margin-top: 1px; + padding: 0; + } +#firewall > div:first-of-type { + margin-top: 0; + } +#firewall > div:first-of-type ~ div[data-des="*"] { + display: none; + } +#firewall:not(.expanded) > div.isSubdomain:not(.expandException):not(.isRootContext), +#firewall.expanded > div.isSubdomain.expandException:not(.isRootContext) { + display: none; + } +#firewall > div > span, +#actionSelector > #dynaCounts { + background-color: var(--popup-cell-surface); + border: none; + box-sizing: border-box; + display: inline-flex; + padding: 0.4em 0; + position: relative; + } +#firewall > div:first-of-type span[data-i18n] { + cursor: pointer; + flex-direction: unset; + flex-grow: 1; + } +#firewall > div:first-of-type span[data-i18n]::before { + color: var(--ink-3); + content: '+'; + padding-right: 0.25em; + } +#firewall.expanded > div:first-of-type span[data-i18n]::before { + content: '\2012'; + } +#firewall > div > span:first-of-type { + flex-direction: column; + flex-grow: 1; + justify-content: flex-end; + padding-right: 2px; + text-align: right; + white-space: normal; + width: calc(100% - var(--popup-rule-cell-width)); + word-break: break-word; + } +#firewall > div[data-des="*"] > span:first-of-type { + flex-direction: row; + } +#firewall.show3pScript:not(.show3pFrame) > div:not([data-des="*"]).is3p:not(.hasScript), +#firewall.show3pFrame:not(.show3pScript) > div:not([data-des="*"]).is3p:not(.hasFrame), +#firewall.show3pScript.show3pFrame > div:not([data-des="*"]).is3p:not(.hasScript):not(.hasFrame), +#firewall.hide3pScript > div:not([data-des="*"]).is3p.hasScript, +#firewall.hide3pFrame > div:not([data-des="*"]).is3p.hasFrame, +#firewall.showBlocked > div:not([data-des="*"]).is3p:not(.totalBlocked):not(.blocked), +#firewall.showAllowed > div:not([data-des="*"]).is3p:not(.totalAllowed):not(.allowed), +#firewall.hideBlocked > div:not([data-des="*"]).is3p.totalBlocked, +#firewall.hideBlocked > div:not([data-des="*"]).is3p.blocked, +#firewall.hideAllowed > div:not([data-des="*"]).is3p.totalAllowed, +#firewall.hideAllowed > div:not([data-des="*"]).is3p.allowed { + max-height: 4px; + overflow-y: hidden; + pointer-events: none; + user-select: none; + } +#firewall.show3pScript:not(.show3pFrame) > div:not([data-des="*"]).is3p:not(.hasScript) *, +#firewall.show3pFrame:not(.show3pScript) > div:not([data-des="*"]).is3p:not(.hasFrame) *, +#firewall.show3pScript.show3pFrame > div:not([data-des="*"]).is3p:not(.hasScript):not(.hasFrame) *, +#firewall.hide3pScript > div:not([data-des="*"]).is3p.hasScript *, +#firewall.hide3pFrame > div:not([data-des="*"]).is3p.hasFrame *, +#firewall.showBlocked > div:not([data-des="*"]).is3p:not(.totalBlocked):not(.blocked) *, +#firewall.showAllowed > div:not([data-des="*"]).is3p:not(.totalAllowed):not(.allowed) *, +#firewall.hideBlocked > div:not([data-des="*"]).is3p.totalBlocked *, +#firewall.hideBlocked > div:not([data-des="*"]).is3p.blocked *, +#firewall.hideAllowed > div:not([data-des="*"]).is3p.totalAllowed *, +#firewall.hideAllowed > div:not([data-des="*"]).is3p.allowed * { + color: transparent !important; + } +#firewall > div.isCname > span:first-of-type { + color: var(--popup-cell-cname-ink); + } +#firewall > div > span:first-of-type > sub { + display: inline-block; + font-size: 85%; + font-weight: normal; + padding: 0.25em 0 0 0; + } +#firewall > div > span:first-of-type > sub:empty { + display: none; + } +#firewall > div > span:first-of-type ~ span { + flex-shrink: 0; + margin-left: 1px; + width: var(--popup-rule-cell-width); + } +#firewall > div > span:nth-of-type(2) { + display: none; + } +#firewall > div > span:nth-of-type(3), +#firewall > div > span:nth-of-type(4) { + color: var(--ink-2); + display: none; + font-family: monospace; + text-align: center; + } +#firewall > div.isDomain > span:first-of-type > span { + pointer-events: none; + } +#firewall > div.isDomain > span:first-of-type > span > span { + font-weight: 600; + pointer-events: auto; + } +#firewall > div.isDomain.hasSubdomains > span:first-of-type > span::before { + content: '\2026\A0'; + opacity: 0.6; + } +#firewall > div[data-des="*"] > span:nth-of-type(3), +#firewall > div.isSubdomain > span:nth-of-type(3), +#firewall > div.isSubdomain.isRootContext > span:nth-of-type(3), +#firewall.expanded > div:not(.expandException) > span:nth-of-type(3), +#firewall:not(.expanded) > div.expandException > span:nth-of-type(3), +#firewall:not(.expanded) > div.isDomain:not(.expandException) > span:nth-of-type(4), +#firewall.expanded > div.isDomain.expandException > span:nth-of-type(4), +#actionSelector > #dynaCounts { + display: inline-flex; + justify-content: space-between; + } +#firewall > div > span[data-acount]::before, +#firewall > div > span[data-bcount]::after, +#firewall > div > span[data-acount] > #actionSelector > #dynaCounts::before, +#firewall > div > span[data-acount] > #actionSelector > #dynaCounts::after { + content: ' '; + } +#firewall > div > span[data-acount]::before, +#firewall > div > span[data-acount] > #actionSelector > #dynaCounts::before { + padding-left: 0.1em; + } +#firewall > div > span[data-acount="1"]::before, +#firewall > div > span[data-acount="1"] > #actionSelector > #dynaCounts::before { + content: '+'; + } +#firewall > div > span[data-acount="2"]::before, +#firewall > div > span[data-acount="2"] > #actionSelector > #dynaCounts::before { + content: '++'; + } +#firewall > div > span[data-acount="3"]::before, +#firewall > div > span[data-acount="3"] > #actionSelector > #dynaCounts::before { + content: '+++'; + } +#firewall > div > span[data-bcount]::after, +#firewall > div > span[data-bcount] > #actionSelector > #dynaCounts::after { + padding-right: 0.1em; + } +#firewall > div > span[data-bcount="1"]::after, +#firewall > div > span[data-bcount="1"] > #actionSelector > #dynaCounts::after { + content: '\2212'; + } +#firewall > div > span[data-bcount="2"]::after, +#firewall > div > span[data-bcount="2"] > #actionSelector > #dynaCounts::after { + content: '\2212\2212'; + } +#firewall > div > span[data-bcount="3"]::after, +#firewall > div > span[data-bcount="3"] > #actionSelector > #dynaCounts::after { + content: '\2212\2212\2212'; + } + +body.advancedUser #firewall > div > span:first-of-type { + width: calc(100% - 2 * var(--popup-rule-cell-width)); + } +body.advancedUser #firewall > div > span:nth-of-type(2) { + display: inline-flex; + } +body.advancedUser #firewall > div:first-of-type ~ div[data-des="*"] { + display: flex; + } +body.advancedUser #firewall > div > span:first-of-type ~ span { + cursor: pointer; + } + +/** + Small coloured label at the left of a row + */ +#firewall > div.isRootContext > span:first-of-type::before, +#firewall > div.allowed > span:first-of-type::before, +#firewall > div.blocked > span:first-of-type::before, +#firewall:not(.expanded) > div.isDomain.totalAllowed:not(.expandException) > span:first-of-type::before, +#firewall:not(.expanded) > div.isDomain.totalBlocked:not(.expandException) > span:first-of-type::before, +#firewall.expanded > div.isDomain.totalAllowed.expandException > span:first-of-type::before, +#firewall.expanded > div.isDomain.totalBlocked.expandException > span:first-of-type::before { + box-sizing: border-box; + content: ''; + display: inline-block; + filter: var(--popup-cell-label-filter); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 7px; + } +#firewall > div.isRootContext > span:first-of-type::before { + background: var(--ink-3); + width: 14px !important; + } +#firewall > div.allowed > span:first-of-type::before, +#firewall > div.isDomain.totalAllowed > span:first-of-type::before { + background: var(--popup-cell-allow-own-surface); + } +#firewall > div.blocked > span:first-of-type::before, +#firewall > div.isDomain.totalBlocked > span:first-of-type::before { + background: var(--popup-cell-block-own-surface); + } +#firewall > div.allowed.blocked > span:first-of-type::before, +#firewall > div.isDomain.totalAllowed.totalBlocked > span:first-of-type::before { + background: var(--popup-cell-label-mixed-surface); + } +/* Rule cells */ +body.advancedUser #firewall > div > span.allowRule, +#actionSelector > #dynaAllow { + background: var(--popup-cell-allow-surface); + } +body.advancedUser #firewall > div > span.blockRule, +#actionSelector > #dynaBlock { + background: var(--popup-cell-block-surface); + } +body.advancedUser #firewall > div > span.noopRule, +#actionSelector > #dynaNoop { + background: var(--popup-cell-noop-surface); + } +body.advancedUser #firewall > div > span.ownRule, +#firewall > div > span.ownRule { + color: var(--surface-1); + } +body.advancedUser #firewall > div > span.allowRule.ownRule, +:root:not(.mobile) #actionSelector > #dynaAllow:hover { + background: var(--popup-cell-allow-own-surface); + } +body.advancedUser #firewall > div > span.blockRule.ownRule, +:root:not(.mobile) #actionSelector > #dynaBlock:hover { + background: var(--popup-cell-block-own-surface); + } +body.advancedUser #firewall > div > span.noopRule.ownRule, +:root:not(.mobile) #actionSelector > #dynaNoop:hover { + background: var(--popup-cell-noop-own-surface); + } + +#actionSelector { + box-sizing: border-box; + display: flex; + height: 100%; + justify-items: stretch; + left: 0; + overflow: hidden; + position: absolute; + top: 0; + width: 100%; + z-index: 1; + } +#actionSelector > span { + display: inline-block; + flex-grow: 1; + } +#actionSelector > #dynaAllow { + display: none; + } +body.godMode #actionSelector > #dynaAllow { + display: inline-block; + } +#actionSelector > #dynaNoop { + } +#actionSelector > #dynaBlock { + } +#actionSelector > #dynaCounts { + background-color: transparent; + height: 100%; + left: 0; + pointer-events: none; + position: absolute; + top: 0; + width: 100%; + } + +/* configurable UI elements */ +:root:not(.mobile) .toolRibbon .caption, +:root.mobile body.no-tooltips .toolRibbon .caption, +:root.mobile body[data-ui~="-captions"] .toolRibbon .caption { + display: none; + } +:root.mobile .toolRibbon .caption, +:root:not(.mobile) body[data-ui~="+captions"] .toolRibbon .caption { + display: inherit; + } +:root:not(.mobile) .toolRibbon .tool, +:root.mobile body.no-tooltips .toolRibbon .tool, +:root.mobile body[data-ui~="-captions"] .toolRibbon .tool { + padding: var(--popup-gap) var(--popup-gap-thin); + } +:root.mobile #no-popups, +:root body[data-ui~="-no-popups"] #no-popups { + display: none; + } +:root:not(.mobile) #no-popups, +:root body[data-ui~="+no-popups"] #no-popups { + display: flex; + } +:root.mobile [href="logger-ui.html#_"], +:root body[data-ui~="-logger"] [href="logger-ui.html#_"] { + display: none; + } +:root:not(.mobile) [href="logger-ui.html#_"], +:root body[data-ui~="+logger"] [href="logger-ui.html#_"] { + display: flex; + } +body:not([data-more*="a"]) [data-more="a"], +body:not([data-more*="b"]) [data-more="b"], +body:not([data-more*="c"]) [data-more="c"], +body:not([data-more*="d"]) [data-more="d"], +body:not([data-more*="f"]) [data-more="f"] { + height: 0; + margin-bottom: 0 !important; + margin-top: 0 !important; + overflow-y: hidden; + visibility: hidden; + } +body[data-more*="d"] hr[data-more="a"] { + display: none; + } +body[data-more*="c"] hr[data-more="f"] { + display: none; + } +body[data-more*="c"]:not([data-more*="f"]) hr[data-more="g"] { + display: none; + } +body:not([data-more*="e"]) [data-more="e"] { + display: none; + } + +:root #firewall-vspacer { + display: none; + height: calc(6 * var(--popup-gap)); + } + +/* popup-in-tab mode, useful for screenshots */ +:root.desktop.intab body { + overflow: auto; + } +:root.desktop.intab #firewall { + max-height: none; + } + +/* horizontally-constrained viewport */ +:root.portrait:not(.desktop) body { + overflow-y: auto; + width: 100%; + } +:root.portrait #panes { + flex-direction: column; + } +:root.portrait #main { + max-width: unset; + } +:root.portrait #firewall { + max-height: unset; + max-width: unset; + min-width: unset; + overflow-y: hidden; + } +:root.portrait body[data-more*="e"] #firewall-vspacer { + display: block; + } + +/* touch-driven devices */ +:root.mobile #firewall { + line-height: 20px; + } + +/* mouse-driven devices */ +:root.desktop { + display: flex; + justify-content: flex-end; + } +:root.desktop body { + --popup-gap: calc(var(--font-size) * 0.875); + } +:root.desktop body:not(.off) #switch:hover { + fill: rgb(var(--popup-power-ink-rgb) / 90%); + } +:root.desktop body.off #switch:hover { + stroke: var(--popup-power-ink); + } +:root.desktop .rulesetTools [id]:hover { + background-color: var(--popup-ruleset-tool-surface-hover); + } +:root.desktop .rulesetTools [id]:hover > svg { + fill: var(--ink-2); + } +:root.desktop #firewall { + direction: rtl; + line-height: 1.4; + } +:root.desktop .tool:hover { + background-color: var(--popup-toolbar-surface-hover); + } +:root.desktop #moreOrLess > span:hover { + background-color: var(--surface-2); + /* background-color: var(--popup-toolbar-surface-hover); */ + } diff --git a/src/css/popup.css b/src/css/popup.css deleted file mode 100644 index ca61207dd08ab..0000000000000 --- a/src/css/popup.css +++ /dev/null @@ -1,506 +0,0 @@ -body { - background-color: white; - border: 0; - float: left; - margin: 0; - opacity: 1; - overflow: hidden; - padding: 0; - white-space: nowrap; - } -body.fullsize { - overflow: auto; - } -/** - https://github.com/gorhill/uBlock/issues/83 - .portrait = portrait mode = width is constrained = optimize layout accordingly. - */ -body.portrait { - width: 100%; - } - -h2 { - background-color: #eee; - border: 0; - color: #666; - font-size: 14px; - font-weight: normal; - margin: 1em 0 0.5em 0; - padding: 2px 0; - text-align: center; - } -h2:nth-of-type(1) { - margin-top: 0; - } -a { - color: inherit; - text-decoration: none; - } -:focus { - outline: 0; - } -#gotoPrefs { - background-color: #444; - border: 0; - color: #bbb; - cursor: pointer; - display: block; - font-size: 12px; - line-height: 12px; - margin: 0; - padding: 3px 0; - position: relative; - text-align: center; - } -#version { - font-size: 10px; - font-weight: normal; - } -#gotoPrefs > span:nth-of-type(3) { - opacity: 0.5; - position: absolute; - } -body[dir="ltr"] #gotoPrefs > span:nth-of-type(3) { - left: 3px; - } -body[dir="rtl"] #gotoPrefs > span:nth-of-type(3) { - right: 3px; - } -body[dir="ltr"] #panes { - direction: rtl; - } -body[dir="rtl"] #panes { - direction: ltr; - } -body, #panes { - text-align: right; /* this helps the popup render better at "intermediate" widths */ - } - -#panes > div { - display: inline-block; - position: relative; - vertical-align: top; - } -body.portrait #panes > div { - display: block; - width: 100%; - } -body[dir="ltr"] #panes > div { - direction: ltr; - } -body[dir="rtl"] #panes > div { - direction: rtl; - } -#panes > div:nth-of-type(2) { - overflow-y: auto; - overflow-x: hidden; - width: 320px; - } -/** - Scroll bar to the left. - */ -body[dir="ltr"] #panes > div:nth-of-type(2) { - direction: rtl; - margin-right: 1px; - } -/** - Scroll bar to the right. - Firefox bug: when popup is rendered inside hamburger menu panel, Firefox is - unable to render the scroll bar to the left. - Maybe ? - */ -body[dir="rtl"] #panes > div:nth-of-type(2), -body.portrait[dir="ltr"] #panes > div:nth-of-type(2) { - direction: ltr; - margin-left: 1px; - } -#panes:not(.dfEnabled) > div:nth-of-type(2) { - display: none; - } -#panes > div:nth-of-type(1) { - min-width: 160px; - padding: 0; - } -p { - text-align: center; - white-space: nowrap; - } -#switch { - margin: 8px 0; - } -#switch .fa { - color: #0046ff; - cursor: pointer; - font-size: 96px; - margin: 0; - } -#switch .fa:hover { - opacity: 0.9; - } -body.off #switch .fa { - color: #ccc; - } -#page-blocked { - font-size: 20px; - } -.statName { - color: #888; - font-size: small; - margin: 1em 0.2em 0.2em 0.2em; - text-align: center; - } -.statValue { - font-size: 14px; - margin: 0; - text-align: center; - } -.tool { - color: #aaa; - cursor: pointer; - display: none; - font-size: 14px; - unicode-bidi: embed; - } -.tool.enabled { - display: inline; - } -.tool:hover { - color: #444; - } -#extraTools { - background-color: #eee; - border: 0; - color: #aaa; - font-weight: normal; - margin: 1em 0 0 0; - padding: 4px 0 2px 0; - text-align: center; - } -#extraTools > span { - cursor: pointer; - font-size: 18px; - margin: 0 0.45em; - position: relative; - } -#extraTools > span > span.badge { - color: #222; - bottom: -1px; - font: 10.5px sans-serif; - position: absolute; - } -body[dir="ltr"] #extraTools > span > span.badge { - left: 100%; - } -body[dir="rtl"] #extraTools > span > span.badge { - right: 100%; - } -#extraTools > span.on > span:last-of-type { - color: #e00; - font-size: 20px; - left: 0; - position: absolute; - text-align: center; - top: 0; - width: 100%; - } -#extraTools > span.on > span:last-of-type:after { - content: '\2715'; - } -#extraTools > span:hover { - color: #444; - } - -body.advancedUser h2 { - cursor: pointer; - } -body.advancedUser h2:before { - color: #aaa; - content: '+ '; - } -body.advancedUser #panes.dfEnabled h2:before { - content: '\2212 '; - } - -#refresh { - background-color: #ffe; - border: 1px solid #ddc; - border-radius: 4px; - color: #888; - cursor: pointer; - display: none; - font-size: 3.5em; - left: 4px; - line-height: 1; - padding: 4px 8px; - position: absolute; - right: 4px; - text-align: center; - } -body.dirty #refresh { - display: block; - } -body.dirty #refresh:hover { - color: black; - } - -#tooltip { - background-color: #ffffee; - border: 1px solid gray; - border-radius: 3px; - box-shadow: 1px 1px 3px gray; - box-sizing: border-box; - color: black; - cursor: pointer; - direction: ltr; - font: 12px sans-serif; - left: 5%; - line-height: 130%; - margin: 0.5em 0; - opacity: 0; - padding: 4px 6px; - pointer-events: none; - position: absolute; - text-align: center; - visibility: hidden; - white-space: pre-line; - width: 90%; - z-index: 100; - } -body[dir="rtl"] #tooltip { - direction: rtl; - } -#tooltip.show { - transition: opacity 0.15s 0.5s; - -webkit-transition: opacity 0.15s 0.5s; - visibility: visible; - opacity: 1; - } - -#firewallContainer { - border: 0; - font-size: 13px; - margin: 0; - padding: 0; - text-align: right; - } -#firewallContainer > div { - background-color: #e6e6e6; - border: 0; - border-bottom: 1px solid white; - direction: ltr; - margin: 0; - padding: 0; - } -#firewallContainer > div:hover { - background-color: #f0f0f0; - } -#firewallContainer.minimized > div.isSubDomain { - display: none; - } -#firewallContainer > div > span { - background-color: transparent; - border: none; - box-sizing: border-box; - -moz-box-sizing: border-box; - color: #000; - display: inline-block; - height: 22px; - line-height: 22px; - overflow: hidden; - position: relative; - vertical-align: middle; - } -#firewallContainer > div:nth-of-type(1) > span { - height: 18px; - line-height: 20px; - } -#firewallContainer > div:nth-of-type(1) > span:nth-of-type(1) { - cursor: pointer; - } -#firewallContainer > div > span:nth-of-type(1) { - border-right: 1px solid white; - padding-right: 2px; - position: relative; - text-overflow: ellipsis; - width: 70%; - } -#firewallContainer > div > span:nth-of-type(2), -#firewallContainer > div > span:nth-of-type(3), -#firewallContainer > div > span:nth-of-type(4) { - cursor: pointer; - width: 15%; - } -#firewallContainer > div > span:nth-of-type(3), -#firewallContainer > div > span:nth-of-type(4) { - border-left: 1px solid white; - color: #444; - font-family: monospace; - font-size: 11.5px; - text-align: center; - } -body.portrait #firewallContainer > div > span:nth-of-type(3), -body.portrait #firewallContainer > div > span:nth-of-type(4) { - font-family: monospace; - font-size: 9px; - } -#firewallContainer > div > span:nth-of-type(4) { - display: none; - } -#firewallContainer > div.isDomain > span:nth-of-type(1) { - font-weight: bold; - } -#firewallContainer > div:nth-of-type(1) > span:nth-of-type(1):before { - color: #aaa; - content: '\2012'; - padding-right: 0.25em; - } -#firewallContainer.minimized > div:nth-of-type(1) > span:nth-of-type(1):before { - content: '+'; - } -#firewallContainer.minimized > div.isDomain > span:nth-of-type(3) { - display: none; - } -#firewallContainer.minimized > div.isDomain > span:nth-of-type(4) { - display: inline-block; - } - -/** - Small coloured label at the left of a row - */ -#firewallContainer > div.allowed > span:nth-of-type(1):before, -#firewallContainer > div.blocked > span:nth-of-type(1):before, -#firewallContainer.minimized > div.isDomain.totalAllowed > span:nth-of-type(1):before, -#firewallContainer.minimized > div.isDomain.totalBlocked > span:nth-of-type(1):before { - box-sizing: border-box; - content: ''; - display: inline-block; - height: 100%; - left: 0; - opacity: 0.4; - position: absolute; - width: 7px; - } -/** - Source for color-blind color scheme from https://github.com/WyohKnott: - https://github.com/chrisaljoudi/uBlock/issues/467#issuecomment-95177219 - */ -#firewallContainer > div.allowed > span:nth-of-type(1):before, -#firewallContainer.minimized > div.isDomain.totalAllowed > span:nth-of-type(1):before { - background-color: rgb(0, 160, 0); - } -#firewallContainer.colorBlind > div.allowed > span:nth-of-type(1):before, -#firewallContainer.colorBlind.minimized > div.isDomain.totalAllowed > span:nth-of-type(1):before { - background-color: rgb(255, 194, 57); - } -#firewallContainer > div.blocked > span:nth-of-type(1):before, -#firewallContainer.minimized > div.isDomain.totalBlocked > span:nth-of-type(1):before { - background-color: rgb(192, 0, 0); - } -#firewallContainer.colorBlind > div.blocked > span:nth-of-type(1):before, -#firewallContainer.colorBlind.minimized > div.isDomain.totalBlocked > span:nth-of-type(1):before { - background-color: rgb(0, 19, 110); - } -#firewallContainer > div.allowed.blocked > span:nth-of-type(1):before, -#firewallContainer.minimized > div.isDomain.totalAllowed.totalBlocked > span:nth-of-type(1):before { - background-color: rgb(192, 160, 0); - } -/* Rule cells */ -#firewallContainer > div > span.aRule { - background-color: rgba(0, 160, 0, 0.3); - } -#firewallContainer.colorBlind > div > span.aRule { - background-color: rgba(255, 194, 57, 0.4); - } -#firewallContainer > div > span.bRule { - background-color: rgba(192, 0, 0, 0.3); - } -#firewallContainer.colorBlind > div > span.bRule { - background-color: rgba(0, 19, 110, 0.4); - } -#firewallContainer > div > span.nRule { - background-color: rgba(108, 108, 108, 0.3); - } -#firewallContainer.colorBlind > div > span.nRule { - background-color: rgba(96, 96, 96, 0.4); - } -#firewallContainer > div > span.ownRule { - color: white; - } -#firewallContainer > div > span.aRule.ownRule { - background-color: rgba(0, 160, 0, 1); - } -#firewallContainer.colorBlind > div > span.aRule.ownRule { - background-color: rgba(255, 194, 57, 1); - } -#firewallContainer > div > span.bRule.ownRule { - background-color: rgba(192, 0, 0, 1); - } -#firewallContainer.colorBlind > div > span.bRule.ownRule { - background-color: rgba(0, 19, 110, 1); - } -#firewallContainer > div > span.nRule.ownRule { - background-color: rgba(108, 108, 108, 1); - } - -#actionSelector { - bottom: 0; - left: 0; - position: absolute; - right: 0; - top: 0; - } -#actionSelector > span { - display: inline-block; - height: 22px; - opacity: 0.2; - width: 33.33%; - } -#actionSelector > span:hover { - opacity: 0.75; - } -#actionSelector > span:nth-of-type(1) { - background-color: rgb(0, 160, 0); - } -#actionSelector.colorBlind > span:nth-of-type(1) { - background-color: rgb(255, 194, 57); - } -#actionSelector > span:nth-of-type(2) { - background-color: rgb(108, 108, 108); - } -#actionSelector > span:nth-of-type(3) { - background-color: rgb(192, 0, 0); - } -#actionSelector.colorBlind > span:nth-of-type(3) { - background-color: rgb(0, 19, 110); - } - -#rulesetTools { - background-color: transparent; - border: 0; - color: #888; - display: none; - left: 4px; - padding: 0; - position: fixed; - top: 4px; - } -#rulesetTools > span { - background-color: #ffe; - border: 1px solid #ddc; - border-radius: 4px; - cursor: pointer; - display: inline-block; - font-size: 1.7em; - line-height: 1.0; - margin: 0; - margin-right: 0.1em; - padding: 0.2em 0.4em; - text-align: center; - width: 1em; - } -#firewallContainer.dirty ~ #rulesetTools { - display: block; - } -#firewallContainer.dirty ~ #rulesetTools > span:hover { - color: black; - } diff --git a/src/css/settings.css b/src/css/settings.css index 308334f8bbca8..61a8c0ec73ab8 100644 --- a/src/css/settings.css +++ b/src/css/settings.css @@ -1,29 +1,74 @@ -ul { - padding-left: 1em; +body { + margin-bottom: 6rem; } -ul#userSettings { - padding-left: 0; + +.synopsis { + color: var(--ink-0); + font-size: var(--font-size-smaller); + opacity: var(--medium-em); } -li { - margin-top: 0.25em; + +/* surface/ink */ +#themeMood { + align-items: stretch; + align-self: stretch; + display: inline-flex; + justify-content: stretch; + user-select: none; } -ul#userSettings, -ul#userSettings ul { - list-style-type: none; +#themeMood > span { + border: 1px solid var(--ink-1); + color: var(--ink-1); + display: inline-flex; + background-color: var(--surface-1); + display: inline-block; + padding: 0 0.5em; + text-align: center; + user-select: none; } -ul#userSettings .subgroup { - margin-top: 1em; + +/* primary color */ +#themePrimary { + align-items: stretch; + align-self: stretch; + display: inline-flex; + justify-content: stretch; + position: relative; } -ul#userSettings .subgroup > span { - font-size: larger; - font-weight: bold; +#themePrimary > span { + background-color: rgb(var(--primary-50)); + display: inline-flex; + width: 2em; } -#localData > ul > li { - margin-top: 1em; + +[href="advanced-settings.html"] { + display: none; } -#localData > ul > li > ul > li:nth-of-type(2) { - font-family: monospace; +body.advancedUser [href="advanced-settings.html"] { + display: inline-flex; } -#experimental-enabled { - margin-top: 1em; + +#localData > div { + margin-bottom: var(--default-gap-small); + } +#localData > div:last-of-type { + align-items: flex-start; + display: flex; + flex-direction: column; + } +#localData > div:last-of-type > button { + margin-bottom: var(--default-gap-small); + min-width: 280px; + } + +/* Mobile devices */ + +:root.mobile #localData { + max-width: 100vw; + } +:root.mobile #localData > div:last-of-type { + align-items: stretch; + } +:root.mobile #localData > div:last-of-type > button { + min-width: unset; } diff --git a/src/css/support.css b/src/css/support.css new file mode 100644 index 0000000000000..0afd7407a803e --- /dev/null +++ b/src/css/support.css @@ -0,0 +1,110 @@ +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + +body { + margin-bottom: 6rem; + } + +.body > div { + max-width: 800px; + } +h3 { + color: var(--fieldset-header-ink); + margin-bottom: 0; + } +.supportEntry { + display: flex; + margin-block: 1em; + } +:root.mobile .supportEntry { + flex-direction: column; + } +.supportEntry > * { + min-width: 6em; + } +.supportEntry > div:first-of-type { + flex-grow: 1; + } +:root:not(.mobile) .supportEntry > div:first-of-type { + margin-inline-end: 2em; + } +.supportEntry h3 { + margin: 1em 0; + } + +.e > .supportEntry { + flex-direction: column; + } +.e > .supportEntry > div:not(:first-of-type) { + margin-top: 1em; + } +.e > .supportEntry select { + min-width: 50%; + max-width: calc(100% - 1em); + } +body:not(.filterIssue) .body > div.e { + display: none; +} +body.filterIssue .body > div:not(.e) { + display: none; +} +body.filterIssue #moreButton { + display: none; +} + +body[data-should-update-lists]:not(.updated) .e .createEntry { + opacity: 0.25; + pointer-events: none; +} + +body:not([data-should-update-lists]) .shouldUpdate { + display: none; + } +body.updating { + pointer-events: none; + } +body.updating button { + filter: grayscale(1); + opacity: 0.5; + } +body.updated .shouldUpdate button { + display: none; + } +body.updating .shouldUpdate button .fa-icon svg { + animation: spin 1s linear infinite; + transform-origin: 50%; + } +body .shouldUpdate .updated { + align-self: center; + } +body:not(.updated) .shouldUpdate .updated { + display: none; + } + +button { + align-self: center; + } +span[data-url] { + color: var(--link-ink); + cursor: pointer; + } + +#showSupportInfo { + cursor: pointer; + } + +body.redacted #redactButton { + display: none; + } +#unredactButton { + display: none; + } +body.redacted #unredactButton { + display: inline; + } + +.cm-string.cm-property { + color: black; + } diff --git a/src/css/themes/default.css b/src/css/themes/default.css new file mode 100644 index 0000000000000..8a6378aa62124 --- /dev/null +++ b/src/css/themes/default.css @@ -0,0 +1,534 @@ +/** + + References: + https://protocol.mozilla.org/ + https://material.io/ + + Color names from: + https://protocol.mozilla.org/docs/fundamentals/color.html + + Tools: + Lightness validator: https://www.hsluv.org/ + Contrast validator: https://bernaferrari.github.io/color-studio/#/ +*/ +:root { + --blue-5: 170 242 255; + --blue-10: 128 235 255; + --blue-20: 0 221 255; + --blue-30: 0 179 244; + --blue-40: 0 144 237; + --blue-50: 0 96 223; + --blue-60: 2 80 187; + --blue-70: 5 64 150; + --blue-80: 7 48 114; + --blue-90: 9 32 77; + --dark-gray-10: 82 82 94; + --dark-gray-20: 74 74 85; + --dark-gray-30: 66 65 77; + --dark-gray-40: 58 57 68; + --dark-gray-50: 50 49 60; + --dark-gray-60: 43 42 51; + --dark-gray-70: 35 34 43; + --dark-gray-80: 28 27 34; + --dark-gray-90: 21 20 26; + --green-30: 136 255 209; + --green-40: 84 255 189; + --green-50: 63 225 176; + --green-60: 42 195 162; + --green-65: 21 165 149; + --green-70: 0 135 135; + --green-80: 0 94 94; + --ink-10: 57 52 115; + --ink-80: 32 18 58; + --light-gray-10: 249 249 251; + --light-gray-20: 240 240 244; + --light-gray-30: 224 224 230; + --light-gray-40: 207 207 216; + --light-gray-50: 191 191 201; + --light-gray-60: 175 175 186; + --light-gray-70: 159 159 173; + --light-gray-80: 143 143 158; + --light-gray-90: 128 128 143; + --orange-5: 255 244 222; + --orange-10: 255 213 178; + --orange-20: 255 181 135; + --orange-30: 255 162 102; + --orange-40: 255 138 80; + --orange-50: 255 113 57; + --orange-60: 226 89 32; + --orange-70: 204 61 0; + --orange-80: 158 40 11; + --orange-90: 124 21 4; + --purple-5: 247 226 255; + --purple-10: 246 184 255; + --purple-20: 246 143 255; + --purple-30: 247 112 255; + --purple-40: 215 76 240; + --purple-50: 184 51 225; + --purple-60: 149 43 185; + --purple-70: 114 34 145; + --purple-80: 78 26 105; + --purple-90: 43 17 65; + --red-20: 255 154 162; + --red-30: 255 132 139; + --red-40: 255 106 117; + --red-50: 255 79 94; + --red-60: 226 40 80; + --red-70: 197 0 66; + --violet-5: 231 223 255; + --violet-10: 217 191 255; + --violet-20: 203 158 255; + --violet-30: 198 137 255; + --violet-40: 171 113 255; + --violet-50: 144 89 255; + --violet-60: 117 66 229; + --violet-70: 89 42 203; + --violet-80: 69 39 141; + --violet-90: 50 28 100; + --yellow-5: 255 255 204; + --yellow-10: 255 255 152; + --yellow-20: 255 234 128; + --yellow-30: 255 213 103; + --yellow-40: 255 189 79; + --yellow-50: 255 164 54; + --yellow-60: 226 127 46; + --yellow-70: 196 90 39; + --yellow-80: 167 52 31; + --yellow-90: 150 14 24; + + /* + * Reference gray: -light-gray-90, then calibrated with hsluv.org, where + * the number is Luv. + * + * */ + --gray-5: 16 16 22; + --gray-10: 27 27 35; + --gray-15: 37 37 47; + --gray-20: 47 47 59; + --gray-25: 58 58 72; + --gray-30: 69 69 85; + --gray-35: 81 81 98; + --gray-40: 93 93 110; + --gray-45: 105 105 121; + --gray-50: 118 118 133; + --gray-55: 131 131 145; + --gray-60: 144 144 156; + --gray-65: 157 157 168; + --gray-70: 170 170 180; + --gray-75: 184 184 192; + --gray-80: 198 198 204; + --gray-85: 212 212 217; + --gray-90: 226 226 229; + --gray-95: 240 240 242; +} + +/* + * Font + * + * */ +:root { + --font-size: 14px; + --font-size-smaller: calc(var(--font-size) - 1px); + --font-size-xsmall: calc(var(--font-size) - 3px); + --font-size-larger: 15px; + --font-family: Inter, sans-serif; + --monospace-size: 12px; +} + +:root.mobile { + --font-size: 16px; + --font-size-smaller: 14px; + --monospace-size: 13px; +} + +/* + * Default color theme + * + * Tool: hsluv.org + * + * */ +:root /* h255 */ { + --primary-5: 3 16 40; /* S:90 Luv:5 */ + --primary-10: 5 27 59; /* S:90 Luv:10 */ + --primary-20: 14 47 95; /* S:90 Luv:20 */ + --primary-30: 24 69 134; /* S:90 Luv:30 */ + --primary-40: 34 93 176; /* S:90 Luv:40 */ + --primary-50: 45 117 219; /* S:90 Luv:50 */ + --primary-60: 86 143 244; /* S:90 Luv:60 */ + --primary-70: 137 170 247; /* S:90 Luv:70 */ + --primary-80: 179 198 250; /* S:90 Luv:80 */ + --primary-90: 218 226 252; /* S:90 Luv:90 */ + --primary-95: 236 240 254; /* S:90 Luv:95 */ + } + +/* + * Default dark theme starts here + * + * https://github.com/uBlockOrigin/uBlock-issues/issues/1027#issuecomment-629641072 + * Assign a default background color if dark mode is enabled -- hopefully + * this will avoid flashes of white background until the document's own CSS + * overrides the default color value below. + * + * */ +@media (prefers-color-scheme: light) { + :root { + --surface-0-rgb: 255 255 255; + --surface-1: rgb(var(--gray-95)); + --surface-2: rgb(var(--gray-90)); + --surface-3: rgb(var(--gray-80)); + } +} +@media (prefers-color-scheme: dark) { + :root { + --surface-0-rgb: 0 0 0; + --surface-1: rgb(var(--gray-10)); + --surface-2: rgb(var(--gray-20)); + --surface-3: rgb(var(--gray-30)); + } +} + +:root.light { + --surface-0-rgb: 255 255 255; + --surface-1: rgb(var(--gray-95)); + --surface-2: rgb(var(--gray-90)); + --surface-3: rgb(var(--gray-80)); +} + +:root.dark { + --surface-0-rgb: 0 0 0; + --surface-1: rgb(var(--gray-10)); + --surface-2: rgb(var(--gray-20)); + --surface-3: rgb(var(--gray-30)); +} + +/* + * Components + * + * */ +:root { + --font-size: 14px; + + --ubo-red: #800000; + + --elevation-up-surface: black; + --elevation-up1-opacity: 4%; + --elevation-up2-opacity: 8%; + --elevation-down-surface: white; + --elevation-down1-opacity: 16%; + --elevation-down2-opacity: 32%; + + /* https://material.io/design/color/text-legibility.html#text-backgrounds */ + --ink-rgb: var(--ink-80); + --ink-0: black; + --ink-100: white; + + --border-1: rgb(var(--gray-75)); + --border-2: rgb(var(--gray-70)); + --border-3: rgb(var(--gray-65)); + --border-4: rgb(var(--gray-60)); + + --accent-ink-3: var(--ink-1); + --accent-surface-1: rgb(var(--primary-40)); + + --link-ink: rgb(var(--primary-40)); + --link-hover-ink: rgb(var(--primary-30)); + + /* buttons */ + --button-surface-rgb: var(--gray-80); + + --dashboard-tab-active-ink-rgb: var(--primary-40); + --dashboard-tab-focus-surface-rgb: var(--primary-90); + --dashboard-highlight-surface-rgb: var(--primary-90); + + --dashboard-happy-green: rgb(var(--green-65)); + + /* popup panel */ + --popup-cell-cname-ink: #0054d7; /* h260 S:100 Luv:40 */; + --popup-cell-label-mixed-surface: #c29100; /* TODO: fix */ + --popup-icon-x-ink: rgb(var(--red-60)); + --popup-power-ink-rgb: var(--primary-50); + + /* horizontal line separator */ + --hr-ink: var(--surface-2); + + /* cloud widget */ + --cloud-total-used-surface: rgb(var(--violet-60) / 25%); + --cloud-used-surface: rgb(var(--violet-60)); + + /* misc */ + --error-surface: #c00004; /* h:12 S:100 Luv:40 */ + + /* codemirror */ + --cm-active-line: rgb(var(--gray-90)); + --cm-cursor: var(--ink-0); + --cm-foldmarker-ink: rgb(var(--blue-40)); + --cm-gutter-border: var(--surface-1); + --cm-gutter-ink: var(--ink-3); + --cm-gutter-surface: var(--surface-2); + --cm-matchingbracket: rgb(var(--green-30)); + --cm-merge-copy-ink: rgb(var(--blue-50)); + --cm-merge-chunk-border: rgb(var(--surface-0-rgb) / 40%); + --cm-merge-chunk-surface: rgb(var(--surface-0-rgb) / 40%); + --cm-negative: #e32f00; /* h:15 S:100 Luv:50 */ + --cm-positive: #008a21; /* h:130 S:100 Luv:50 */ + --cm-selection-surface: rgb(var(--gray-80)); + --cm-selection-focused-surface: rgb(var(--primary-80)); + --cm-searching-ink: black; + --cm-searching-surface: #fee300cc /* h75 S:100 Luv:90 a:80% */; + --cm-search-match-surface: rgb(var(--yellow-40) / 50%); + + /* syntax highlight: static filtering */ + --sf-comment-ink: var(--ink-3); + --sf-def-ink: #3c3aff; /* h:266 S:100 Luv:40 */ + --sf-directive-ink: var(--ink-1); + --sf-error-ink: #ff8981; /* h15 S:100 Luv:70 */ + --sf-error-surface: #ff898133; /* h15 S:100 Luv:70 @ 20% */ + --sf-keyword-ink: #9b00ca; /* h:290 S:100 Luv:40 */ + --sf-notice-ink: var(--ink-4); + --sf-readonly-ink: var(--ink-3); + --sf-tag-ink: #006e2e /* h:135 S:100 Luv:40 */; + --sf-unicode-ink: var(--ink-1); + --sf-value-ink: #974900 /* h:30 S:100 Luv:40 */; + --sf-variable-ink: var(--ink-1); + --sf-warning-ink: #e49d00; /* h:50 S:100 Luv:70 */ + --sf-warning-surface: #e49d0033; /* h:50 S:100 Luv:70 @ 20% */ + + /* syntax highlight: dynamic filtering */ + --df-allow-ink: var(--cm-positive); + --df-block-ink: var(--cm-negative); + --df-noop-ink: rgb(var(--dark-gray-10)); + + /* logger */ + --logger-modified-surface: #0000c010; + --logger-modified-em-surface: #0000c028; + --logger-redirected-surface: rgb(var(--yellow-5) / 50%); + --logger-scriptlet-surface: rgb(var(--yellow-30) / 50%); +} + +/* https://material.io/design/color/dark-theme.html */ +:root.dark { + --elevation-down-surface: black; + --elevation-down1-opacity: 16%; + --elevation-down2-opacity: 32%; + --elevation-up-surface: white; + --elevation-up1-opacity: 12%; + --elevation-up2-opacity: 24%; + + --ink-rgb: var(--gray-95); + --ink-0: white; + --ink-100: black; + + --border-1: rgb(var(--gray-35)); + --border-2: rgb(var(--gray-40)); + --border-3: rgb(var(--gray-45)); + --border-4: rgb(var(--gray-50)); + + --accent-surface-1: rgb(var(--primary-70)); + + --link-ink: rgb(var(--primary-70)); + --link-hover-ink: rgb(var(--primary-80)); + + /* buttons */ + --button-surface-rgb: var(--gray-30); + + --dashboard-tab-active-ink-rgb: var(--primary-70); + --dashboard-tab-focus-surface-rgb: var(--primary-20); + --dashboard-highlight-surface-rgb: var(--primary-20); + + /* popup panel */ + --popup-cell-cname-ink: #93a6ff; /* h260 S:100 Luv:70 */; + --popup-cell-label-mixed-surface: hsla(45, 100%, 38%, 1); /* TODO: fix */ + --popup-icon-x-ink: rgb(var(--red-50)); + --popup-power-ink-rgb: var(--primary-60); + + /* cloud widget */ + --cloud-total-used-surface: rgb(var(--violet-20) / 25%); + --cloud-used-surface: rgb(var(--violet-20)); + + /* misc */ + --error-surface: #ff5354; /* h:12 S:100 Luv:60 */ + + /* codemirror */ + --cm-active-line: rgb(var(--gray-20)); + --cm-merge-copy-ink: rgb(var(--blue-30)); + --cm-foldmarker-ink: rgb(var(--blue-20)); + --cm-matchingbracket: rgb(var(--green-30) / 50%); + --cm-negative: #ff8982; /* h:15 S:100 Luv:70 */ + --cm-positive: #00c634; /* h:130 S:100 Luv:70 */ + --cm-selection-surface: rgb(var(--gray-40)); + --cm-selection-focused-surface: rgb(var(--primary-40)); + --cm-searching-ink: black; + --cm-searching-surface: #fee300cc /* h75 S:100 Luv:90 a:80% */; + + /* syntax highlight: static filtering */ + --sf-comment-ink: var(--ink-3); + --sf-def-ink: #a2a2ff; /* h:266 S:100 Luv:70 */ + --sf-error-ink: #ff8981; /* h15 S:100 Luv:70 */ + --sf-error-surface: #ff898166; /* h15 S:100 Luv:70 @ 40% */ + --sf-keyword-ink: #d78dff; /* h:290 S:100 Luv:70 */ + --sf-tag-ink: #00c559 /* h:135 S:100 Luv:70 */; + --sf-value-ink: #ff8d48 /* h:30 S:100 Luv:70 */; + --sf-variable-ink: var(--ink-1); + --sf-warning-ink: #e49d00; /* h:50 S:100 Luv:70 */ + --sf-warning-surface: #e49d0066; /* h:50 S:100 Luv:50 @ 40% */ + + /* syntax highlight: dynamic filtering */ + --df-noop-ink: var(--ink-3); + + /* logger */ + --logger-modified-surface: #663efd60; + --logger-redirected-surface: rgb(var(--yellow-5) / 40%); + --logger-scriptlet-surface: rgb(var(--yellow-30) / 40%); +} + +:root.dark { + color-scheme: dark light; +} + +/* + * Shared declarations + * */ +:root { + --high-em: 87%; + --medium-em: 60%; + --low-em: 38%; + + --surface-0: rgb(var(--surface-0-rgb)); + + --ink-1: rgb(var(--ink-rgb)); + --ink-2: rgb(var(--ink-rgb) / var(--high-em)); + --ink-3: rgb(var(--ink-rgb) / var(--medium-em)); + --ink-4: rgb(var(--ink-rgb) / var(--low-em)); + + --accent-ink-1: var(--surface-0); + --accent-ink-3: var(--ink-1); + + --subtil-ink: var(--accent-surface-1); + + --fieldset-header-surface: transparent; + --fieldset-header-ink: var(--ink-2); + + --native-control-opacity: 0; + + --button-ink: var(--ink-1); + --button-surface: rgb(var(--button-surface-rgb)); + --button-border-size: 0; + --button-border-radius: 5px; + --button-preferred-ink: var(--accent-ink-1); + --button-preferred-surface: var(--accent-surface-1); + --button-disabled-surface: var(--surface-3); + --button-disabled-filter: opacity(50%); + + --checkbox-size: calc(var(--font-size) + 2px); + --checkbox-ink: var(--ink-3); + --checkbox-checked-ink: var(--accent-surface-1); + --checkbox-disabled-filter: opacity(50%); + --checkbox-margin-end: calc(var(--font-size) * 0.75); + + --notice-ink: var(--accent-ink-1); + --notice-surface: var(--accent-surface-1); + --notice-surface-shadow: #000 0 2px 8px; + + --dashboard-tab-ink: var(--ink-1); + --dashboard-tab-active-ink: rgb(var(--dashboard-tab-active-ink-rgb)); + --dashboard-tab-active-surface: transparent; + --dashboard-tab-focus-surface: rgb(var(--dashboard-tab-focus-surface-rgb)); + --dashboard-tab-hover-surface: var(--surface-2); + --dashboard-tab-hover-border: var(--surface-3); + + /* info levels: normal, fyi, warn, error -- we want same Luv */ + --info0-ink-rgb: 119 119 119; /* h: 0 S: 0 Luv:60 */ + --info1-ink-rgb: 72 143 255; /* h:255 S:100 Luv:60 */ + --info2-ink-rgb: 208 125 0; /* h: 40 S:100 Luv:60 */ + --info3-ink-rgb: 255 82 94; /* h: 10 S:100 Luv:60 */ + --info0-ink: rgb(var(--info0-ink-rgb)); + --info1-ink: rgb(var(--info1-ink-rgb)); + --info2-ink: rgb(var(--info2-ink-rgb)); + --info3-ink: rgb(var(--info3-ink-rgb)); + + --popup-cell-surface: var(--surface-2); + --popup-cell-label-filter: opacity(40%); + --popup-cell-allow-own-surface: rgb(var(--popup-cell-allow-own-surface-rgb)); + --popup-cell-allow-surface: rgb(var(--popup-cell-allow-surface-rgb)); + --popup-cell-noop-own-surface: rgb(var(--popup-cell-noop-own-surface-rgb)); + --popup-cell-noop-surface: rgb(var(--popup-cell-noop-surface-rgb)); + --popup-cell-block-own-surface: rgb(var(--popup-cell-block-own-surface-rgb)); + --popup-cell-block-surface: rgb(var(--popup-cell-block-surface-rgb)); + --popup-power-ink: rgb(var(--popup-power-ink-rgb)); + --popup-toolbar-surface: rgb(var(--primary-80) / 15%); + --popup-toolbar-surface-hover: rgb(var(--primary-80) / 30%); + --popup-ruleset-tool-ink: var(--ink-1); + --popup-ruleset-tool-surface: rgb(var(--primary-80) / 15%); + --popup-ruleset-tool-surface-hover: rgb(var(--primary-80) / 20%); + --popup-ruleset-tool-shadow: transparent; +} + +@media (prefers-contrast: more) { + :root { + --native-control-opacity: 1; + --button-border-size: 1px; + } +} + +/* + * Rule colors + * */ +:root:not(.dark):not(.colorBlind) { + --popup-cell-allow-own-surface-rgb: 0 127 0; /* h:127.7 S:100 Luv:45 */ + --popup-cell-allow-surface-rgb: 129 202 129; /* h:127.7 S:50 Luv:75 */ + --popup-cell-block-own-surface-rgb: 216 0 0; /* h:12.2 S:100 Luv:45 */ + --popup-cell-block-surface-rgb: 224 172 172; /* h:12.2 S:50 Luv:75 */ + --popup-cell-noop-own-surface-rgb: 107 107 107; /* h:0 S:0 Luv:45 */ + --popup-cell-noop-surface-rgb: 185 185 185; /* h:0 S:0 Luv:75 */ +} + +:root.dark:not(.colorBlind) { + --popup-cell-allow-own-surface-rgb: 0 153 0; /* h:127.7 S:100 Luv:55 */ + --popup-cell-allow-surface-rgb: 73 117 73; /* h:127.7 S:50 Luv:45 */ + --popup-cell-block-own-surface-rgb: 255 40 40; /* h:12.2 S:100 Luv:55 */ + --popup-cell-block-surface-rgb: 175 74 74; /* h:12.2 S:50 Luv:45 */ + --popup-cell-noop-own-surface-rgb: 132 132 132; /* h:0 S:0 Luv:55 */ + --popup-cell-noop-surface-rgb: 94 94 94; /* h:0 S:0 Luv:40 */ +} + +/* + * Source for color-blind color scheme: + * https://davidmathlogic.com/colorblind/ + * First pair in "Accessible palettes" + * + * */ +:root.colorBlind { + --popup-cell-allow-own-surface-rgb: 151 113 0; /* h:58.5 S:100 Luv:50 */ + --popup-cell-block-own-surface-rgb: 0 120 216; /* h:252 S:100 Luv:50 */ + --popup-cell-noop-own-surface-rgb: 119 119 119; /* h:0 S:0 Luv:50 */ + --popup-cell-label-mixed-surface: #ff6a00; /* TODO: fix */ +} +:root.colorBlind:not(.dark) { + --popup-cell-allow-surface-rgb: 223 178 92; /* h:58.5 S:75 Luv:75 */ + --popup-cell-block-surface-rgb: 159 185 238; /* h:252 S:75 Luv:75 */ + --popup-cell-noop-surface-rgb: 185 185 185; /* h:0 S:0 Luv:75 */ +} +:root.dark.colorBlind { + --popup-cell-allow-surface-rgb: 115 91 44; /* h:58.5 S:75 Luv:40 */ + --popup-cell-block-surface-rgb: 53 95 154; /* h:252 S:75 Luv:40 */ + --popup-cell-noop-surface-rgb: 94 94 94; /* h:0 S:0 Luv:40 */ +} + +:root.classic:not(.dark) { + --notice-ink: rgb(var(--ink-80)); + --notice-surface: rgb(var(--yellow-5)); + --popup-power-ink-rgb: 0 110 254; + --popup-ruleset-tool-ink: var(--ink-1); + --popup-ruleset-tool-surface: rgb(var(--yellow-5) / 50%); + --popup-ruleset-tool-surface-hover: rgb(var(--yellow-5) / 75%); + --popup-ruleset-tool-shadow: rgb(var(--gray-85)); +} + +/* + * Experiment: use Firefox for Android dark theme colors +:root.mobile.dark { + --gray-10: 43 42 51; + --gray-20: 66 65 77; + --ink-rgb: 251 251 254; +} +*/ diff --git a/src/css/whitelist.css b/src/css/whitelist.css index 32a7a103f6b4a..3248a77f6d603 100644 --- a/src/css/whitelist.css +++ b/src/css/whitelist.css @@ -1,17 +1,23 @@ -div > p:first-child { - margin-top: 0; +html { + height: 100vh; + height: 100svh; + overflow: hidden; + width: 100vw; } -div > p:last-child { - margin-bottom: 0; - } -#whitelist { - box-sizing: border-box; - font-size: small; - height: 60vh; - text-align: left; - white-space: pre; +body { + display: flex; + flex-direction: column; + height: 100%; + justify-content: stretch; + overflow: hidden; width: 100%; } -#whitelist.bad { - background-color: #fee; +.body { + flex-shrink: 0; + } +.codeMirrorContainer { + flex-grow: 1; + } +#whitelist { + text-align: left; } diff --git a/src/dashboard.html b/src/dashboard.html index 893d7d3644555..1d401c19fc7c1 100644 --- a/src/dashboard.html +++ b/src/dashboard.html @@ -2,33 +2,54 @@ - - + + - - - + + + + + - + +
      -
      - - - - - - - -
      + + + + book
      +
      +
      +   +   + +
      +
      +
      - + + + + - - - + + + + + + + diff --git a/src/devtools.html b/src/devtools.html new file mode 100644 index 0000000000000..8893759d92e60 --- /dev/null +++ b/src/devtools.html @@ -0,0 +1,62 @@ + + + + + + +uBlock — Dev tools + + + + + + + + + + + + + + + + +
      +

      + + + + + + + + + + +

      +
      + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/document-blocked.html b/src/document-blocked.html index 25f8d57375cee..84412f9e20002 100644 --- a/src/document-blocked.html +++ b/src/document-blocked.html @@ -1,174 +1,76 @@ - - - + + + + + + + + + - -
      -
      -

      -