18 Commits

Author SHA1 Message Date
Kevin R
96a0a6e8cb Cleaning 2020-11-08 23:51:10 +01:00
Kevin R
d5fe894414 From scratch 2020-11-08 23:32:31 +01:00
Kevin R
307b487f64 Merge branch 'master' into ts-port 2020-09-25 02:39:54 +02:00
Kevin R
d82fca2972 Changes 2020-09-10 01:09:22 +02:00
Kevin R
7ea819d26a Added test ci test results 2020-09-10 00:58:38 +02:00
Kevin R
68f10ac9ac Update .gitlab-ci.yml 2020-09-10 00:44:54 +02:00
Kevin R
1df39c76f4 Update .gitlab-ci.yml 2020-09-10 00:44:16 +02:00
Kevin R
2ac158ca88 Update .gitlab-ci.yml 2020-09-10 00:27:49 +02:00
Kevin R
73d330655a Update .gitlab-ci.yml 2020-09-10 00:26:23 +02:00
Kevin R
fedc0c4230 Update .gitlab-ci.yml 2020-09-10 00:25:00 +02:00
Kevin R
e2b638eafb Changes 2020-09-10 00:23:56 +02:00
Kevin R
0c694d86ad Merge branch 'master' into ts-port 2020-09-09 23:17:20 +02:00
Kevin R
6b8e515d9a Update logEntry.ts 2020-08-21 22:02:58 +02:00
Kevin R
c6e92a7f29 Merge branch 'master' into ts-port 2020-08-21 00:27:01 +02:00
Kevin R
c138e3387b refactor 2020-08-20 23:42:46 +02:00
Kevin R
4432fb46bf init 2 2020-08-20 04:01:58 +02:00
Kevin R
4d4a418a95 Update utils.ts 2020-08-19 23:54:08 +02:00
Kevin R
843aeed109 init 2020-08-19 23:41:12 +02:00
218 changed files with 14119 additions and 12990 deletions

13
.editorconfig Normal file
View File

@@ -0,0 +1,13 @@
root = true
[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 100
[*.md]
trim_trailing_whitespace = false

7
.gitignore vendored
View File

@@ -18,3 +18,10 @@ yarn-error.log*
# WebStorm
.idea/
node_modules
yarn.lock
distribution
coverage
size-plugin.json
junit.xml

View File

@@ -1,60 +1,115 @@
image: debian:latest
variables:
GIT_SUBMODULE_STRATEGY: recursive
before_script:
- export DEBIAN_FRONTEND= noninteractive
- apt-get update -y
- apt-get install -y zip unzip nodejs jsonlint jq
- apt-get install -y zip unzip nodejs jsonlint
# This folder is cached between builds
# http://docs.gitlab.com/ce/ci/yaml/README.html#cache
cache:
paths:
- node_modules/
stages:
- install
- test
- build
- deploy
# - deploy
hash rules:
stage: build
# test rules:
# stage: test
# script:
# - jsonlint-php data/data.min.json
# only:
# changes:
# - data/data.min.json
#
# hash rules:
# stage: build
# script:
# - sha256sum data/data.min.json | awk '{print $1}' > rules.min.hash
# - node build_tools/minifyDataJSON.js "data/data.min.json" "data.minify.json"
# - sha256sum data.minify.json | awk '{print $1}' > rules.minify.hash
# artifacts:
# paths:
# - rules.min.hash
# - data.minify.json
# - rules.minify.hash
# only:
# refs:
# - merge_requests
# - master
# changes:
# - data/data.min.json
install dependencies:
image: node:latest
stage: install
script:
- sha256sum data/data.min.json | awk '{print $1}' > rules.min.hash
- node build_tools/minifyDataJSON.js "data/data.min.json" "data.minify.json"
- sha256sum data.minify.json | awk '{print $1}' > rules.minify.hash
- npm install
test:lint:
image: node:latest
stage: test
dependencies:
- install dependencies
script:
- npm run lint
test:vulnerabilities:
image: node:latest
stage: test
dependencies:
- install dependencies
script:
- npm audit
test:addon:
image: node:latest
stage: test
dependencies:
- install dependencies
script:
- npm run test:ci
coverage: /All files[^|]*\|[^|]*\s+([\d\.]+)/
artifacts:
when: always
paths:
- rules.min.hash
- data.minify.json
- rules.minify.hash
- coverage
reports:
junit: junit.xml
expire_in: 30 days
bundle addon firefox:
bundle addon:
stage: build
script:
- zip ClearURLs-firefox -r -FS clearurls.js browser-polyfill.js manifest.json img/* external_js/* html/* core_js/* css/* fonts/* _locales/*
- zip ClearURLs -r -FS distribution/*
only:
- master
artifacts:
paths:
- ClearURLs-firefox.zip
- ClearURLs.zip
bundle addon chrome:
stage: build
script:
- jq 'del(.applications)' manifest.json > manifest.json.tmp && mv manifest.json.tmp manifest.json
- zip ClearURLs-chrome -r -FS clearurls.js browser-polyfill.js manifest.json img/* external_js/* html/* core_js/* css/* fonts/* _locales/*
only:
- master
artifacts:
paths:
- ClearURLs-chrome.zip
pages:
stage: deploy
script:
- mkdir public
- mkdir public/data
- cp img/clearurls.svg public/clearurls.svg
- cp data/data.min.json public/data/data.min.json
- sha256sum public/data/data.min.json | awk '{print $1}' > public/data/rules.min.hash
- node build_tools/minifyDataJSON.js "public/data/data.min.json" "public/data/data.minify.json"
- sha256sum public/data/data.minify.json | awk '{print $1}' > public/data/rules.minify.hash
artifacts:
paths:
- public
# pages:
# stage: deploy
# script:
# - mkdir public
# - mkdir public/data
# - mv GitLabPages/* public/
# - cp img/clearurls.svg public/clearurls.svg
# - cp data/data.min.json public/data/data.min.json
# - sha256sum public/data/data.min.json | awk '{print $1}' > public/data/rules.min.hash
# - node build_tools/minifyDataJSON.js "public/data/data.min.json" "public/data/data.minify.json"
# - sha256sum public/data/data.minify.json | awk '{print $1}' > public/data/rules.minify.hash
# artifacts:
# paths:
# - public
# only:
# refs:
# - merge_requests
# - master
# changes:
# - GitLabPages/*
# - img/clearurls.svg
# - data/data.min.json
# - build_tools/minifyDataJSON.js

View File

@@ -14,9 +14,9 @@ possible. Thank you!
<!--
You do not have to reinstall Firefox or disable all addons. You can just create a new profile that only has ClearURLs installed and where no settings are changed. Instructions can be found here: https://support.mozilla.org/en-US/kb/profile-manager-create-and-remove-firefox-profiles
-->
* [ ] Can you reproduce the problem in a **fresh** Firefox profile with **only** ClearURLs?
* [ ] Can you reproduce the problem in a **fresh** firefox profile with **only** ClearURLs?
* [ ] Are you running the latest version of ClearURLs?
* [ ] Have you changed settings under `about:config`?
* [ ] Are you have changed settings under `about:config`?
### Description
@@ -33,10 +33,10 @@ You do not have to reinstall Firefox or disable all addons. You can just create
**Actual behavior:** [What actually happened]
### System
* **Version**: [compulsory. You must provide your version]
* **Version**: [compulsory. you must provide your version]
* **Platform**: [either `uname -a` output, or if Windows, version and 32-bit or
64-bit]
* **Country**: [The country from which you called the page. You can find your country here: https://ipapi.co//country_capital]
* **Country**: [The country from which you called the page. You can found your country here: https://ipapi.co//country_capital]
### Log
<!-- Please enable the log functionality of ClearURLs and attach the exported log to this bug report. -->

4
.gitmodules vendored
View File

@@ -1,4 +0,0 @@
[submodule "rules"]
path = data
url = https://gitlab.com/ClearURLs/rules.git
branch = master

6
.prettierrc Normal file
View File

@@ -0,0 +1,6 @@
{
"trailingComma": "all",
"tabWidth": 2,
"semi": false,
"singleQuote": true
}

View File

@@ -5,138 +5,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## Ongoing
- Rewrite ClearURLs completely form scratch in typescript
- Add features from the milestone [%1](https://gitlab.com/KevinRoebert/ClearUrls/-/milestones/1)
- Dedicated documentation page like [docs.drasyl.org](https://docs.drasyl.org)
## [1.XX.0] - 2022-XX-XX
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 37
## [1.25.0] - 2022-07-27
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 37
### Changed
- ETag filtering now generates random values and does no longer delete the header. As a result, filtering also works under Chrome-based browsers
- ETag filtering no longer increases the counter
- ETag filtering is now disabled by default
- Updated rules URL href
- Updated translations. Big update by [IHatePineapples](https://github.com/IHatePineapples)
### Fixed
- [524](https://gitlab.com/KevinRoebert/ClearUrls/-/issues/524)
- [67](https://github.com/ClearURLs/Addon/issues/67)
- [138](https://github.com/ClearURLs/Addon/issues/138)
- [1177](https://gitlab.com/KevinRoebert/ClearUrls/-/issues/1177)
- [234](https://github.com/ClearURLs/Addon/issues/234)
- [191](https://github.com/ClearURLs/Addon/issues/191)
## [1.24.1] - 2022-03-25
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 37
### Changed
- Replaced self-written URL parser through `URL` and `URLSearchParams` from the Web API
### Fixed
- Fixed [185](https://github.com/ClearURLs/Addon/issues/185)
- Fixed [186](https://github.com/ClearURLs/Addon/issues/186)
## [1.23.1] - 2022-03-23
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 37
### Removed
- Removed unnecessary `unsafe-eval` content security policy
## [1.23.0] - 2022-03-22
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 37
### Added
- Added Arabic translation by Essam and kugani
- Added Indonesian translation by Iputucaganesha
- Added `content_security_policy` to `manifest.json`
- Re-Added `applications`to `manifest.json`
- Added recursive cleaning
- Added dark mode support in [!101](https://gitlab.com/KevinRoebert/ClearUrls/-/merge_requests/101). Thanks to [@dannycolin](https://gitlab.com/dannycolin)
### Changed
- Updated `homepage_url` and `author` field in `manifest.json`
- Replaced deprecated `String.prototype.substr()` in [!175](https://github.com/ClearURLs/Addon/pull/175). Thanks to [@CommanderRoot](https://github.com/CommanderRoot)
## [1.22.0] - 2021-12-27
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 37
### Added
- Added Korean translation by [@hellojaccc](https://gitlab.com/hellojaccc)
- Added Thai translation by [@ammaneena](https://gitlab.com/ammaneena)
- Added Slovenian translation by [@betterwebleon](https://github.com/betterwebleon)
- [Added](https://gitlab.com/KevinRoebert/ClearUrls/-/merge_requests/93) `method` filtering to rule catalogs. Thanks to [@lifegpc](https://gitlab.com/lifegpc). Closes [#948](https://gitlab.com/KevinRoebert/ClearUrls/-/issues/948).
### Changed
- Updated jQuery to 3.6.0
- Updated Spanish translation by Sergio
- Updated Hungarian translation by krolli
- Updated Italian translation by Gioxx
- Updated Dutch translation by Harm and Heimen
- Updated Polish translation by Mble
- Updated Portuguese translation by Lalocas and Geraldo
- Updated Turkish translation by Ümit
- Updated Chinese (traditional) translation by 1304274443
- Updated Chinese (simplified) translation by Eric
- Replaced deprecated `extension.getURL` by `runtime.getURL`
## [1.21.0] - 2021-03-24
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 37
### Changed
- Updated Polish translation by Kityn
### Removed
- Removed `clipboardWrite` permission
- Removed noisy background of popup
### Fixed
- Fixed [#771](https://gitlab.com/KevinRoebert/ClearUrls/-/issues/771)
- Fixed [#466](https://gitlab.com/KevinRoebert/ClearUrls/-/issues/466) by [@aethanyc](https://gitlab.com/aethanyc) in MR [!85](https://gitlab.com/KevinRoebert/ClearUrls/-/merge_requests/85)
## [1.20.0] - 2020-11-21
### Compatibility note
- Require Firefox >= 55
- Require Chrome >= 37
### Added
- Added Dutch translation by Harm M.
### Changed
- Changed url decoding to prevent endless loop
- Performance optimizations for rules by [@thexeos](https://gitlab.com/thexeos)
- Changed default rules and hash host to Github Pages
- Changed rules changelog button `href` to the new rules submodule repo
- Updated various translations - thanks to all contributors
### Fixed
- Fixed [#664](https://gitlab.com/KevinRoebert/ClearUrls/issues/664) (also [#739](https://gitlab.com/KevinRoebert/ClearUrls/issues/739), [#740](https://gitlab.com/KevinRoebert/ClearUrls/issues/740))
## [1.19.0] - 2020-07-22

View File

@@ -1,6 +1,6 @@
ClearURLs protects and respects your privacy.
We do not collect any of your usage data. Furthermore, ClearURLs has no home server nor embed any kind of analytic hooks in its code.
We do not collect any of your usage data. Furthermore ClearURLs has no home server nor embed any kind of analytic hooks in its code.
The only time ClearURLs connects to a remote server (gitlab.io or github.io) is to update the rules file and the associated hash file. You can replace the default update address (_rules1.clearurls.xyz_/_rules2.clearurls.xyz_) with your address at any time in the settings.
The only time ClearURLs connects to a remote server (gitlab.io) is to update the rules file and the associated hash file. You can replace the default update address with your own address at any time in the settings.
The project and the rule file are currently hosted on gitlab.com and github.com, which is owned by GitLab Inc. and GitHub Inc. Thus they are unrelated to ClearURLs. The _rules1.clearurls.xyz_ and _rules2.clearurls.xyz_ addresses are just CNAME records and thus we got no information about the request.
The project and the rule file is currently hosted on gitlab.com, which is owned by GitLab Inc. and thus is unrelated to ClearURLs.

View File

@@ -2,14 +2,14 @@
<a href="https://liberapay.com/kroeb" target="_blank"><img src="https://raw.githubusercontent.com/KevinRoebert/DonateButtons/master/LiberaPay.png" alt="Buy Me A Coffee" height="55"></a>
<a href="https://www.buymeacoffee.com/KevinRoebert" target="_blank"><img src="https://raw.githubusercontent.com/KevinRoebert/DonateButtons/master/BuyMeACoffee.png" alt="Buy Me A Coffee" height="55"></a>
[<img src="https://blog.mozilla.org/addons/files/2020/04/get-the-addon-fx-apr-2020.svg" alt="for Firefox" height="60px">](https://addons.mozilla.org/firefox/addon/clearurls/) [<img src="https://docs.clearurls.xyz/1.22.0/assets/img/MEA-button.png" alt="for Edge" height="60px">](https://microsoftedge.microsoft.com/addons/detail/mdkdmaickkfdekbjdoojfalpbkgaddei) [<img src="https://storage.googleapis.com/chrome-gcs-uploader.appspot.com/image/WlD8wC6g8khYWPJUsQceQkhXSlv1/HRs9MPufa1J1h5glNhut.png" alt="for Chrome" height="60px">](https://chrome.google.com/webstore/detail/clearurls/lckanjgmijmafbedllaakclkaicjfmnk)
[<img src="https://blog.mozilla.org/addons/files/2020/04/get-the-addon-fx-apr-2020.svg" alt="for Firefox" height="60px">](https://addons.mozilla.org/firefox/addon/clearurls/) [<img src="https://gitlab.com/KevinRoebert/ClearUrls/-/raw/master/promotion/MEA-button.png" alt="for Edge" height="60px">](https://microsoftedge.microsoft.com/addons/detail/mdkdmaickkfdekbjdoojfalpbkgaddei) [<img src="https://developer.chrome.com/webstore/images/ChromeWebStore_BadgeWBorder_v2_206x58.png" alt="for Chrome" height="60px">](https://chrome.google.com/webstore/detail/clearurls/lckanjgmijmafbedllaakclkaicjfmnk)
# <sub><img src="https://gitlab.com/KevinRoebert/ClearUrls/raw/master/img/clearurls.svg" width="64px" height="64px"></sub> ClearURLs [![Gitter](https://badges.gitter.im/ClearURLs/ClearURLs.svg)](https://gitter.im/ClearURLs/ClearURLs)
# <sub><img src="https://gitlab.com/KevinRoebert/ClearUrls/raw/master/img/clearurls.svg" width="64px" height="64px"></sub> ClearURLs [![Gitter](https://badges.gitter.im/ClearURLs/community.svg)](https://gitter.im/ClearURLs/community)
**ClearURLs** is an add-on based on the new WebExtensions technology and is optimized for *Firefox* and *Chrome* based browsers.
This extension will automatically remove tracking elements from URLs to help protect your privacy when browsing the Internet,
which is regularly updated by us and can be found [here](https://gitlab.com/anti-tracking/ClearURLs/rules/-/raw/master/data.min.json).
This extension will automatically remove tracking elements from URLs to help protect your privacy when browse through the Internet,
which is regularly updated by us and can be found [here](https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.min.json).
## Application
Many websites use tracking elements in the URL (e.g. `https://example.com?utm_source=newsletter1&utm_medium=email&utm_campaign=sale`) to mark your online activity.
@@ -40,13 +40,12 @@ Indeed most of the above URL is tracking code. Once ClearURLs has cleaned the ad
Reasoning for needed permissions can be found under [here](https://gitlab.com/KevinRoebert/ClearUrls/issues/159).
## Screenshot
![Interface (version 1.14.0)](https://docs.clearurls.xyz/1.22.0/assets/img/interface.png)
![Interface (version 1.14.0)](https://gitlab.com/KevinRoebert/ClearUrls/raw/master/promotion/screens/Popup_v_1.14.0.png)
## CI/CD Artifacts Download (for Firefox- and Chrome-Dev only)
Here you can download the packed files for the Firefox- and Chrome-Dev:
- [ClearURLs-firefox.zip](https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/ClearURLs-firefox.zip?job=bundle%20addon%20firefox)
- [ClearURLs-chrome.zip](https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/ClearURLs-chrome.zip?job=bundle%20addon%20chrome)
[<img src="promotion/download-128.png"/>](https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/ClearURLs.zip?job=bundle%20addon)
## Test
If you want to test whether ClearURLs works correctly on your system, you can go to this test page: [https://test.clearurls.xyz/](https://test.clearurls.xyz/)
@@ -65,9 +64,9 @@ You can choose between two options to contribute. You can create a merge request
It is not necessary to translate the description field; in the most cases it is empty.*
#### Merge request
If you want to create a merge request, you must open the path [`_locales/en/messages.json`](https://github.com/KevinRoebert/ClearUrls/blob/master/_locales/en/messages.json) in the ClearURLs repo
If you want to create a merge request, you must open the path [`source/_locales/en/messages.json`](https://github.com/KevinRoebert/ClearUrls/blob/master/source/_locales/en/messages.json) in the ClearURLs repo
and translate the english terms into terms of your language. Once you have translated all the terms, you make a pull request of your translation.
Please push your translation into the folder `_locales/{language code}/messages.json`.
Please push your translation into the folder `_locales/{country code}/messages.json`.
#### POEditor
[<img src="https://poeditor.com/public/images/logo/logo.svg" alt="https://poeditor.com/join/project/vKTpQWWvk2" width="150">](https://poeditor.com/join/project/vKTpQWWvk2)
@@ -76,19 +75,15 @@ Please push your translation into the folder `_locales/{language code}/messages.
* [Uroute](https://github.com/walterl/uroute) used ClearURLs to filter/clean URL before launching browser
* [Scrub](https://gitlab.com/CrunchBangDev/cbd-cogs/-/tree/master/Scrub) used ClearURLs to filter/clean URLs as cog for the Red Discord bot
* [Unalix](https://github.com/AmanoTeam/Unalix) small, dependency-free, fast Python package for removing tracking fields from URLs
* [Unalix-nim](https://github.com/AmanoTeam/Unalix-nim) small, dependency-free, fast Nim package and CLI tool for removing tracking fields from URLs
* [UnalixAndroid](https://github.com/AmanoTeam/UnalixAndroid) simple Android app that removes link masking/tracking and optionally resolves shortened links
## Recommended by...
* [ghacks-user.js](https://github.com/ghacksuserjs/ghacks-user.js/wiki/4.1-Extensions)
* [Awesome Humane Tech List](https://github.com/humanetech-community/awesome-humane-tech#tracking)
* [PrivacyTools](https://www.privacytools.io/browsers/#addons)
* [New York Times Wirecutter](https://www.nytimes.com/wirecutter/reviews/our-favorite-ad-blockers-and-browser-extensions-to-protect-privacy/#cleaner-links-clearurls)
* ClearURLs is part of Mozilla's recommended extensions program
## Permissions
Reasoning for needed permissions you can find under [this wiki page](https://docs.clearurls.xyz/latest/permissions/).
Reasoning for needed permissions you can find under [this discussion](https://gitlab.com/KevinRoebert/ClearUrls/issues/159).
## Copyright
We use some third-party scripts in our add-on. The authors and licenses are listed below.
@@ -98,7 +93,7 @@ We use some third-party scripts in our add-on. The authors and licenses are list
- [Bootstrap v4.3.1](https://github.com/twbs/bootstrap/tree/v4.3.1) |
Copyright 2011-2016 Twitter, Inc. |
[MIT](https://github.com/twbs/bootstrap/blob/master/LICENSE)
- [jQuery v3.6.0](https://github.com/jquery/jquery/tree/3.6.0) |
- [jQuery v3.4.1](https://github.com/jquery/jquery/tree/3.4.1) |
Copyright JS Foundation and other contributors |
[MIT](https://jquery.org/license/)
- [DataTables v1.10.20](https://github.com/DataTables/DataTables/tree/master) | Copyright (c) 2008-2015 SpryMedia Limited | [MIT](https://datatables.net/license/)

46
__tests__/rules/rule.ts Normal file
View File

@@ -0,0 +1,46 @@
/*
* ClearURLs
* Copyright (c) 2017-2020 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import Rule from '../../source/rules/rule';
import SimpleRule from '../../source/rules/simpleRule';
describe('RuleTest', () => {
let rule: Rule
it('should create correct RegExp', () => {
rule = new SimpleRule('test')
expect(rule.value.toString()).toBe(new RegExp('([\/?#]|(&|&amp;))+(test=[^&]*)', 'gi').toString())
})
it('should return correct value on toString', () => {
rule = new SimpleRule('test')
expect(rule.toString()).toBe('([\/?#]|(&|&amp;))+(test=[^&]*)')
})
it('should be set active value correctly', () => {
rule = new SimpleRule('test')
expect(rule.isActive).toBe(true)
rule.deactivate()
expect(rule.isActive).toBe(false)
rule.activate()
expect(rule.isActive).toBe(true)
})
})

View File

@@ -0,0 +1,44 @@
import CircularBuffer from '../../source/utils/circularBuffer'
describe('CircularBuffer', () => {
let capacity: number
let buffer: CircularBuffer<string>
beforeEach(() => {
capacity = 10
buffer = new CircularBuffer<string>(capacity)
})
it('should creates a buffer with the specified capacity', () => {
expect(buffer.capacity).toBe(capacity)
})
it('should add item to the buffer', () => {
expect(buffer.size).toBe(0)
buffer.enqueue('foo')
expect(buffer.size).toBe(1)
})
it('should remove oldest item if the buffer is full on adding new items', () => {
buffer = new CircularBuffer<string>(2)
buffer.enqueue('foo1')
buffer.enqueue('foo2')
buffer.enqueue('foo3')
buffer.enqueue('foo4')
expect(buffer.toArray()).toEqual(['foo3', 'foo4'])
})
it('should return the current size via the size() getter', () => {
buffer.enqueue('foo')
expect(buffer.size).toBe(1)
})
it('should return true if buffer is empty', () => {
expect(buffer.isEmpty()).toBe(true)
})
it('should throw exception on illegal argument', () => {
expect(() => new CircularBuffer<any>(0)).toThrow('The capacity must be > 0')
})
})

View File

@@ -1,378 +0,0 @@
{
"hash_status_code_1": {
"message": "حتى تاريخ ",
"description": "يشير كود الحالة هذا ، الى أنه لا يوجد تعديل متاح لقواعد ClearURLs وأن كل شيء قد تم حتى تاريخه. "
},
"hash_status_code_2": {
"message": "تم التعديل ",
"description": "يشير كود الحالة هذا الى أنه تم تعديل قواعد ClearURLs بنجاح. "
},
"hash_status_code_3": {
"message": "التعديل متاح ",
"description": "يشير كود الحالة هذا ، الى أنه يتم اتاحة تعديل لقواعد ClearURLs. "
},
"hash_status_code_4": {
"message": "خطأ ",
"description": "يشير كود الحالة هذا الى أنه لا يمكن بدء ClearURLs بطريقة صحيحة. "
},
"hash_status_code_5": {
"message": "أوبس شيء حدث خطأ ! ",
"description": "يشير كود الحالة هذا الى أنه قد حدث خطأ أثناء تعديل قواعد ClearURLs. "
},
"log_redirect": {
"message": "تم اعادة توجيه عنوان url ",
"description": "يتم استخدام مجموعة الحروف هذه في اعادة الاتجاه في سجل ClearURLs. "
},
"log_domain_blocked": {
"message": "تم اقفال هذا النطاق ",
"description": "يتم استخدام مجموعة الحروف هذه في النطاقات التي تم اعاقتها في سجل ClearURLs. "
},
"check_os_log": {
"message": "[ ClearURLs ] : تم اضافة وحدة انصات السجل. ",
"description": "يتم استخدام هذه السلسلة في بدء سجل ClearURLs. "
},
"log_html_page_title": {
"message": "Log من ClearURLs ",
"description": "يتم استخدام مجموعة الحروف هذه كنص رأس في صفحة السجل. "
},
"log_html_table_head_1": {
"message": "قبل التشغيل ",
"description": "يتم استخدام مجموعة الحروف هذه كعنوان جدول في صفحة السجل. "
},
"log_html_table_head_2": {
"message": "بعد التشغيل ",
"description": "يتم استخدام مجموعة الحروف هذه كعنوان جدول في صفحة السجل. "
},
"log_html_table_head_3": {
"message": "القاعدة ",
"description": "يتم استخدام مجموعة الحروف هذه كعنوان جدول في صفحة السجل. "
},
"log_html_table_head_4": {
"message": "الوقت ",
"description": "يتم استخدام مجموعة الحروف هذه كعنوان جدول في صفحة السجل. "
},
"log_html_reset_button": {
"message": "ارجاع ",
"description": "يتم استخدام مجموعة الحروف هذه لاختيار اعادة الضبط في صفحة السجل. "
},
"log_html_reset_button_title": {
"message": "يقوم باعادة ضبط السجل الشامل ",
"description": "يتم استخدام هذه العبارة كعنوان لاختيار اعادة الضبط في صفحة السجل. "
},
"popup_html_configs_head": {
"message": "Configs ",
"description": "يتم استخدام هذه السلسلة كعنوان للتوصيف في الصفحة المظهرة. "
},
"popup_html_configs_switch_filter": {
"message": "مرشح البيانات ",
"description": "يتم استخدام هذه العبارة كاسم لاختيار مرشح البيانات في الصفحة popup. "
},
"popup_html_configs_switch_filter_title": {
"message": "مفتاح ترشيح البيانات يقوم بتشغيل وظيفة التنظيف الخاصة ب ـClearURLs. اذا قمت بالغاء اتاحة هذا الاختيار ، سيتم الغاء اتاحة كل addon ",
"description": "يتم استخدام هذه العبارة كعنوان لاختيار مرشح البيانات في الصفحة popup. "
},
"popup_html_configs_switch_log": {
"message": "تسجيل ",
"description": "يتم استخدام هذا النص كاسم لمفتاح تشغيل التسجيل في الصفحة popup. "
},
"popup_html_configs_switch_log_title": {
"message": "يتم حفظ السجل محليا فقط. ننصح بعدم هذه الميزة إذا لم تكن في حاجة إليها ",
"description": "يتم استخدام هذه السلسلة كعنوان لمفتاح تشغيل التسجيل في الصفحة المظهرة. "
},
"popup_html_configs_switch_badges": {
"message": "الشارات ",
"description": "يتم استخدام هذا النص كاسم لمفتاح تبديل الشارات في الصفحة popup. "
},
"popup_html_configs_switch_badges_title": {
"message": "عرض أرقام urls التي تم تنظيفها ",
"description": "يتم استخدام هذا النص كعنوان لمفتاح تبديل الشارات في الصفحة popup. "
},
"popup_html_statistics_head": {
"message": "الإحصاءات ",
"description": "يتم استخدام مجموعة الحروف هذه كعنوان للاحصائيات في الصفحة المظهرة. "
},
"popup_html_statistics_elements": {
"message": "العناصر ",
"description": "يتم استخدام هذه السلسلة كاسم للعناصر التي توجد في الصفحة المظهرة. "
},
"popup_html_statistics_blocked": {
"message": "مقفل ",
"description": "يتم استخدام مجموعة الحروف هذه كاسم للعناصر التي تم اقفالها في الصفحة المظهرة. "
},
"popup_html_statistics_percentage": {
"message": "النسبة المئوية ",
"description": "يتم استخدام مجموعة الحروف هذه كاسم للنسبة المئوية للعناصر التي تم اعاقتها في الصفحة المظهرة. "
},
"popup_html_statistics_reset_button": {
"message": "ارجاع ",
"description": "يتم استخدام هذه العبارة كاسم لاختيار ارجاع الاحصائيات في الصفحة popup. "
},
"popup_html_statistics_reset_button_title": {
"message": "ارجاع الاحصائيات الشاملة ",
"description": "يتم استخدام هذه السلسلة كعنوان لاختيار ارجاع الاحصائيات في الصفحة popup. "
},
"popup_html_rules_status_head": {
"message": "القواعد-الحالة ",
"description": "يتم استخدام مجموعة الحروف هذه كعنوان لقسم حالة-القواعد في الصفحة المظهرة. "
},
"popup_html_log_head": {
"message": "السجل ",
"description": "يتم استخدام مجموعة الحروف هذه كاسم لاختيار السجل في الصفحة المظهرة. "
},
"popup_html_log_head_title": {
"message": "قم بفتح السجل ",
"description": "يتم استخدام هذه السلسلة كعنوان لاختيار السجل في الصفحة المظهرة. "
},
"popup_html_report_button": {
"message": "تسجيل عنوان URL الحالي ",
"description": "ملحوظة : لا يتم استخدامها حاليا. "
},
"popup_html_report_button_title": {
"message": "قم بتسجيل عنوان URL الحالي من علامة التبويب هذه. ",
"description": "لا يتم استخدامه حاليا. "
},
"core_save_on_disk": {
"message": "[ ClearURLs ] : حفظ على القرص. ",
"description": "يتم استخدام مجموعة الحروف هذه لتخبر المستخدم ، بأن ClearURLs يقوم بحفظ المحددات على القرص. "
},
"core_error": {
"message": "[ ClearURLs ] : لا يمكن بدء addon. ",
"description": "يتم استخدام مجموعة الحروف هذه لتخبر المستخدم بأنه لا يمكن بدء ClearURLs. "
},
"configs_switch_statistics": {
"message": "الإحصاءات ",
"description": "يتم استخدام هذه العبارة كاسم لاختيار مفتاح الاحصائيات في الصفحة المظهرة. "
},
"configs_switch_statistics_title": {
"message": "تشغيل أو ايقاف تشغيل وظيفة الاحصائيات ",
"description": "يتم استخدام هذه السلسلة كعنوان لمفتاح تبديل الاحصائيات في الصفحة المظهرة. "
},
"settings_html_page_title": {
"message": "محددات ClearURL ",
"description": "يتم استخدام مجموعة الحروف هذه كعنوان في صفحة المحددات. "
},
"badged_color_label": {
"message": "لون الشارة ",
"description": "يتم استخدام مجموعة الحروف هذه كاسم لعلامة اللون التي تم تعليمها. "
},
"setting_html_reset_button": {
"message": "ارجاع ",
"description": "يتم استخدام هذه العبارة كاسم لاختيار اعادة الضبط في صفحة المحددات. "
},
"setting_html_reset_button_title": {
"message": "يقوم بارجاع كل شيء ",
"description": "يتم استخدام هذه العبارة كعنوان لاختيار اعادة الضبط في صفحة المحددات. "
},
"setting_rule_url_label": {
"message": "عنوان url لملف data.json (القواعد) ",
"description": "يتم استخدام مجموعة الحروف هذه كاسم للعلامة المميزة لعنوان url للقاعدة. "
},
"settings_html_save_button": {
"message": "حفظ & اعادة تحميل اضافة ",
"description": "يتم استخدام مجموعة الحروف هذه كاسم لملف sae&reload في صفحة المحددات. "
},
"settings_html_save_button_title": {
"message": "يتم حفظ المحددات ",
"description": "يتم استخدام مجموعة الحروف هذه كعنوان لملف sae&reload في صفحة المحددات. "
},
"setting_hash_url_label": {
"message": "عنوان URL الى ملف Rules.hash file (hash) ",
"description": "يتم استخدام هذه العبارة كاسم للعلامة المميزة لعنوان URL الى rule.hash. "
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>أنواع الطلب</a> (مستوى الخبراء) ",
"description": "يتم استخدام هذه السلسلة كاسم للعلامة المميزة للأنواع. "
},
"setting_report_server_label": {
"message": "وحدة خدمة التقرير لعناوين URL ",
"description": "ملحوظة : لا يتم استخدامها حاليا. "
},
"success_report_url": {
"message": "تم تسجيل عنوان URL بنجاح. سنقوم بالتحقق من عنوان URL هذا قريبا. ",
"description": "ملحوظة : لا يتم استخدامها حاليا. "
},
"error_report_url": {
"message": "يبدو أن عنوان URL هذا تم تسجيله بالفعل. ",
"description": "ملحوظة : لا يتم استخدامها حاليا. "
},
"donate_button": {
"message": "تبرع لمبتكر ClearURLs. ",
"description": "يتم استخدام مجموعة الحروف هذه للاشارة الى صفحة تبرع. "
},
"clipboard_copy_link": {
"message": "نسخ مكان وصلة نظيفة ",
"description": "يتم استخدام مجموعة الحروف هذه في القائمة السياقية لنسخ وصلات نظيفة. "
},
"context_menu_enabled": {
"message": "عرض ادخال القائمة السياقية ",
"description": "يتم استخدام مجموعة الحروف هذه لتبديل ادخال القائمة السياقية لنسخ وصلات نظيفة. "
},
"history_listener_enabled": {
"message": "تجنب تتبع مسار عملية الحقن على السجل التاريخي API (أنظر أيضا : <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>طريقة replaceState ()</a>) ",
"description": "يتم استخدام مجموعة الحروف هذه كاسم للعلامة المميزة لوحدة انصات السجل التاريخي API. "
},
"cleaning_tool_page_title": {
"message": "أداة تنظيف ClearURLs ",
"description": "يتم استخدام مجموعة الحروف هذه كعنوان في صفحة أداة التنظيف. "
},
"cleaning_tool_description": {
"message": "باستخدام هذه الأداة يمكنك اللصق في URLs وسيقوم ClearURLs بتنظيف عناوين URL بعد الضغط على الاختيار الأخضر. يمكنك لصق عناوين URL متعددة في وقت واحد ، ولكن يجب أن يكون كل عنوان URL في سطر منفصل. ",
"description": "يتم استخدام مجموعة الحروف هذه كوصف لأداة التنظيف. "
},
"cleaning_tool_btn": {
"message": "اعادة تنظيم عناوين URL ",
"description": "يتم استخدام مجموعة الحروف هذه كاسم لاختيار عنوان url غير صحيح. "
},
"cleaning_tool_dirty_urls_label": {
"message": "وهنا يمكنك اللصق في عناوين URL المتسخة : ",
"description": "يتم استخدام مجموعة الحروف هذه كعنوان في صفحة أداة التنظيف لعناوين URL المتسخة. "
},
"cleaning_tool_clean_urls_label": {
"message": "هنا يمكنك ايجاد عناوين URL التي تم تنظيفها : ",
"description": "يتم استخدام مجموعة الحروف هذه كعنوان في صفحة أداة التنظيف لعناوين URL النظيفة. "
},
"local_hosts_skipping": {
"message": "تخطي URLs على الأنظمة الرئيسية المحلية (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16, 127.0.0.1, localhost) ",
"description": "يتم استخدام مجموعة الحروف هذه كعلامة مميزة لمفتاح تخطي النظام الرئيسي المحلي "
},
"local_hosts_skipping_title": {
"message": "يقوم بتخطي عناوين URL على الأنظمة الرئيسية المحلية ",
"description": "يتم استخدام مجموعة الحروف هذه كعنوان لمفتاح تخطي النظام الرئيسي المحلي "
},
"log_html_export_button": {
"message": "ارسال ",
"description": "يتم استخدام مجموعة الحروف هذه لاختيار الارسال في صفحة السجل. "
},
"log_html_export_button_title": {
"message": "ارسال السجل الشامل ",
"description": "يتم استخدام هذه السلسلة كعنوان لاختيار التصدير في صفحة السجل. "
},
"log_html_import_button": {
"message": "استقبال ",
"description": "يتم استخدام مجموعة الحروف هذه لاختيار الاستقبال في صفحة السجل. "
},
"log_html_import_button_title": {
"message": "استقبال السجل الشامل ",
"description": "يتم استخدام هذه السلسلة كعنوان لاختيار الاستقبال في صفحة السجل. "
},
"setting_html_export_button": {
"message": "ارسال ",
"description": "يتم استخدام مجموعة الحروف هذه كاسم لاختيار التصدير في صفحة المحددات. "
},
"setting_html_export_button_title": {
"message": "صادرات كل شيء ",
"description": "يتم استخدام هذه السلسلة كعنوان لاختيار التصدير في صفحة المحددات. "
},
"setting_html_import_button": {
"message": "استقبال ",
"description": "يتم استخدام هذه العبارة كاسم لاختيار اعادة الضبط في صفحة المحددات. "
},
"setting_html_import_button_title": {
"message": "لاستقبال كل شيء ",
"description": "يتم استخدام هذه السلسلة كعنوان لاختيار الاستقبال في صفحة المحددات. "
},
"setting_log_limit_label": {
"message": "قم بتحديد السجل الى $LIMIT$ ادخالات. ",
"description": "يتم استخدام هذه العبارة كاسم للعلامة المميزة لحدود السجل. ",
"placeholders": {
"limit": {
"content": "1 دولار ",
"example": "100 "
}
}
},
"blocked_html_title": {
"message": "تم تجميع هذا الموقع بواسطة <b>ClearURLs</b> ",
"description": "يتم استخدام مجموعة الحروف هذه كعنوان في صفحة الموقع التي تم اعاقتها. "
},
"blocked_html_body": {
"message": "تم تجميع هذا الموقع بواسطة <b>ClearURLs</b> Add-on ، لأننا نتعرف على هذا الموقع على أنه خدمة اعلانية و / أو تتبع. لزيارة هذا الموقع ، يجب أن تقوم مؤقتا بايقاف تشغيل البرنامج المساعد أو عدم اتاحة حجب النطاق في محددات ClearURLs. بعد ذلك ، يمكنك الضغط على المفتاح الموجود بأسفل لتحميل الصفحة. ",
"description": "يتم استخدام مجموعة الحروف هذه كنص في صفحة الموقع التي تم اقفالها. "
},
"blocked_html_button": {
"message": "صفحة الزيارة ",
"description": "يتم استخدام هذا التسلسل كمفتاح في صفحة الموقع التي تم اعاقتها. "
},
"referral_marketing_enabled": {
"message": "السماح بتسويق الاحالة ",
"description": "يتم استخدام مجموعة الحروف هذه كعلامة مميزة لمفتاح تسويق الاحالة "
},
"referral_marketing_enabled_title": {
"message": "يسمح بتسويق الاحالة ",
"description": "يتم استخدام هذه السلسلة كعنوان لمحول تسويق الاحالة "
},
"watchdog": {
"message": "[ ClearURLs ] : قام جهاز المراقبة باكتشاف مشكلة وقد فشل بالفعل بأوقات $TIMES$. ",
"description": "يتم استخدام مجموعة الحروف هذه كنص لجهة المراقبة. ",
"placeholders": {
"times": {
"content": "1 دولار ",
"example": "3 "
}
}
},
"domain_blocking_enabled": {
"message": "السماح بحجب النطاق (يمكن أن يؤدي ذلك الى حدوث مشاكل في الصفحات التي لا تسمح باستخدام AdBlockers) ",
"description": "يتم استخدام مجموعة الحروف هذه كعلامة مميزة لمفتاح حجب النطاق "
},
"domain_blocking_enabled_title": {
"message": "السماح بحجب النطاق (يمكن أن يؤدي ذلك الى حدوث مشاكل في الصفحات التي لا تسمح باستخدام AdBlockers) ",
"description": "يتم استخدام مجموعة الحروف هذه كعنوان لمفتاح حجب النطاق "
},
"log_ping_blocked": {
"message": "تم منع عملية مراجعة الوصلة المرجعية هذه ",
"description": "يتم استخدام مجموعة الحروف هذه في مراجعة الوصلات المرجعية في سجل ClearURLs. "
},
"ping_blocking_enabled": {
"message": "اعاقة مراجعة الوصلات المرجعية (أنظر أيضا <a href='https://html.spec.whatwg.org/multipage/links.html#hyperlink-auditing' target='_blank'>هذه المقالة</a>) ",
"description": "يتم استخدام مجموعة الحروف هذه كعلامة مميزة لمفتاح منع مراجعة الوصلة المرجعية "
},
"ping_blocking_enabled_title": {
"message": "حظر مراجعة الوصلات المرجعية ",
"description": "يتم استخدام مجموعة الحروف هذه كعنوان لمفتاح منع مراجعة الوصلة المرجعية "
},
"extension_description": {
"message": "ازالة عناصر التتبع من عناوين URL. ",
"description": "وصف اللاحقة (بحد أقصى 132 حرفا) "
},
"eTag_filtering_log": {
"message": "تم ازالة عنوان ETag من هذا الطلب ",
"description": "يتم استخدام مجموعة الحروف هذه في ترشيح بيانات عنوان ETag في سجل ClearURLs. "
},
"eTag_filtering_enabled": {
"message": "ترشيح بيانات عناوين ETag من الطلبات (أنظر أيضا <a href='https://en.wikipedia.org/wiki/HTTP_ETag#Tracking_using_ETags' target='_blank'>هذه المقالة</a>) ",
"description": "يتم استخدام مجموعة الحروف هذه كعلامة مميزة لمفتاح ترشيح بيانات عنوان ETag "
},
"eTag_filtering_enabled_title": {
"message": "ترشيح بيانات عناوين ETag. ملحوظة : يجب اخلاء الذاكرة الوسيطة قبل الاستخدام الأول. ",
"description": "يتم استخدام مجموعة الحروف هذه كعنوان لمفتاح ترشيح بيانات عنوان ETag "
},
"popup_html_rules_status_head_title": {
"message": " ",
"description": "غير مطلوب ، لمنع الاستثناءات فقط "
},
"popup_html_statistics_percentage_title": {
"message": " ",
"description": "غير مطلوب ، لمنع الاستثناءات فقط "
},
"popup_html_statistics_blocked_title": {
"message": " ",
"description": "غير مطلوب ، لمنع الاستثناءات فقط "
},
"popup_html_statistics_elements_title": {
"message": " ",
"description": "غير مطلوب ، لمنع الاستثناءات فقط "
},
"popup_html_statistics_head_title": {
"message": " ",
"description": "غير مطلوب ، لمنع الاستثناءات فقط "
},
"popup_html_configs_head_title": {
"message": " ",
"description": "غير مطلوب ، لمنع الاستثناءات فقط "
},
"context_menu_enabled_title": {
"message": " ",
"description": "غير مطلوب ، لمنع الاستثناءات فقط"
}
}

View File

@@ -1,378 +0,0 @@
{
"hash_status_code_1": {
"message": "à jour",
"description": "Les règles ClearURLs sont à jour."
},
"hash_status_code_2": {
"message": "mis à jour",
"description": "Cela indique la réussite des mises à jour des règles de ClearURLs."
},
"hash_status_code_3": {
"message": "mise à jour disponible",
"description": "Une mise à jour des règles de ClearURLs est disponible."
},
"hash_status_code_4": {
"message": "erreur",
"description": "ClearURLs na pas pu démarrer correctement."
},
"hash_status_code_5": {
"message": "Oh non! Un problème est survenu!",
"description": "Un problème est survenu pendant la mis à jour des règles ClearURLs"
},
"log_redirect": {
"message": "Cette URL a été redirigée",
"description": "Cette ligne est pour les redirections par le protocole ClearURL."
},
"log_domain_blocked": {
"message": "Ce domaine est bloqué",
"description": "Cette ligne est pour les domaines bloqués dans le journal de ClearURLs."
},
"check_os_log": {
"message": "[ClearURLs]: Une base de données pour les URL a été ajoutée",
"description": "Cette ligne est utilisée au démarrage du journal de ClearURL."
},
"log_html_page_title": {
"message": "Journal d'événements de ClearURLs",
"description": "Cette ligne est utilisée comme en-tête sur la page de journal."
},
"log_html_table_head_1": {
"message": "Avant traitement",
"description": "Cette ligne est utilisée comme titre de tableau sur la page du journal."
},
"log_html_table_head_2": {
"message": "Après traitement",
"description": "Cette ligne est utilisée comme titre de tableau sur la page du journal."
},
"log_html_table_head_3": {
"message": "Règle",
"description": "Cette ligne est utilisée comme titre de tableau sur la page du journal."
},
"log_html_table_head_4": {
"message": "Date",
"description": "Cette ligne est utilisée comme titre de tableau sur la page du journal."
},
"log_html_reset_button": {
"message": "Remise à zéro",
"description": "Cette ligne est utilisée comme titre de tableau sur la page du journal."
},
"log_html_reset_button_title": {
"message": "Réinitialiser entièrement le journal",
"description": "Cette ligne est utilisée comme titre pour le bouton de réinitialisation sur la page de journal."
},
"popup_html_configs_head": {
"message": "Paramétres",
"description": "Cette ligne est utilisée comme titre pour les paramétres de la page des options."
},
"popup_html_configs_switch_filter": {
"message": "Filtre",
"description": "Cette ligne est utilisée comme nom pour le bouton de changement de filtre de la page des options."
},
"popup_html_configs_switch_filter_title": {
"message": "L'interrupteur de l'extension active ou désactive la fonction de nettoyage de ClearURLs",
"description": "Cette ligne est utilisée comme titre pour le bouton de changement de filtre sur la page des options."
},
"popup_html_configs_switch_log": {
"message": "Journalisation",
"description": "Cette ligne est utilisée comme nom pour le bouton du interrupteur de journalisation d'evenements sur la page des options."
},
"popup_html_configs_switch_log_title": {
"message": "Le journal est sauvé localement. Si vous navez pas besoin de le consulter, nous vous déconseillons de l'activer.",
"description": "Cette ligne est utilisée comme titre pour le bouton du interrupteur de journalisation sur la page des options."
},
"popup_html_configs_switch_badges": {
"message": "Compteur",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"popup_html_configs_switch_badges_title": {
"message": "Afficher le nombre d'URL nettoyées",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"popup_html_statistics_head": {
"message": "Statistiques",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"popup_html_statistics_elements": {
"message": "Éléments",
"description": "Sert à afficher la de la fonction sur la page des options."
},
"popup_html_statistics_blocked": {
"message": "Nb. de bloqués",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"popup_html_statistics_percentage": {
"message": "Pourcentage",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"popup_html_statistics_reset_button": {
"message": "Remettre à zéro",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"popup_html_statistics_reset_button_title": {
"message": "Remettre à zéro les statistiques globales",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"popup_html_rules_status_head": {
"message": "Règles de la base de données",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"popup_html_log_head": {
"message": "Journal",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"popup_html_log_head_title": {
"message": "Consulter le journal",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"popup_html_report_button": {
"message": "Signaler cette URL",
"description": "Annotation : actuellement non utilisé."
},
"popup_html_report_button_title": {
"message": "Signaler un problème sur cette URL",
"description": "actuellement non utilisé."
},
"core_save_on_disk": {
"message": "[ClearURLs]: Sauvegarder sur le disque.",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"core_error": {
"message": "[ClearURLs]: Lextension na pas pu démarrer.",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"configs_switch_statistics": {
"message": "Statistiques",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"configs_switch_statistics_title": {
"message": "Activer ou désactiver les statistiques",
"description": "Sert à afficher la descriptio de la fonction sur la page des options."
},
"settings_html_page_title": {
"message": "Paramétrages de ClearURLs",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"badged_color_label": {
"message": "Couleur du compteur",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"setting_html_reset_button": {
"message": "Remettre à létat initial",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"setting_html_reset_button_title": {
"message": "Réinitialisation de tous les paramètres",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"setting_rule_url_label": {
"message": "L'URL du fichier data.json (règles)",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"settings_html_save_button": {
"message": "Sauvegarder et redémarrer lextension",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"settings_html_save_button_title": {
"message": "Sauvegarde les paramétres",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"setting_hash_url_label": {
"message": "L'URL du fichier rules.hash (signature de contrôle)",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Types de requête (webRequest)</a> (niveau expert)",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"setting_report_server_label": {
"message": "Serveur pour signaler des URL",
"description": "Note : actuellement non utilisé."
},
"success_report_url": {
"message": "Nous avons reçu votre signalement. Nous allons vérifier cette URL.",
"description": "Note : actuellement non utilisé."
},
"error_report_url": {
"message": "Il semble que cette URL a déjà été signalé.",
"description": "Note : actuellement non utilisé."
},
"donate_button": {
"message": "Soutenir le créateur de ClearURLs.",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"clipboard_copy_link": {
"message": "Copier lURL sans les traqueurs",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"context_menu_enabled": {
"message": "Activer ClearUrls dans le menu contextuel (le clic droit sur une page)",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"history_listener_enabled": {
"message": "Empêcher les sites daller fouiner dans l'historique. (<a href='https://developer.mozilla.org/fr/docs/Web/Guide/DOM/Manipuler_historique_du_navigateur' target='_blank'>La méthode utilisée est replaceState()</a>)",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"cleaning_tool_page_title": {
"message": "Outil de nettoyage pour ClearURLs",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"cleaning_tool_description": {
"message": "Ici, vous pouvez déposer des URL et ClearURLs les nettoiera par un clic sur le bouton vert. Vous pouvez mettre plusieurs URL mais chaque URL devra être mise sur une ligne séparée.",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"cleaning_tool_btn": {
"message": "Nettoyer les URL",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"cleaning_tool_dirty_urls_label": {
"message": "Coller ici les URL à nettoyer :",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"cleaning_tool_clean_urls_label": {
"message": "Vous trouverez ici les URL nettoyées :",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"local_hosts_skipping": {
"message": "Ignorer les IP des hôtes locaux, Box, routeurs, serveurs, etc. (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16, 127.0.0.1, localhost)",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"local_hosts_skipping_title": {
"message": "Ignorer les IP ou URL sur les hôtes locaux, Box, routeur, serveur ...",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"log_html_export_button": {
"message": "Exporter",
"description": "Cette ligne est utilisée pour le bouton d'exportation sur la page du journal."
},
"log_html_export_button_title": {
"message": "Exporter le journal",
"description": "Cette ligne est utilisée comme titre pour le bouton d'exportation de la page du journal."
},
"log_html_import_button": {
"message": "Importer",
"description": "Cette ligne est utilisée pour le bouton d'importation sur la page de journal."
},
"log_html_import_button_title": {
"message": "Importer le journal",
"description": "Cette ligne est utilisée comme titre pour le bouton d'importation sur la page de journal."
},
"setting_html_export_button": {
"message": "Exporter",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"setting_html_export_button_title": {
"message": "Tout exporter",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"setting_html_import_button": {
"message": "Importer",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"setting_html_import_button_title": {
"message": "Tout importer",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"setting_log_limit_label": {
"message": "Nombre déléments à enregistrer dans le journal, $LIMIT$ de -1 à linfini",
"description": "Sert à afficher la description de la fonction sur la page des options.",
"placeholders": {
"limit": {
"content": "$1",
"example": "100"
}
}
},
"blocked_html_title": {
"message": "Site Internet bloqué par <b>ClearURLs</b>",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"blocked_html_body": {
"message": "Ce site Internet a été bloqué par lextension <b>ClearURLs</b> ; il est identifié comme étant problématique, soit publicitaire, soit despionnage ; vous pouvez désactiver temporairement le blocage du site soit dans les paramétres, soit dans lextension afin de vous y connecter. Il vous faudra raffraichir la page, soit par le navigateur, soit avec le bouton ci-dessous.",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"blocked_html_button": {
"message": "Se connecter",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"referral_marketing_enabled": {
"message": "Permettre certaines actions commerciales",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"referral_marketing_enabled_title": {
"message": "Permettre certaines actions commerciales",
"description": "Sert à afficher la description de la fonction sur la switch."
},
"watchdog": {
"message": "[ClearURLs]: Watchdog, très petit programme qui surveille les attaques de la mémoire vive, a détecté $TIMES$ problème(s)",
"description": "Utilisé pour la description du Watchdog.",
"placeholders": {
"times": {
"content": "$1",
"example": "3"
}
}
},
"domain_blocking_enabled": {
"message": "Bloquer les atteintes à la vie privée. Cependant, des sites peuvent detecter cette technique et refuser de marcher délibérément voire même afficher des avertissements",
"description": "Sert à afficher la description de la fonction sur la page des options."
},
"domain_blocking_enabled_title": {
"message": "Autoriser le blocage par domaine (ex : example.com) ; peut poser des problèmes d'affichage sur des sites refusant les bloqueurs de contenu",
"description": "Cette ligne est utilisée comme titre pour le bouton de blocage de domaine."
},
"log_ping_blocked": {
"message": "Bloquer l'audit des clics souris sur les liens hypertextes",
"description": "Cette ligne est utilisée pour de l'audit (espionnage) des liens hypertextes dans le journal ClearURLs."
},
"ping_blocking_enabled": {
"message": "Bloquer l'audit des clics souris sur les liens hypertextes (voyez <a href='https://html.spec.whatwg.org/multipage/links.html#hyperlink-auditing' target='_blank'>cet article en anglais</a>)",
"description": "Utilisé pour le bouton activer/désactiver l'audit (espionnages) des liens hypertextes."
},
"ping_blocking_enabled_title": {
"message": "Bloquer lespionnage par audit",
"description": "Utilisé comme titre pour le bouton de laudit des liens hypertextes."
},
"extension_description": {
"message": "Retirer les traqueurs dans les adresses Internet.",
"description": "Description des fonctions ; utilisez maximum 132 caractères."
},
"eTag_filtering_log": {
"message": "Lidentification ETag a été supprimée",
"description": "Utilisé par le journal de ClearUrls et indiquer ce qui a été nettoyé"
},
"eTag_filtering_enabled": {
"message": "Filtrer ETag ; les sites mettent dans le cache du Navigateur, ou Système dExploitation, un identifiant pour vous espionner",
"description": "Titre par le bouton de filtrage ETag"
},
"eTag_filtering_enabled_title": {
"message": "Filtre les identifications ETag, vous devez vider le cache lors de la premiere utilisation",
"description": "Titre par le bouton de filtrage ETag"
},
"popup_html_rules_status_head_title": {
"message": " ",
"description": "pas nécessaire, seulement pour éviter les exceptions"
},
"popup_html_statistics_percentage_title": {
"message": " ",
"description": "pas nécessaire, seulement pour éviter les exceptions"
},
"popup_html_statistics_blocked_title": {
"message": " ",
"description": "pas nécessaire, seulement pour éviter les exceptions"
},
"popup_html_statistics_elements_title": {
"message": " ",
"description": "pas nécessaire, seulement pour éviter les exceptions"
},
"popup_html_statistics_head_title": {
"message": " ",
"description": "pas nécessaire, seulement pour éviter les exceptions"
},
"popup_html_configs_head_title": {
"message": " ",
"description": "pas nécessaire, seulement pour éviter les exceptions"
},
"context_menu_enabled_title": {
"message": " ",
"description": "pas nécessaire, seulement pour éviter les exceptions"
}
}

View File

@@ -1,378 +0,0 @@
{
"hash_status_code_1": {
"message": "up to date",
"description": "Kode status ini mengatakan, bahwa tidak ada pembaruan yang tersedia untuk aturan ClearURLs dan semuanya mutakhir."
},
"hash_status_code_2": {
"message": "diperbarui",
"description": "Kode status ini mengatakan, rule ClearURLs berhasil diperbarui."
},
"hash_status_code_3": {
"message": "update tersedia",
"description": "Kode status ini mengatakan, bahwa update tersedia untuk rule ClearURLs."
},
"hash_status_code_4": {
"message": "error",
"description": "Kode status ini mengatakan, bahwa ClearURLs tidak dapat dimulai dengan benar."
},
"hash_status_code_5": {
"message": "Oops ada sesuatu yang salah!",
"description": "Kode status ini mengatakan, sebuah error terjadi ketika mengupdate rule ClearURLs."
},
"log_redirect": {
"message": "Url ini dialihkan",
"description": "String ini digunakan pada pengalihan di log ClearURLs."
},
"log_domain_blocked": {
"message": "Domain ini di blokir",
"description": "String ini digunakan pada domain yang diblokir di log ClearURLs."
},
"check_os_log": {
"message": "[ClearURLs]: Log listener ditambahkan.",
"description": "String ini digunakan pada log startup ClearURLs."
},
"log_html_page_title": {
"message": "Log dari ClearURLs",
"description": "String ini digunakan sebagai header dalam laman log."
},
"log_html_table_head_1": {
"message": "Sebelum diproses",
"description": "String ini digunakan sebagai judul tabel pada laman log."
},
"log_html_table_head_2": {
"message": "Setelah diproses",
"description": "String ini digunakan sebagai judul tabel pada laman log."
},
"log_html_table_head_3": {
"message": "Aturan",
"description": "String ini digunakan sebagai judul tabel pada laman log."
},
"log_html_table_head_4": {
"message": "Waktu",
"description": "String ini digunakan sebagai judul tabel pada laman log."
},
"log_html_reset_button": {
"message": "Reset",
"description": "String ini digunakan untuk tombol reset pada laman log."
},
"log_html_reset_button_title": {
"message": "Reset log global",
"description": "String ini digunakan sebagai judul untuk tombol reset pada laman log."
},
"popup_html_configs_head": {
"message": "Konfigurasi",
"description": "String ini digunakan sebagai judul untuk konfigurasi pada laman popup."
},
"popup_html_configs_switch_filter": {
"message": "Filter",
"description": "String ini digunakan sebagai nama untuk tombol filter switch pada laman popup."
},
"popup_html_configs_switch_filter_title": {
"message": "Filters switch mengaktifkan fungsi membersihkan dari ClearURLs. Jika kamu menonaktifkan opsi ini, seluruh addon akan nonaktif",
"description": "String ini digunakan sebagai judul untuk tombol filter switch pada laman popup."
},
"popup_html_configs_switch_log": {
"message": "Mencatat",
"description": "String ini digunakan sebagai nama untuk tombol logging switch pada laman popup."
},
"popup_html_configs_switch_log_title": {
"message": "Log hanya disimpan secara lokal. Kami tidak menyarankan fitur ini jika Anda tidak membutuhkannya",
"description": "String ini digunakan sebagai judul untuk tombol logging switch pada laman popup."
},
"popup_html_configs_switch_badges": {
"message": "Lencana",
"description": "String ini digunakan sebagai nama untuk tombol lencana pada laman popup."
},
"popup_html_configs_switch_badges_title": {
"message": "Menunjukkan jumlah url yang dibersihkan",
"description": "String ini digunakan sebagai judul untuk tombol switch lencana pada laman popup."
},
"popup_html_statistics_head": {
"message": "Statistik",
"description": "String ini digunakan sebagai judul untuk statistik pada laman popup."
},
"popup_html_statistics_elements": {
"message": "Elemen",
"description": "String ini digunakan sebagai nama untuk elemen pada laman popup."
},
"popup_html_statistics_blocked": {
"message": "Diblokir",
"description": "String ini digunakan sebagai nama untuk elemen yang diblokir pada laman popup."
},
"popup_html_statistics_percentage": {
"message": "Persentase",
"description": "String ini digunakan sebagai nama untuk persentase elemen yang diblokir pada laman popup."
},
"popup_html_statistics_reset_button": {
"message": "Reset",
"description": "String ini digunakan sebagai nama untuk tombol reset statistik pada laman popup."
},
"popup_html_statistics_reset_button_title": {
"message": "Reset statistik global",
"description": "String ini digunakan sebagai judul untuk tombol reset statistik pada laman popup."
},
"popup_html_rules_status_head": {
"message": "Status aturan",
"description": "String ini digunakan sebagai judul untuk bagian status aturan pada laman popup."
},
"popup_html_log_head": {
"message": "Log",
"description": "String ini digunakan sebagai nama untuk tombol log pada laman popup."
},
"popup_html_log_head_title": {
"message": "Membuka log",
"description": "String ini digunakan sebagai judul untuk tombol log dalam laman popup."
},
"popup_html_report_button": {
"message": "Laporkan URL ini",
"description": "Note: Tidak digunakan saat ini."
},
"popup_html_report_button_title": {
"message": "Laporkan URL saat ini dari tab ini.",
"description": "Tidak digunakan saat ini."
},
"core_save_on_disk": {
"message": "[ClearURLs]: Simpan dalam disk.",
"description": "String ini digunakan untuk memberitahu user, ClearURLs menyimpan aturan pada disk."
},
"core_error": {
"message": "[ClearURLs]: Addon tidak dapat mulai.",
"description": "String ini digunakan untuk memberitahu user, bahwa ClearURLs tidak dapat dimulai."
},
"configs_switch_statistics": {
"message": "Statistik",
"description": "String ini digunaakan sebagai nama untuk tombol switch statistik pada laman popup."
},
"configs_switch_statistics_title": {
"message": "Aktivasi atau deaktivasi fungsi statistik",
"description": "String ini digunakan sebagai judul untuk tombol switch statistik pada laman popup."
},
"settings_html_page_title": {
"message": "Pengaturan ClearURLs",
"description": "String ini digunakan sebagai judul dalam laman pengaturan."
},
"badged_color_label": {
"message": "Warna lencana",
"description": "String ini digunakan sebagai nama untuk label warna lencana."
},
"setting_html_reset_button": {
"message": "Reset",
"description": "String ini digunakan sebagai nama untuk tombol reset dalam laman pengaturan."
},
"setting_html_reset_button_title": {
"message": "Reset semua",
"description": "String ini digunakan sebagai judul untuk tombol reset dalam laman pengaturan."
},
"setting_rule_url_label": {
"message": "Url ke file data.json (aturan)",
"description": "String ini digunakan sebagai nama untuk label aturan url."
},
"settings_html_save_button": {
"message": "Simpan & muat-ulang addon",
"description": "String ini digunakan sebagai nama untuk tombol simpan&muat-ulang pada laman pengaturan."
},
"settings_html_save_button_title": {
"message": "Simpan pengaturan",
"description": "String ini digunakan sebagai judul untuk tombol simpan&muat-ulang pada laman pengaturan."
},
"setting_hash_url_label": {
"message": "Url ke file rules.hash (hash)",
"description": "String ini digunakan sebagai nama untuk label url rule.hash."
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Tipe request</a> (expert level)",
"description": "String ini digunakan sebagai nama untuk label tipe."
},
"setting_report_server_label": {
"message": "Laporkan server untuk URL",
"description": "Note: Tidak digunakan saat ini."
},
"success_report_url": {
"message": "URL berhasil dilaporkan. Kami akan mengecek URL ini segera.",
"description": "Note: Tidak digunakan saat ini."
},
"error_report_url": {
"message": "Sepertinya URL ini telah dilaporkan.",
"description": "Note: Tidak digunakan saat ini."
},
"donate_button": {
"message": "Donasi untuk pencipta ClearURLs.",
"description": "String ini digunakan untuk merujuk ke laman donasi."
},
"clipboard_copy_link": {
"message": "Salin lokasi link bersih",
"description": "String ini digunakan dalam konteks menu untuk menyalin link bersih."
},
"context_menu_enabled": {
"message": "Tampilkan entri menu konteks",
"description": "String ini digunakan untuk mengaktifkan entri menu konteks untuk menyalin link bersih."
},
"history_listener_enabled": {
"message": "Mencegah tracking injection atas API history (See also: <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>The replaceState() method</a>)",
"description": "String ini digunakan sebagai nama untuk label listener API history."
},
"cleaning_tool_page_title": {
"message": "tool pembersih CleanURLs",
"description": "String ini digunakan sebagai judul pada laman tool pembersih."
},
"cleaning_tool_description": {
"message": "Dengan alat ini Anda dapat menempelkan URL dan ClearURLs akan membersihkan URL setelah mengklik tombol hijau. Anda dapat menempelkan beberapa URL sekaligus, tetapi setiap URL harus berada di baris yang terpisah.",
"description": "String ini digunakan sebagai deskripsi alat pembersih."
},
"cleaning_tool_btn": {
"message": "Bersihkan URL",
"description": "String ini digunakan sebagai nama untuk tombol bersihkan url."
},
"cleaning_tool_dirty_urls_label": {
"message": "Disini anda dapat menempelkan URL kotor:",
"description": "String ini digunakan sebagai judul pada laman alat pembersih untuk URL kotor."
},
"cleaning_tool_clean_urls_label": {
"message": "Disini anda dapat menemukan URL yang telah dibersihkan:",
"description": "String ini digunakan sebagai judul pada laman alat pembersih untuk URL bersih."
},
"local_hosts_skipping": {
"message": "Melewati URLs pada host lokal (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16, 127.0.0.1, localhost)",
"description": "String ini digunakan sebagai label untuk switch local host skipping"
},
"local_hosts_skipping_title": {
"message": "Lewati URL pada host lokal",
"description": "String ini digunakan sebagai judul untuk switch host skipping lokal"
},
"log_html_export_button": {
"message": "Eksport",
"description": "String ini digunakan untuk tombol eksport pada laman log."
},
"log_html_export_button_title": {
"message": "Mengeksport log global",
"description": "String ini digunakan sebagai judul untuk tombol eksport pada laman log."
},
"log_html_import_button": {
"message": "Import",
"description": "String ini digunakan untuk tombol import pada laman log."
},
"log_html_import_button_title": {
"message": "Mengimport log global",
"description": "String ini digunakan sebagai judul untuk tombol import pada laman log."
},
"setting_html_export_button": {
"message": "Eksport",
"description": "String ini digunakan sebagai nama untuk tombol eksport pada laman pengaturan."
},
"setting_html_export_button_title": {
"message": "Eksport semua",
"description": "String ini digunakan sebagai judul untuk tombol eksport pada laman pengaturan."
},
"setting_html_import_button": {
"message": "Import",
"description": "String ini digunakan sebagai nama untuk tombol reset pada laman pengaturan."
},
"setting_html_import_button_title": {
"message": "Import semua",
"description": "String ini digunakan sebagai judul untuk tombol import pada laman pengaturan."
},
"setting_log_limit_label": {
"message": "Membatasi log ke entri $LIMIT$.",
"description": "String ini digunakan sebagai nama untuk label batas label.",
"placeholders": {
"limit": {
"content": "$1",
"example": "100"
}
}
},
"blocked_html_title": {
"message": "Situs ini diblokir oleh <b>ClearURLs</b>",
"description": "String ini digunakan sebagai judul pada laman situs yang diblokir."
},
"blocked_html_body": {
"message": "Situs ini diblokir oleh Add-on <b>ClearURLs</b>, karena kami mengidentifikasi situs ini sebagai layanan periklanan dan/atau pelacakan. Untuk mengunjungi situs ini, Anda harus menonaktifkan sementara Add-on atau menonaktifkan pemblokiran domain di pengaturan ClearURLs. Setelah ini Anda dapat mengklik tombol di bawah ini untuk memuat halaman.",
"description": "String ini digunakan sebagai body pada laman situs yang diblokir."
},
"blocked_html_button": {
"message": "Kunjungi laman",
"description": "String ini digunakan sebagai tombol pada laman situs yang diblokir."
},
"referral_marketing_enabled": {
"message": "Izinkan marketing referral",
"description": "String ini digunakan sebagai label pada switch marketing referral"
},
"referral_marketing_enabled_title": {
"message": "Izinkan marketing referral",
"description": "String ini digunakan sebagai judul pada switch marketing referral"
},
"watchdog": {
"message": "[ClearURLs]: Watchdog telah mendeteksi masalah dan gagal sebanyak $TIMES$ kali.",
"description": "String ini digunakan sebagai text untuk wacthdog",
"placeholders": {
"times": {
"content": "$1",
"example": "3"
}
}
},
"domain_blocking_enabled": {
"message": "Izinkan pemblokiran domain (Dapat menyebabkan masalah pada halaman yang tidak mengizinkan AdBlocker)",
"description": "String ini digunakan sebagai label pada switch pemblokiran domain"
},
"domain_blocking_enabled_title": {
"message": "Izinkan pemblokiran domain (Dapat menyebabkan masalah pada halaman yang tidak mengizinkan AdBlocker)",
"description": "String ini digunakan sebagai judul untuk switch pemblokiran domain"
},
"log_ping_blocked": {
"message": "Pengauditan hyperlink ini diblokir",
"description": "String ini digunakan pada pengauditan hyperlink di log ClearURLs."
},
"ping_blocking_enabled": {
"message": "Memblokir audit hyperlink (Lihat juga <a href='https://html.spec.whatwg.org/multipage/links.html#hyperlink-auditing' target='_blank'>artikel ini</a>)",
"description": "String ini digunakan sebagai label untuk switch pengauditan hyperlink"
},
"ping_blocking_enabled_title": {
"message": "Blokir pengauditan hyperlink",
"description": "String ini digunakan sebagai judul pada switch pengauditan hyperlink"
},
"extension_description": {
"message": "Hapus elemen pelacak dari URL.",
"description": "Deskripsi ekstensi (max. 132 karakter)"
},
"eTag_filtering_log": {
"message": "Header ETag telah dihapus dari request ini",
"description": "String ini digunakan pada pemfilteran header ETag pada log ClearURLs."
},
"eTag_filtering_enabled": {
"message": "Memfilter header ETag dari permintaan (Lihat juga <a href='https://en.wikipedia.org/wiki/HTTP_ETag#Tracking_using_ETags' target='_blank'>artikel ini</a>)",
"description": "String ini digunakan sebagai label untuk switch pemfilteran ETag header"
},
"eTag_filtering_enabled_title": {
"message": "Filter header ETag. Petunjuk: Cache harus dibersihkan sebelum digunakan pertama kali.",
"description": "String ini digunakan sebagai judul untuk switch pemfilteran ETag header"
},
"popup_html_rules_status_head_title": {
"message": " ",
"description": "tidak diperlukan, hanya untuk mencegah pengecualian"
},
"popup_html_statistics_percentage_title": {
"message": " ",
"description": "tidak diperlukan, hanya untuk mencegah pengecualian"
},
"popup_html_statistics_blocked_title": {
"message": " ",
"description": "tidak diperlukan, hanya untuk mencegah pengecualian"
},
"popup_html_statistics_elements_title": {
"message": " ",
"description": "tidak diperlukan, hanya untuk mencegah pengecualian"
},
"popup_html_statistics_head_title": {
"message": " ",
"description": "tidak diperlukan, hanya untuk mencegah pengecualian"
},
"popup_html_configs_head_title": {
"message": " ",
"description": "tidak diperlukan, hanya untuk mencegah pengecualian"
},
"context_menu_enabled_title": {
"message": " ",
"description": "tidak diperlukan, hanya untuk mencegah pengecualian"
}
}

View File

@@ -1,378 +0,0 @@
{
"hash_status_code_1": {
"message": "tutto aggiornato",
"description": "Questo codice di stato indica che non sono disponibili aggiornamenti per le regole di ClearURLs e che tutto è aggiornato."
},
"hash_status_code_2": {
"message": "aggiornate",
"description": "Questo codice di stato indica che le regole di ClearURLs sono state aggiornate correttamente."
},
"hash_status_code_3": {
"message": "aggiornamento disponibile",
"description": "Questo codice di stato indica che è disponibile un aggiornamento delle regole di ClearURLs."
},
"hash_status_code_4": {
"message": "errore",
"description": "Questo codice di stato indica che ClearURLs non può essere avviato correttamente."
},
"hash_status_code_5": {
"message": "Oops qualcosa è andato storto!",
"description": "Questo codice di stato indica che si è verificato un errore durante l'aggiornamento delle regole di ClearURLs."
},
"log_redirect": {
"message": "Questo URL viene reindirizzato",
"description": "Questa stringa è usata per i reindirizzamenti nel log di ClearURLs."
},
"log_domain_blocked": {
"message": "Questo dominio è bloccato",
"description": "Questa stringa è usata per i domini bloccati nel log di ClearURLs."
},
"check_os_log": {
"message": "[ClearURLs]: Log listener è stato aggiunto.",
"description": "Questa stringa è usata all'avvio del log di ClearURLs."
},
"log_html_page_title": {
"message": "Log di ClearURLs",
"description": "Questa stringa viene utilizzata come header nella pagina di log."
},
"log_html_table_head_1": {
"message": "Prima dell'elaborazione",
"description": "Questa stringa è usata come titolo della tabella nella pagina di log."
},
"log_html_table_head_2": {
"message": "Dopo l'elaborazione",
"description": "Questa stringa è usata come titolo della tabella nella pagina di log."
},
"log_html_table_head_3": {
"message": "Regola",
"description": "Questa stringa è usata come titolo della tabella nella pagina di log."
},
"log_html_table_head_4": {
"message": "Data e ora",
"description": "Questa stringa è usata come titolo della tabella nella pagina di log."
},
"log_html_reset_button": {
"message": "Ripristina",
"description": "Questa stringa è usata per il pulsante di reset nella pagina di log."
},
"log_html_reset_button_title": {
"message": "Azzera il log globale",
"description": "Questa stringa è usata come titolo per il pulsante di reset nella pagina di log."
},
"popup_html_configs_head": {
"message": "Configurazioni",
"description": "Questa stringa è usata come titolo per le configurazioni nella pagina popup."
},
"popup_html_configs_switch_filter": {
"message": "Filtra",
"description": "Questa stringa è usata come nome per il pulsante di attivazione del filtro nella pagina popup."
},
"popup_html_configs_switch_filter_title": {
"message": "L'interruttore dei filtri attiva la funzione di pulizia di ClearURLs. Se si disabilita questa opzione, l'intero componente aggiuntivo è disabilitato.",
"description": "Questa stringa è usata come titolo per il pulsante di attivazione del filtro nella pagina popup."
},
"popup_html_configs_switch_log": {
"message": "Log",
"description": "Questa stringa è usata come nome per il pulsante di attivazione della registrazione nella pagina popup."
},
"popup_html_configs_switch_log_title": {
"message": "Il registro viene salvato solo in locale. Si sconsiglia di utilizzare questa funzione se non ne hai bisogno.",
"description": "Questa stringa è usata come titolo per il pulsante di attivazione della registrazione nella pagina popup."
},
"popup_html_configs_switch_badges": {
"message": "Contatore",
"description": "Questa stringa è usata come nome per il pulsante di attivazione dei badge nella pagina popup."
},
"popup_html_configs_switch_badges_title": {
"message": "Mostra il numero di url puliti",
"description": "Questa stringa è usata come titolo per il pulsante di attivazione dei badge nella pagina popup."
},
"popup_html_statistics_head": {
"message": "Statistiche",
"description": "Questa stringa è usata come titolo per le statistiche nella pagina popup."
},
"popup_html_statistics_elements": {
"message": "Elementi",
"description": "Questa stringa è usata come nome per gli elementi della pagina popup."
},
"popup_html_statistics_blocked": {
"message": "Bloccati",
"description": "Questa stringa è usata come nome per gli elementi bloccati nella pagina popup."
},
"popup_html_statistics_percentage": {
"message": "Percentuale",
"description": "Questa stringa è usata come nome per la percentuale di elementi bloccati nella pagina popup."
},
"popup_html_statistics_reset_button": {
"message": "Ripristina",
"description": "Questa stringa è usata come nome per il pulsante di reset delle statistiche nella pagina popup."
},
"popup_html_statistics_reset_button_title": {
"message": "Ripristina le statistiche globali",
"description": "Questa stringa è usata come titolo per il pulsante di reset delle statistiche nella pagina popup."
},
"popup_html_rules_status_head": {
"message": "Regole-Stato",
"description": "Questa stringa è usata come titolo per la sezione rules-status nella pagina popup."
},
"popup_html_log_head": {
"message": "Log",
"description": "Questa stringa è usata come nome per il pulsante di log nella pagina popup."
},
"popup_html_log_head_title": {
"message": "Apri il file di log",
"description": "Questa stringa è usata come titolo per il pulsante di log nella pagina popup."
},
"popup_html_report_button": {
"message": "Segnala l'url corrente",
"description": "Nota: attualmente non utilizzato."
},
"popup_html_report_button_title": {
"message": "Segnala l'URL corrente da questa scheda.",
"description": "Attualmente non utilizzato."
},
"core_save_on_disk": {
"message": "[ClearURLs]: Salva sul disco.",
"description": "Questa stringa è usata per dire all'utente che ClearURLs ha salvato le impostazioni su disco."
},
"core_error": {
"message": "[ClearURLs]: Il componente aggiuntivo non può essere avviato.",
"description": "Questa stringa è usata per dire all'utente che ClearURLs non può essere avviato."
},
"configs_switch_statistics": {
"message": "Statistiche",
"description": "Questa stringa è usata come nome per il pulsante di attivazione delle statistiche nella pagina popup."
},
"configs_switch_statistics_title": {
"message": "Attiva o disattiva le statistiche",
"description": "Questa stringa è usata come titolo per il pulsante di attivazione delle statistiche nella pagina popup."
},
"settings_html_page_title": {
"message": "Impostazioni da ClearURLs",
"description": "Questa stringa è usata come titolo nella pagina delle impostazioni."
},
"badged_color_label": {
"message": "Colore del badge",
"description": "Questa stringa è usata come nome per l'etichetta del colore del badge."
},
"setting_html_reset_button": {
"message": "Ripristina",
"description": "Questa stringa è usata come nome per il pulsante di reset nella pagina delle impostazioni."
},
"setting_html_reset_button_title": {
"message": "Ripristina tutto",
"description": "Questa stringa è usata come titolo per il pulsante di reset nella pagina delle impostazioni."
},
"setting_rule_url_label": {
"message": "Indirizzo del file data.json (regole)",
"description": "Questa stringa è usata come nome per l'etichetta url della regola."
},
"settings_html_save_button": {
"message": "Salva e ricarica il componente aggiuntivo",
"description": "Questa stringa è usata come nome per il pulsante salva&ricarica nella pagina delle impostazioni."
},
"settings_html_save_button_title": {
"message": "Salva le impostazioni",
"description": "Questa stringa è usata come titolo per il pulsante salva&ricarica nella pagina delle impostazioni."
},
"setting_hash_url_label": {
"message": "Indirizzo del file rules.hash (hash)",
"description": "Questa stringa è usata come nome per l'etichetta dell'url rule.hash."
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Request types</a> (livello esperto)\n",
"description": "Questa stringa è usata come nome per l'etichetta dei tipi."
},
"setting_report_server_label": {
"message": "Server di report per gli URL",
"description": "Nota: attualmente non utilizzato."
},
"success_report_url": {
"message": "L'URL è stato segnalato correttamente. Verificheremo l'URL quanto prima.",
"description": "Nota: attualmente non utilizzato."
},
"error_report_url": {
"message": "Sembra che questo URL sia già stato segnalato.",
"description": "Nota: attualmente non utilizzato."
},
"donate_button": {
"message": "Una donazione per l'autore di ClearURLs.",
"description": "Questa stringa è usata per riferirsi a una pagina di donazione."
},
"clipboard_copy_link": {
"message": "Copia i collegamenti puliti",
"description": "This string is used in the context menu to copy clean links."
},
"context_menu_enabled": {
"message": "Visualizza la voce del menu contestuale",
"description": "This string is used toggle the context menu entry to copy clean links."
},
"history_listener_enabled": {
"message": "Impedisci il tracciamento via cronologia API (vedi: <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>Il metodo replaceState()</a>)",
"description": "This string is used as name for the history API listener label."
},
"cleaning_tool_page_title": {
"message": "Strumento di pulizia di ClearURLs",
"description": "This string is used as title on the cleaning tool page."
},
"cleaning_tool_description": {
"message": "Con questo strumento è possibile incollare URL che ClearURLs pulirà facendo clic sul pulsante verde. È possibile incollare più URL contemporaneamente, indica un singolo URL per riga.",
"description": "Questa stringa viene utilizzata come descrizione dello strumento di pulizia."
},
"cleaning_tool_btn": {
"message": "Pulisci gli URL",
"description": "This string is used as name for the clean url button."
},
"cleaning_tool_dirty_urls_label": {
"message": "Qui puoi incollare gli URL sporchi:",
"description": "This string is used as title on the cleaning tool page for the dirty URLs."
},
"cleaning_tool_clean_urls_label": {
"message": "Qui di seguito puoi trovare gli URL puliti:",
"description": "This string is used as title on the cleaning tool page for the clean URLs."
},
"local_hosts_skipping": {
"message": "Escludi gli URL locali (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16, 127.0.0.1, localhost)",
"description": "Questa stringa viene utilizzata come etichetta per l'opzione di salto del localhost"
},
"local_hosts_skipping_title": {
"message": "Escludi gli URL locali",
"description": "This string is used as title for the local host skipping switch"
},
"log_html_export_button": {
"message": "Esporta",
"description": "This string is used for the export button on the log page."
},
"log_html_export_button_title": {
"message": "Esporta il log globale",
"description": "This string is used as title for the export button on the log page."
},
"log_html_import_button": {
"message": "Importa",
"description": "This string is used for the import button on the log page."
},
"log_html_import_button_title": {
"message": "Importa il log globale",
"description": "This string is used as title for the import button on the log page."
},
"setting_html_export_button": {
"message": "Esporta",
"description": "This string is used as name for the export button on the settings page."
},
"setting_html_export_button_title": {
"message": "Esporta tutto",
"description": "This string is used as title for the export button on the settings page."
},
"setting_html_import_button": {
"message": "Importa",
"description": "This string is used as name for the reset button on the settings page."
},
"setting_html_import_button_title": {
"message": "Importa tutto",
"description": "This string is used as title for the import button on the settings page."
},
"setting_log_limit_label": {
"message": "Limita le voci di log a $LIMIT$.",
"description": "This string is used as name for the log limit label.",
"placeholders": {
"limit": {
"content": "$1",
"example": "100"
}
}
},
"blocked_html_title": {
"message": "Questo sito è stato bloccato da <b>ClearURLs</b>",
"description": "This string is used as title on the blocked site page."
},
"blocked_html_body": {
"message": "Questo sito è stato bloccato da <b>ClearURLs</b> perché è stato identificato come sito web di advertising e/o servizio di tracciamento. Per visitare questo sito web devi temporaneamente disattivare il componente aggiuntivo. Dopo aver disattivato ClearURLs potrai fare clic sul pulsante qui sotto per ricaricare la pagina.",
"description": "Questa stringa viene utilizzata come corpo della pagina del sito bloccato."
},
"blocked_html_button": {
"message": "Visita la pagina",
"description": "Questa stringa viene utilizzata come pulsante della pagina del sito bloccato."
},
"referral_marketing_enabled": {
"message": "Permetti l'utilizzo di referral marketing",
"description": "Questa stringa viene utilizzata come etichetta per l'interruttore del referral marketing"
},
"referral_marketing_enabled_title": {
"message": "Permette l'utilizzo del referral marketing (esempio: Amazon)",
"description": "This string is used as title for the referral marketing switch"
},
"watchdog": {
"message": "[ClearURLs]: Il sistema di controllo ha identificato un problema. ClearURLs verrà riavviato.",
"description": "This string is used as text for the watchdog",
"placeholders": {
"times": {
"content": "$1",
"example": "3"
}
}
},
"domain_blocking_enabled": {
"message": "Permetti il blocco dei domini (può portare a problemi su pagine che non consentono AdBlocker)",
"description": "Questa stringa viene utilizzata come etichetta per l'interruttore di blocco del dominio"
},
"domain_blocking_enabled_title": {
"message": "Permetti il blocco dei domini (può portare a problemi su pagine che non consentono AdBlocker)",
"description": "This string is used as title for the domain blocking switch"
},
"log_ping_blocked": {
"message": "Questa verifica del collegamento è stata bloccata",
"description": "This string is used on hyperlink auditing in the ClearURLs log."
},
"ping_blocking_enabled": {
"message": "Blocca la verifica dei collegamenti (vedi anche <a href='https://html.spec.whatwg.org/multipage/links.html#hyperlink-auditing' target='_blank'>questo articolo</a>)",
"description": "Questa stringa viene utilizzata come etichetta per l'interruttore di blocco dell'hyperlink auditing"
},
"ping_blocking_enabled_title": {
"message": "Blocca la verifica dei collegamenti",
"description": "This string is used as title for the hyperlink auditing blocking switch"
},
"extension_description": {
"message": "Rimuove gli elementi di tracciamento dagli URL.",
"description": "Descrizione dell'estensione (max.132 caratteri)"
},
"eTag_filtering_log": {
"message": "L'header ETag è stato rimosso da questa richiesta",
"description": "Questa stringa è usata sul filtraggio dell'header ETag nel log di ClearURLs."
},
"eTag_filtering_enabled": {
"message": "Filtra gli header ETag dalle richieste (Guarda anche <a href='https://en.wikipedia.org/wiki/HTTP_ETag#Tracking_using_ETags' target='_blank'>this article</a>)",
"description": "Questa stringa viene utilizzata come etichetta per l'opzione di filtraggio dell'header ETag"
},
"eTag_filtering_enabled_title": {
"message": "Filtra gli heaader ETag. Suggerimento: la cache deve essere svuotata prima del primo utilizzo.",
"description": "Questa stringa viene utilizzata come titolo per l'opzione di filtraggio dell'header ETag"
},
"popup_html_rules_status_head_title": {
"message": " ",
"description": "non necessario, solo per evitare eccezioni"
},
"popup_html_statistics_percentage_title": {
"message": " ",
"description": "non necessario, solo per evitare eccezioni"
},
"popup_html_statistics_blocked_title": {
"message": " ",
"description": "non necessario, solo per evitare eccezioni"
},
"popup_html_statistics_elements_title": {
"message": " ",
"description": "non necessario, solo per evitare eccezioni"
},
"popup_html_statistics_head_title": {
"message": " ",
"description": "non necessario, solo per evitare eccezioni"
},
"popup_html_configs_head_title": {
"message": " ",
"description": "non necessario, solo per evitare eccezioni"
},
"context_menu_enabled_title": {
"message": " ",
"description": "non necessario, solo per evitare eccezioni"
}
}

View File

@@ -1,378 +0,0 @@
{
"hash_status_code_1": {
"message": "최신 버전",
"description": "This status code says, that no update is available for the ClearURLs rules and everything is up to date."
},
"hash_status_code_2": {
"message": "업데이트됨",
"description": "This status code says, that the ClearURLs rules are successfully updated."
},
"hash_status_code_3": {
"message": "업데이트 가능",
"description": "This status code says, that an update is available for the ClearURLs rules."
},
"hash_status_code_4": {
"message": "오류",
"description": "This status code says, that the ClearURLs could not be started correctly."
},
"hash_status_code_5": {
"message": "앗 무언가가 잘못되었어요!",
"description": "This status code says, that an error occurred while updating the ClearURLs rules."
},
"log_redirect": {
"message": "이 url이 리다이렉트됨",
"description": "This string is used on redirections in the ClearURLs log."
},
"log_domain_blocked": {
"message": "이 도메인이 차단됨",
"description": "This string is used on blocked domains in the ClearURLs log."
},
"check_os_log": {
"message": "[ClearURLs]: 로그 리스너가 추가되었습니다.",
"description": "This string is used on ClearURLs log startup."
},
"log_html_page_title": {
"message": "ClearURLs의 로그",
"description": "This string is used as header on the log page."
},
"log_html_table_head_1": {
"message": "처리하기 전에",
"description": "This string is used as table title on the log page."
},
"log_html_table_head_2": {
"message": "처리한 이후",
"description": "This string is used as table title on the log page."
},
"log_html_table_head_3": {
"message": "규칙",
"description": "This string is used as table title on the log page."
},
"log_html_table_head_4": {
"message": "시간",
"description": "This string is used as table title on the log page."
},
"log_html_reset_button": {
"message": "초기화",
"description": "This string is used for the reset button on the log page."
},
"log_html_reset_button_title": {
"message": "글로벌 로그 초기화",
"description": "This string is used as title for the reset button on the log page."
},
"popup_html_configs_head": {
"message": "설정",
"description": "This string is used as title for the configs on the popup page."
},
"popup_html_configs_switch_filter": {
"message": "필터",
"description": "This string is used as name for the filter switch button on the popup page."
},
"popup_html_configs_switch_filter_title": {
"message": "이 필터 스위치는 ClearURLs의 청소 기능을 스위치합니다. 이 옵션을 비활성화하면 전체 확장 프로그램이 비활성화됩니다",
"description": "This string is used as title for the filter switch button on the popup page."
},
"popup_html_configs_switch_log": {
"message": "로깅",
"description": "This string is used as name for the logging switch button on the popup page."
},
"popup_html_configs_switch_log_title": {
"message": "이 로그는 오직 기기에만 저장됩니다. 필요하지 않으면 사용하지 않는 것을 추천합니다",
"description": "This string is used as title for the logging switch button on the popup page."
},
"popup_html_configs_switch_badges": {
"message": "배지",
"description": "This string is used as name for the badges switch button on the popup page."
},
"popup_html_configs_switch_badges_title": {
"message": "청소된 url의 수 표시",
"description": "This string is used as title for the badges switch button on the popup page."
},
"popup_html_statistics_head": {
"message": "통계",
"description": "This string is used as title for the statistics on the popup page."
},
"popup_html_statistics_elements": {
"message": "요소",
"description": "This string is used as name for the elements on the popup page."
},
"popup_html_statistics_blocked": {
"message": "차단됨",
"description": "This string is used as name for the blocked elements on the popup page."
},
"popup_html_statistics_percentage": {
"message": "퍼센트",
"description": "This string is used as name for the percentage of blocked elements on the popup page."
},
"popup_html_statistics_reset_button": {
"message": "초기화",
"description": "This string is used as name for the statistics reset button on the popup page."
},
"popup_html_statistics_reset_button_title": {
"message": "글로벌 통계 초기화",
"description": "This string is used as title for the statistics reset button on the popup page."
},
"popup_html_rules_status_head": {
"message": "Rules-Status",
"description": "This string is used as title for the rules-status section on the popup page."
},
"popup_html_log_head": {
"message": "로그",
"description": "This string is used as name for the log button on the popup page."
},
"popup_html_log_head_title": {
"message": "로그 열기",
"description": "This string is used as title for the log button on the popup page."
},
"popup_html_report_button": {
"message": "현재 URL 제보",
"description": "Note: Currently not used."
},
"popup_html_report_button_title": {
"message": "이 탭에서 URL을 제보합니다.",
"description": "Currently not used."
},
"core_save_on_disk": {
"message": "[ClearURLs]: 디스크에 저장했습니다.",
"description": "This string is used to tell the user, that ClearURLs saved the settings on disk."
},
"core_error": {
"message": "[ClearURLs]: 확장 프로그램이 시작할 수 없습니다.",
"description": "This string is used to tell the user, that ClearURLs could not be started."
},
"configs_switch_statistics": {
"message": "통계",
"description": "This string is used as name for the statistics switch button on the popup page."
},
"configs_switch_statistics_title": {
"message": "통계 기능을 활성화하거나 비활성화합니다.",
"description": "This string is used as title for the statistics switch button on the popup page."
},
"settings_html_page_title": {
"message": "ClearURLs 설정",
"description": "This string is used as title on the settings page."
},
"badged_color_label": {
"message": "배지 색",
"description": "This string is used as name for the badged color label."
},
"setting_html_reset_button": {
"message": "초기화",
"description": "This string is used as name for the reset button on the settings page."
},
"setting_html_reset_button_title": {
"message": "모든 것을 초기화함",
"description": "This string is used as title for the reset button on the settings page."
},
"setting_rule_url_label": {
"message": "data.json(규칙) 파일의 url",
"description": "This string is used as name for the rule url label."
},
"settings_html_save_button": {
"message": "저장하고 확장 프로그램 다시 시작",
"description": "This string is used as name for the save&reload button on the settings page."
},
"settings_html_save_button_title": {
"message": "설정 저장",
"description": "This string is used as title for the save&reload button on the settings page."
},
"setting_hash_url_label": {
"message": "rules.hash (hash) 파일의 url",
"description": "This string is used as name for the rule.hash url label."
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Request types</a> (expert level)",
"description": "This string is used as name for the types label."
},
"setting_report_server_label": {
"message": "Report server for URLs",
"description": "Note: Currently not used."
},
"success_report_url": {
"message": "The URL was successfully reported. We will check this URL soon.",
"description": "Note: Currently not used."
},
"error_report_url": {
"message": "It seems like this URL has already been reported.",
"description": "Note: Currently not used."
},
"donate_button": {
"message": "ClearURLs 제작자에게 후원",
"description": "This string is used to refer to a donation page."
},
"clipboard_copy_link": {
"message": "깨끗한 링크 주소 복사",
"description": "This string is used in the context menu to copy clean links."
},
"context_menu_enabled": {
"message": "Display context menu entry",
"description": "This string is used toggle the context menu entry to copy clean links."
},
"history_listener_enabled": {
"message": "Prevent tracking injection over history API (See also: <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>The replaceState() method</a>)",
"description": "This string is used as name for the history API listener label."
},
"cleaning_tool_page_title": {
"message": "ClearURLs cleaning tool",
"description": "This string is used as title on the cleaning tool page."
},
"cleaning_tool_description": {
"message": "With this tool you can paste in URLs and ClearURLs will clean the URLs after a click on the green button. You can paste in multiple URLs at once, but every URL must be on a separate line.",
"description": "This string is used as description of the cleaning tool."
},
"cleaning_tool_btn": {
"message": "URL들 청소",
"description": "This string is used as name for the clean url button."
},
"cleaning_tool_dirty_urls_label": {
"message": "여기에 더러운 URL들을 붙여넣으세요:",
"description": "This string is used as title on the cleaning tool page for the dirty URLs."
},
"cleaning_tool_clean_urls_label": {
"message": "여기서 깨끗한 URL들을 찾을 수 있습니다:",
"description": "This string is used as title on the cleaning tool page for the clean URLs."
},
"local_hosts_skipping": {
"message": "로컬 호스트에서 URL 스킵 (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16, 127.0.0.1, localhost)",
"description": "This string is used as label for the local host skipping switch"
},
"local_hosts_skipping_title": {
"message": "로컬 호스트에서 URL 스킵함",
"description": "This string is used as title for the local host skipping switch"
},
"log_html_export_button": {
"message": "내보내기",
"description": "This string is used for the export button on the log page."
},
"log_html_export_button_title": {
"message": "글로벌 로그 내보냄",
"description": "This string is used as title for the export button on the log page."
},
"log_html_import_button": {
"message": "불러오기",
"description": "This string is used for the import button on the log page."
},
"log_html_import_button_title": {
"message": "글로벌 로그 불러옴",
"description": "This string is used as title for the import button on the log page."
},
"setting_html_export_button": {
"message": "내보내기",
"description": "This string is used as name for the export button on the settings page."
},
"setting_html_export_button_title": {
"message": "모든 것을 내보냄",
"description": "This string is used as title for the export button on the settings page."
},
"setting_html_import_button": {
"message": "불러오기",
"description": "This string is used as name for the reset button on the settings page."
},
"setting_html_import_button_title": {
"message": "모든 것을 불러옴",
"description": "This string is used as title for the import button on the settings page."
},
"setting_log_limit_label": {
"message": "Limit the log to $LIMIT$ entries.",
"description": "This string is used as name for the log limit label.",
"placeholders": {
"limit": {
"content": "$1",
"example": "100"
}
}
},
"blocked_html_title": {
"message": "이 사이트가 <b>ClearURLs</b>에 의해 차단됨",
"description": "This string is used as title on the blocked site page."
},
"blocked_html_body": {
"message": "이 사이트는 광고/추적 서비스로 발견되었기 때문에 <b>ClearURLs</b>에 의해 차단되었습니다. 이 사이트를 방문하려면 임시로 확장 프로그램을 비활성화하거나 ClearURLs 설정에서 도메인 차단을 비활성화해야 합니다. 이후에 아래의 버튼을 눌러 페이지를 불러올 수 있습니다.",
"description": "This string is used as body on the blocked site page."
},
"blocked_html_button": {
"message": "페이지 방문",
"description": "This string is used as button on the blocked site page."
},
"referral_marketing_enabled": {
"message": "레퍼럴 마케팅 허용",
"description": "This string is used as label for the referral marketing switch"
},
"referral_marketing_enabled_title": {
"message": "레퍼럴 마케팅 허용",
"description": "This string is used as title for the referral marketing switch"
},
"watchdog": {
"message": "[ClearURLs]: watchdog은 문제를 발견했고 이미 $TIMES$ 번 실패했습니다.",
"description": "This string is used as text for the watchdog",
"placeholders": {
"times": {
"content": "$1",
"example": "3"
}
}
},
"domain_blocking_enabled": {
"message": "도메인 차단 허용 (광고 차단기를 허용하지 않는 사이트에서 문제가 생길 수 있음)",
"description": "This string is used as label for the domain blocking switch"
},
"domain_blocking_enabled_title": {
"message": "도메인 차단 허용 (광고 차단기를 허용하지 않는 사이트에서 문제가 생길 수 있음)",
"description": "This string is used as title for the domain blocking switch"
},
"log_ping_blocked": {
"message": "이 하이퍼링크 수정이 차단됨",
"description": "This string is used on hyperlink auditing in the ClearURLs log."
},
"ping_blocking_enabled": {
"message": "하이퍼링크 수정 차단 (<a href='https://html.spec.whatwg.org/multipage/links.html#hyperlink-auditing' target='_blank'>이 기사</a>를 참고해주세요.)",
"description": "This string is used as label for the hyperlink auditing blocking switch"
},
"ping_blocking_enabled_title": {
"message": "하이퍼링크 수정 차단",
"description": "This string is used as title for the hyperlink auditing blocking switch"
},
"extension_description": {
"message": "URL에서 추적 요소를 삭제",
"description": "Extension description (max. 132 characters)"
},
"eTag_filtering_log": {
"message": "ETag 헤더가 이 요청에서 삭제됨",
"description": "This string is used on ETag header filtering in the ClearURLs log."
},
"eTag_filtering_enabled": {
"message": "요청에서 ETag 헤더를 필터함 (<a href='https://en.wikipedia.org/wiki/HTTP_ETag#Tracking_using_ETags' target='_blank'>이 기사</a>를 참고하세요)",
"description": "This string is used as label for the ETag header filtering switch"
},
"eTag_filtering_enabled_title": {
"message": "ETag 헤더를 필터함. 힌트: 첫 사용 이전에 캐시가 삭제되어야 합니다.",
"description": "This string is used as title for the ETag header filtering switch"
},
"popup_html_rules_status_head_title": {
"message": " ",
"description": "not needed, only to prevent exceptions"
},
"popup_html_statistics_percentage_title": {
"message": " ",
"description": "not needed, only to prevent exceptions"
},
"popup_html_statistics_blocked_title": {
"message": " ",
"description": "not needed, only to prevent exceptions"
},
"popup_html_statistics_elements_title": {
"message": " ",
"description": "not needed, only to prevent exceptions"
},
"popup_html_statistics_head_title": {
"message": " ",
"description": "not needed, only to prevent exceptions"
},
"popup_html_configs_head_title": {
"message": " ",
"description": "not needed, only to prevent exceptions"
},
"context_menu_enabled_title": {
"message": " ",
"description": "not needed, only to prevent exceptions"
}
}

View File

@@ -1,378 +0,0 @@
{
"hash_status_code_1": {
"message": "up-to-date",
"description": "Deze statuscode betekent dat er geen update voor de ClearURLs-regels beschikbaar is. Alles is up-to-date."
},
"hash_status_code_2": {
"message": "geüpdatet",
"description": "Deze statuscode betekent dat de ClearURLs-regels volledig geüpdatet zijn."
},
"hash_status_code_3": {
"message": "update beschikbaar",
"description": "Deze statuscode betekent dat er een update beschikbaar is voor de ClearURLs-regels."
},
"hash_status_code_4": {
"message": "foutmelding",
"description": "Deze statuscode betekent dat ClearURLs niet correct gestart kan worden."
},
"hash_status_code_5": {
"message": "Oeps, er is iets misgegaan!",
"description": "Deze statuscode betekent dat er iets mis is gegaan tijdens het updaten van de ClearURLs-regels."
},
"log_redirect": {
"message": "Deze url werd doorgestuurd",
"description": "Deze tekenreeks wordt gebruikt in het ClearURLs-logboek om doorverwijzingen aan te geven."
},
"log_domain_blocked": {
"message": "Dit domein wordt geblokkeerd",
"description": "Deze tekenreeks wordt gebruikt in het ClearURLs-logboek voor geblokkeerde domeinen."
},
"check_os_log": {
"message": "[ClearURLs]: Logboek is toegevoegd",
"description": "Deze tekenreeks wordt gebruikt zodra het aanleggen van het ClearURLs-logboek begonnen is."
},
"log_html_page_title": {
"message": "ClearURLs-logboek",
"description": "Deze tekenreeks wordt gebruikt als titel van het logboek."
},
"log_html_table_head_1": {
"message": "Vóór verwerking",
"description": "Deze tekenreeks wordt gebruikt als tabeltitel in het logboek."
},
"log_html_table_head_2": {
"message": "Ná verwerking",
"description": "Deze tekenreeks wordt gebruikt als tabeltitel in het logboek."
},
"log_html_table_head_3": {
"message": "Regel",
"description": "Deze tekenreeks wordt gebruikt als tabeltitel in het logboek."
},
"log_html_table_head_4": {
"message": "Tijd",
"description": "Deze tekenreeks wordt gebruikt als tabeltitel in het logboek."
},
"log_html_reset_button": {
"message": "Standaardwaarden",
"description": "Deze tekenreeks wordt gebruikt bij de standaardwaardenknop in het logboek."
},
"log_html_reset_button_title": {
"message": "Zet het logboek terug op de standaardwaarde",
"description": "Deze tekenreeks wordt gebruikt als naam van de standaardwaardenknop in het logboek."
},
"popup_html_configs_head": {
"message": "Instellingen",
"description": "Deze tekenreeks wordt gebruikt als naam van de instellingen op de pop-uppagina."
},
"popup_html_configs_switch_filter": {
"message": "Filter",
"description": "Deze tekenreeks wordt gebruikt als naam van de filterknop op de pop-uppagina."
},
"popup_html_configs_switch_filter_title": {
"message": "De filterknop activeert de opschoonfunctionaliteit van ClearURLs. Als je deze uitschakelt, dan schakel je de hele add-on uit.",
"description": "Deze tekenreeks wordt gebruikt als naam van de filterknop op de pop-uppagina."
},
"popup_html_configs_switch_log": {
"message": "Loggen",
"description": "Deze tekenreeks wordt gebruikt als naam van de logknop op de pop-uppagina."
},
"popup_html_configs_switch_log_title": {
"message": "Het logboek wordt alleen lokaal bewaard. We raden aan dit uit te laten staan als je het niet nodig hebt.",
"description": "Deze tekenreeks wordt gebruikt als naam van de logknop op de pop-uppagina."
},
"popup_html_configs_switch_badges": {
"message": "Emblemen",
"description": "Deze tekenreeks wordt gebruikt als naam van de embleemknop op de pop-uppagina."
},
"popup_html_configs_switch_badges_title": {
"message": "Aantal opgeschoonde url's tonen",
"description": "Deze tekenreeks wordt gebruikt als naam van de embleemknop op de pop-uppagina."
},
"popup_html_statistics_head": {
"message": "Statistieken",
"description": "Deze tekenreeks wordt gebruikt als naam van de statistieken op de pop-uppagina."
},
"popup_html_statistics_elements": {
"message": "Elementen",
"description": "Deze tekenreeks wordt gebruikt als naam van de elementen op de pop-uppagina."
},
"popup_html_statistics_blocked": {
"message": "Geblokkeerd",
"description": "Deze tekenreeks wordt gebruikt als naam van het aantal geblokkeerde elementen op de pop-uppagina."
},
"popup_html_statistics_percentage": {
"message": "Percentage",
"description": "Deze tekenreeks wordt gebruikt als naam van het percentage geblokkeerde elementen op de pop-uppagina."
},
"popup_html_statistics_reset_button": {
"message": "Standaardwaarden",
"description": "Deze tekenreeks wordt gebruikt als naam van de standaardwaardenknop op de pop-uppagina."
},
"popup_html_statistics_reset_button_title": {
"message": "Herstel de globale statistieken",
"description": "Deze tekenreeks wordt gebruikt als naam van de standaardwaardenknop op de pop-uppagina."
},
"popup_html_rules_status_head": {
"message": "Regelstatus",
"description": "Deze tekenreeks wordt gebruikt als naam van de regelstatussectie op de pop-uppagina."
},
"popup_html_log_head": {
"message": "Logboek",
"description": "Deze tekenreeks wordt gebruikt als naam van de logboekknop op de pop-uppagina."
},
"popup_html_log_head_title": {
"message": "Logboek openen",
"description": "Deze tekenreeks wordt gebruikt als naam van de logboekknop op de pop-uppagina."
},
"popup_html_report_button": {
"message": "Huidige url melden",
"description": "Opm.: wordt momenteel niet gebruikt."
},
"popup_html_report_button_title": {
"message": "Meld de url van het huidige tabblad.",
"description": "Wordt momenteel niet gebruikt."
},
"core_save_on_disk": {
"message": "[ClearURLs]: Opgeslagen op schijf.",
"description": "Deze tekenreeks wordt gebruikt om te melden dat de instellingen zijn opgeslagen op de schijf."
},
"core_error": {
"message": "[ClearURLs]: De add-on kan niet worden gestart.",
"description": "Deze tekenreeks wordt gebruikt om te melden dat ClearURLs niet kan worden gestart."
},
"configs_switch_statistics": {
"message": "Statistieken",
"description": "Deze tekenreeks wordt gebruikt als naam van de statistiekenknop op de pop-uppagina."
},
"configs_switch_statistics_title": {
"message": "Statistieken bijhouden in-/uitschakelen",
"description": "Deze tekenreeks wordt gebruikt als naam van de statistiekenknop op de pop-uppagina."
},
"settings_html_page_title": {
"message": "ClearURLs-instellingen",
"description": "Deze tekenreeks wordt gebruikt als naam van de instellingenpagina."
},
"badged_color_label": {
"message": "Embleemkleur",
"description": "Deze tekenreeks wordt gebruikt als label van de embleemkleur."
},
"setting_html_reset_button": {
"message": "Standaardwaarden",
"description": "Deze tekenreeks wordt gebruikt als naam van de stardaardwaardetknop op de instellingenpagina."
},
"setting_html_reset_button_title": {
"message": "Zet alles terug",
"description": "Deze tekenreeks wordt gebruikt als naam van de standaardwaardenknop op de instellingenpagina."
},
"setting_rule_url_label": {
"message": "De url naar het data.json-bestand (regels)",
"description": "Deze tekenreeks wordt gebruikt als label van de regel-url."
},
"settings_html_save_button": {
"message": "Add-on opslaan en herladen",
"description": "Deze tekenreeks wordt gebruikt als naam van de knop 'Opslaan en herladen' op de instellingenpagina."
},
"settings_html_save_button_title": {
"message": "Slaat de instellingen op",
"description": "Deze tekenreeks wordt gebruikt als naam van de knop 'Opslaan en herladen' op de instellingenpagina."
},
"setting_hash_url_label": {
"message": "De url naar het rules.hash-bestand (hash)",
"description": "Deze tekenreeks wordt gebruikt als label van de rule.hash-url."
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Soorten verzoeken</a> (voor ervaren gebruikers)",
"description": "Deze tekenreeks wordt gebruikt als naam van de soorten verzoeken."
},
"setting_report_server_label": {
"message": "Meldingsserver voor url's",
"description": "Opm.: wordt momenteel niet gebruikt."
},
"success_report_url": {
"message": "De url is gemeld - we controleren deze z.s.m.",
"description": "Opm.: wordt momenteel niet gebruikt."
},
"error_report_url": {
"message": "Het lijkt er op dat deze url al gemeld is.",
"description": "Opm.: wordt momenteel niet gebruikt."
},
"donate_button": {
"message": "Een donatie aan de ClearURLs-ontwikkelaar.",
"description": "Deze tekenreeks wordt gebruikt om te verwijzen naar de donatiepagina."
},
"clipboard_copy_link": {
"message": "Opgeschoonde link kopiëren",
"description": "Deze tekenreeks wordt gebruikt in het rechtermuisknopmenu om opgeschoonde links te kopiëren."
},
"context_menu_enabled": {
"message": "Rechtermuisknopmenu-item tonen",
"description": "Deze tekenreeks wordt gebruikt in het rechtermuisknopmenu om opgeschoonde links te kopiëren."
},
"history_listener_enabled": {
"message": "Voorkom trackinginjectie middels de geschiedenis-api (zie: <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>replaceState()-methode</a>)",
"description": "Deze tekenreeks wordt gebruikt als naam van het geschiedenis-api-label."
},
"cleaning_tool_page_title": {
"message": "ClearURLs-opschoongereedschap",
"description": "Deze tekenreeks wordt gebruikt als naam van de opschoongereedschapspagina."
},
"cleaning_tool_description": {
"message": "Met dit hulpmiddel kun je url's plakken die ClearURLs met één klik op de groene knop voor je opschoont. Je kunt meerdere url's plakken (één per regel).",
"description": "Deze tekenreeks wordt gebruikt als omschrijving van het opschoongereedschap."
},
"cleaning_tool_btn": {
"message": "URL's opschonen",
"description": "Deze tekenreeks wordt gebruikt als naam van de opschoonknop."
},
"cleaning_tool_dirty_urls_label": {
"message": "Plak hier de tracking-url's:",
"description": "Deze tekenreeks wordt gebruikt als naam op de opschoonpagina voor het plakken van tracking-url's."
},
"cleaning_tool_clean_urls_label": {
"message": "Hier vind je de opgeschoonde url's:",
"description": "Deze tekenreeks wordt gebruikt als naam op de opschoonpagina kopiëren van opgeschoonde url's."
},
"local_hosts_skipping": {
"message": "URL's op lokale hosts (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16, 127.0.0.1, localhost) overslaan",
"description": "Deze tekenreeks wordt gebruikt als label van de lokalehostknop"
},
"local_hosts_skipping_title": {
"message": "Sla url's op lokale hosts over",
"description": "Deze tekenreeks wordt gebruikt als label van de lokalehostknop"
},
"log_html_export_button": {
"message": "Exporteren",
"description": "Deze tekenreeks wordt gebruikt als naam van de exportknop op de logboekpagina."
},
"log_html_export_button_title": {
"message": "Exporteer het globale logboek",
"description": "Deze tekenreeks wordt gebruikt als naam van de exportknop op de logboekpagina."
},
"log_html_import_button": {
"message": "Importeren",
"description": "Deze tekenreeks wordt gebruikt als naam van de importknop op de logboekpagina."
},
"log_html_import_button_title": {
"message": "Importeer het globale logboek",
"description": "Deze tekenreeks wordt gebruikt als naam van de importknop op de logboekpagina."
},
"setting_html_export_button": {
"message": "Exporteren",
"description": "Deze tekenreeks wordt gebruikt als naam van de exportknop op de instellingenpagina."
},
"setting_html_export_button_title": {
"message": "Exporteer alles",
"description": "Deze tekenreeks wordt gebruikt als naam van de exportknop op de instellingenpagina."
},
"setting_html_import_button": {
"message": "Importeren",
"description": "Deze tekenreeks wordt gebruikt als naam van de importknop op de instellingenpagina."
},
"setting_html_import_button_title": {
"message": "Importeer alles",
"description": "Deze tekenreeks wordt gebruikt als naam van de importknop op de instellingenpagina."
},
"setting_log_limit_label": {
"message": "Beperk het logboek tot $LIMIT$ regels.",
"description": "Deze tekenreeks wordt gebruikt als naam van het logboek-beperkingslabel.",
"placeholders": {
"limit": {
"content": "$1",
"example": "100"
}
}
},
"blocked_html_title": {
"message": "Deze site is geblokkeerd door <b>ClearURLs</b>",
"description": "Deze tekenreeks wordt gebruikt als naam van de geblokkeerde pagina."
},
"blocked_html_body": {
"message": "Deze site is geblokkeerd door de <b>ClearURLs</b>-add-on omdat deze herkend is als een advertentie- en/of trackingdienst. Om deze site tóch te bezoeken, moet je de add-on tijdelijk uitschakelen of het blokkeren van domeinen uitschakelen in de instellingen. Klik daarna op onderstaande knop om de pagina te herladen.",
"description": "Deze tekenreeks wordt gebruikt als inhoud van de geblokkeerde pagina."
},
"blocked_html_button": {
"message": "Pagina bezoeken",
"description": "Deze tekenreeks wordt gebruikt als knop op de geblokkeerde pagina."
},
"referral_marketing_enabled": {
"message": "Doorverwijzingsmarketing toestaan",
"description": "Deze tekenreeks wordt gebruikt als naam van de doorverwijzingsmarketingknop"
},
"referral_marketing_enabled_title": {
"message": "Doorverwijzingsmarketing toestaan",
"description": "Deze tekenreeks wordt gebruikt als naam van de doorverwijzingsmarketingknop"
},
"watchdog": {
"message": "[ClearURLs]: De 'watchdog' is tegen een probleem aangelopen en is al $TIMES$ keer mislukt.",
"description": "Deze tekenreeks wordt gebruikt als tekst bij de 'watchdog'",
"placeholders": {
"times": {
"content": "$1",
"example": "3"
}
}
},
"domain_blocking_enabled": {
"message": "Blokkeren van domeinen toestaan (dit kan problemen veroorzaken op pagina's die geen advertentieblokkering niet toestaan)",
"description": "Deze tekenreeks wordt gebruikt als naam van de domeinblokkerknop"
},
"domain_blocking_enabled_title": {
"message": "Blokkeren van domeinen toestaan (dit kan problemen veroorzaken op pagina's die geen advertentieblokkering niet toestaan)",
"description": "Deze tekenreeks wordt gebruikt als naam van de domeinblokkerknop"
},
"log_ping_blocked": {
"message": "Deze 'hyperlink auditing' is geblokkeerd",
"description": "Deze tekenreeks wordt gebruikt bij 'hyperlink auditing' in het logboek."
},
"ping_blocking_enabled": {
"message": "'Hyperlink auditing\" blokkeren (zie <a href='https://html.spec.whatwg.org/multipage/links.html#hyperlink-auditing' target='_blank'>dit artikel</a>)",
"description": "Deze tekenreeks wordt gebruikt als naam van de hyperlink-auditingknop"
},
"ping_blocking_enabled_title": {
"message": "'Hyperlink auditing\" blokkeren",
"description": "Deze tekenreeks wordt gebruikt als naam van de hyperlink-auditing-klokkerknop"
},
"extension_description": {
"message": "Verwijder trackingelementen uit url's.",
"description": "Add-onomschrijving (max. 132 tekens)"
},
"eTag_filtering_log": {
"message": "De 'ETag-kop' is verwijderd uit dit verzoek",
"description": "Deze tekenreeks wordt gebruikt bij ETag-kopfiltering in het logboek."
},
"eTag_filtering_enabled": {
"message": "Filter 'ETag-koppen' uit verzoeken (zie <a href='https://en.wikipedia.org/wiki/HTTP_ETag#Tracking_using_ETags' target='_blank'>dit artikel</a>)",
"description": "Deze tekenreeks wordt gebruikt als naam van de ETag-kopfilteringknop"
},
"eTag_filtering_enabled_title": {
"message": "Filter 'ETag-koppen'. Tip: leeg de cache alvorens het eerste gebruik.",
"description": "Deze tekenreeks wordt gebruikt als naam van de ETag-kopfilteringknop"
},
"popup_html_rules_status_head_title": {
"message": " ",
"description": "onnodig - alleen om uitzonderingen te voorkomen"
},
"popup_html_statistics_percentage_title": {
"message": " ",
"description": "onnodig - alleen om uitzonderingen te voorkomen"
},
"popup_html_statistics_blocked_title": {
"message": " ",
"description": "onnodig - alleen om uitzonderingen te voorkomen"
},
"popup_html_statistics_elements_title": {
"message": " ",
"description": "onnodig - alleen om uitzonderingen te voorkomen"
},
"popup_html_statistics_head_title": {
"message": " ",
"description": "onnodig - alleen om uitzonderingen te voorkomen"
},
"popup_html_configs_head_title": {
"message": " ",
"description": "onnodig - alleen om uitzonderingen te voorkomen"
},
"context_menu_enabled_title": {
"message": " ",
"description": "onnodig - alleen om uitzonderingen te voorkomen"
}
}

View File

@@ -1,298 +0,0 @@
{
"hash_status_code_1": {
"message": "atualizadas",
"description": "Este código de estado quer dizer que não existe nenhuma atualização para as regras do CleanURLs e tudo o resto."
},
"hash_status_code_2": {
"message": "atualizadas",
"description": "Este código de estado quer dizer que as regras do CleanURLs foram atualizadas com sucesso."
},
"hash_status_code_3": {
"message": "atualização disponível",
"description": "Esta código de estado quer dizer que existe uma atualização para as regras do CleanURLs."
},
"hash_status_code_4": {
"message": "erro",
"description": "Esta código de estado quer dizer que não foi possível iniciar o CleanURLs corretamente."
},
"hash_status_code_5": {
"message": "Ups! Algo correu mal.",
"description": "Esta código de estado quer dizer que ocorreu um erro ao atualizar as regras do CleanURLs."
},
"log_redirect": {
"message": "Este URL é redirecionado",
"description": "Esta expressão é usada em redirecionamentos no relatório do CleanURLs."
},
"log_domain_blocked": {
"message": "Este domínio está bloqueado",
"description": "Esta expressão é usada em domínios bloqueados no relatório do CleanURLs."
},
"check_os_log": {
"message": "[ClearURLs]: foi adicionado o registo no relatório.",
"description": "Esta expressão é usada ao iniciar o relatório do CleanURLs."
},
"log_html_page_title": {
"message": "Relatório do ClearURLs",
"description": "Esta expressão é usada como cabeçalho na página do relatório."
},
"log_html_table_head_1": {
"message": "Antes do processamento",
"description": "Esta expressão é usada como título da tabela na página do relatório."
},
"log_html_table_head_2": {
"message": "Depois do processamento"
},
"log_html_table_head_3": {
"message": "Regra"
},
"log_html_table_head_4": {
"message": "Data"
},
"log_html_reset_button": {
"message": "Limpar"
},
"log_html_reset_button_title": {
"message": "Limpa o relatório global."
},
"popup_html_configs_head": {
"message": "Configurações"
},
"popup_html_configs_switch_filter": {
"message": "Filtrar"
},
"popup_html_configs_switch_filter_title": {
"message": "O interruptor do filtro controla a função de limpeza de hiperligações do ClearURLs. Se desativar esta opção, a extensão será desativada."
},
"popup_html_configs_switch_log": {
"message": "Relatório"
},
"popup_html_configs_switch_log_title": {
"message": "O relatório é guardado apenas no seu dispositivo. Recomendamos não usar esta funcionalidade se não precisar dela."
},
"popup_html_configs_switch_badges": {
"message": "URLs limpos"
},
"popup_html_configs_switch_badges_title": {
"message": "Mostrar o número de URLs limpos."
},
"popup_html_statistics_head": {
"message": "Estatísticas"
},
"popup_html_statistics_elements": {
"message": "Total"
},
"popup_html_statistics_blocked": {
"message": "Bloqueados"
},
"popup_html_statistics_percentage": {
"message": "Percentagem"
},
"popup_html_statistics_reset_button": {
"message": "Limpar"
},
"popup_html_statistics_reset_button_title": {
"message": "Limpa as estatísticas globais"
},
"popup_html_rules_status_head": {
"message": "Estado das regras"
},
"popup_html_log_head": {
"message": "Relatório"
},
"popup_html_log_head_title": {
"message": "Abre o relatório de operação"
},
"popup_html_report_button": {
"message": "Reportar URL atual"
},
"popup_html_report_button_title": {
"message": "Reporta o URL atual deste separador."
},
"core_save_on_disk": {
"message": "[ClearURLs]: guardar definições no disco."
},
"core_error": {
"message": "[ClearURLs]: não foi possível iniciar a extensão."
},
"configs_switch_statistics": {
"message": "Estatísticas"
},
"configs_switch_statistics_title": {
"message": "Ativar ou desativar a função de estatística"
},
"settings_html_page_title": {
"message": "Definições do ClearURLs"
},
"badged_color_label": {
"message": "Cor dos URLs limpos"
},
"setting_html_reset_button": {
"message": "Repor"
},
"setting_html_reset_button_title": {
"message": "Repõe as definições de fábrica"
},
"setting_rule_url_label": {
"message": "URL do ficheiro data.json (regras)"
},
"settings_html_save_button": {
"message": "Guardar e reiniciar a extensão"
},
"settings_html_save_button_title": {
"message": "Guarda as definições"
},
"setting_hash_url_label": {
"message": "URL do ficheiro rules.hash (soma de verificação das regras)"
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Tipos de pedidos</a> (nível avançado)"
},
"setting_report_server_label": {
"message": "Reportar URLs do servidor"
},
"success_report_url": {
"message": "O URL foi reportado com sucesso. Iremos verificá-lo brevemente."
},
"error_report_url": {
"message": "Parece que este URL já foi reportado."
},
"donate_button": {
"message": "Um donativo para o criador do ClearURLs."
},
"clipboard_copy_link": {
"message": "Copiar hiperligação limpa."
},
"context_menu_enabled": {
"message": "Mostrar entrada no menu de contexto"
},
"history_listener_enabled": {
"message": "Prevenir injeção de rastreadores com a API do histórico (ver mais: <a href='https://developer.mozilla.org/pt-BR/docs/Web/API/History_API#O_m%C3%A9todo_replaceState()' target='_blank'>O método replaceState()</a>)"
},
"cleaning_tool_page_title": {
"message": "Ferramenta de limpeza ClearURLs"
},
"cleaning_tool_description": {
"message": "Com esta ferramenta pode colar URLs e o CleanURLs irá limpar os URLs após clicar no botão verde. Pode colar vários URLs de uma vez, mas cada um deles em de estar numa linha separada."
},
"cleaning_tool_btn": {
"message": "Limpar URLs"
},
"cleaning_tool_dirty_urls_label": {
"message": "Cole aqui os URLs sujos:"
},
"cleaning_tool_clean_urls_label": {
"message": "Aqui estão os URLs limpos:"
},
"local_hosts_skipping": {
"message": "Ignorar URLs de anfitriões locais (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16, 127.0.0.1, localhost)"
},
"local_hosts_skipping_title": {
"message": "Ignora os URLs em páginas de anfitriões locais"
},
"log_html_export_button": {
"message": "Exportar"
},
"log_html_export_button_title": {
"message": "Exporta o relatório de atividade global"
},
"log_html_import_button": {
"message": "Importar"
},
"log_html_import_button_title": {
"message": "Importa o relatório de atividade global"
},
"setting_html_export_button": {
"message": "Exportar"
},
"setting_html_export_button_title": {
"message": "Exporta tudo"
},
"setting_html_import_button": {
"message": "Importar"
},
"setting_html_import_button_title": {
"message": "Importa tudo"
},
"setting_log_limit_label": {
"message": "Limitar o relatório a $LIMIT$ entradas.",
"placeholders": {
"limit": {
"content": "$1",
"example": "100"
}
}
},
"blocked_html_title": {
"message": "Este site foi bloqueado pelo <b>ClearURLs</b>"
},
"blocked_html_body": {
"message": "Este site foi bloqueado pela extensão <b>ClearURLs</b>, porque identificámos este site como um serviço de publicidade e/ou rastreamento. Para visitar este site, deve desativar a extensão temporariamente ou desativar o bloqueio de domínio nas definições da extensão. Depois, clique no botão abaixo para carregar a página."
},
"blocked_html_button": {
"message": "Visitar página"
},
"referral_marketing_enabled": {
"message": "Permitir marketing com referências"
},
"referral_marketing_enabled_title": {
"message": "Permite marketing com referências"
},
"watchdog": {
"message": "[ClearURLs]: o \"cão de vigia\" detetou um problema e já falhou $TIMES$ vezes.",
"placeholders": {
"times": {
"content": "$1",
"example": "3"
}
}
},
"domain_blocking_enabled": {
"message": "Permitir o bloqueio de domínios (pode causar problemas em páginas que não permitem bloqueadores de anúncios)"
},
"domain_blocking_enabled_title": {
"message": "Permitir o bloqueio de domínios (pode causar problemas em páginas que não permitem bloqueadores de anúncios)"
},
"log_ping_blocked": {
"message": "A inspeção a esta hiperligação foi bloqueada"
},
"ping_blocking_enabled": {
"message": "Bloquear inspeção de hiperligações (ver também <a href='https://html.spec.whatwg.org/multipage/links.html#hyperlink-auditing' target='_blank'>este artigo</a>)"
},
"ping_blocking_enabled_title": {
"message": "Bloquear inspeção de hiperligações"
},
"extension_description": {
"message": "Remover elementos de rastreamento dos URLs."
},
"eTag_filtering_log": {
"message": "O cabeçalho ETag foi removido deste pedido"
},
"eTag_filtering_enabled": {
"message": "Filtra cabeçalhos ETag dos pedidos (ver também <a href='https://en.wikipedia.org/wiki/HTTP_ETag#Tracking_using_ETags' target='_blank'>este artigo</a>)"
},
"eTag_filtering_enabled_title": {
"message": "Filtrar cabeçalhos ETag. Dica: deve limpar a cache antes de começar a utlizar esta função."
},
"popup_html_rules_status_head_title": {
"message": " ",
"description": "não necessário, apenas para evitar exceções"
},
"popup_html_statistics_percentage_title": {
"message": " "
},
"popup_html_statistics_blocked_title": {
"message": " "
},
"popup_html_statistics_elements_title": {
"message": " "
},
"popup_html_statistics_head_title": {
"message": " "
},
"popup_html_configs_head_title": {
"message": " "
},
"context_menu_enabled_title": {
"message": " "
}
}

View File

@@ -1,378 +0,0 @@
{
"hash_status_code_1": {
"message": "posodobljen",
"description": "Ta status pomeni, da za ClearURLs pravila ni na voljo nobene posodobitve."
},
"hash_status_code_2": {
"message": "posodobljeno",
"description": "Ta status pomeni, da so ClearURLs pravila uspešno posodobljena."
},
"hash_status_code_3": {
"message": "na voljo je posodobitev",
"description": "Ta status pomeni, da je za ClearURLs na voljo posodobitev."
},
"hash_status_code_4": {
"message": "napaka",
"description": "Ta status pomeni, da se ClearURLs ni mogel uspešno zagnati."
},
"hash_status_code_5": {
"message": "Ups, nekaj je šlo narobe!",
"description": "Ta status pomeni, da je pri posodabljanju ClearURLs pravil prišlo do napake."
},
"log_redirect": {
"message": "Ta URL je preusmerjen",
"description": "Ta niz je uporabljen za preusmeritve v ClearURLs dnevniku."
},
"log_domain_blocked": {
"message": "Ta domena je blokirana",
"description": "Ta niz je uporabljen za blokirane domene v ClearURLs dnevniku."
},
"check_os_log": {
"message": "[ClearURLs]: Dodan je poslušalec dnevnika",
"description": "Ta niz je uporabljen pri zagonu ClearURLs dnevnika."
},
"log_html_page_title": {
"message": "Dnevnik ClearURLs",
"description": "Ta niz je uporabljen kot glava na strani dnevnika."
},
"log_html_table_head_1": {
"message": "Pred obdelavo",
"description": "Ta niz je uporabljen kot naslov tabele na strani dnevnika."
},
"log_html_table_head_2": {
"message": "Po obdelavi",
"description": "Ta niz je uporabljen kot naslov tabele na strani dnevnika."
},
"log_html_table_head_3": {
"message": "Pravilo",
"description": "Ta niz je uporabljen kot naslov tabele na strani dnevnika."
},
"log_html_table_head_4": {
"message": "Čas",
"description": "Ta niz je uporabljen kot naslov tabele na strani dnevnika."
},
"log_html_reset_button": {
"message": "Ponastavitev",
"description": "Ta niz je uporabljen kot oznaka gumba za ponastavitev na strani dnevnika."
},
"log_html_reset_button_title": {
"message": "Ponastavi globalni dnevnik",
"description": "Ta niz je uporabljen kot naziv gumba za ponastavitev na strani dnevnika."
},
"popup_html_configs_head": {
"message": "Konfiguracije",
"description": "Ta niz je uporabljen kot naziv za konfiguracije na pojavni strani."
},
"popup_html_configs_switch_filter": {
"message": "Filter",
"description": "Ta niz je uporabljen kot oznaka stikala za filter na pojavni strani."
},
"popup_html_configs_switch_filter_title": {
"message": "Stikalo filtra vklopi funkcijo čiščenja v dodatku ClearURLs. Če to funkcijo izklopite, bo celoten dodatek onemogočen.",
"description": "Ta niz je uporabljen kot naziv stikala za filter na pojavni strani."
},
"popup_html_configs_switch_log": {
"message": "Beleženje",
"description": "Ta niz je uporabljen kot oznaka stikala za beleženje na pojavni strani."
},
"popup_html_configs_switch_log_title": {
"message": "Zapis je shranjen samo lokalno. Te funkcije vam ne svetujemo, če je ne potrebujete",
"description": "Ta niz je uporabljen kot naziv stikala za beleženje na pojavni strani."
},
"popup_html_configs_switch_badges": {
"message": "Značke",
"description": "Ta niz je uporabljen kot oznaka stikala za značke na pojavni strani."
},
"popup_html_configs_switch_badges_title": {
"message": "Pokaži številke očiščenih URL-jev",
"description": "Ta niz je uporabljen kot naziv stikala za značke na pojavni strani."
},
"popup_html_statistics_head": {
"message": "Statistika",
"description": "Ta niz je uporabljen kot naziv za statistiko na pojavni strani."
},
"popup_html_statistics_elements": {
"message": "Elementi",
"description": "Ta niz je uporabljen kot naziv za elemente na pojavni strani."
},
"popup_html_statistics_blocked": {
"message": "Blokirano",
"description": "Ta niz je uporabljen kot naziv za blokirane elemente na pojavni strani."
},
"popup_html_statistics_percentage": {
"message": "Delež",
"description": "Ta niz je uporabljen kot naziv za delež blokiranih elementov na pojavni strani."
},
"popup_html_statistics_reset_button": {
"message": "Ponastavitev",
"description": "Ta niz je uporabljen kot oznaka gumba za ponastavitev statistike na pojavni strani."
},
"popup_html_statistics_reset_button_title": {
"message": "Ponastavi globalno statistiko",
"description": "Ta niz je uporabljen kot naziv gumba za ponastavitev statistike na pojavni strani."
},
"popup_html_rules_status_head": {
"message": "Status pravil",
"description": "Ta niz je uporabljen kot naziv odseka za status pravil na pojavni strani."
},
"popup_html_log_head": {
"message": "Dnevnik",
"description": "Ta niz je uporabljen kot oznaka gumba za dnevnik na pojavni strani."
},
"popup_html_log_head_title": {
"message": "Odpri dnevnik",
"description": "Ta niz je uporabljen kot naziv gumba za dnevnik na pojavni strani."
},
"popup_html_report_button": {
"message": "Prijavi trenutni URL",
"description": "Opomba: trenutno ni v uporabi."
},
"popup_html_report_button_title": {
"message": "Prijavi trenutni URL iz tega zavihka.",
"description": "Trenutno ni v uporabi."
},
"core_save_on_disk": {
"message": "[ClearURLs]: Shrani na disk.",
"description": "Ta niz je uporabljen kot sporočilo uporabniku, da je ClearURLs shranil nastavitve na disk."
},
"core_error": {
"message": "[ClearURLs]: Razširitev se ni mogla zagnati.",
"description": "Ta niz je uporabljen kot sporočilo uporabniku, da se ClearURLs ni mogel zagnati."
},
"configs_switch_statistics": {
"message": "Statistika",
"description": "Ta niz je uporabljen kot oznaka stikala za statistiko na pojavni strani."
},
"configs_switch_statistics_title": {
"message": "Aktiviraj ali deaktiviraj funkcijo statistike",
"description": "Ta niz je uporabljen kot naziv stikala za statistiko na pojavni strani."
},
"settings_html_page_title": {
"message": "ClearURLs nastavitve",
"description": "Ta niz je uporabljen kot naslov strani za nastavitve."
},
"badged_color_label": {
"message": "Barva značke",
"description": "Ta niz je uporabljen kot naziv za barvno oznako značke."
},
"setting_html_reset_button": {
"message": "Ponastavitev",
"description": "Ta niz je uporabljen kot oznaka gumba za ponastavitev na strani z nastavitvami."
},
"setting_html_reset_button_title": {
"message": "Ponastavi vse",
"description": "Ta niz je uporabljen kot naziv gumba za ponastavitev na strani z nastavitvami."
},
"setting_rule_url_label": {
"message": "URL do datoteke data.json (pravila)",
"description": "Ta niz je uporabljen kot naziv za oznako URL pravila."
},
"settings_html_save_button": {
"message": "Shrani in osveži razširitev",
"description": "Ta niz je uporabljen kot oznaka gumba za shrambo in osvežitev na strani nastavitev."
},
"settings_html_save_button_title": {
"message": "Shrani nastavitve",
"description": "Ta niz je uporabljen kot naziv gumba za shrambo in osvežitev na strani nastavitev."
},
"setting_hash_url_label": {
"message": "URL do datoteke rules.hash (hash)",
"description": "Ta niz je uporabljen kot naziv za oznako URL pravila rule.hash."
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Vrste zahtev</a> (za strokovnjake)",
"description": "Ta niz je uporabljen kot naziv za znako tipov."
},
"setting_report_server_label": {
"message": "Prijavi strežnik za URL-je",
"description": "Opomba: trenutno ni v uporabi."
},
"success_report_url": {
"message": "URL je bil uspešno prijavljen. Ta URL bomo kmalu preverili.",
"description": "Opomba: trenutno ni v uporabi."
},
"error_report_url": {
"message": "Kaže da je bil ta URL že prijavljen.",
"description": "Opomba: trenutno ni v uporabi."
},
"donate_button": {
"message": "Donacija za ustvarjalca ClearURLs.",
"description": "Ta niz je uporabljen kot povezava na stran za donacije."
},
"clipboard_copy_link": {
"message": "Kopiraj Počisti Povezava Lokacija",
"description": "Ta niz je uporabljen v kontekstnen meniju v obliki povezav za kopiranje in čiščenje."
},
"context_menu_enabled": {
"message": "Prikaži vnos kontekstnega menija",
"description": "Ta niz je uporabljen za preklop vnosa kontekstnega menija za kopiranje in čiščenje povezav."
},
"history_listener_enabled": {
"message": "Prepreči vrivanje sledenje preko API-ja zgodovine (glej tudi: <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>Metoda replaceState()</a>)",
"description": "Ta niz se uporablja kot naziv oznake za API poslušalca zgodovine."
},
"cleaning_tool_page_title": {
"message": "ClearURLs orodje za čiščenje",
"description": "Ta niz se uporablja kot naslov strani orodja za čiščenje."
},
"cleaning_tool_description": {
"message": "S tem orodjem je možno prilepiti URL-je. ClearURLs jih bo počistil po kliku na zelen gumb. Prilepi se lahko več URL-jev naenkrat, ampak mora biti vsak URL v posamezni vrstici.",
"description": "Ta niz se uporablja kot opis orodja za čiščenje."
},
"cleaning_tool_btn": {
"message": "Počisti URL-je",
"description": "Ta niz se uporablja kot oznaka gumba za čiščenje URL-jev."
},
"cleaning_tool_dirty_urls_label": {
"message": "Sem lahko prilepite URL s sledilnimi elementi:",
"description": "Ta niz je uporabljen kot naslov strani orodja za čiščenje za URL-je s sledilnimi elementi."
},
"cleaning_tool_clean_urls_label": {
"message": "Tukaj lahko najdete očiščene URL-je:",
"description": "Ta niz se uporablja kot naslov strani orodja za čiščenje za očiščene URL-je."
},
"local_hosts_skipping": {
"message": "Preskoči URL-je na lokalnih gostiteljih (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16, 127.0.0.1, localhost)",
"description": "Ta niz se uporablja kot oznaka stikala za preskakovanje lokalnega gostitelja."
},
"local_hosts_skipping_title": {
"message": "Preskoči URL-je na lokalnih gostiteljih",
"description": "Ta niz se uporablja kot naziv stikala za preskakovanje lokalnega gostitelja."
},
"log_html_export_button": {
"message": "Izvozi",
"description": "Ta niz se uporablja kot oznaka gumba za izvoz na strani dnevnika."
},
"log_html_export_button_title": {
"message": "Izvozi globalni dnevnik",
"description": "Ta niz je uporabljen kot naziv gumba za izvoz na strani dnevnika."
},
"log_html_import_button": {
"message": "Uvozi",
"description": "Ta niz je uporabljen kot oznaka gumba za uvoz na strani dnevnika."
},
"log_html_import_button_title": {
"message": "Uvozi globalni dnevnik",
"description": "Ta niz je uporabljen kot naziv gumba za uvoz na strani dnevnika."
},
"setting_html_export_button": {
"message": "Izvozi",
"description": "Ta niz je uporabljen kot oznaka gumba za izvoz na strani nastavitev."
},
"setting_html_export_button_title": {
"message": "Izvozi vse",
"description": "Ta niz je uporabljen kot naziv gumba za izvoz na strani nastavitev."
},
"setting_html_import_button": {
"message": "Uvozi",
"description": "Ta niz je uporabljen kot oznaka gumba za uvoz na strani nastavitev."
},
"setting_html_import_button_title": {
"message": "Uvozi vse",
"description": "Ta niz je uporabljen kot naziv gumba za uvoz na strani nastavitev."
},
"setting_log_limit_label": {
"message": "Omejite dnevnik na $LIMIT$ vnosov.",
"description": "Ta niz je uporabljen kot naziv za oznako omejitve dnevnika.",
"placeholders": {
"limit": {
"content": "$1",
"example": "100"
}
}
},
"blocked_html_title": {
"message": "To stran je blokiral <b>ClearURLs</b>",
"description": "Ta niz je uporabljen kot naslov na strani blokiranega spletnega mesta."
},
"blocked_html_body": {
"message": "To stran je blokirala razširitev <b>ClearURLs</b>, ker je bila stran identificirana kot oglaševalska in/ali sledilna storitev. Če želite obiskati to stran, morate začasno onemogočiti razširitev ali izklopiti blokiranje domen v nastavitvah ClearURLs. Za tem lahko pritisnete spodnji gumb, da naložite stran.",
"description": "Ta niz se uporablja kot telo na strani blokiranega spletnega mesta."
},
"blocked_html_button": {
"message": "Obišči stran",
"description": "Ta niz se uporablja kot oznaka gumba na strani blokiranega spletnega mesta."
},
"referral_marketing_enabled": {
"message": "Dovoli napotitveno trženje",
"description": "Ta niz se uporablja kot oznaka stikala za napotitveno trženje."
},
"referral_marketing_enabled_title": {
"message": "Dovoli napotitveno trženje",
"description": "Ta niz se uporablja kot naziv stikala za napotitveno trženje."
},
"watchdog": {
"message": "[ClearURLs]: Čuvaj je zaznal težavo in je spodletel že $TIMES$-krat.",
"description": "Ta niz se uporablja kot besedilo za čuvaja.",
"placeholders": {
"times": {
"content": "$1",
"example": "3"
}
}
},
"domain_blocking_enabled": {
"message": "Dovoli blokiranje domen (lahko vodi do težav na straneh, ki ne dovolijo programov za blokiranje oglasov)",
"description": "Ta niz je uporabljen kot oznaka stikala za blokiranje domen."
},
"domain_blocking_enabled_title": {
"message": "Dovoli blokiranje domen (lahko vodi do težav na straneh, ki ne dovolijo programov za blokiranje oglasov)",
"description": "Ta niz je uporabljen kot naziv stikala za blokiranje domen."
},
"log_ping_blocked": {
"message": "Revizija te hiperpovezave je bila blokirana",
"description": "Ta niz je uporabljen pri reviziji hiperpovezav v dnevniku ClearURLs."
},
"ping_blocking_enabled": {
"message": "Blokiraj revizijo hiperpovezav (glej tudi <a href='https://html.spec.whatwg.org/multipage/links.html#hyperlink-auditing' target='_blank'>ta članek</a>)",
"description": "Ta niz je uporabljen kot oznaka stikala za blokiranje revizije hiperpovezav."
},
"ping_blocking_enabled_title": {
"message": "Blokiraj revizijo hiperpovezav",
"description": "Ta niz je uporabljen kot naziv stikala za blokiranje revizije hiperpovezav."
},
"extension_description": {
"message": "Odstrani sledilne elemente iz URL-jev.",
"description": "Opis razširitve (največ 132 znakov)."
},
"eTag_filtering_log": {
"message": "ETag glava je bila odstranjena iz te zahteve",
"description": "Ta niz je uporabljen pri filtriranju ETag glav v ClearURLs dnevniku."
},
"eTag_filtering_enabled": {
"message": "Filtrira ETag glave iz zahtev (glej tudi <a href='https://en.wikipedia.org/wiki/HTTP_ETag#Tracking_using_ETags' target='_blank'>ta članek</a>)",
"description": "Ta niz se uporablja kot oznaka stikala za filtriranje ETag glav."
},
"eTag_filtering_enabled_title": {
"message": "Filtrira ETag glave. Namig: pred prvo uporabo je treba počistiti predpomnilnik.",
"description": "Ta niz se uporablja kot naziv stikala za filtriranje ETag glav."
},
"popup_html_rules_status_head_title": {
"message": "Obvestilo",
"description": "potrebno samo za odpravljanje težav"
},
"popup_html_statistics_percentage_title": {
"message": "Obvestilo",
"description": "potrebno samo za odpravljanje težav"
},
"popup_html_statistics_blocked_title": {
"message": "Obvestilo",
"description": "potrebno samo za odpravljanje težav"
},
"popup_html_statistics_elements_title": {
"message": "Obvestilo",
"description": "potrebno samo za odpravljanje težav"
},
"popup_html_statistics_head_title": {
"message": "Obvestilo",
"description": "potrebno samo za odpravljanje težav"
},
"popup_html_configs_head_title": {
"message": "Obvestilo",
"description": "potrebno samo za odpravljanje težav"
},
"context_menu_enabled_title": {
"message": "Obvestilo",
"description": "potrebno samo za odpravljanje težav"
}
}

View File

@@ -1,378 +0,0 @@
{
"hash_status_code_1": {
"message": "คุณมีรุ่นล่าสุด",
"description": "This status code says, that no update is available for the ClearURLs rules and everything is up to date."
},
"hash_status_code_2": {
"message": "อัปเดทสำเร็จ",
"description": "This status code says, that the ClearURLs rules are successfully updated."
},
"hash_status_code_3": {
"message": "มีรายการที่ต้องอัปเดต",
"description": "This status code says, that an update is available for the ClearURLs rules."
},
"hash_status_code_4": {
"message": "พบข้อผิดพลาด",
"description": "This status code says, that the ClearURLs could not be started correctly."
},
"hash_status_code_5": {
"message": "ดูเหมือนว่าจะมีบางอย่างผิดปกติ!",
"description": "This status code says, that an error occurred while updating the ClearURLs rules."
},
"log_redirect": {
"message": "ทำการ redirected URL",
"description": "This string is used on redirections in the ClearURLs log."
},
"log_domain_blocked": {
"message": "โดเมนนี้ถูกบล็อก",
"description": "This string is used on blocked domains in the ClearURLs log."
},
"check_os_log": {
"message": "[ClearURLs]: ได้เพิ่ม Log listener แล้ว",
"description": "This string is used on ClearURLs log startup."
},
"log_html_page_title": {
"message": "Log จาก ClearURLs",
"description": "This string is used as header on the log page."
},
"log_html_table_head_1": {
"message": "ก่อนเริ่มดำเนินการ",
"description": "This string is used as table title on the log page."
},
"log_html_table_head_2": {
"message": "หลังดำเนินการ",
"description": "This string is used as table title on the log page."
},
"log_html_table_head_3": {
"message": "กฏข้อห้าม",
"description": "This string is used as table title on the log page."
},
"log_html_table_head_4": {
"message": "เวลา",
"description": "This string is used as table title on the log page."
},
"log_html_reset_button": {
"message": "คืนค่าเดิม",
"description": "This string is used for the reset button on the log page."
},
"log_html_reset_button_title": {
"message": "คืนค่าเดิมของlog ทั่วโลก",
"description": "This string is used as title for the reset button on the log page."
},
"popup_html_configs_head": {
"message": "ตั้งค่าอื่น ๆ ",
"description": "This string is used as title for the configs on the popup page."
},
"popup_html_configs_switch_filter": {
"message": "ตัวกรอง",
"description": "This string is used as name for the filter switch button on the popup page."
},
"popup_html_configs_switch_filter_title": {
"message": "สวิตช์ตัวกรองเปิดใช้งานฟังก์ชันการทำความสะอาดของ ClearURLs ถ้าคุณปิดการทำงานตัวเลือกนี้ addon ทั้งหมดจะถูกปิด",
"description": "This string is used as title for the filter switch button on the popup page."
},
"popup_html_configs_switch_log": {
"message": "Logging",
"description": "This string is used as name for the logging switch button on the popup page."
},
"popup_html_configs_switch_log_title": {
"message": "log นี้ถูกบันทึกแบบเฉพาะที่ เราแนะนำให้ต้านฟีเจอร์ถ้าคุณไม่จำเป็นต้องใช้",
"description": "This string is used as title for the logging switch button on the popup page."
},
"popup_html_configs_switch_badges": {
"message": "เครื่องหมาย",
"description": "This string is used as name for the badges switch button on the popup page."
},
"popup_html_configs_switch_badges_title": {
"message": "แสดงจำนวนของ urls ที่ถูกล้าง",
"description": "This string is used as title for the badges switch button on the popup page."
},
"popup_html_statistics_head": {
"message": "สถิติ",
"description": "This string is used as title for the statistics on the popup page."
},
"popup_html_statistics_elements": {
"message": "ส่วนประกอบ",
"description": "This string is used as name for the elements on the popup page."
},
"popup_html_statistics_blocked": {
"message": "บล็อกแล้ว",
"description": "This string is used as name for the blocked elements on the popup page."
},
"popup_html_statistics_percentage": {
"message": "ร้อยละ",
"description": "This string is used as name for the percentage of blocked elements on the popup page."
},
"popup_html_statistics_reset_button": {
"message": "คืนค่าสถิติเดิม",
"description": "This string is used as name for the statistics reset button on the popup page."
},
"popup_html_statistics_reset_button_title": {
"message": "คืนค่าสถิติเดิมทั่วโลก",
"description": "This string is used as title for the statistics reset button on the popup page."
},
"popup_html_rules_status_head": {
"message": "สถานะข้อห้าม",
"description": "This string is used as title for the rules-status section on the popup page."
},
"popup_html_log_head": {
"message": "Log",
"description": "This string is used as name for the log button on the popup page."
},
"popup_html_log_head_title": {
"message": "เปิด log",
"description": "This string is used as title for the log button on the popup page."
},
"popup_html_report_button": {
"message": "รายงาน URL ปัจจุบัน",
"description": "Note: Currently not used."
},
"popup_html_report_button_title": {
"message": "รายงาน URL จากแท็ปนี้",
"description": "Currently not used."
},
"core_save_on_disk": {
"message": "[ClearURLs]: บันทึกลงบนดิสก์",
"description": "This string is used to tell the user, that ClearURLs saved the settings on disk."
},
"core_error": {
"message": "[ClearURLs]: addon ไม่สามารถทำงานได้",
"description": "This string is used to tell the user, that ClearURLs could not be started."
},
"configs_switch_statistics": {
"message": "สถิติ",
"description": "This string is used as name for the statistics switch button on the popup page."
},
"configs_switch_statistics_title": {
"message": "เปิดการใช้งานหรือปิดการใช้งานฟังก์ชันสถิติ",
"description": "This string is used as title for the statistics switch button on the popup page."
},
"settings_html_page_title": {
"message": "การตั้งค่า ClearURLs",
"description": "This string is used as title on the settings page."
},
"badged_color_label": {
"message": "สีเครื่องหมาย",
"description": "This string is used as name for the badged color label."
},
"setting_html_reset_button": {
"message": "คืนค่าเดิม",
"description": "This string is used as name for the reset button on the settings page."
},
"setting_html_reset_button_title": {
"message": "ล้างทั้งหมด",
"description": "This string is used as title for the reset button on the settings page."
},
"setting_rule_url_label": {
"message": "The url to the data.json file (rules)",
"description": "This string is used as name for the rule url label."
},
"settings_html_save_button": {
"message": "บันทึก & รีโหลด addon",
"description": "This string is used as name for the save&reload button on the settings page."
},
"settings_html_save_button_title": {
"message": "บันทึกการตั้งค่า",
"description": "This string is used as title for the save&reload button on the settings page."
},
"setting_hash_url_label": {
"message": "The url to the rules.hash file (hash)",
"description": "This string is used as name for the rule.hash url label."
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Request types</a> (expert level)",
"description": "This string is used as name for the types label."
},
"setting_report_server_label": {
"message": "รายงาน server ของ URLs",
"description": "Note: Currently not used."
},
"success_report_url": {
"message": "รายงาน URL สำเร็จเราจะทำการตรวจสอบโดยเร็ว",
"description": "Note: Currently not used."
},
"error_report_url": {
"message": "เหมือนกับว่าคุณจะได้รายงาน URL นี้ไปแล้ว",
"description": "Note: Currently not used."
},
"donate_button": {
"message": "ร่วมบริจาคให้กับทีมผู้สร้าง ClearURLs",
"description": "This string is used to refer to a donation page."
},
"clipboard_copy_link": {
"message": "คัดลอกตำแหน่งลิงก์ Clean",
"description": "This string is used in the context menu to copy clean links."
},
"context_menu_enabled": {
"message": "แสดงเนื้อหาการบันทึกเมนู",
"description": "This string is used toggle the context menu entry to copy clean links."
},
"history_listener_enabled": {
"message": "ป้องกันการติดตามผ่านประวัติ API (ดูเพิ่มเติม: <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>The replaceState() method</a>)",
"description": "This string is used as name for the history API listener label."
},
"cleaning_tool_page_title": {
"message": "เครื่องมือ ClearURLs",
"description": "This string is used as title on the cleaning tool page."
},
"cleaning_tool_description": {
"message": "ด้วยเครื่องมือนี้คุณจะวางใน URLs และ ClearURLs ได้ด้วยการคลิกปุ่มสีเขียว คุณสามารถวางได้หลาย URLs ในคราวเดียวกัน แต่ว่าแต่ละ URL ต้องอยูแยกบรรทัดกัน",
"description": "This string is used as description of the cleaning tool."
},
"cleaning_tool_btn": {
"message": "Clean URLs",
"description": "This string is used as name for the clean url button."
},
"cleaning_tool_dirty_urls_label": {
"message": "วาง URL ที่ต้องการคลีนที่นี่:",
"description": "This string is used as title on the cleaning tool page for the dirty URLs."
},
"cleaning_tool_clean_urls_label": {
"message": "ดู URLs ที่คลีนแล้วที่นี่:",
"description": "This string is used as title on the cleaning tool page for the clean URLs."
},
"local_hosts_skipping": {
"message": "ข้ามการล้าง URLs จากแม่ข่ายท้องถิ่น(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16, 127.0.0.1, localhost)",
"description": "This string is used as label for the local host skipping switch"
},
"local_hosts_skipping_title": {
"message": "ข้าม URLs ของแม่ข่ายท้องถิ่น",
"description": "This string is used as title for the local host skipping switch"
},
"log_html_export_button": {
"message": "ส่งข้อมูลออก",
"description": "This string is used for the export button on the log page."
},
"log_html_export_button_title": {
"message": "ส่งข้อมูลออก log ทั่วโลก",
"description": "This string is used as title for the export button on the log page."
},
"log_html_import_button": {
"message": "นำข้อมูลเข้า",
"description": "This string is used for the import button on the log page."
},
"log_html_import_button_title": {
"message": "นำข้อมูลเข้า log ทั่วโลก",
"description": "This string is used as title for the import button on the log page."
},
"setting_html_export_button": {
"message": "ส่งข้อมูลออก",
"description": "This string is used as name for the export button on the settings page."
},
"setting_html_export_button_title": {
"message": "ส่งออกทุกอย่าง",
"description": "This string is used as title for the export button on the settings page."
},
"setting_html_import_button": {
"message": "นำเข้า",
"description": "This string is used as name for the reset button on the settings page."
},
"setting_html_import_button_title": {
"message": "นำเข้าทุกอย่าง",
"description": "This string is used as title for the import button on the settings page."
},
"setting_log_limit_label": {
"message": "จำกัด log ให้ $LIMIT$ ลงข้อมูล",
"description": "This string is used as name for the log limit label.",
"placeholders": {
"limit": {
"content": "$1",
"example": "100"
}
}
},
"blocked_html_title": {
"message": "ไซต์นี้ถูกจำกัดการเข้าถึงโดย <b>ClearURLs</b>",
"description": "This string is used as title on the blocked site page."
},
"blocked_html_body": {
"message": "ไซต์นี้ถูกจำกัดการเข้าถึงโดย <b>ClearURLs</b> Add-on, เนื่องจากเราตรวจจับว่าไซต์นี้เป็นการโฆษณาหรือมีการติดตาม หากต้องการเข้าชมไซต์คุณต้องปิด Add-on ชั่วคราวที่การตั้งค่า ClearURLs หลังจากนั้นคลิกปุ่มด้านล่างเพื่อโหลดหน้านี้อีกครั้ง",
"description": "This string is used as body on the blocked site page."
},
"blocked_html_button": {
"message": "เข้าชมเว็บเพจ",
"description": "This string is used as button on the blocked site page."
},
"referral_marketing_enabled": {
"message": "อนุญาตการตลาดแบบอ้างถึง",
"description": "This string is used as label for the referral marketing switch"
},
"referral_marketing_enabled_title": {
"message": "อนุญาตการตลาดแบบอ้างถึง",
"description": "This string is used as title for the referral marketing switch"
},
"watchdog": {
"message": "[ClearURLs]: ระบบเฝ้าระวังตรวจพบปัญหาที่ล่มไปแล้ว $TIMES$ ครั้ง",
"description": "This string is used as text for the watchdog",
"placeholders": {
"times": {
"content": "$1",
"example": "3"
}
}
},
"domain_blocking_enabled": {
"message": "อนุญาตให้บล็อกโดเมน (อาจทำให้เกิดปัญหาในหน้าที่ไม่อนุญาต AdBlockers)",
"description": "This string is used as label for the domain blocking switch"
},
"domain_blocking_enabled_title": {
"message": "อนุญาตให้บล็อกโดเมน (อาจทำให้เกิดปัญหาในหน้าที่ไม่อนุญาต AdBlockers)",
"description": "This string is used as title for the domain blocking switch"
},
"log_ping_blocked": {
"message": "การตรวจสอบไฮเปอร์ลิงก์นี้ถูกบล็อก",
"description": "This string is used on hyperlink auditing in the ClearURLs log."
},
"ping_blocking_enabled": {
"message": "บล็อกการตรวจสอบไฮเปอร์ลิงก์ (ดูเพิ่มเติม <a href='https://html.spec.whatwg.org/multipage/links.html#hyperlink-auditing' target='_blank'>บทความนี้</a>)",
"description": "This string is used as label for the hyperlink auditing blocking switch"
},
"ping_blocking_enabled_title": {
"message": "บล็อกการตรวจสอบไฮเปอร์ลิงก์",
"description": "This string is used as title for the hyperlink auditing blocking switch"
},
"extension_description": {
"message": "เอาตัวติดตามทั้งหมดออกจาก URLs.",
"description": "Extension description (max. 132 characters)"
},
"eTag_filtering_log": {
"message": "หัว ETag ได้ถูกนำออกจากคำขอ",
"description": "This string is used on ETag header filtering in the ClearURLs log."
},
"eTag_filtering_enabled": {
"message": "กรองหัว ETag จากคำขอทั้งหมด (ดูเพิ่มเติม <a href='https://en.wikipedia.org/wiki/HTTP_ETag#Tracking_using_ETags' target='_blank'>บทความนี้</a>)",
"description": "This string is used as label for the ETag header filtering switch"
},
"eTag_filtering_enabled_title": {
"message": "ตัวกรองหัว ETag คำใบ้: ต้องล้างค่าแคชก่อนใช้งาน",
"description": "This string is used as title for the ETag header filtering switch"
},
"popup_html_rules_status_head_title": {
"message": " ",
"description": "not needed, only to prevent exceptions"
},
"popup_html_statistics_percentage_title": {
"message": " ",
"description": "not needed, only to prevent exceptions"
},
"popup_html_statistics_blocked_title": {
"message": " ",
"description": "not needed, only to prevent exceptions"
},
"popup_html_statistics_elements_title": {
"message": " ",
"description": "not needed, only to prevent exceptions"
},
"popup_html_statistics_head_title": {
"message": " ",
"description": "not needed, only to prevent exceptions"
},
"popup_html_configs_head_title": {
"message": " ",
"description": "not needed, only to prevent exceptions"
},
"context_menu_enabled_title": {
"message": " ",
"description": "not needed, only to prevent exceptions"
}
}

View File

@@ -1,378 +0,0 @@
{
"hash_status_code_1": {
"message": "已是最新版本",
"description": "此状态码表示此时并没有任何的 ClearURLs 规则需要更新,并且所有的都已是最新版本。"
},
"hash_status_code_2": {
"message": "已更新",
"description": "此状态码表示 ClearURLs 规则已成功更新。"
},
"hash_status_code_3": {
"message": "有可用的更新",
"description": "此状态码表示有可用的 ClearURLs 规则更新。"
},
"hash_status_code_4": {
"message": "錯誤",
"description": "This status code says, that the ClearURLs could not be started correctly."
},
"hash_status_code_5": {
"message": "發生錯誤",
"description": "This status code says, that an error occurred while updating the ClearURLs rules."
},
"log_redirect": {
"message": "此網址已被轉址",
"description": "This string is used on redirections in the ClearURLs log."
},
"log_domain_blocked": {
"message": "已封鎖此網域",
"description": "This string is used on blocked domains in the ClearURLs log."
},
"check_os_log": {
"message": "[ClearURLs]: 已新增記錄監聽器",
"description": "This string is used on ClearURLs log startup."
},
"log_html_page_title": {
"message": "ClearURLs 記錄檔",
"description": "This string is used as header on the log page."
},
"log_html_table_head_1": {
"message": "處理前",
"description": "This string is used as table title on the log page."
},
"log_html_table_head_2": {
"message": "處理後",
"description": "This string is used as table title on the log page."
},
"log_html_table_head_3": {
"message": "規則",
"description": "This string is used as table title on the log page."
},
"log_html_table_head_4": {
"message": "時間",
"description": "This string is used as table title on the log page."
},
"log_html_reset_button": {
"message": "清除",
"description": "This string is used for the reset button on the log page."
},
"log_html_reset_button_title": {
"message": "清除全域記錄檔",
"description": "This string is used as title for the reset button on the log page."
},
"popup_html_configs_head": {
"message": "設定",
"description": "This string is used as title for the configs on the popup page."
},
"popup_html_configs_switch_filter": {
"message": "過濾器",
"description": "This string is used as name for the filter switch button on the popup page."
},
"popup_html_configs_switch_filter_title": {
"message": "「過濾器」即 ClearURLs 的網址清理功能。若你關閉此選項,則本套件的主要功能將無法作用。",
"description": "This string is used as title for the filter switch button on the popup page."
},
"popup_html_configs_switch_log": {
"message": "錄製記錄",
"description": "This string is used as name for the logging switch button on the popup page."
},
"popup_html_configs_switch_log_title": {
"message": "記錄檔將儲存於本機。若不需要此功能,建議關閉。",
"description": "This string is used as title for the logging switch button on the popup page."
},
"popup_html_configs_switch_badges": {
"message": "計數徽章",
"description": "This string is used as name for the badges switch button on the popup page."
},
"popup_html_configs_switch_badges_title": {
"message": "顯示已清理的數量",
"description": "This string is used as title for the badges switch button on the popup page."
},
"popup_html_statistics_head": {
"message": "統計資料",
"description": "This string is used as title for the statistics on the popup page."
},
"popup_html_statistics_elements": {
"message": "元素",
"description": "This string is used as name for the elements on the popup page."
},
"popup_html_statistics_blocked": {
"message": "已阻擋",
"description": "This string is used as name for the blocked elements on the popup page."
},
"popup_html_statistics_percentage": {
"message": "阻擋比率",
"description": "This string is used as name for the percentage of blocked elements on the popup page."
},
"popup_html_statistics_reset_button": {
"message": "歸零",
"description": "This string is used as name for the statistics reset button on the popup page."
},
"popup_html_statistics_reset_button_title": {
"message": "重置全域統計資料",
"description": "This string is used as title for the statistics reset button on the popup page."
},
"popup_html_rules_status_head": {
"message": "規則狀態",
"description": "This string is used as title for the rules-status section on the popup page."
},
"popup_html_log_head": {
"message": "記錄",
"description": "This string is used as name for the log button on the popup page."
},
"popup_html_log_head_title": {
"message": "檢視記錄檔",
"description": "This string is used as title for the log button on the popup page."
},
"popup_html_report_button": {
"message": "回報目前網址",
"description": "Note: Currently not used."
},
"popup_html_report_button_title": {
"message": "回報目前分頁的網址",
"description": "Currently not used."
},
"core_save_on_disk": {
"message": "[ClearURLs]: 儲存於本機",
"description": "This string is used to tell the user, that ClearURLs saved the settings on disk."
},
"core_error": {
"message": "[ClearURLs]: 無法啟動擴充功能",
"description": "This string is used to tell the user, that ClearURLs could not be started."
},
"configs_switch_statistics": {
"message": "統計資料",
"description": "This string is used as name for the statistics switch button on the popup page."
},
"configs_switch_statistics_title": {
"message": "開啟或關閉統計功能",
"description": "This string is used as title for the statistics switch button on the popup page."
},
"settings_html_page_title": {
"message": "ClearURLs 偏好設定",
"description": "This string is used as title on the settings page."
},
"badged_color_label": {
"message": "計數徽章背景顏色",
"description": "This string is used as name for the badged color label."
},
"setting_html_reset_button": {
"message": "重設",
"description": "This string is used as name for the reset button on the settings page."
},
"setting_html_reset_button_title": {
"message": "將所有設定還原為預設值",
"description": "This string is used as title for the reset button on the settings page."
},
"setting_rule_url_label": {
"message": "data.json 檔的網址 (規則)",
"description": "This string is used as name for the rule url label."
},
"settings_html_save_button": {
"message": "儲存並重新啟動擴充功能",
"description": "This string is used as name for the save&reload button on the settings page."
},
"settings_html_save_button_title": {
"message": "儲存設定",
"description": "This string is used as title for the save&reload button on the settings page."
},
"setting_hash_url_label": {
"message": "rules.hash 檔的網址 (校驗)",
"description": "This string is used as name for the rule.hash url label."
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>請求類型</a> (進階設定)",
"description": "This string is used as name for the types label."
},
"setting_report_server_label": {
"message": "回報網址",
"description": "Note: Currently not used."
},
"success_report_url": {
"message": "已成功回報網址,我們將儘速對其檢查。",
"description": "Note: Currently not used."
},
"error_report_url": {
"message": "該網址已被回報過",
"description": "Note: Currently not used."
},
"donate_button": {
"message": "給 ClearURLs 的作者一點贊助!",
"description": "This string is used to refer to a donation page."
},
"clipboard_copy_link": {
"message": "複製經過清理的網址",
"description": "This string is used in the context menu to copy clean links."
},
"context_menu_enabled": {
"message": "在快顯功能表中顯示",
"description": "This string is used toggle the context menu entry to copy clean links."
},
"history_listener_enabled": {
"message": "防止藉由 History API 注入追蹤 (參見:<a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>The replaceState() method</a>)",
"description": "此字符串是history API 监听器的 名字。"
},
"cleaning_tool_page_title": {
"message": "ClearURLs 網址清理工具",
"description": "This string is used as title on the cleaning tool page."
},
"cleaning_tool_description": {
"message": "這個工具可讓你手動清理冗長的網址。請貼上欲清理的網址並點擊「清理網址」按鈕ClearURLs 便會還你乾淨的網址。你可以批次處理多個網址,每條網址須以換行分隔。",
"description": "This string is used as description of the cleaning tool."
},
"cleaning_tool_btn": {
"message": "清理網址",
"description": "This string is used as name for the clean url button."
},
"cleaning_tool_dirty_urls_label": {
"message": "原始網址:",
"description": "This string is used as title on the cleaning tool page for the dirty URLs."
},
"cleaning_tool_clean_urls_label": {
"message": "清理結果:",
"description": "This string is used as title on the cleaning tool page for the clean URLs."
},
"local_hosts_skipping": {
"message": "略過本機網址 (10.0.0.0/8、172.16.0.0/12、192.168.0.0/16、100.64.0.0/10、169.254.0.0/16、127.0.0.1、localhost)",
"description": "此字符串是跳过 localhost 的开关的 label"
},
"local_hosts_skipping_title": {
"message": "略過本機網址",
"description": "此字符串被用于跳过 localhost 的开关的标题"
},
"log_html_export_button": {
"message": "匯出",
"description": "此字符串被用于日志页面的导出按钮"
},
"log_html_export_button_title": {
"message": "匯出全域記錄檔",
"description": "此字符串被用于日志页面的导出按钮的标题"
},
"log_html_import_button": {
"message": "匯入",
"description": "此字符串被用于日志页面的导入按钮"
},
"log_html_import_button_title": {
"message": "匯入全域記錄檔",
"description": "此字符串被用于日志页面的导入按钮的标题"
},
"setting_html_export_button": {
"message": "匯出",
"description": "此字符串被用于设置页面的导出按钮"
},
"setting_html_export_button_title": {
"message": "將各項設定匯出",
"description": "此字符串被用于设置页面的导出按钮的标题"
},
"setting_html_import_button": {
"message": "匯入",
"description": "此字符串被用于设置页面的重置按钮"
},
"setting_html_import_button_title": {
"message": "匯入各項設定",
"description": "此字符串被用于设置页面的导入按钮的标题"
},
"setting_log_limit_label": {
"message": "最多保存 $LIMIT$ 筆記錄檔",
"description": "此字符串是日志限制的标签名",
"placeholders": {
"limit": {
"content": "$1",
"example": "100"
}
}
},
"blocked_html_title": {
"message": "這個網站已由 <b>ClearURLs</b> 封鎖",
"description": "此字符串被用于阻挡页面的标题"
},
"blocked_html_body": {
"message": "由於我們判定這個網站是廣告商或追蹤器的伺服器,因此 <b>ClearURLs</b> 已封鎖此網站。若你仍需造訪此網站,請先暫時停用本擴充功能;或者,至 ClearURLs 的偏好設定中關閉「允許封鎖網域」。完成上述操作後,點擊下方的「繼續前往」即可瀏覽該網站。",
"description": "此字符串被用于阻挡页面的 body"
},
"blocked_html_button": {
"message": "繼續前往",
"description": "此字符串被用于阻挡设置页面的按钮"
},
"referral_marketing_enabled": {
"message": "允許聯盟行銷",
"description": "此字符串被用于跳转营销页面的开关的 label"
},
"referral_marketing_enabled_title": {
"message": "允許聯盟行銷",
"description": "此字符串被用于跳转营销页面的开关的标题"
},
"watchdog": {
"message": "[ClearURLs]: 插件监控发现了一个已失败了 $TIMES$ 次的问题。",
"description": "此字符串被用于插件监控的文字",
"placeholders": {
"times": {
"content": "$1",
"example": "3"
}
}
},
"domain_blocking_enabled": {
"message": "允許封鎖網域 (部分阻撓「廣告阻擋器」的網頁可能無法正常顯示)",
"description": "此字符串被用于域名阻拦开关的 label"
},
"domain_blocking_enabled_title": {
"message": "允許封鎖網域 (部分阻撓「廣告阻擋器」的網頁可能無法正常顯示)",
"description": "此字符串被用于域名阻拦开关的标题"
},
"log_ping_blocked": {
"message": "已阻擋超連結稽核",
"description": "此字符串被用于 ClearURLs 日志中的超链接审计。"
},
"ping_blocking_enabled": {
"message": "阻擋超連結稽核 (<a href='https://html.spec.whatwg.org/multipage/links.html#hyperlink-auditing' target='_blank'>瞭解詳情</a>)",
"description": "此字符串被用于 ClearURLs 日志中的超链接审计的开关的 label"
},
"ping_blocking_enabled_title": {
"message": "阻擋超連結稽核",
"description": "此字符串被用于 ClearURLs 日志中的超链接审计的开关的标题"
},
"extension_description": {
"message": "將網址中的追蹤元素一掃而空",
"description": "异常描述 (最多 132个字符)"
},
"eTag_filtering_log": {
"message": "已在這次請求裡移除 ETag 標頭",
"description": "此字符串被用于 ClearURLs 日志中 ETag 头过滤。"
},
"eTag_filtering_enabled": {
"message": "濾除請求裡的 ETag 標頭 (<a href='https://en.wikipedia.org/wiki/HTTP_ETag#Tracking_using_ETags' target='_blank'>瞭解詳情</a>)",
"description": "此字符串被用于 ClearURLs 日志中 ETag 头过滤开关的 label"
},
"eTag_filtering_enabled_title": {
"message": "濾除 ETag 標頭 (注意:初次啟用前須先清除快取)",
"description": "此字符串被用于 ClearURLs 日志中 ETag 头过滤开关的标题"
},
"popup_html_rules_status_head_title": {
"message": " ",
"description": "非必须,仅为了防止异常发生"
},
"popup_html_statistics_percentage_title": {
"message": " ",
"description": "非必须,仅为了防止异常发生"
},
"popup_html_statistics_blocked_title": {
"message": " ",
"description": "非必须,仅为了防止异常发生"
},
"popup_html_statistics_elements_title": {
"message": " ",
"description": "非必须,仅为了防止异常发生"
},
"popup_html_statistics_head_title": {
"message": " ",
"description": "非必须,仅为了防止异常发生"
},
"popup_html_configs_head_title": {
"message": " ",
"description": "非必须,仅为了防止异常发生"
},
"context_menu_enabled_title": {
"message": " ",
"description": "非必须,仅为了防止异常发生"
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,87 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2020 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
/*
* This script is responsible for minification of the data.min.json file and deletes also empty entries.
*/
let fs = require('fs');
const inFileLocation = process.argv.slice(2)[0];
const outFileLocation = process.argv.slice(2)[1];
if(inFileLocation === undefined || outFileLocation === undefined) {
throw "in- and output must be set!";
}
const fileContent = fs.readFileSync(inFileLocation).toString();
/**
* Builds a minify version of the data.min.json file.
*/
function build() {
const data = JSON.parse(fileContent);
let minifiedData = {"providers":{}};
for(let provider in data.providers) {
minifiedData.providers[provider] = {};
let self = minifiedData.providers[provider];
if(data.providers[provider].completeProvider === true) {
self.completeProvider = true;
}
if(data.providers[provider].forceRedirection === true) {
self.forceRedirection = true;
}
if(data.providers[provider].urlPattern !== "") {
self.urlPattern = data.providers[provider].urlPattern;
}
if(data.providers[provider].rules.length !== 0) {
self.rules = data.providers[provider].rules;
}
if(data.providers[provider].rawRules.length !== 0) {
self.rawRules = data.providers[provider].rawRules;
}
if(data.providers[provider].referralMarketing.length !== 0) {
self.referralMarketing = data.providers[provider].referralMarketing;
}
if(data.providers[provider].exceptions.length !== 0) {
self.exceptions = data.providers[provider].exceptions;
}
if(data.providers[provider].redirections.length !== 0) {
self.redirections = data.providers[provider].redirections;
}
}
fs.writeFile(outFileLocation, JSON.stringify(minifiedData), function(err) {
if(err) {
return console.log(err);
}
console.log("The file was saved!");
});
}
build();

View File

@@ -1,729 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2021 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
/*
* This script is responsible for the core functionalities.
*/
var providers = [];
var prvKeys = [];
var siteBlockedAlert = 'javascript:void(0)';
var dataHash;
var localDataHash;
var os;
/**
* Helper function which remove the tracking fields
* for each provider given as parameter.
*
* @param {Provider} provider Provider-Object
* @param pureUrl URL as String
* @param {boolean} quiet if the action should be displayed in log and statistics
* @param {requestDetails} request the request details
* @return {Array} Array with changes and url fields
*/
function removeFieldsFormURL(provider, pureUrl, quiet = false, request = null) {
let url = pureUrl;
let domain = "";
let fragments = "";
let fields = "";
let rules = provider.getRules();
let changes = false;
let rawRules = provider.getRawRules();
let urlObject = new URL(url);
if (storage.localHostsSkipping && checkLocalURL(urlObject)) {
return {
"changes": false,
"url": url,
"cancel": false
}
}
/*
* Expand the url by provider redirections. So no tracking on
* url redirections form sites to sites.
*/
let re = provider.getRedirection(url);
if (re !== null) {
url = decodeURL(re);
//Log the action
if (!quiet) {
pushToLog(pureUrl, url, translate('log_redirect'));
increaseTotalCounter(1);
increaseBadged(false, request)
}
return {
"redirect": true,
"url": url
}
}
if (provider.isCaneling() && storage.domainBlocking) {
if (!quiet) pushToLog(pureUrl, pureUrl, translate('log_domain_blocked'));
increaseTotalCounter(1);
increaseBadged(quiet, request);
return {
"cancel": true,
"url": url
}
}
/*
* Apply raw rules to the URL.
*/
rawRules.forEach(function (rawRule) {
let beforeReplace = url;
url = url.replace(new RegExp(rawRule, "gi"), "");
if (beforeReplace !== url) {
//Log the action
if (storage.loggingStatus && !quiet) {
pushToLog(beforeReplace, url, rawRule);
}
increaseBadged(quiet, request);
changes = true;
}
});
urlObject = new URL(url);
fields = urlObject.searchParams;
fragments = extractFragments(urlObject);
domain = urlWithoutParamsAndHash(urlObject).toString();
/**
* Only test for matches, if there are fields or fragments that can be cleaned.
*/
if (fields.toString() !== "" || fragments.toString() !== "") {
rules.forEach(rule => {
const beforeFields = fields.toString();
const beforeFragments = fragments.toString();
let localChange = false;
for (const field of fields.keys()) {
if (new RegExp("^"+rule+"$", "gi").test(field)) {
fields.delete(field);
changes = true;
localChange = true;
}
}
for (const fragment of fragments.keys()) {
if (new RegExp("^"+rule+"$", "gi").test(fragment)) {
fragments.delete(fragment);
changes = true;
localChange = true;
}
}
//Log the action
if (localChange && storage.loggingStatus) {
let tempURL = domain;
let tempBeforeURL = domain;
if (fields.toString() !== "") tempURL += "?" + fields.toString();
if (fragments.toString() !== "") tempURL += "#" + fragments.toString();
if (beforeFields.toString() !== "") tempBeforeURL += "?" + beforeFields.toString();
if (beforeFragments.toString() !== "") tempBeforeURL += "#" + beforeFragments.toString();
if (!quiet) pushToLog(tempBeforeURL, tempURL, rule);
increaseBadged(quiet, request);
}
});
let finalURL = domain;
if (fields.toString() !== "") finalURL += "?" + fields.toString();
if (fragments.toString() !== "") finalURL += "#" + fragments.toString();
url = finalURL.replace(new RegExp("\\?&"), "?").replace(new RegExp("#&"), "#");
}
return {
"changes": changes,
"url": url
}
}
function start() {
/**
* Initialize the JSON provider object keys.
*
* @param {object} obj
*/
function getKeys(obj) {
for (const key in obj) {
prvKeys.push(key);
}
}
/**
* Initialize the providers form the JSON object.
*
*/
function createProviders() {
let data = storage.ClearURLsData;
for (let p = 0; p < prvKeys.length; p++) {
//Create new provider
providers.push(new Provider(prvKeys[p], data.providers[prvKeys[p]].getOrDefault('completeProvider', false),
data.providers[prvKeys[p]].getOrDefault('forceRedirection', false)));
//Add URL Pattern
providers[p].setURLPattern(data.providers[prvKeys[p]].getOrDefault('urlPattern', ''));
let rules = data.providers[prvKeys[p]].getOrDefault('rules', []);
//Add rules to provider
for (let r = 0; r < rules.length; r++) {
providers[p].addRule(rules[r]);
}
let rawRules = data.providers[prvKeys[p]].getOrDefault('rawRules', []);
//Add raw rules to provider
for (let raw = 0; raw < rawRules.length; raw++) {
providers[p].addRawRule(rawRules[raw]);
}
let referralMarketingRules = data.providers[prvKeys[p]].getOrDefault('referralMarketing', []);
//Add referral marketing rules to provider
for (let referralMarketing = 0; referralMarketing < referralMarketingRules.length; referralMarketing++) {
providers[p].addReferralMarketing(referralMarketingRules[referralMarketing]);
}
let exceptions = data.providers[prvKeys[p]].getOrDefault('exceptions', []);
//Add exceptions to provider
for (let e = 0; e < exceptions.length; e++) {
providers[p].addException(exceptions[e]);
}
let redirections = data.providers[prvKeys[p]].getOrDefault('redirections', []);
//Add redirections to provider
for (let re = 0; re < redirections.length; re++) {
providers[p].addRedirection(redirections[re]);
}
let methods = data.providers[prvKeys[p]].getOrDefault('methods', []);
//Add HTTP methods list to provider
for (let re = 0; re < methods.length; re++) {
providers[p].addMethod(methods[re]);
}
}
}
/**
* Convert the external data to Objects and
* call the create provider function.
*
* @param {String} retrievedText - pure data form github
*/
function toObject(retrievedText) {
getKeys(storage.ClearURLsData.providers);
createProviders();
}
/**
* Deactivates ClearURLs, if no rules can be downloaded and also no old rules in storage
*/
function deactivateOnFailure() {
if (storage.ClearURLsData.length === 0) {
storage.globalStatus = false;
storage.dataHash = "";
changeIcon();
storeHashStatus(5);
saveOnExit();
}
}
/**
* Get the hash for the rule file on GitLab.
* Check the hash with the hash form the local file.
* If the hash has changed, then download the new rule file.
* Else do nothing.
*/
function getHash() {
//Get the target hash from GitLab
const response = fetch(storage.hashURL).then(async response => {
return {
hash: (await response.text()).trim(),
status: response.status
}
});
response.then(result => {
if (result.status === 200 && result.hash) {
dataHash = result.hash;
if (dataHash !== localDataHash.trim()) {
fetchFromURL();
} else {
toObject(storage.ClearURLsData);
storeHashStatus(1);
saveOnDisk(['hashStatus']);
}
} else {
throw "The status code was not okay or the given hash were empty.";
}
}).catch(error => {
console.error("[ClearURLs]: Could not download the rules hash from the given URL due to the following error: ", error);
dataHash = false;
deactivateOnFailure();
});
}
/*
* ##################################################################
* # Fetch Rules & Exception from URL #
* ##################################################################
*/
function fetchFromURL() {
const response = fetch(storage.ruleURL).then(async response => {
return {
data: (await response.clone().text()).trim(),
hash: await sha256((await response.text()).trim()),
status: response.status
}
})
response.then(result => {
if (result.status === 200 && result.data) {
if (result.hash === dataHash.trim()) {
storage.ClearURLsData = result.data;
storage.dataHash = result.hash;
storeHashStatus(2);
} else {
storeHashStatus(3);
console.error("The hash does not match. Expected `" + result.hash + "` got `" + dataHash.trim() + "`");
}
storage.ClearURLsData = JSON.parse(storage.ClearURLsData);
toObject(storage.ClearURLsData);
saveOnDisk(['ClearURLsData', 'dataHash', 'hashStatus']);
} else {
throw "The status code was not okay or the given rules were empty."
}
}).catch(error => {
console.error("[ClearURLs]: Could not download the rules from the given URL due to the following error: ", error);
deactivateOnFailure();
});
}
// ##################################################################
/*
* ##################################################################
* # Supertyp Provider #
* ##################################################################
*/
/**
* Declare constructor
*
* @param {String} _name Provider name
* @param {boolean} _completeProvider Set URL Pattern as rule
* @param {boolean} _forceRedirection Whether redirects should be enforced via a "tabs.update"
* @param {boolean} _isActive Is the provider active?
*/
function Provider(_name, _completeProvider = false, _forceRedirection = false, _isActive = true) {
let name = _name;
let urlPattern;
let enabled_rules = {};
let disabled_rules = {};
let enabled_exceptions = {};
let disabled_exceptions = {};
let canceling = _completeProvider;
let enabled_redirections = {};
let disabled_redirections = {};
let active = _isActive;
let enabled_rawRules = {};
let disabled_rawRules = {};
let enabled_referralMarketing = {};
let disabled_referralMarketing = {};
let methods = [];
if (_completeProvider) {
enabled_rules[".*"] = true;
}
/**
* Returns whether redirects should be enforced via a "tabs.update"
* @return {boolean} whether redirects should be enforced
*/
this.shouldForceRedirect = function () {
return _forceRedirection;
};
/**
* Returns the provider name.
* @return {String}
*/
this.getName = function () {
return name;
};
/**
* Add URL pattern.
*
* @require urlPatterns as RegExp
*/
this.setURLPattern = function (urlPatterns) {
urlPattern = new RegExp(urlPatterns, "i");
};
/**
* Return if the Provider Request is canceled
* @return {Boolean} isCanceled
*/
this.isCaneling = function () {
return canceling;
};
/**
* Check the url is matching the ProviderURL.
*
* @return {boolean} ProviderURL as RegExp
*/
this.matchURL = function (url) {
return urlPattern.test(url) && !(this.matchException(url));
};
/**
* Apply a rule to a given tuple of rule array.
* @param enabledRuleArray array for enabled rules
* @param disabledRulesArray array for disabled rules
* @param {String} rule RegExp as string
* @param {boolean} isActive Is this rule active?
*/
this.applyRule = (enabledRuleArray, disabledRulesArray, rule, isActive = true) => {
if (isActive) {
enabledRuleArray[rule] = true;
if (disabledRulesArray[rule] !== undefined) {
delete disabledRulesArray[rule];
}
} else {
disabledRulesArray[rule] = true;
if (enabledRuleArray[rule] !== undefined) {
delete enabledRuleArray[rule];
}
}
};
/**
* Add a rule to the rule array
* and replace old rule with new rule.
*
* @param {String} rule RegExp as string
* @param {boolean} isActive Is this rule active?
*/
this.addRule = function (rule, isActive = true) {
this.applyRule(enabled_rules, disabled_rules, rule, isActive);
};
/**
* Return all active rules as an array.
*
* @return Array RegExp strings
*/
this.getRules = function () {
if (!storage.referralMarketing) {
return Object.keys(Object.assign(enabled_rules, enabled_referralMarketing));
}
return Object.keys(enabled_rules);
};
/**
* Add a raw rule to the raw rule array
* and replace old raw rule with new raw rule.
*
* @param {String} rule RegExp as string
* @param {boolean} isActive Is this rule active?
*/
this.addRawRule = function (rule, isActive = true) {
this.applyRule(enabled_rawRules, disabled_rawRules, rule, isActive);
};
/**
* Return all active raw rules as an array.
*
* @return Array RegExp strings
*/
this.getRawRules = function () {
return Object.keys(enabled_rawRules);
};
/**
* Add a referral marketing rule to the referral marketing array
* and replace old referral marketing rule with new referral marketing rule.
*
* @param {String} rule RegExp as string
* @param {boolean} isActive Is this rule active?
*/
this.addReferralMarketing = function (rule, isActive = true) {
this.applyRule(enabled_referralMarketing, disabled_referralMarketing, rule, isActive);
};
/**
* Add a exception to the exceptions array
* and replace old with new exception.
*
* @param {String} exception RegExp as string
* @param {Boolean} isActive Is this exception active?
*/
this.addException = function (exception, isActive = true) {
if (isActive) {
enabled_exceptions[exception] = true;
if (disabled_exceptions[exception] !== undefined) {
delete disabled_exceptions[exception];
}
} else {
disabled_exceptions[exception] = true;
if (enabled_exceptions[exception] !== undefined) {
delete enabled_exceptions[exception];
}
}
};
/**
* Add a HTTP method to methods list.
*
* @param {String} method HTTP Method Name
*/
this.addMethod = function (method) {
if (methods.indexOf(method) === -1) {
methods.push(method);
}
}
/**
* Check the requests' method.
*
* @param {requestDetails} details Requests details
* @returns {boolean} should be filtered or not
*/
this.matchMethod = function (details) {
if (!methods.length) return true;
return methods.indexOf(details['method']) > -1;
}
/**
* Private helper method to check if the url
* an exception.
*
* @param {String} url RegExp as string
* @return {boolean} if matching? true: false
*/
this.matchException = function (url) {
let result = false;
//Add the site blocked alert to every exception
if (url === siteBlockedAlert) return true;
for (const exception in enabled_exceptions) {
if (result) break;
let exception_regex = new RegExp(exception, "i");
result = exception_regex.test(url);
}
return result;
};
/**
* Add a redirection to the redirections array
* and replace old with new redirection.
*
* @param {String} redirection RegExp as string
* @param {Boolean} isActive Is this redirection active?
*/
this.addRedirection = function (redirection, isActive = true) {
if (isActive) {
enabled_redirections[redirection] = true;
if (disabled_redirections[redirection] !== undefined) {
delete disabled_redirections[redirection];
}
} else {
disabled_redirections[redirection] = true;
if (enabled_redirections[redirection] !== undefined) {
delete enabled_redirections[redirection];
}
}
};
/**
* Return all redirection.
*
* @return url
*/
this.getRedirection = function (url) {
let re = null;
for (const redirection in enabled_redirections) {
let result = (url.match(new RegExp(redirection, "i")));
if (result && result.length > 0 && redirection) {
re = (new RegExp(redirection, "i")).exec(url)[1];
break;
}
}
return re;
};
}
// ##################################################################
/**
* Function which called from the webRequest to
* remove the tracking fields from the url.
*
* @param {requestDetails} request webRequest-Object
* @return {Array} redirectUrl or none
*/
function clearUrl(request) {
const URLbeforeReplaceCount = countFields(request.url);
//Add Fields form Request to global url counter
increaseTotalCounter(URLbeforeReplaceCount);
if (storage.globalStatus) {
let result = {
"changes": false,
"url": "",
"redirect": false,
"cancel": false
};
if (storage.pingBlocking && storage.pingRequestTypes.includes(request.type)) {
pushToLog(request.url, request.url, translate('log_ping_blocked'));
increaseBadged(false, request);
increaseTotalCounter(1);
return {cancel: true};
}
/*
* Call for every provider the removeFieldsFormURL method.
*/
for (let i = 0; i < providers.length; i++) {
if (!providers[i].matchMethod(request)) continue;
if (providers[i].matchURL(request.url)) {
result = removeFieldsFormURL(providers[i], request.url, false, request);
}
/*
* Expand urls and bypass tracking.
* Cancel the active request.
*/
if (result.redirect) {
if (providers[i].shouldForceRedirect() &&
request.type === 'main_frame') {
browser.tabs.update(request.tabId, {url: result.url}).catch(handleError);
return {cancel: true};
}
return {
redirectUrl: result.url
};
}
/*
* Cancel the Request and redirect to the site blocked alert page,
* to inform the user about the full url blocking.
*/
if (result.cancel) {
if (request.type === 'main_frame') {
const blockingPage = browser.runtime.getURL("html/siteBlockedAlert.html?source=" + encodeURIComponent(request.url));
browser.tabs.update(request.tabId, {url: blockingPage}).catch(handleError);
return {cancel: true};
} else {
return {
redirectUrl: siteBlockedAlert
};
}
}
/*
* Ensure that the function go not into
* a loop.
*/
if (result.changes) {
return {
redirectUrl: result.url
};
}
}
}
// Default case
return {};
}
/**
* Call loadOldDataFromStore, getHash, counter, status and log functions
*/
loadOldDataFromStore();
getHash();
setBadgedStatus();
/**
* Check the request.
*/
function promise(requestDetails) {
if (isDataURL(requestDetails)) {
return {};
} else {
return clearUrl(requestDetails);
}
}
/**
* To prevent long loading on data urls
* we will check here for data urls.
*
* @type {requestDetails}
* @return {boolean}
*/
function isDataURL(requestDetails) {
const s = requestDetails.url;
return s.substring(0, 4) === "data";
}
/**
* Call by each Request and checking the url.
*
* @type {Array}
*/
browser.webRequest.onBeforeRequest.addListener(
promise,
{urls: ["<all_urls>"], types: getData("types").concat(getData("pingRequestTypes"))},
["blocking"]
);
}

View File

@@ -1,77 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2020 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
/*
* This script is responsible for setting the badged.
*/
let badges = {};
/**
* Increases the badged by one.
*/
function increaseBadged(quiet = false, request) {
if (!quiet) increaseCleanedCounter();
if(request === null) return;
const tabId = request.tabId;
const url = request.url;
if(tabId === -1) return;
if (badges[tabId] == null) {
badges[tabId] = {
counter: 1,
lastURL: url
};
} else {
badges[tabId].counter += 1;
}
checkOSAndroid().then((res) => {
if (!res) {
if (storage.badgedStatus && !quiet) {
browser.browserAction.setBadgeText({text: (badges[tabId]).counter.toString(), tabId: tabId}).catch(handleError);
} else {
browser.browserAction.setBadgeText({text: "", tabId: tabId}).catch(handleError);
}
}
});
}
/**
* Call by each tab is updated.
* And if url has changed.
*/
function handleUpdated(tabId, changeInfo, tabInfo) {
if(!badges[tabId] || !changeInfo.url) return;
if (badges[tabId].lastURL !== changeInfo.url) {
badges[tabId] = {
counter: 0,
lastURL: tabInfo.url
};
}
}
/**
* Call by each tab is updated.
*/
browser.tabs.onUpdated.addListener(handleUpdated);

View File

@@ -1,80 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2020 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
var cleanedURLs = [];
var i = 0;
var length = 0;
/**
* Load only when document is ready
*/
(function() {
setText();
document.getElementById('cleaning_tool_btn').onclick = cleanURLs;
})();
/**
* This function cleans all URLs line by line in the textarea.
*/
function cleanURLs() {
const cleanTArea = document.getElementById('cleanURLs');
const dirtyTArea = document.getElementById('dirtyURLs');
const urls = dirtyTArea.value.split('\n');
cleanedURLs = [];
length = urls.length;
for(i=0; i < length; i++) {
browser.runtime.sendMessage({
function: "pureCleaning",
params: [urls[i]]
}).then((data) => {
cleanedURLs.push(data.response);
if(i >= length-1) {
cleanTArea.value= cleanedURLs.join('\n');
}
}, handleError);
}
}
/**
* Translate a string with the i18n API.
*
* @param {string} string Name of the attribute used for localization
*/
function translate(string)
{
return browser.i18n.getMessage(string);
}
/**
* Set the text for the UI.
*/
function setText()
{
document.title = translate('cleaning_tool_page_title');
document.getElementById('page_title').textContent = translate('cleaning_tool_page_title');
document.getElementById('cleaning_tool_description').textContent = translate('cleaning_tool_description');
document.getElementById('cleaning_tool_btn').textContent = translate('cleaning_tool_btn');
document.getElementById('cleaning_tool_dirty_urls_label').textContent = translate('cleaning_tool_dirty_urls_label');
document.getElementById('cleaning_tool_clean_urls_label').textContent = translate('cleaning_tool_clean_urls_label');
}
function handleError(error) {
console.log(`Error: ${error}`);
}

View File

@@ -1,57 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2020 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
/*
* This script is responsible for context menu cleaning functions
* and based on: https://github.com/mdn/webextensions-examples/tree/master/context-menu-copy-link-with-types
*/
function contextMenuStart() {
if(storage.contextMenuEnabled) {
browser.contextMenus.create({
id: "copy-link-to-clipboard",
title: translate("clipboard_copy_link"),
contexts: ["link"]
});
browser.contextMenus.onClicked.addListener((info, tab) => {
if (info.menuItemId === "copy-link-to-clipboard") {
const url = pureCleaning(info.linkUrl);
const code = "copyToClipboard(" +
JSON.stringify(url)+");";
browser.tabs.executeScript({
code: "typeof copyToClipboard === 'function';",
}).then((results) => {
if (!results || results[0] !== true) {
return browser.tabs.executeScript(tab.id, {
file: "/external_js/clipboard-helper.js",
}).catch(handleError);
}
}).then(() => {
return browser.tabs.executeScript(tab.id, {
code,
});
}).catch((error) => {
console.error("Failed to copy text: " + error);
});
}
});
}
}

View File

@@ -1,53 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2020 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
/**
* Filters eTag headers from web requests.
*/
function eTagFilter(requestDetails) {
if(!requestDetails.responseHeaders || !storage.eTagFiltering
|| storage.localHostsSkipping && checkLocalURL(new URL(requestDetails.url))) return {};
for(let i=0; i < requestDetails.responseHeaders.length; i++) {
const header = requestDetails.responseHeaders[i];
if(header.name.toString().toLowerCase() !== "etag") {
continue;
}
// insert dummy etag
requestDetails.responseHeaders[i].value = generateDummyEtag();
pushToLog(requestDetails.url, requestDetails.url, translate("eTag_filtering_log"));
break;
}
return {responseHeaders: requestDetails.responseHeaders};
}
function generateDummyEtag() {
return Math.random().toString();
}
browser.webRequest.onHeadersReceived.addListener(
eTagFilter,
{urls: ["<all_urls>"]},
["blocking", "responseHeaders"]
);

View File

@@ -1,55 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2020 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
/*
* This script is responsible for listen on history changes.
* This technique is often used to inject tracking code into the location bar,
* because all feature events will use the updated URL.
*/
function historyListenerStart() {
if(storage.historyListenerEnabled) {
browser.webNavigation.onHistoryStateUpdated.addListener(historyCleaner);
}
}
/**
* Function that is triggered on history changes. Injects script into page
* to clean links that were pushed to the history stack with the
* history.replaceState method.
* @param {state object} details The state object is a JavaScript object
* which is associated with the new history entry created by replaceState()
*/
function historyCleaner(details) {
if(storage.globalStatus) {
const urlBefore = details.url;
const urlAfter = pureCleaning(details.url);
if(urlBefore !== urlAfter) {
browser.tabs.executeScript(details.tabId, {
frameId: details.frameId,
code: 'history.replaceState({state: "cleaned_history"},"",'+JSON.stringify(urlAfter)+');'
}).then(() => {}, onError);
}
}
}
function onError(error) {
console.log(`[ClearURLs] Error: ${error}`);
}

View File

@@ -1,185 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2020 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
/**
* Get the log and display the data as table.
*/
var log = {};
/**
* Reset the global log
*/
function resetGlobalLog(){
let obj = {"log": []};
browser.runtime.sendMessage({
function: "setData",
params: ['log', JSON.stringify(obj)]
}).catch(handleError);
location.reload();
}
/**
* Get the log and display to the user
*/
function getLog()
{
browser.runtime.sendMessage({
function: "getData",
params: ['log']
}).then((data) => {
log = data.response;
// Sort the log | issue #70
log.log.sort(function(a,b) {
return b.timestamp - a.timestamp;
});
$('#logTable').DataTable({
"data": log.log,
"columns": [
{
"data": "before",
"type": "string"
},
{
"data": "after",
"type": "string"
},
{
"data": "rule",
"type": "string"
},
{
"data": "timestamp",
"type": "date"
}
],
"columnDefs": [
{
targets: 3,
render: toDate
}
],
"pageLength": 10,
"language": {
"url": getDataTableTranslation()
}
} ).order([3, 'desc']).draw();
}).catch(handleError);
}
/**
* Get the translation file for the DataTable
*/
function getDataTableTranslation()
{
let lang = browser.i18n.getUILanguage();
lang = lang.substring(0,2);
return browser.runtime.getURL('./external_js/dataTables/i18n/' + lang + '.lang');
}
/**
* Convert timestamp to date
*/
function toDate(time)
{
return new Date(time).toLocaleString();
}
/**
* This function export the global log as json file.
*/
function exportGlobalLog() {
browser.runtime.sendMessage({
function: "getData",
params: ['log']
}).then((data) => {
let blob = new Blob([JSON.stringify(data.response)], {type: 'application/json'});
browser.downloads.download({
'url': URL.createObjectURL(blob),
'filename': 'ClearURLsLogExport.json',
'saveAs': true
}).catch(handleError);
}).catch(handleError);
}
/**
* This function imports an exported global log and overwrites the old one.
*/
function importGlobalLog(evt) {
let file = evt.target.files[0];
let fileReader = new FileReader();
fileReader.onload = function(e) {
browser.runtime.sendMessage({
function: "setData",
params: ["log", e.target.result]
}).then(() => {
location.reload();
}, handleError);
};
fileReader.readAsText(file);
}
/**
* Load only when document is ready
*/
(function () {
setText();
getLog();
document.getElementById('reset_log_btn').onclick = resetGlobalLog;
document.getElementById('export_log_btn').onclick = exportGlobalLog;
document.getElementById('importLog').onchange = importGlobalLog;
})();
/**
* Translate a string with the i18n API.
*
* @param {string} string Name of the attribute used for localization
*/
function translate(string)
{
return browser.i18n.getMessage(string);
}
/**
* Set the text for the UI.
*/
function setText()
{
document.title = translate('log_html_page_title');
document.getElementById('page_title').textContent = translate('log_html_page_title');
document.getElementById('reset_log_btn').textContent = translate('log_html_reset_button');
document.getElementById('reset_log_btn').setAttribute('title', translate('log_html_reset_button_title'));
document.getElementById('head_1').textContent = translate('log_html_table_head_1');
document.getElementById('head_2').textContent = translate('log_html_table_head_2');
document.getElementById('head_3').textContent = translate('log_html_table_head_3');
document.getElementById('head_4').textContent = translate('log_html_table_head_4');
document.getElementById('export_log_btn_text').textContent = translate('log_html_export_button');
document.getElementById('export_log_btn').setAttribute('title', translate('log_html_export_button_title'));
document.getElementById('import_log_btn_text').textContent = translate('log_html_import_button');
document.getElementById('importLog').setAttribute('title', translate('log_html_import_button_title'));
}
function handleError(error) {
console.log(`Error: ${error}`);
}

View File

@@ -1,42 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2020 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
/*
* This script is responsible for the communication between background and content_scripts.
*/
/**
* [handleMessage description]
* @param request The message itself. This is a JSON-ifiable object.
* @param sender A runtime.MessageSender object representing the sender of the message.
* @param sendResponse A function to call, at most once, to send a response to the message. The function takes a single argument, which may be any JSON-ifiable object. This argument is passed back to the message sender.
*/
function handleMessage(request, sender, sendResponse)
{
let fn = window[request.function];
if(typeof fn === "function")
{
let response = fn.apply(null, request.params);
return Promise.resolve({response});
}
}
browser.runtime.onMessage.addListener(handleMessage);

View File

@@ -1,281 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2020 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
var element = document.getElementById('statistics_value');
var elGlobalPercentage = document.getElementById('statistics_value_global_percentage');
var elProgressbar_blocked = document.getElementById('progress_blocked');
var elProgressbar_non_blocked = document.getElementById('progress_non_blocked');
var elTotal = document.getElementById('statistics_total_elements');
var globalPercentage = 0;
var cleanedCounter;
var totalCounter;
var globalStatus;
var badgedStatus;
var hashStatus;
var loggingStatus;
var statisticsStatus;
var currentURL;
/**
* Initialize the UI.
*
*/
function init()
{
setSwitchButton("globalStatus", "globalStatus");
setSwitchButton("tabcounter", "badgedStatus");
setSwitchButton("logging", "loggingStatus");
setSwitchButton("statistics", "statisticsStatus");
setHashStatus();
changeStatistics();
}
/**
* Get the cleanedCounter and totalCounter value from the storage
*/
function changeStatistics()
{
globalPercentage = ((cleanedCounter/totalCounter)*100).toFixed(3);
if(isNaN(Number(globalPercentage))) globalPercentage = 0;
element.textContent = cleanedCounter.toLocaleString();
elGlobalPercentage.textContent = globalPercentage+"%";
elProgressbar_blocked.style.width = globalPercentage+'%';
elProgressbar_non_blocked.style.width = (100-globalPercentage)+'%';
elTotal.textContent = totalCounter.toLocaleString();
}
/**
* Set the value for the hashStatus on startUp.
*/
function setHashStatus()
{
let element = document.getElementById('hashStatus');
if(hashStatus)
{
element.textContent = translate(hashStatus);
}
else {
element.textContent = translate('hash_status_code_5');
}
}
/**
* Change the value of a switch button.
* @param {string} id HTML id
* @param {string} storageID storage internal id
*/
function changeSwitchButton(id, storageID)
{
let element = document.getElementById(id);
changeVisibility(id, storageID);
element.onchange = function(){
browser.runtime.sendMessage({
function: "setData",
params: [storageID, element.checked]
}).then((data) => {
if(storageID === "globalStatus"){
browser.runtime.sendMessage({
function: "changeIcon",
params: []
}).catch(handleError);
}
changeVisibility(id, storageID);
browser.runtime.sendMessage({
function: "saveOnExit",
params: []
}).catch(handleError);
}).catch(handleError);
};
}
/**
* Change the visibility of sections.
*/
function changeVisibility(id, storageID)
{
let element;
switch(storageID)
{
case "loggingStatus":
element = document.getElementById('log_section');
break;
case "statisticsStatus":
element = document.getElementById('statistic_section');
break;
default:
element = "undefine";
}
if(element !== "undefine")
{
if(document.getElementById(id).checked)
{
element.style.display = '';
element.style.display = '';
}
else {
element.style.display = 'none';
element.style.display = 'none';
}
}
}
/**
* Set the value of a switch button.
* @param {string} id HTML id
* @param {string} varname js internal variable name
*/
function setSwitchButton(id, varname)
{
const element = document.getElementById(id);
element.checked = this[varname];
}
/**
* Reset the global statistic
*/
function resetGlobalCounter(){
browser.runtime.sendMessage({
function: "setData",
params: ['cleanedCounter', 0]
}).catch(handleError);
browser.runtime.sendMessage({
function: "setData",
params: ['totalCounter', 0]
}).catch(handleError);
browser.runtime.sendMessage({
function: "saveOnExit",
params: []
}).catch(handleError);
cleanedCounter = 0;
totalCounter = 0;
changeStatistics();
}
(function() {
loadData("cleanedCounter")
.then(() => loadData("totalCounter"))
.then(() => loadData("globalStatus"))
.then(() => loadData("badgedStatus"))
.then(() => loadData("hashStatus"))
.then(() => loadData("loggingStatus"))
.then(() => loadData("statisticsStatus"))
.then(() => loadData("getCurrentURL", "currentURL"))
.then(() => {
init();
document.getElementById('reset_counter_btn').onclick = resetGlobalCounter;
changeSwitchButton("globalStatus", "globalStatus");
changeSwitchButton("tabcounter", "badgedStatus");
changeSwitchButton("logging", "loggingStatus");
changeSwitchButton("statistics", "statisticsStatus");
document.getElementById('loggingPage').href = browser.runtime.getURL('./html/log.html');
document.getElementById('settings').href = browser.runtime.getURL('./html/settings.html');
document.getElementById('cleaning_tools').href = browser.runtime.getURL('./html/cleaningTool.html');
setText();
});
})();
/**
* Set the text for the UI.
*/
function setText()
{
injectText('loggingPage','popup_html_log_head');
injectText('reset_counter_btn','popup_html_statistics_reset_button');
injectText('rules_status_head','popup_html_rules_status_head');
injectText('statistics_percentage','popup_html_statistics_percentage');
injectText('statistics_blocked','popup_html_statistics_blocked');
injectText('statistics_elements','popup_html_statistics_elements');
injectText('statistics_head','popup_html_statistics_head');
injectText('configs_switch_badges','popup_html_configs_switch_badges');
injectText('configs_switch_log','popup_html_configs_switch_log');
injectText('configs_switch_filter','popup_html_configs_switch_filter');
injectText('configs_head','popup_html_configs_head');
injectText('configs_switch_statistics','configs_switch_statistics');
document.getElementById('donate').title = translate('donate_button');
}
/**
* Helper function to inject the translated text and tooltip.
*
* @param {string} id ID of the HTML element
* @param {string} attribute Name of the attribute used for localization
* @param {string} tooltip
*/
function injectText(id, attribute, tooltip = "")
{
const object = document.getElementById(id);
object.textContent = translate(attribute);
/*
This function will throw an error if no translation
is found for the tooltip. This is a planned error.
*/
tooltip = translate(attribute+"_title");
if(tooltip !== "")
{
object.setAttribute('title', tooltip);
}
}
/**
* Loads data from storage and saves into local variable.
*
* @param name data name
* @param varName variable name
* @returns {Promise<data>} requested data
*/
async function loadData(name, varName=name) {
return new Promise((resolve, reject) => {
browser.runtime.sendMessage({
function: "getData",
params: [name]
}).then(data => {
this[varName] = data.response;
resolve(data);
}, handleError);
});
}
/**
* Translate a string with the i18n API.
*
* @param {string} string Name of the attribute used for localization
*/
function translate(string)
{
return browser.i18n.getMessage(string);
}
function handleError(error) {
console.log(`Error: ${error}`);
}

View File

@@ -1,71 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2020 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
/**
* Cleans given URLs. Also do automatic redirection.
*
* @param {String} url url as string
* @param {boolean} quiet if the action should be displayed in log and statistics
* @return {String} cleaned URL
*/
function pureCleaning(url, quiet = false) {
let before = url;
let after = url;
do {
before = after;
after = _cleaning(before, quiet);
} while (after !== before); // do recursive cleaning
return after;
}
/**
* Internal function to clean the given URL.
*/
function _cleaning(url, quiet = false) {
let cleanURL = url;
const URLbeforeReplaceCount = countFields(url);
if (!quiet) {
//Add Fields form Request to global url counter
increaseTotalCounter(URLbeforeReplaceCount);
}
for (let i = 0; i < providers.length; i++) {
let result = {
"changes": false,
"url": "",
"redirect": false,
"cancel": false
};
if (providers[i].matchURL(cleanURL)) {
result = removeFieldsFormURL(providers[i], cleanURL, quiet);
cleanURL = result.url;
}
if (result.redirect) {
return result.url;
}
}
return cleanURL;
}

View File

@@ -1,335 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2020 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
var settings = [];
const pickr = Pickr.create({
el: '#badged-color-picker',
theme: 'nano',
components: {
preview: true,
opacity: true,
hue: true,
default: '#FFA500',
comparison: false,
interaction: {
hex: true,
rgba: false,
hsla: false,
hsva: false,
cmyk: false,
input: true,
clear: false,
save: true
}
}
});
/**
* Load only when document is ready
*/
(function () {
pickr.on('init', () => {
getData();
setText();
document.getElementById('reset_settings_btn').onclick = reset;
document.getElementById('export_settings_btn').onclick = exportSettings;
document.getElementById('importSettings').onchange = importSettings;
document.getElementById('save_settings_btn').onclick = save;
});
})();
/**
* Reset everything.
* Set everthing to the default values.
*/
function reset() {
browser.runtime.sendMessage({
function: "initSettings",
params: []
}).then(handleResponse, handleError);
browser.runtime.sendMessage({
function: "saveOnExit",
params: []
}).then(handleResponse, handleError);
browser.runtime.sendMessage({
function: "reload",
params: []
}).then(handleResponse, handleError);
}
/**
* Saves the settings.
*/
function save() {
saveData("badged_color", pickr.getColor().toHEXA().toString())
.then(() => saveData("ruleURL", document.querySelector('input[name=ruleURL]').value))
.then(() => saveData("hashURL", document.querySelector('input[name=hashURL]').value))
.then(() => saveData("types", document.querySelector('input[name=types]').value))
.then(() => saveData("logLimit", Math.max(0, Math.min(5000, document.querySelector('input[name=logLimit]').value))))
.then(() => browser.runtime.sendMessage({
function: "setBadgedStatus",
params: []
}), handleError)
.then(() => browser.runtime.sendMessage({
function: "saveOnExit",
params: []
}), handleError)
.then(() => browser.runtime.sendMessage({
function: "reload",
params: []
}), handleError);
}
/**
* Translate a string with the i18n API.
*
* @param {string} string Name of the attribute used for localization
* @param {string[]} placeholders Array of placeholders
*/
function translate(string, ...placeholders) {
return browser.i18n.getMessage(string, placeholders);
}
/**
* Get the data.
*/
function getData() {
browser.runtime.sendMessage({
function: "getData",
params: ["badged_color"]
}).then(data => {
settings["badged_color"] = data.response;
pickr.setColor(data.response, false);
}).catch(handleError);
loadData("ruleURL")
.then(() => loadData("hashURL"))
.then(() => loadData("types"))
.then(() => loadData("logLimit"))
.then(logData => {
if (logData.response === undefined) {
document.getElementById('logLimit_label').textContent = translate('setting_log_limit_label', "0");
} else {
document.getElementById('logLimit_label').textContent = translate('setting_log_limit_label', logData.response);
}
}).catch(handleError);
loadData("contextMenuEnabled")
.then(() => loadData("historyListenerEnabled"))
.then(() => loadData("localHostsSkipping"))
.then(() => loadData("referralMarketing"))
.then(() => loadData("domainBlocking"))
.then(() => loadData("pingBlocking"))
.then(() => loadData("eTagFiltering"))
.then(() => {
changeSwitchButton("localHostsSkipping", "localHostsSkipping");
changeSwitchButton("historyListenerEnabled", "historyListenerEnabled");
changeSwitchButton("contextMenuEnabled", "contextMenuEnabled");
changeSwitchButton("referralMarketing", "referralMarketing");
changeSwitchButton("domainBlocking", "domainBlocking");
changeSwitchButton("pingBlocking", "pingBlocking");
changeSwitchButton("eTagFiltering", "eTagFiltering");
}).catch(handleError);
}
/**
* Loads data from storage and saves into local variable.
*
* @param name data/variable name
* @returns {Promise<data>} requested data
*/
async function loadData(name) {
return new Promise((resolve, reject) => {
browser.runtime.sendMessage({
function: "getData",
params: [name]
}).then(data => {
settings[name] = data.response;
if (document.querySelector('input[id=' + name + ']') == null) {
console.debug(name)
}
document.querySelector('input[id=' + name + ']').value = data.response;
resolve(data);
}, handleError);
});
}
/**
* Saves data to storage.
*
* @param key key of the data that should be saved
* @param data data that should be saved
* @returns {Promise<message>} message from background script
*/
async function saveData(key, data) {
return new Promise((resolve, reject) => {
browser.runtime.sendMessage({
function: "setData",
params: [key, data]
}).then(message => {
handleResponse(message);
resolve(message);
}, handleError);
});
}
/**
* Set the text for the UI.
*/
function setText() {
document.title = translate('settings_html_page_title');
document.getElementById('page_title').textContent = translate('settings_html_page_title');
document.getElementById('badged_color_label').textContent = translate('badged_color_label');
document.getElementById('reset_settings_btn').textContent = translate('setting_html_reset_button');
document.getElementById('reset_settings_btn').setAttribute('title', translate('setting_html_reset_button_title'));
document.getElementById('rule_url_label').textContent = translate('setting_rule_url_label');
document.getElementById('hash_url_label').textContent = translate('setting_hash_url_label');
document.getElementById('types_label').innerHTML = translate('setting_types_label');
document.getElementById('save_settings_btn').textContent = translate('settings_html_save_button');
document.getElementById('save_settings_btn').setAttribute('title', translate('settings_html_save_button_title'));
injectText("context_menu_enabled", "context_menu_enabled");
document.getElementById('history_listener_enabled').innerHTML = translate('history_listener_enabled');
injectText("local_hosts_skipping", "local_hosts_skipping");
document.getElementById('export_settings_btn_text').textContent = translate('setting_html_export_button');
document.getElementById('export_settings_btn').setAttribute('title', translate('setting_html_export_button_title'));
document.getElementById('import_settings_btn_text').textContent = translate('setting_html_import_button');
document.getElementById('importSettings').setAttribute('title', translate('setting_html_import_button_title'));
injectText("referral_marketing_enabled", "referral_marketing_enabled");
injectText("domain_blocking_enabled", "domain_blocking_enabled");
document.getElementById('ping_blocking_enabled').innerHTML = translate('ping_blocking_enabled');
document.getElementById('ping_blocking_enabled').setAttribute('title', translate('ping_blocking_enabled_title'));
document.getElementById('eTag_filtering_enabled').innerHTML = translate('eTag_filtering_enabled');
document.getElementById('eTag_filtering_enabled').setAttribute('title', translate('eTag_filtering_enabled_title'));
}
/**
* This function exports all ClearURLs settings with statistics and rules.
*/
function exportSettings() {
browser.runtime.sendMessage({
function: "storageAsJSON",
params: []
}).then((data) => {
let blob = new Blob([JSON.stringify(data.response)], {type: 'application/json'});
browser.downloads.download({
'url': URL.createObjectURL(blob),
'filename': 'ClearURLs.conf',
'saveAs': true
}).catch(handleError);
}).catch(handleError);
}
/**
* This function imports an exported ClearURLs setting and overwrites the old one.
*/
function importSettings(evt) {
let file = evt.target.files[0];
let fileReader = new FileReader();
fileReader.onload = function (e) {
let data = JSON.parse(e.target.result);
const length = Object.keys(data).length;
let i = 0;
Object.entries(data).forEach(([key, value]) => {
browser.runtime.sendMessage({
function: "setData",
params: [key, value]
}).then(() => {
i++;
if (i === length) {
location.reload();
}
}, handleError);
});
};
fileReader.readAsText(file);
}
function handleResponse(message) {
console.log(`Message from the background script: ${message.response}`);
}
function handleError(error) {
console.log(`Error: ${error}`);
}
/**
* Change the value of a switch button.
* @param {string} id HTML id
* @param {string} storageID storage internal id
*/
function changeSwitchButton(id, storageID) {
let element = document.getElementById(id);
element.onchange = function () {
browser.runtime.sendMessage({
function: "setData",
params: [storageID, element.checked]
}).then(() => {
if (storageID === "globalStatus") {
browser.runtime.sendMessage({
function: "changeIcon",
params: []
}).catch(handleError);
}
browser.runtime.sendMessage({
function: "saveOnExit",
params: []
}).catch(handleError);
}).catch(handleError);
};
setSwitchButton(id, storageID);
}
/**
* Helper function to inject the translated text and tooltip.
*
* @param {string} id ID of the HTML element
* @param {string} attribute Name of the attribute used for localization
* @param {string} tooltip
*/
function injectText(id, attribute, tooltip = "") {
let object = document.getElementById(id);
object.textContent = translate(attribute);
/*
This function will throw an error if no translation
is found for the tooltip. This is a planned error.
*/
tooltip = translate(attribute + "_title");
if (tooltip !== "") {
object.setAttribute('title', tooltip);
}
}
/**
* Set the value of a switch button.
* @param {string} id HTML id
* @param {string} varname js internal variable name
*/
function setSwitchButton(id, varname) {
let element = document.getElementById(id);
element.checked = settings[varname];
}

View File

@@ -1,51 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2020 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
/*
* This script is responsible for the blocked alert page.
*/
/**
* Set the text for the UI.
*/
function setText()
{
document.title = translate('blocked_html_title');
document.getElementById('title').innerHTML = translate('blocked_html_title');
document.getElementById('body').innerHTML = translate('blocked_html_body');
document.getElementById('page').textContent = translate('blocked_html_button');
}
(function() {
setText();
const source = new URLSearchParams(window.location.search).get("source");
document.getElementById('page').href = decodeURIComponent(source);
})();
/**
* Translate a string with the i18n API.
*
* @param {string} string Name of the attribute used for localization
*/
function translate(string)
{
return browser.i18n.getMessage(string);
}

View File

@@ -1,310 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2020 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
/*
* This script is responsible for the storage.
*/
var storage = [];
var hasPendingSaves = false;
var pendingSaves = new Set();
/**
* Writes the storage variable to the disk.
*/
function saveOnExit() {
saveOnDisk(Object.keys(storage));
}
/**
* Returns the storage as JSON.
*/
function storageAsJSON() {
let json = {};
Object.entries(storage).forEach(([key, value]) => {
json[key] = storageDataAsString(key);
});
return json;
}
/**
* Converts a given storage data to its string representation.
* @param key key of the storage data
* @returns {string} string representation
*/
function storageDataAsString(key) {
let value = storage[key];
switch (key) {
case "ClearURLsData":
case "log":
return JSON.stringify(value);
case "types":
return value.toString();
default:
return value;
}
}
/**
* Delete key from browser storage.
*/
function deleteFromDisk(key) {
browser.storage.local.remove(key).catch(handleError);
}
/**
* Save multiple keys on the disk.
* @param {String[]} keys
*/
function saveOnDisk(keys) {
let json = {};
keys.forEach(function (key) {
json[key] = storageDataAsString(key);
});
console.log(translate('core_save_on_disk'));
browser.storage.local.set(json).catch(handleError);
}
/**
* Schedule to save a key to disk in 30 seconds.
* @param {String} key
*/
function deferSaveOnDisk(key) {
if (hasPendingSaves) {
pendingSaves.add(key);
return;
}
setTimeout(function () {
saveOnDisk(Array.from(pendingSaves));
pendingSaves.clear();
hasPendingSaves = false;
}, 30000);
hasPendingSaves = true;
}
/**
* Start sequence for ClearURLs.
*/
function genesis() {
browser.storage.local.get(null).then((items) => {
initStorage(items);
// Start the clearurls.js
start();
//Set correct icon on startup
changeIcon();
// Start the context_menu
contextMenuStart();
// Start history listener
historyListenerStart();
}, handleError);
}
/**
* Return the value under the key.
* @param {String} key
* @return {Object}
*/
function getData(key) {
return storage[key];
}
/**
* Return the entire storage object.
* @return {Object}
*/
function getEntireData() {
return storage;
}
/**
* Save the value under the key on the RAM.
*
* Note: To store the data on the hard disk, one of
* deferSaveOnDisk(), saveOnDisk(), or saveOnExit()
* must be called.
* @param {String} key
* @param {Object} value
*/
function setData(key, value) {
switch (key) {
case "ClearURLsData":
case "log":
storage[key] = JSON.parse(value);
break;
case "hashURL":
case "ruleURL":
storage[key] = replaceOldURLs(value);
break;
case "types":
storage[key] = value.split(',');
break;
case "logLimit":
storage[key] = Math.max(0, Number(value));
break;
case "globalurlcounter":
// migrate from old key
storage["totalCounter"] = value;
delete storage[key];
deleteFromDisk(key);
saveOnExit();
break;
case "globalCounter":
// migrate from old key
storage["cleanedCounter"] = value;
delete storage[key];
deleteFromDisk(key);
saveOnExit();
break;
default:
storage[key] = value;
}
}
/**
* Set default values, if the storage is empty.
* @param {Object} items
*/
function initStorage(items) {
initSettings();
if (!isEmpty(items)) {
Object.entries(items).forEach(([key, value]) => {
setData(key, value);
});
}
}
/**
* Set default values for the settings.
*/
function initSettings() {
storage.ClearURLsData = [];
storage.dataHash = "";
storage.badgedStatus = true;
storage.globalStatus = true;
storage.totalCounter = 0;
storage.cleanedCounter = 0;
storage.hashStatus = "error";
storage.loggingStatus = false;
storage.log = {"log": []};
storage.statisticsStatus = true;
storage.badged_color = "#ffa500";
storage.hashURL = "https://rules2.clearurls.xyz/rules.minify.hash";
storage.ruleURL = "https://rules2.clearurls.xyz/data.minify.json";
storage.contextMenuEnabled = true;
storage.historyListenerEnabled = true;
storage.localHostsSkipping = true;
storage.referralMarketing = false;
storage.logLimit = 100;
storage.domainBlocking = true;
storage.pingBlocking = true;
storage.eTagFiltering = false;
storage.watchDogErrorCount = 0;
if (getBrowser() === "Firefox") {
storage.types = ["font", "image", "imageset", "main_frame", "media", "object", "object_subrequest", "other", "script", "stylesheet", "sub_frame", "websocket", "xml_dtd", "xmlhttprequest", "xslt"];
storage.pingRequestTypes = ["ping", "beacon"];
} else if (getBrowser() === "Chrome") {
storage.types = ["main_frame", "sub_frame", "stylesheet", "script", "image", "font", "object", "xmlhttprequest", "ping", "csp_report", "media", "websocket", "other"];
storage.pingRequestTypes = ["ping"];
}
}
/**
* Replace the old URLs with the
* new GitLab URLs.
*/
function replaceOldURLs(url) {
switch (url) {
case "https://raw.githubusercontent.com/KevinRoebert/ClearUrls/master/data/rules.hash?flush_cache=true":
return "https://kevinroebert.gitlab.io/ClearUrls/data/rules.minify.hash";
case "https://raw.githubusercontent.com/KevinRoebert/ClearUrls/master/data/data.json?flush_cache=true":
return "https://kevinroebert.gitlab.io/ClearUrls/data/data.minify.json";
case "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/rules.hash":
return "https://kevinroebert.gitlab.io/ClearUrls/data/rules.minify.hash";
case "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.json":
return "https://kevinroebert.gitlab.io/ClearUrls/data/data.minify.json";
case "https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/rules.min.hash?job=hash%20rules":
return "https://kevinroebert.gitlab.io/ClearUrls/data/rules.minify.hash";
case "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.min.json":
return "https://kevinroebert.gitlab.io/ClearUrls/data/data.minify.json";
case "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.minify.json":
return "https://kevinroebert.gitlab.io/ClearUrls/data/data.minify.json";
case "https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/data.minify.json?job=hash%20rules":
return "https://kevinroebert.gitlab.io/ClearUrls/data/data.minify.json";
case "https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/rules.minify.hash?job=hash%20rules":
return "https://kevinroebert.gitlab.io/ClearUrls/data/rules.minify.hash";
case "https://kevinroebert.gitlab.io/ClearUrls/data/data.minify.json":
return "https://rules2.clearurls.xyz/data.minify.json";
case "https://kevinroebert.gitlab.io/ClearUrls/data/rules.minify.hash":
return "https://rules2.clearurls.xyz/rules.minify.hash";
default:
return url;
}
}
/**
* Load local saved data, if the browser is offline or
* some other network trouble.
*/
function loadOldDataFromStore() {
localDataHash = storage.dataHash;
}
/**
* Save the hash status to the local storage (RAM).
* The status can have the following values:
* 1 "up to date"
* 2 "updated"
* 3 "update available"
* @param status_code the number for the status
*/
function storeHashStatus(status_code) {
switch (status_code) {
case 1:
status_code = "hash_status_code_1";
break;
case 2:
status_code = "hash_status_code_2";
break;
case 3:
status_code = "hash_status_code_3";
break;
case 5:
status_code = "hash_status_code_5";
break;
case 4:
default:
status_code = "hash_status_code_4";
}
storage.hashStatus = status_code;
}
// Start storage and ClearURLs
genesis();

View File

@@ -1,330 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2020 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
/*
* This script is responsible for some tools.
*/
// Needed by the sha256 method
const enc = new TextEncoder();
// Max amount of log entries to prevent performance issues
const logThreshold = 5000;
/*
* To support Waterfox.
*/
Array.prototype.rmEmpty = function () {
return this.filter(v => v);
};
/*
* To support Waterfox.
*/
Array.prototype.flatten = function () {
return this.reduce((a, b) => a.concat(b), []);
};
/**
* Check if an object is empty.
* @param {Object} obj
* @return {Boolean}
*/
function isEmpty(obj) {
return (Object.getOwnPropertyNames(obj).length === 0);
}
/**
* Translate a string with the i18n API.
*
* @param {string} string Name of the attribute used for localization
* @param {string[]} placeholders Array of placeholders
*/
function translate(string, ...placeholders) {
return browser.i18n.getMessage(string, placeholders);
}
/**
* Reloads the extension.
*/
function reload() {
browser.runtime.reload();
}
/**
* Check if it is an android device.
* @return bool
*/
async function checkOSAndroid() {
if (os === undefined || os === null || os === "") {
await chrome.runtime.getPlatformInfo(function (info) {
os = info.os;
});
}
return os === "android";
}
/**
* Extract the host without port from an url.
* @param {URL} url URL as String
* @return {String} host as string
*/
function extractHost(url) {
return url.hostname;
}
/**
* Returns true if the url has a local host.
* @param {URL} url URL as object
* @return {boolean}
*/
function checkLocalURL(url) {
let host = extractHost(url);
if (!host.match(/^\d/) && host !== 'localhost') {
return false;
}
return ipRangeCheck(host, ["10.0.0.0/8", "172.16.0.0/12",
"192.168.0.0/16", "100.64.0.0/10",
"169.254.0.0/16", "127.0.0.1"]) ||
host === 'localhost';
}
/**
* Return the number of parameters query strings.
* @param {String} url URL as String
* @return {int} Number of Parameters
*/
function countFields(url) {
return [...new URL(url).searchParams].length
}
/**
* Extract the fragments from an url.
* @param {URL} url URL as object
* @return {URLHashParams} fragments as URLSearchParams object
*/
function extractFragments(url) {
return new URLHashParams(url)
}
/**
* Returns the given URL without searchParams and hash.
* @param {URL} url the URL as object
* @return {URL} the url without searchParams and hash
*/
function urlWithoutParamsAndHash(url) {
let newURL = url.toString();
if (url.search) {
newURL = newURL.replace(url.search, "");
}
if (url.hash) {
newURL = newURL.replace(url.hash, "");
}
return new URL(newURL);
}
/**
* Load local saved data, if the browser is offline or
* some other network trouble.
*/
function loadOldDataFromStore() {
localDataHash = storage.dataHash;
}
/**
* Increase by {number} the total counter
* @param {int} number
*/
function increaseTotalCounter(number) {
if (storage.statisticsStatus) {
storage.totalCounter += number;
deferSaveOnDisk('totalCounter');
}
}
/**
* Increase by one the cleaned counter
*/
function increaseCleanedCounter() {
if (storage.statisticsStatus) {
storage.cleanedCounter++;
deferSaveOnDisk('cleanedCounter');
}
}
/**
* Change the icon.
*/
function changeIcon() {
checkOSAndroid().then((res) => {
if (!res) {
if (storage.globalStatus) {
browser.browserAction.setIcon({path: "img/clearurls_128x128.png"}).catch(handleError);
} else {
browser.browserAction.setIcon({path: "img/clearurls_gray_128x128.png"}).catch(handleError);
}
}
});
}
/**
* Get the badged status from the browser storage and put the value
* into a local variable.
*
*/
function setBadgedStatus() {
checkOSAndroid().then((res) => {
if (!res && storage.badgedStatus) {
let color = storage.badged_color;
if (storage.badged_color.charAt(0) !== '#')
color = '#' + storage.badged_color;
browser.browserAction.setBadgeBackgroundColor({
'color': color
}).catch(handleError);
// Works only in Firefox: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserAction/setBadgeTextColor#Browser_compatibility
if (getBrowser() === "Firefox") {
browser.browserAction.setBadgeTextColor({
color: "#FFFFFF"
}).catch(handleError);
}
}
});
}
/**
* Returns the current URL.
* @return {String} [description]
*/
function getCurrentURL() {
return currentURL;
}
/**
* Check for browser.
*/
function getBrowser() {
if (typeof InstallTrigger !== 'undefined') {
return "Firefox";
} else {
return "Chrome";
}
}
/**
* Decodes an URL, also one that is encoded multiple times.
*
* @see https://stackoverflow.com/a/38265168
*
* @param url the url, that should be decoded
*/
function decodeURL(url) {
let rtn = decodeURIComponent(url);
while (isEncodedURI(rtn)) {
rtn = decodeURIComponent(rtn);
}
// Required (e.g., to fix https://github.com/ClearURLs/Addon/issues/71)
if (!rtn.startsWith('http')) {
rtn = 'http://' + rtn
}
return rtn;
}
/**
* Returns true, iff the given URI is encoded
* @see https://stackoverflow.com/a/38265168
*/
function isEncodedURI(uri) {
return uri !== decodeURIComponent(uri || '')
}
/**
* Gets the value of at `key` an object. If the resolved value is `undefined`, the `defaultValue` is returned in its place.
*
* @param {string} key the key of the object
* @param {object} defaultValue the default value
*/
Object.prototype.getOrDefault = function (key, defaultValue) {
return this[key] === undefined ? defaultValue : this[key];
};
function handleError(error) {
console.error("[ClearURLs ERROR]:" + error);
}
/**
* Function to log all activities from ClearUrls.
* Only logging when activated.
*
* @param beforeProcessing the url before the clear process
* @param afterProcessing the url after the clear process
* @param rule the rule that triggered the process
*/
function pushToLog(beforeProcessing, afterProcessing, rule) {
const limit = Math.max(0, storage.logLimit);
if (storage.loggingStatus && limit !== 0 && !isNaN(limit)) {
while (storage.log.log.length >= limit
|| storage.log.log.length >= logThreshold) {
storage.log.log.shift();
}
storage.log.log.push(
{
"before": beforeProcessing,
"after": afterProcessing,
"rule": rule,
"timestamp": Date.now()
}
);
deferSaveOnDisk('log');
}
}
/**
* Checks if the storage is available.
*/
function isStorageAvailable() {
return storage.ClearURLsData.length !== 0;
}
/**
* This method calculates the SHA-256 hash as HEX string of the given message.
* This method uses the native hashing implementations of the SubtleCrypto interface which is supported by all browsers
* that implement the Web Cryptography API specification and is based on:
* https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest
*
* @param message message for which the hash should be calculated
* @returns {Promise<string>} SHA-256 of the given message
*/
async function sha256(message) {
const msgUint8 = enc.encode(message);
const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);
const hashArray = Array.from(new Uint8Array(hashBuffer));
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
}

View File

@@ -1,21 +0,0 @@
/**
* Models a multimap backed by a {@link Set}.
*/
export default class Multimap<K, V> implements Iterable<[K, V]> {
private _map;
private _size;
constructor();
get size(): number;
get(key: K): Set<V>;
put(key: K, value: V): boolean;
has(key: K): boolean;
hasEntry(key: K, value: V): boolean;
delete(key: K): boolean;
deleteEntry(key: K, value: V): boolean;
clear(): void;
entries(): IterableIterator<[K, V]>;
values(): IterableIterator<V>;
keys(): IterableIterator<K>;
forEach<T>(callback: (this: T | this, key: K, value: V, map: this) => void, thisArg?: T): void;
[Symbol.iterator](): IterableIterator<[K, V]>;
}

View File

@@ -1,130 +0,0 @@
"use strict";
/*
* ClearURLs
* Copyright (c) 2017-2022 Kevin Röbert.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* Models a multimap backed by a {@link Set}.
*/
class Multimap {
constructor() {
Object.defineProperty(this, "_map", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "_size", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
this._size = 0;
this._map = new Map();
}
get size() {
return this._size;
}
get(key) {
const values = this._map.get(key);
if (values) {
return new Set(values);
}
else {
return new Set();
}
}
put(key, value) {
let values = this._map.get(key);
if (!values) {
values = new Set();
}
const count = values.size;
values.add(value);
if (values.size === count) {
return false;
}
this._map.set(key, values);
this._size++;
return true;
}
has(key) {
return this._map.has(key);
}
hasEntry(key, value) {
const values = this._map.get(key);
if (!values) {
return false;
}
return values.has(value);
}
delete(key) {
const values = this._map.get(key);
if (values && this._map.delete(key)) {
this._size -= values.size;
return true;
}
return false;
}
deleteEntry(key, value) {
const values = this._map.get(key);
if (values) {
if (!values.delete(value)) {
return false;
}
this._size--;
return true;
}
return false;
}
clear() {
this._map.clear();
this._size = 0;
}
entries() {
const self = this;
function* gen() {
for (const [key, values] of self._map.entries()) {
for (const value of values) {
yield [key, value];
}
}
}
return gen();
}
values() {
const self = this;
function* gen() {
for (const [, value] of self.entries()) {
yield value;
}
}
return gen();
}
keys() {
return this._map.keys();
}
forEach(callback, thisArg) {
for (const [key, value] of this.entries()) {
callback.call(thisArg === undefined ? this : thisArg, key, value, this);
}
}
[Symbol.iterator]() {
return this.entries();
}
}

View File

@@ -1,13 +0,0 @@
/**
* Models a hash parameter of a given {@link URL}.
*/
export default class URLHashParams {
private _params;
constructor(url: URL);
append(name: string, value?: string | null): void;
delete(name: string): void;
get(name: string): string | null;
getAll(name: string): Set<string | null>;
keys(): IterableIterator<string>;
toString(): string;
}

View File

@@ -1,77 +0,0 @@
"use strict";
/*
* ClearURLs
* Copyright (c) 2017-2022 Kevin Röbert.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* Models a hash parameter of a given {@link URL}.
*/
class URLHashParams {
constructor(url) {
Object.defineProperty(this, "_params", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
this._params = new Multimap();
const hash = url.hash.slice(1);
const params = hash.split('&');
for (const p of params) {
const param = p.split('=');
if (!param[0])
continue;
const key = param[0];
let value = null;
if (param.length === 2 && param[1]) {
value = param[1];
}
this._params.put(key, value);
}
}
append(name, value = null) {
this._params.put(name, value);
}
delete(name) {
this._params.delete(name);
}
get(name) {
const [first] = this._params.get(name);
if (first) {
return first;
}
return null;
}
getAll(name) {
return this._params.get(name);
}
keys() {
return this._params.keys();
}
toString() {
const rtn = [];
this._params.forEach((key, value) => {
if (value) {
rtn.push(key + '=' + value);
}
else {
rtn.push(key);
}
});
return rtn.join('&');
}
}

View File

@@ -1,43 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2020 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jshint esversion: 6 */
/*
* This script is responsible to check in fixed intervals, that ClearURLs works properly.
* In issue #203, some users reported, that ClearURLs filter function doesn't work after
* some time, but without any recognizable reason.
*
* This watchdog restarts the whole Add-on, when the check fails.
*/
const CHECK_INTERVAL = 60000;
const __dirtyURL = "https://clearurls.roebert.eu?utm_source=addon";
const __cleanURL = new URL("https://clearurls.roebert.eu").toString();
setInterval(function() {
if(isStorageAvailable() && storage.globalStatus) {
if(new URL(pureCleaning(__dirtyURL, true)).toString() !== __cleanURL) {
storage.watchDogErrorCount += 1;
console.log(translate('watchdog', storage.watchDogErrorCount));
saveOnExit();
if(storage.watchDogErrorCount < 3) reload();
} else if(storage.watchDogErrorCount > 0){
storage.watchDogErrorCount = 0;
saveOnExit();
}
}
}, CHECK_INTERVAL);

File diff suppressed because one or more lines are too long

View File

@@ -1,98 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2020 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
:root {
--page-bg-color: #fff;
--page-fg-color: #15141a;
--input-bg-color: #fff;
--input-border-color: #8f8F9d;
--input-fg-color: #15141a;
}
@media (prefers-color-scheme: dark) {
:root {
--page-bg-color: #23222b;
--page-fg-color: #fbfbfe;
--input-bg-color: #42414d;
--input-border-color: #8f8F9d;
--input-fg-color: #fbfbfe;
}
}
body {
background-color: var(--page-bg-color);
color: var(--page-fg-color);
font-size: 14px;
}
table {
color: var(--page-fg-color) !important;
}
.form-control,
.form-control:disabled,
.form-control:focus,
.form-control[readonly] {
background-color: var(--input-bg-color);
border: solid 1px var(--input-border-color);
color: var(--input-fg-color);
}
.small-version {
font-size: 10px;
}
.brand {
font-size: 17px;
}
.navbar-margin {
margin-top: 0;
margin-bottom: 10px;
}
#donate {
transition: 0.3s;
opacity: 0.8;
color: #ffa500;
}
#donate:hover {
opacity: 1;
}
.btn-default {
color: #333;
background-color: #fff;
border-color: #ccc
}
.btn-default.focus,
.btn-default:focus {
color: #333;
background-color: #e6e6e6;
border-color: #8c8c8c
}
.btn-default:hover {
color: #333;
background-color: #e6e6e6;
border-color: #adadad
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,90 +0,0 @@
/*
* ClearURLs
* Copyright (c) 2017-2020 Kevin Röbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* Stylesheet for the switch buttons.
*/
/* Box around the slider */
.switch {
position: relative;
display: inline-block;
width: 50px;
height: 24px;
}
.switch input {
display: none;
}
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #FF7800;
-webkit-transition: .4s;
transition: .4s;
}
.slider:before {
position: absolute;
content: "";
height: 16px;
width: 16px;
left: 4px;
bottom: 4px;
background-color: white;
-webkit-transition: .4s;
transition: .4s;
}
input:checked + .slider {
background-color: #B5E61D;
}
input:focus + .slider {
box-shadow: 0 0 1px #B5E61D;
}
input:checked + .slider:before {
-webkit-transform: translateX(26px);
-ms-transform: translateX(26px);
transform: translateX(26px);
}
/* Rounded sliders */
.slider.round {
border-radius: 34px;
}
.slider.round:before {
border-radius: 50%;
}
.switch label {
position: absolute;
left: 60px;
word-break: keep-all;
}
label {
font-weight: normal;
}

1
data

Submodule data deleted from 84aad05076

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,16 +0,0 @@
/*
* Source: https://github.com/mdn/webextensions-examples/tree/master/context-menu-copy-link-with-types
*/
function copyToClipboard(text) {
function oncopy(event) {
document.removeEventListener("copy", oncopy, true);
event.stopImmediatePropagation();
event.preventDefault();
event.clipboardData.setData("text/plain", text);
}
document.addEventListener("copy", oncopy, true);
document.execCommand("copy");
}

View File

@@ -1,426 +0,0 @@
/**
* Albanian translation
* @name Albanian
* @anchor Albanian
* @author Besnik Belegu
*/
/**
* Afrikaans translation
* @name Afrikaans
* @anchor Afrikaans
* @author <a href="http://www.ajoft.com">Ajoft Software</a>
*/
/**
* Welsh translation
* @name Welsh
* @anchor Welsh
* @author <a href="https://eveoh.nl/">Marco Krikke</a>
*/
/**
* Vietnamese translation
* @name Vietnamese
* @anchor Vietnamese
* @author Trinh Phuoc Thai
*/
/**
* Uzbek translation
* @name Uzbek
* @anchor Uzbek
* @author <a href="http://davlat.info">Farkhod Dadajanov</a>
*/
/**
* Urdu translation
* @name Urdu
* @anchor Urdu
* @author Zafar Subzwari
*/
/**
* Ukranian translation
* @name Ukranian
* @anchor Ukranian
* @author <i>antyrat</i>
*/
/**
* Turkish translation
* @name Turkish
* @anchor Turkish
* @author Umit Gorkem & Erdal TAŞKESEN
*/
/**
* Thai translation
* @name Thai
* @anchor Thai
* @author Thanva Thonglor , <a href="http://auycro.github.io/about/">Gumpanat Keardkeawfa</a>
*/
/**
* Telugu translation (te, te-IN)
* @name Telugu
* @anchor Telugu
* @author <a href="https://in.linkedin.com/in/srinivas-rathikrindi-0405973a">Srinivas Rathikrindi</a>
**/
/**
* Tamil translation
* @name Tamil
* @anchor Tamil
* @author Sam Arul Raj
*/
/**
* Swedish translation
* @name Swedish
* @anchor Swedish
* @author <a href="http://www.kmmtiming.se/">Kristoffer Karlström</a>
*/
/**
* Swahili translation
* @name Swahili
* @anchor Swahili
* @author <a href="http://zoop.co.tz/schoolpesa/">Roy Owino</a>
*/
/**
* Spanish translation
* @name Spanish
* @anchor Spanish
* @author Giovanni Ariza, Aristobulo Gomez and Roberto Poo
*/
/**
* Slovenian translation
* @name Slovenian
* @anchor Slovenian
* @author Marko Kroflic, Blaž Brenčič and Andrej Florjančič
*/
/**
* Slovak translation
* @name Slovak
* @anchor Slovak
* @author <a href="https://github.com/dlugos">Ivan Dlugoš</a>
* @author (original translation) <a href="http://miskerik.com/">Maroš Miškerik</a>
*/
/**
* Sinhala translation
* @name Sinhala
* @anchor Sinhala
* @author Isuru Sampath Ratnayake
*/
/**
* Serbian translation (Latin alphabet)
* @name Serbian (Latin)
* @anchor Serbian (Latin)
* @author <a href="http://mnovakovic.byteout.com">Marko Novakovic</a>
*/
/**
* Russian translation
* @name Russian
* @anchor Russian
* @author Tjoma
* @autor aspyatkin
*/
/**
* Romanian translation
* @name Romanian
* @anchor Romanian
* @author <a href="http://www.jurubita.ro/">Alexandru Jurubita</a>
*/
/**
* Portuguese Brasil translation
* @name Portuguese Brasil
* @anchor Portuguese Brasil
* @author Julio Cesar Viana Palma
*/
/**
* Portuguese translation
* @name Portuguese
* @anchor Portuguese
* @author Nuno Felicio
*/
/**
* Polish translation
* @name Polish
* @anchor Polish
* @author Tomasz Kowalski
* @author Michał Grzelak
*/
/**
* Persian translation
* @name Persian
* @anchor Persian
* @author <a href="http://www.chavoshi.com/">Ehsan Chavoshi</a>
* @author <a href="http://www.robowiki.ir/">Mohammad Babazadeh</a>
*/
/**
* Pashto translation
* @name Pashto
* @anchor Pashto
* @author <a href="http://mbrig.com/">MBrig | Muhammad Nasir Rahimi</a>
*/
/**
* Norwegian Nynorsk translation
* @name Norwegian-Nynorsk
* @anchor Norwegian-Nynorsk
* @author Andreas-Johann Østerdal Ulvestad
*/
/**
* Norwegian Bokmål translation
* @name Norwegian-Bokmal
* @anchor Norwegian-Bokmal
* @author Petter Ekrann
* @author Vegard Johannessen
*/
/**
* Nepali
* @name Nepali
* @anchor Nepali
* @author Bishwo Adhikari
*/
/**
* Mongolian - Монгол хэлний орчуулга
* @name Mongolian
* @anchor Mongolian
* @author <a href="http://www.Batmandakh.com/">Batmandakh Erdenebileg</a>
*/
/**
* Malay translation
* @name Malay
* @anchor Malay
* @author Mohamad Zharif
*/
/**
* Macedonian translation
* @name Macedonian
* @anchor Macedonian
* @author Bojan Petkovski
*/
/**
* Lithuanian translation
* @name Lithuanian
* @anchor Lithuanian
* @author <a href="http://www.kurdingopinigai.lt">Kęstutis Morkūnas</a>
* @author Algirdas Brazas
*/
/**
* Latvian translation
* @name Latvian
* @anchor Latvian
* @author Oskars Podans, Ruslans Jermakovičs and Edgars
*/
/**
* @name Kyrgyz
* @anchor Kyrgyz
* @author <a href="https://github.com/nursultan92/">Nursultan Turdaliev</a> and _tynar_
*/
/**
* Korean translation
* @name Korean
* @anchor Korean
* @author WonGoo Lee
*/
/**
* Kazakh translation
* @name Kazakh
* @anchor Kazakh
* @author <a href="https://github.com/talgautb">Talgat Uspanov</a>
*/
/**
* Japanese translation
* @name Japanese
* @anchor Japanese
* @author <i>yusuke</i> and <a href="https://github.com/wiraqutra">Seigo ISHINO</a>
*/
/**
* Italian translation
* @name Italian
* @anchor Italian
* @author Nicola Zecchin & Giulio Quaresima
*/
/**
* Irish translation
* @name Irish
* @anchor Irish
* @author <a href="http://letsbefamous.com">Lets Be Famous Journal</a>
*/
/**
* Indonesian translation
* @name Indonesian
* @anchor Indonesian
* @author Landung Wahana
*/
/**
* Indonesian translation
* @name Indonesian
* @anchor Indonesian
* @author Cipto Hadi
*/
/**
* Icelandic translation
* @name Icelandic
* @anchor Icelandic
* @author Finnur Kolbeinsson
*/
/**
* Hungarian translation
* @name Hungarian
* @anchor Hungarian
* @author <a href="http://www.maschek.hu">Adam Maschek</a> and Lajos Cseppentő
*/
/**
* Hindi translation
* @name Hindi
* @anchor Hindi
* @author <a href="http://outshinesolutions.com">Outshine Solutions</a>
*/
/**
* Hebrew translation
* @name Hebrew
* @anchor Hebrew
* @author <a href="http://ww3.co.il/">Neil Osman (WW3)</a>
*/
/**
* Gujarati translation
* @name Gujarati
* @anchor Gujarati
* @author <a href="http://www.apoto.com/">Apoto</a>
*/
/**
* Greek translation
* @name Greek
* @anchor Greek
* @author Abraam Ziogas
* @author Leonidas Arvanitis
*/
/**
* German translation
* @name German
* @anchor German
* @author Joerg Holz
* @author DJmRek - Markus Bergt
* @author OSWorX https://osworx.net
*/
/**
* Georgian translation
* @name Georgian
* @anchor Georgian
* @author Mikheil Nadareishvili, updated by <a href="http://www.brunjadze.xyz/">Mirza Brunjadze</a>
*/
/**
* Galician translation
* @name Galician
* @anchor Galician
* @author <i>Emilio</i>
* @author <i>Xosé Antonio Rubal López</i>
*/
/**
* French translation
* @name French
* @anchor French
* @author
*/
/**
* Finnish translation
* @name Finnish
* @anchor Finnish
* @author Seppo Äyräväinen
* @author Viktors Cvetkovs
* @author <a href="https://ironlions.fi">Niko Granö</a>
*/
/**
* Filipino translation
* @name Filipino
* @anchor Filipino
* @author <a href="http://citi360.com/">Citi360</a>
*/
/**
* Estonian translation
* @name Estonian
* @anchor Estonian
* @author <a href="http://www.arts9.com/">Janek Todoruk</a>
*/
/**
* English - this is the default DataTables ships with
* @name English
* @anchor English
* @author <a href="http://www.sprymedia.co.uk/">Allan Jardine</a>
*/
/**
* Dutch translation
* @name Dutch
* @anchor Dutch
* @author <a href="http://www.blikgooien.nl/">Erwin Kerk</a> and <i>ashwin</i>
*/
/**
* Danish translation
* @name Danish
* @anchor Danish
* @author <a href="http://www.kor.dk/">Werner Knudsen</a>
*/
/**
* Czech translation
* @name Czech
* @anchor Czech
* @author <a href="http://blog.magerio.cz/">Magerio</a>
*/
/**
* Croatian translation
* @name Croatian
* @anchor Croatian
* @author Predrag Mušić and _hrvoj3e_
*/
/**
* Chinese (traditional) translation
* @name Chinese (traditional)
* @anchor Chinese (traditional)
* @author <a href="https://gimmerank.com/">GimmeRank Affiliate</a>
* @author <a href="https://github.com/PeterDaveHello">Peter Dave Hello</a>
*/
/**
* Catalan translation
* @name Catalan
* @anchor Catalan
* @author Sergi
*/
/**
* Amharic translation
* @name Amharic
* @anchor Amharic
* @author veduket
*/
/**
* Arabic translation
* @name Arabic
* @anchor Arabic
* @author Ossama Khayat
*/
/**
* Armenian - translation
* @name Armenian
* @anchor Armenian
* @author <a href="http://www.voznisoft.com/">Levon Levonyan</a>
*/
/**
* Azerbaijan translation
* @name Azerbaijan
* @anchor Azerbaijan
* @author H.Huseyn
*/
/**
* Bangla translation
* @name Bangla
* @anchor Bangla
* @author <a href="http://khaledcse06.wordpress.com">Md. Khaled Ben Islam</a>
*/
/**
* Basque translation
* @name Basque
* @anchor Basque
* @author <a href="https://github.com/xabikip/">Xabi Pico</a>
*/
/**
* Belarusian translation
* @name Belarusian
* @anchor Belarusian
* @author vkachurka
*/
/**
* Bulgarian translation
* @name Bulgarian
* @anchor Bulgarian
* @author Rostislav Stoyanov, Oliwier Thomas
*/

View File

@@ -1,23 +0,0 @@
{
"sEmptyTable": "Geen data beskikbaar in tabel",
"sInfo": "uitstalling _START_ to _END_ of _TOTAL_ inskrywings",
"sInfoEmpty": "uitstalling 0 to 0 of 0 inskrywings",
"sInfoFiltered": "(gefiltreer uit _MAX_ totaal inskrywings)",
"sInfoPostFix": "",
"sInfoThousands": ",",
"sLengthMenu": "uitstal _MENU_ inskrywings",
"sLoadingRecords": "laai...",
"sProcessing": "verwerking...",
"sSearch": "soektog:",
"sZeroRecords": "Geen treffers gevind",
"oPaginate": {
"sFirst": "eerste",
"sLast": "laaste",
"sNext": "volgende",
"sPrevious": "vorige"
},
"oAria": {
"sSortAscending": ": aktiveer kolom stygende te sorteer",
"sSortDescending": ": aktiveer kolom orde te sorteer"
}
}

View File

@@ -1,23 +0,0 @@
{
"sEmptyTable": "ባዶ ሰንጠረዥ",
"sInfo": "ከጠቅላላው _TOTAL_ ዝርዝሮች ውስጥ ከ _START_ እስከ _END_ ያሉት ዝርዝር",
"sInfoEmpty": "ከጠቅላላው 0 ዝርዝሮች ውስጥ ከ 0 እስከ 0 ያሉት ዝርዝር",
"sInfoFiltered": "(ከጠቅላላው _MAX_ የተመረጡ ዝርዝሮች)",
"sInfoPostFix": "",
"sInfoThousands": ",",
"sLengthMenu": "የዝርዝሮች ብዛት _MENU_",
"sLoadingRecords": "በማቅረብ ላይ...",
"sProcessing": "በማቀናበር ላይ...",
"sSearch": "ፈልግ:",
"sZeroRecords": "ከሚፈለገው ጋር የሚሚሳሰል ዝርዝር አልተገኘም",
"oPaginate": {
"sFirst": "መጀመሪያ",
"sLast": "መጨረሻ",
"sNext": "ቀጣዩ",
"sPrevious": "የበፊቱ"
},
"oAria": {
"sSortAscending": ": ከመጀመሪያ ወደ መጨረሻ(ወጪ) አደራደር",
"sSortDescending": ": ከመጨረሻ ወደ መጀመሪያ(ወራጅ) አደራደር"
}
}

View File

@@ -1,17 +0,0 @@
{
"sProcessing": "جارٍ التحميل...",
"sLengthMenu": "أظهر _MENU_ مدخلات",
"sZeroRecords": "لم يعثر على أية سجلات",
"sInfo": "إظهار _START_ إلى _END_ من أصل _TOTAL_ مدخل",
"sInfoEmpty": "يعرض 0 إلى 0 من أصل 0 سجل",
"sInfoFiltered": "(منتقاة من مجموع _MAX_ مُدخل)",
"sInfoPostFix": "",
"sSearch": "ابحث:",
"sUrl": "",
"oPaginate": {
"sFirst": "الأول",
"sPrevious": "السابق",
"sNext": "التالي",
"sLast": "الأخير"
}
}

View File

@@ -1,21 +0,0 @@
{
"sProcessing": "Пачакайце...",
"sLengthMenu": "Паказваць _MENU_ запісаў",
"sZeroRecords": "Запісы адсутнічаюць.",
"sInfo": "Запісы з _START_ па _END_ з _TOTAL_ запісаў",
"sInfoEmpty": "Запісы з 0 па 0 з 0 запісаў",
"sInfoFiltered": "(адфільтравана з _MAX_ запісаў)",
"sInfoPostFix": "",
"sSearch": "Пошук:",
"sUrl": "",
"oPaginate": {
"sFirst": "Першая",
"sPrevious": "Папярэдняя",
"sNext": "Наступная",
"sLast": "Апошняя"
},
"oAria": {
"sSortAscending": ": актываваць для сартавання слупка па ўзрастанні",
"sSortDescending": ": актываваць для сартавання слупка па змяншэнні"
}
}

View File

@@ -1,17 +0,0 @@
{
"sProcessing": "Обработка на резултатите...",
"sLengthMenu": "Показване на _MENU_ резултата",
"sZeroRecords": "Няма намерени резултати",
"sInfo": "Показване на резултати от _START_ до _END_ от общо _TOTAL_",
"sInfoEmpty": "Показване на резултати от 0 до 0 от общо 0",
"sInfoFiltered": "(филтрирани от общо _MAX_ резултата)",
"sInfoPostFix": "",
"sSearch": "Търсене:",
"sUrl": "",
"oPaginate": {
"sFirst": "Първа",
"sPrevious": "Предишна",
"sNext": "Следваща",
"sLast": "Последна"
}
}

View File

@@ -1,17 +0,0 @@
{
"sProcessing": "Processant...",
"sLengthMenu": "Mostra _MENU_ registres",
"sZeroRecords": "No s'han trobat registres.",
"sInfo": "Mostrant de _START_ a _END_ de _TOTAL_ registres",
"sInfoEmpty": "Mostrant de 0 a 0 de 0 registres",
"sInfoFiltered": "(filtrat de _MAX_ total registres)",
"sInfoPostFix": "",
"sSearch": "Filtrar:",
"sUrl": "",
"oPaginate": {
"sFirst": "Primer",
"sPrevious": "Anterior",
"sNext": "Següent",
"sLast": "Últim"
}
}

View File

@@ -1,23 +0,0 @@
{
"sEmptyTable": "Tabulka neobsahuje žádná data",
"sInfo": "Zobrazuji _START_ až _END_ z celkem _TOTAL_ záznamů",
"sInfoEmpty": "Zobrazuji 0 až 0 z 0 záznamů",
"sInfoFiltered": "(filtrováno z celkem _MAX_ záznamů)",
"sInfoPostFix": "",
"sInfoThousands": " ",
"sLengthMenu": "Zobraz záznamů _MENU_",
"sLoadingRecords": "Načítám...",
"sProcessing": "Provádím...",
"sSearch": "Hledat:",
"sZeroRecords": "Žádné záznamy nebyly nalezeny",
"oPaginate": {
"sFirst": "První",
"sLast": "Poslední",
"sNext": "Další",
"sPrevious": "Předchozí"
},
"oAria": {
"sSortAscending": ": aktivujte pro řazení sloupce vzestupně",
"sSortDescending": ": aktivujte pro řazení sloupce sestupně"
}
}

View File

@@ -1,23 +0,0 @@
{
"sEmptyTable": "Dim data ar gael yn y tabl",
"sInfo": "Dangos _START_ i _END_ o _TOTAL_ cofnod",
"sInfoEmpty": "Dangos 0 i 0 o 0 cofnod",
"sInfoFiltered": "(wedi hidlo o gyfanswm o _MAX_ cofnod)",
"sInfoPostFix": "",
"sInfoThousands": ",",
"sLengthMenu": "Dangos _MENU_ cofnod",
"sLoadingRecords": "Wrthi'n llwytho...",
"sProcessing": "Wrthi'n prosesu...",
"sSearch": "Chwilio:",
"sZeroRecords": "Heb ddod o hyd i gofnodion sy'n cyfateb",
"oPaginate": {
"sFirst": "Cyntaf",
"sLast": "Olaf",
"sNext": "Nesaf",
"sPrevious": "Blaenorol"
},
"oAria": {
"sSortAscending": ": rhoi ar waith i drefnu colofnau o'r lleiaf i'r mwyaf",
"sSortDescending": ": rhoi ar waith i drefnu colofnau o'r mwyaf i'r lleiaf"
}
}

View File

@@ -1,17 +0,0 @@
{
"sProcessing": "Henter...",
"sLengthMenu": "Vis _MENU_ linjer",
"sZeroRecords": "Ingen linjer matcher s&oslash;gningen",
"sInfo": "Viser _START_ til _END_ af _TOTAL_ linjer",
"sInfoEmpty": "Viser 0 til 0 af 0 linjer",
"sInfoFiltered": "(filtreret fra _MAX_ linjer)",
"sInfoPostFix": "",
"sSearch": "S&oslash;g:",
"sUrl": "",
"oPaginate": {
"sFirst": "F&oslash;rste",
"sPrevious": "Forrige",
"sNext": "N&aelig;ste",
"sLast": "Sidste"
}
}

View File

@@ -1,41 +0,0 @@
{
"sEmptyTable": "Keine Daten in der Tabelle vorhanden",
"sInfo": "_START_ bis _END_ von _TOTAL_ Einträgen",
"sInfoEmpty": "Keine Daten vorhanden",
"sInfoFiltered": "(gefiltert von _MAX_ Einträgen)",
"sInfoPostFix": "",
"sInfoThousands": ".",
"sLengthMenu": "_MENU_ Einträge anzeigen",
"sLoadingRecords": "Wird geladen ..",
"sProcessing": "Bitte warten ..",
"sSearch": "Suchen",
"sZeroRecords": "Keine Einträge vorhanden",
"oPaginate": {
"sFirst": "Erste",
"sPrevious": "Zurück",
"sNext": "Nächste",
"sLast": "Letzte"
},
"oAria": {
"sSortAscending": ": aktivieren, um Spalte aufsteigend zu sortieren",
"sSortDescending": ": aktivieren, um Spalte absteigend zu sortieren"
},
"select": {
"rows": {
"_": "%d Zeilen ausgewählt",
"0": "",
"1": "1 Zeile ausgewählt"
}
},
"buttons": {
"print": "Drucken",
"colvis": "Spalten",
"copy": "Kopieren",
"copyTitle": "In Zwischenablage kopieren",
"copyKeys": "Taste <i>ctrl</i> oder <i>\u2318</i> + <i>C</i> um Tabelle<br>in Zwischenspeicher zu kopieren.<br><br>Um abzubrechen die Nachricht anklicken oder Escape drücken.",
"copySuccess": {
"_": "%d Spalten kopiert",
"1": "1 Spalte kopiert"
}
}
}

View File

@@ -1,27 +0,0 @@
{
"sDecimal": ",",
"sEmptyTable": "Δεν υπάρχουν δεδομένα στον πίνακα",
"sInfo": "Εμφανίζονται _START_ έως _END_ από _TOTAL_ εγγραφές",
"sInfoEmpty": "Εμφανίζονται 0 έως 0 από 0 εγγραφές",
"sInfoFiltered": "(φιλτραρισμένες από _MAX_ συνολικά εγγραφές)",
"sInfoPostFix": "",
"sInfoThousands": ".",
"sLengthMenu": "Δείξε _MENU_ εγγραφές",
"sLoadingRecords": "Φόρτωση...",
"sProcessing": "Επεξεργασία...",
"sSearch": "Αναζήτηση:",
"sSearchPlaceholder": "Αναζήτηση",
"sThousands": ".",
"sUrl": "",
"sZeroRecords": "Δεν βρέθηκαν εγγραφές που να ταιριάζουν",
"oPaginate": {
"sFirst": "Πρώτη",
"sPrevious": "Προηγούμενη",
"sNext": "Επόμενη",
"sLast": "Τελευταία"
},
"oAria": {
"sSortAscending": ": ενεργοποιήστε για αύξουσα ταξινόμηση της στήλης",
"sSortDescending": ": ενεργοποιήστε για φθίνουσα ταξινόμηση της στήλης"
}
}

View File

@@ -1,23 +0,0 @@
{
"sEmptyTable": "No data available in table",
"sInfo": "Showing _START_ to _END_ of _TOTAL_ entries",
"sInfoEmpty": "Showing 0 to 0 of 0 entries",
"sInfoFiltered": "(filtered from _MAX_ total entries)",
"sInfoPostFix": "",
"sInfoThousands": ",",
"sLengthMenu": "Show _MENU_ entries",
"sLoadingRecords": "Loading...",
"sProcessing": "Processing...",
"sSearch": "Search:",
"sZeroRecords": "No matching records found",
"oPaginate": {
"sFirst": "First",
"sLast": "Last",
"sNext": "Next",
"sPrevious": "Previous"
},
"oAria": {
"sSortAscending": ": activate to sort column ascending",
"sSortDescending": ": activate to sort column descending"
}
}

View File

@@ -1,24 +0,0 @@
{
"sProcessing": "Procesando...",
"sLengthMenu": "Mostrar _MENU_ registros",
"sZeroRecords": "No se encontraron resultados",
"sEmptyTable": "Ningún dato disponible en esta tabla",
"sInfo": "Mostrando registros del _START_ al _END_ de un total de _TOTAL_ registros",
"sInfoEmpty": "Mostrando registros del 0 al 0 de un total de 0 registros",
"sInfoFiltered": "(filtrado de un total de _MAX_ registros)",
"sInfoPostFix": "",
"sSearch": "Buscar:",
"sUrl": "",
"sInfoThousands": ",",
"sLoadingRecords": "Cargando...",
"oPaginate": {
"sFirst": "Primero",
"sLast": "Último",
"sNext": "Siguiente",
"sPrevious": "Anterior"
},
"oAria": {
"sSortAscending": ": Activar para ordenar la columna de manera ascendente",
"sSortDescending": ": Activar para ordenar la columna de manera descendente"
}
}

View File

@@ -1,16 +0,0 @@
{
"sProcessing": "Palun oodake, koostan kuvamiseks nimekirja!",
"sLengthMenu": "N&auml;ita kirjeid _MENU_ kaupa",
"sZeroRecords": "Otsitavat vastet ei leitud.",
"sInfo": "Kuvatud: _TOTAL_ kirjet (_START_-_END_)",
"sInfoEmpty": "Otsinguvasteid ei leitud",
"sInfoFiltered": " - filteeritud _MAX_ kirje seast.",
"sInfoPostFix": "K&otilde;ik kuvatud kirjed p&otilde;hinevad reaalsetel tulemustel.",
"sSearch": "Otsi k&otilde;ikide tulemuste seast:",
"oPaginate": {
"sFirst": "Algus",
"sPrevious": "Eelmine",
"sNext": "J&auml;rgmine",
"sLast": "Viimane"
}
}

View File

@@ -1,24 +0,0 @@
{
"sProcessing": "Prozesatzen...",
"sLengthMenu": "Erakutsi _MENU_ erregistro",
"sZeroRecords": "Ez da emaitzarik aurkitu",
"sEmptyTable": "Taula hontan ez dago inongo datu erabilgarririk",
"sInfo": "_START_ -etik _END_ -erako erregistroak erakusten, guztira _TOTAL_ erregistro",
"sInfoEmpty": "0tik 0rako erregistroak erakusten, guztira 0 erregistro",
"sInfoFiltered": "(guztira _MAX_ erregistro iragazten)",
"sInfoPostFix": "",
"sSearch": "Aurkitu:",
"sUrl": "",
"sInfoThousands": ",",
"sLoadingRecords": "Abiarazten...",
"oPaginate": {
"sFirst": "Lehena",
"sLast": "Azkena",
"sNext": "Hurrengoa",
"sPrevious": "Aurrekoa"
},
"oAria": {
"sSortAscending": ": Zutabea goranzko eran ordenatzeko aktibatu ",
"sSortDescending": ": Zutabea beheranzko eran ordenatzeko aktibatu"
}
}

View File

@@ -1,23 +0,0 @@
{
"sEmptyTable": "هیچ داده ای در جدول وجود ندارد",
"sInfo": "نمایش _START_ تا _END_ از _TOTAL_ رکورد",
"sInfoEmpty": "نمایش 0 تا 0 از 0 رکورد",
"sInfoFiltered": "(فیلتر شده از _MAX_ رکورد)",
"sInfoPostFix": "",
"sInfoThousands": ",",
"sLengthMenu": "نمایش _MENU_ رکورد",
"sLoadingRecords": "در حال بارگزاری...",
"sProcessing": "در حال پردازش...",
"sSearch": "جستجو:",
"sZeroRecords": "رکوردی با این مشخصات پیدا نشد",
"oPaginate": {
"sFirst": "ابتدا",
"sLast": "انتها",
"sNext": "بعدی",
"sPrevious": "قبلی"
},
"oAria": {
"sSortAscending": ": فعال سازی نمایش به صورت صعودی",
"sSortDescending": ": فعال سازی نمایش به صورت نزولی"
}
}

View File

@@ -1,39 +0,0 @@
{
"sEmptyTable": "Ei näytettäviä tuloksia.",
"sInfo": "Näytetään rivit _START_ - _END_ (yhteensä _TOTAL_ )",
"sInfoEmpty": "Näytetään 0 - 0 (yhteensä 0)",
"sInfoFiltered": "(suodatettu _MAX_ tuloksen joukosta)",
"sInfoPostFix": "",
"sInfoThousands": ",",
"sLengthMenu": "Näytä kerralla _MENU_ riviä",
"sLoadingRecords": "Ladataan...",
"sProcessing": "Hetkinen...",
"sSearch": "Etsi:",
"sZeroRecords": "Tietoja ei löytynyt",
"oPaginate": {
"sFirst": "Ensimmäinen",
"sLast": "Viimeinen",
"sNext": "Seuraava",
"sPrevious": "Edellinen"
},
"oAria": {
"sSortAscending": ": lajittele sarake nousevasti",
"sSortDescending": ": lajittele sarake laskevasti"
},
"select": {
"rows": {
"_": "Valittuna %d riviä",
"0": "Klikkaa riviä valitaksesi sen",
"1": "Valittuna vain yksi rivi"
}
},
"buttons": {
"copy": "Kopioi",
"copySuccess": {
"1": "Yksi rivi kopioitu leikepöydälle",
"_": "%d riviä kopioitu leikepöydälle"
},
"copyTitle": "Kopioi leikepöydälle",
"copyKeys": "Paina <i>ctrl</i> tai <i>\u2318</i> + <i>C</i> kopioidaksesi taulukon arvot<br> leikepöydälle. <br><br>Peruuttaaksesi klikkaa tähän tai Esc."
}
}

View File

@@ -1,29 +0,0 @@
{
"sProcessing": "Traitement en cours...",
"sSearch": "Rechercher&nbsp;:",
"sLengthMenu": "Afficher _MENU_ &eacute;l&eacute;ments",
"sInfo": "Affichage de l'&eacute;l&eacute;ment _START_ &agrave; _END_ sur _TOTAL_ &eacute;l&eacute;ments",
"sInfoEmpty": "Affichage de l'&eacute;l&eacute;ment 0 &agrave; 0 sur 0 &eacute;l&eacute;ment",
"sInfoFiltered": "(filtr&eacute; de _MAX_ &eacute;l&eacute;ments au total)",
"sInfoPostFix": "",
"sLoadingRecords": "Chargement en cours...",
"sZeroRecords": "Aucun &eacute;l&eacute;ment &agrave; afficher",
"sEmptyTable": "Aucune donn&eacute;e disponible dans le tableau",
"oPaginate": {
"sFirst": "Premier",
"sPrevious": "Pr&eacute;c&eacute;dent",
"sNext": "Suivant",
"sLast": "Dernier"
},
"oAria": {
"sSortAscending": ": activer pour trier la colonne par ordre croissant",
"sSortDescending": ": activer pour trier la colonne par ordre d&eacute;croissant"
},
"select": {
"rows": {
_: "%d lignes séléctionnées",
0: "Aucune ligne séléctionnée",
1: "1 ligne séléctionnée"
}
}
}

View File

@@ -1,24 +0,0 @@
{
"sProcessing": "Procesando...",
"sLengthMenu": "Mostrar _MENU_ rexistros",
"sZeroRecords": "Non se atoparon resultados",
"sEmptyTable": "Ningún dato dispoñible nesta táboa",
"sInfo": "Mostrando rexistros do _START_ ao _END_ dun total de _TOTAL_ rexistros",
"sInfoEmpty": "Mostrando rexistros do 0 ao 0 dun total de 0 rexistros",
"sInfoFiltered": "(filtrado dun total de _MAX_ rexistros)",
"sInfoPostFix": "",
"sSearch": "Buscar:",
"sUrl": "",
"sInfoThousands": ",",
"sLoadingRecords": "Cargando...",
"oPaginate": {
"sFirst": "Primeiro",
"sLast": "Último",
"sNext": "Seguinte",
"sPrevious": "Anterior"
},
"oAria": {
"sSortAscending": ": Activar para ordenar a columna de maneira ascendente",
"sSortDescending": ": Activar para ordenar a columna de maneira descendente"
}
}

View File

@@ -1,23 +0,0 @@
{
"sEmptyTable": "કોષ્ટકમાં કોઈ ડેટા ઉપલબ્ધ નથી",
"sInfo": "કુલ_પ્રવેશો_અંત_પ્રારંભ_દર્શાવે_છે",
"sInfoEmpty": "0 પ્રવેશો 0 0 બતાવી રહ્યું છે",
"sInfoFiltered": "(_MAX_ કુલ પ્રવેશો માંથી ફિલ્ટર)",
"sInfoPostFix": "",
"sInfoThousands": ",",
"sLengthMenu": "બતાવો _MENU_ પ્રવેશો",
"sLoadingRecords": "લોડ કરી રહ્યું છે ...",
"sProcessing": "પ્રક્રિયા ...",
"sSearch": "શોધો:",
"sZeroRecords": "કોઈ મેળ ખાતા રેકોર્ડ મળી",
"oPaginate": {
"sFirst": "પ્રથમ",
"sLast": "અંતિમ",
"sNext": "આગામી",
"sPrevious": "ગત"
},
"oAria": {
"sSortAscending": ": સ્તંભ ચડતા ક્રમમાં ગોઠવવા માટે સક્રિય",
"sSortDescending": ": કૉલમ ઉતરતા ક્રમમાં ગોઠવવા માટે સક્રિય"
}
}

View File

@@ -1,18 +0,0 @@
{
"processing": "מעבד...",
"lengthMenu": "הצג _MENU_ פריטים",
"zeroRecords": "לא נמצאו רשומות מתאימות",
"emptyTable": "לא נמצאו רשומות מתאימות",
"info": "_START_ עד _END_ מתוך _TOTAL_ רשומות" ,
"infoEmpty": "0 עד 0 מתוך 0 רשומות",
"infoFiltered": "(מסונן מסך _MAX_ רשומות)",
"infoPostFix": "",
"search": "חפש:",
"url": "",
"paginate": {
"first": "ראשון",
"previous": "קודם",
"next": "הבא",
"last": "אחרון"
}
}

View File

@@ -1,17 +0,0 @@
{
"sProcessing": "प्रगति पे हैं ...",
"sLengthMenu": " _MENU_ प्रविष्टियां दिखाएं ",
"sZeroRecords": "रिकॉर्ड्स का मेल नहीं मिला",
"sInfo": "_START_ to _END_ of _TOTAL_ प्रविष्टियां दिखा रहे हैं",
"sInfoEmpty": "0 में से 0 से 0 प्रविष्टियां दिखा रहे हैं",
"sInfoFiltered": "(_MAX_ कुल प्रविष्टियों में से छठा हुआ)",
"sInfoPostFix": "",
"sSearch": "खोजें:",
"sUrl": "",
"oPaginate": {
"sFirst": "प्रथम",
"sPrevious": "पिछला",
"sNext": "अगला",
"sLast": "अंतिम"
}
}

View File

@@ -1,23 +0,0 @@
{
"sEmptyTable": "Nema podataka u tablici",
"sInfo": "Prikazano _START_ do _END_ od _TOTAL_ rezultata",
"sInfoEmpty": "Prikazano 0 do 0 od 0 rezultata",
"sInfoFiltered": "(filtrirano iz _MAX_ ukupnih rezultata)",
"sInfoPostFix": "",
"sInfoThousands": ",",
"sLengthMenu": "Prikaži _MENU_ rezultata po stranici",
"sLoadingRecords": "Dohvaćam...",
"sProcessing": "Obrađujem...",
"sSearch": "Pretraži:",
"sZeroRecords": "Ništa nije pronađeno",
"oPaginate": {
"sFirst": "Prva",
"sPrevious": "Nazad",
"sNext": "Naprijed",
"sLast": "Zadnja"
},
"oAria": {
"sSortAscending": ": aktiviraj za rastući poredak",
"sSortDescending": ": aktiviraj za padajući poredak"
}
}

View File

@@ -1,23 +0,0 @@
{
"sEmptyTable": "Nincs rendelkezésre álló adat",
"sInfo": "Találatok: _START_ - _END_ Összesen: _TOTAL_",
"sInfoEmpty": "Nulla találat",
"sInfoFiltered": "(_MAX_ összes rekord közül szűrve)",
"sInfoPostFix": "",
"sInfoThousands": " ",
"sLengthMenu": "_MENU_ találat oldalanként",
"sLoadingRecords": "Betöltés...",
"sProcessing": "Feldolgozás...",
"sSearch": "Keresés:",
"sZeroRecords": "Nincs a keresésnek megfelelő találat",
"oPaginate": {
"sFirst": "Első",
"sPrevious": "Előző",
"sNext": "Következő",
"sLast": "Utolsó"
},
"oAria": {
"sSortAscending": ": aktiválja a növekvő rendezéshez",
"sSortDescending": ": aktiválja a csökkenő rendezéshez"
}
}

View File

@@ -1,23 +0,0 @@
{
"sEmptyTable": "Տվյալները բացակայում են",
"sProcessing": "Կատարվում է...",
"sInfoThousands": ",",
"sLengthMenu": "Ցուցադրել _MENU_ արդյունքներ մեկ էջում",
"sLoadingRecords": "Բեռնվում է ...",
"sZeroRecords": "Հարցմանը համապատասխանող արդյունքներ չկան",
"sInfo": "Ցուցադրված են _START_-ից _END_ արդյունքները ընդհանուր _TOTAL_-ից",
"sInfoEmpty": "Արդյունքներ գտնված չեն",
"sInfoFiltered": "(ֆիլտրվել է ընդհանուր _MAX_ արդյունքներից)",
"sInfoPostFix": "",
"sSearch": "Փնտրել",
"oPaginate": {
"sFirst": "Առաջին էջ",
"sPrevious": "Նախորդ էջ",
"sNext": "Հաջորդ էջ",
"sLast": "Վերջին էջ"
},
"oAria": {
"sSortAscending": ": ակտիվացրեք աճման կարգով դասավորելու համար",
"sSortDescending": ": ակտիվացրեք նվազման կարգով դասավորելու համար"
}
}

View File

@@ -1,18 +0,0 @@
{
"sEmptyTable": "Tidak ada data yang tersedia pada tabel ini",
"sProcessing": "Sedang memproses...",
"sLengthMenu": "Tampilkan _MENU_ entri",
"sZeroRecords": "Tidak ditemukan data yang sesuai",
"sInfo": "Menampilkan _START_ sampai _END_ dari _TOTAL_ entri",
"sInfoEmpty": "Menampilkan 0 sampai 0 dari 0 entri",
"sInfoFiltered": "(disaring dari _MAX_ entri keseluruhan)",
"sInfoPostFix": "",
"sSearch": "Cari:",
"sUrl": "",
"oPaginate": {
"sFirst": "Pertama",
"sPrevious": "Sebelumnya",
"sNext": "Selanjutnya",
"sLast": "Terakhir"
}
}

View File

@@ -1,23 +0,0 @@
{
"sEmptyTable": "Engin gögn eru í þessari töflu",
"sInfo": "Sýni _START_ til _END_ af _TOTAL_ færslum",
"sInfoEmpty": "Sýni 0 til 0 af 0 færslum",
"sInfoFiltered": "(síað út frá _MAX_ færslum)",
"sInfoPostFix": "",
"sInfoThousands": ".",
"sLengthMenu": "Sýna _MENU_ færslur",
"sLoadingRecords": "Hleð...",
"sProcessing": "Úrvinnsla...",
"sSearch": "Leita:",
"sZeroRecords": "Engar færslur fundust",
"oPaginate": {
"sFirst": "Fyrsta",
"sLast": "Síðasta",
"sNext": "Næsta",
"sPrevious": "Fyrri"
},
"oAria": {
"sSortAscending": ": virkja til að raða dálki í hækkandi röð",
"sSortDescending": ": virkja til að raða dálki lækkandi í röð"
}
}

View File

@@ -1,23 +0,0 @@
{
"sEmptyTable": "Nessun dato presente nella tabella",
"sInfo": "Vista da _START_ a _END_ di _TOTAL_ elementi",
"sInfoEmpty": "Vista da 0 a 0 di 0 elementi",
"sInfoFiltered": "(filtrati da _MAX_ elementi totali)",
"sInfoPostFix": "",
"sInfoThousands": ".",
"sLengthMenu": "Visualizza _MENU_ elementi",
"sLoadingRecords": "Caricamento...",
"sProcessing": "Elaborazione...",
"sSearch": "Cerca:",
"sZeroRecords": "La ricerca non ha portato alcun risultato.",
"oPaginate": {
"sFirst": "Inizio",
"sPrevious": "Precedente",
"sNext": "Successivo",
"sLast": "Fine"
},
"oAria": {
"sSortAscending": ": attiva per ordinare la colonna in ordine crescente",
"sSortDescending": ": attiva per ordinare la colonna in ordine decrescente"
}
}

View File

@@ -1,23 +0,0 @@
{
"sEmptyTable": "テーブルにデータがありません",
"sInfo": " _TOTAL_ 件中 _START_ から _END_ まで表示",
"sInfoEmpty": " 0 件中 0 から 0 まで表示",
"sInfoFiltered": "(全 _MAX_ 件より抽出)",
"sInfoPostFix": "",
"sInfoThousands": ",",
"sLengthMenu": "_MENU_ 件表示",
"sLoadingRecords": "読み込み中...",
"sProcessing": "処理中...",
"sSearch": "検索:",
"sZeroRecords": "一致するレコードがありません",
"oPaginate": {
"sFirst": "先頭",
"sLast": "最終",
"sNext": "次",
"sPrevious": "前"
},
"oAria": {
"sSortAscending": ": 列を昇順に並べ替えるにはアクティブにする",
"sSortDescending": ": 列を降順に並べ替えるにはアクティブにする"
}
}

View File

@@ -1,23 +0,0 @@
{
"sEmptyTable": "ცხრილში არ არის მონაცემები",
"sInfo": "ნაჩვენებია ჩანაწერები _START_დან _END_მდე, _TOTAL_ ჩანაწერიდან",
"sInfoEmpty": "ნაჩვენებია ჩანაწერები 0დან 0მდე, 0 ჩანაწერიდან",
"sInfoFiltered": "(გაფილტრული შედეგი _MAX_ ჩანაწერიდან)",
"sInfoPostFix": "",
"sInfoThousands": ".",
"sLengthMenu": "აჩვენე _MENU_ ჩანაწერი",
"sLoadingRecords": "იტვირთება...",
"sProcessing": "მუშავდება...",
"sSearch": "ძიება:",
"sZeroRecords": "არაფერი მოიძებნა",
"oPaginate": {
"sFirst": "პირველი",
"sLast": "ბოლო",
"sNext": "შემდეგი",
"sPrevious": "წინა"
},
"oAria": {
"sSortAscending": ": სვეტის დალაგება ზრდის მიხედვით",
"sSortDescending": ": სვეტის დალაგება კლების მიხედვით"
}
}

View File

@@ -1,22 +0,0 @@
{
"processing": "Күте тұрыңыз...",
"search": "Іздеу:",
"lengthMenu": "Жазбалар _MENU_ көрсету",
"info": "_TOTAL_ жазбалары бойынша _START_ бастап _END_ дейінгі жазбалар",
"infoEmpty": "0 жазбалары бойынша 0 бастап 0 дейінгі жазбалар",
"infoFiltered": "(_MAX_ жазбасынан сұрыпталды)",
"infoPostFix": "",
"loadingRecords": "Жазбалар жүктемесі...",
"zeroRecords": "Жазбалар жоқ",
"emptyTable": "Кестеде деректер жоқ",
"paginate": {
"first": "Бірінші",
"previous": "Алдыңғысы",
"next": "Келесі",
"last": "Соңғы"
},
"aria": {
"sortAscending": ": өсімі бойынша бағанды сұрыптау үшін активациялау",
"sortDescending": ": кемуі бойынша бағанды сұрыптау үшін активациялау"
}
}

View File

@@ -1,23 +0,0 @@
{
"sEmptyTable": "데이터가 없습니다",
"sInfo": "_START_ - _END_ / _TOTAL_",
"sInfoEmpty": "0 - 0 / 0",
"sInfoFiltered": "(총 _MAX_ 개)",
"sInfoPostFix": "",
"sInfoThousands": ",",
"sLengthMenu": "페이지당 줄수 _MENU_",
"sLoadingRecords": "읽는중...",
"sProcessing": "처리중...",
"sSearch": "검색:",
"sZeroRecords": "검색 결과가 없습니다",
"oPaginate": {
"sFirst": "처음",
"sLast": "마지막",
"sNext": "다음",
"sPrevious": "이전"
},
"oAria": {
"sSortAscending": ": 오름차순 정렬",
"sSortDescending": ": 내림차순 정렬"
}
}

View File

@@ -1,22 +0,0 @@
{
"sEmptyTable": "Lentelėje nėra duomenų",
"sInfo": "Rodomi įrašai nuo _START_ iki _END_ iš _TOTAL_ įrašų",
"sInfoEmpty": "Rodomi įrašai nuo 0 iki 0 iš 0",
"sInfoFiltered": "(atrinkta iš _MAX_ įrašų)",
"sInfoPostFix": "",
"sInfoThousands": " ",
"sLengthMenu": "Rodyti _MENU_ įrašus",
"sLoadingRecords": "Įkeliama...",
"sProcessing": "Apdorojama...",
"sSearch": "Ieškoti:",
"sThousands": " ",
"sUrl": "",
"sZeroRecords": "Įrašų nerasta",
"oPaginate": {
"sFirst": "Pirmas",
"sPrevious": "Ankstesnis",
"sNext": "Tolimesnis",
"sLast": "Paskutinis"
}
}

View File

@@ -1,22 +0,0 @@
{
"processing": "Uzgaidiet ...",
"search": "Meklēt:",
"lengthMenu": "Rādīt _MENU_ ierakstus",
"info": "Parādīti _START_ līdz _END_ no _TOTAL_ ierakstiem",
"infoEmpty": "Nav ierakstu",
"infoFiltered": "(atlasīts no pavisam _MAX_ ierakstiem)",
"infoPostFix": "",
"loadingRecords": "Notiek ielāde ...",
"zeroRecords": "Nav atrasti vaicājumam atbilstoši ieraksti",
"emptyTable": "Tabulā nav datu",
"paginate": {
"first": "Pirmā",
"previous": "Iepriekšējā",
"next": "Nākošā",
"last": "Pēdējā"
},
"aria": {
"sortAscending": ": aktivizēt kolonnu, lai kārtotu augoši",
"sortDescending": ": aktivizēt kolonnu, lai kārtotu dilstoši"
}
}

View File

@@ -1,23 +0,0 @@
{
"sEmptyTable": "Хүснэгт хоосон байна",
"sInfo": "Нийт _TOTAL_ бичлэгээс _START_ - _END_ харуулж байна",
"sInfoEmpty": "Тохирох үр дүн алга",
"sInfoFiltered": "(нийт _MAX_ бичлэгээс шүүв)",
"sInfoPostFix": "",
"sInfoThousands": ",",
"sLengthMenu": "Дэлгэцэд _MENU_ бичлэг харуулна",
"sLoadingRecords": "Ачааллаж байна...",
"sProcessing": "Боловсруулж байна...",
"sSearch": "Хайлт:",
"sZeroRecords": "Тохирох бичлэг олдсонгүй",
"oPaginate": {
"sFirst": "Эхнийх",
"sLast": "Сүүлийнх",
"sNext": "Өмнөх",
"sPrevious": "Дараах"
},
"oAria": {
"sSortAscending": ": цагаан толгойн дарааллаар эрэмбэлэх",
"sSortDescending": ": цагаан толгойн эсрэг дарааллаар эрэмбэлэх"
}
}

View File

@@ -1,23 +0,0 @@
{
"sEmptyTable": "Tiada data",
"sInfo": "Paparan dari _START_ hingga _END_ dari _TOTAL_ rekod",
"sInfoEmpty": "Paparan 0 hingga 0 dari 0 rekod",
"sInfoFiltered": "(Ditapis dari jumlah _MAX_ rekod)",
"sInfoPostFix": "",
"sInfoThousands": ",",
"sLengthMenu": "Papar _MENU_ rekod",
"sLoadingRecords": "Diproses...",
"sProcessing": "Sedang diproses...",
"sSearch": "Carian:",
"sZeroRecords": "Tiada padanan rekod yang dijumpai.",
"oPaginate": {
"sFirst": "Pertama",
"sPrevious": "Sebelum",
"sNext": "Kemudian",
"sLast": "Akhir"
},
"oAria": {
"sSortAscending": ": diaktifkan kepada susunan lajur menaik",
"sSortDescending": ": diaktifkan kepada susunan lajur menurun"
}
}

View File

@@ -1,25 +0,0 @@
{
"sEmptyTable": "Ingen data tilgjengelig i tabellen",
"sInfo": "Viser _START_ til _END_ av _TOTAL_ linjer",
"sInfoEmpty": "Viser 0 til 0 av 0 linjer",
"sInfoFiltered": "(filtrert fra _MAX_ totalt antall linjer)",
"sInfoPostFix": "",
"sInfoThousands": " ",
"sLoadingRecords": "Laster...",
"sLengthMenu": "Vis _MENU_ linjer",
"sLoadingRecords": "Laster...",
"sProcessing": "Laster...",
"sSearch": "S&oslash;k:",
"sUrl": "",
"sZeroRecords": "Ingen linjer matcher s&oslash;ket",
"oPaginate": {
"sFirst": "F&oslash;rste",
"sPrevious": "Forrige",
"sNext": "Neste",
"sLast": "Siste"
},
"oAria": {
"sSortAscending": ": aktiver for å sortere kolonnen stigende",
"sSortDescending": ": aktiver for å sortere kolonnen synkende"
}
}

View File

@@ -1,24 +0,0 @@
{
"sEmptyTable": "टेबलमा डाटा उपलब्ध भएन",
"sInfo": "_TOTAL_ रेकर्ड मध्य _START_ देखि _END_ रेकर्ड देखाउंदै",
"sInfoEmpty": "0 मध्य 0 देखि 0 रेकर्ड देखाउंदै",
"sInfoFiltered": "(_MAX_ कुल रेकर्डबाट छनौट गरिएको)",
"sInfoPostFix": "",
"sInfoThousands": ",",
"sLengthMenu": " _MENU_ रेकर्ड देखाउने ",
"sLoadingRecords": "लोड हुँदैछ...",
"sProcessing": "प्रगति हुदैंछ ...",
"sSearch": "खोजी:",
"sUrl": "",
"sZeroRecords": "कुनै मिल्ने रेकर्ड फेला परेन",
"oPaginate": {
"sFirst": "प्रथम",
"sPrevious": "पछिल्लो",
"sNext": "अघिल्लो",
"sLast": "अन्तिम"
},
"oAria": {
"sSortAscending": ": अगाडिबाट अक्षरात्मक रूपमा क्रमबद्ध गराउने",
"sSortDescending": ": पछाडिबाट अक्षरात्मक रूपमा क्रमबद्ध गराउने"
}
}

View File

@@ -1,23 +0,0 @@
{
"sProcessing": "Bezig...",
"sLengthMenu": "_MENU_ resultaten weergeven",
"sZeroRecords": "Geen resultaten gevonden",
"sInfo": "_START_ tot _END_ van _TOTAL_ resultaten",
"sInfoEmpty": "Geen resultaten om weer te geven",
"sInfoFiltered": " (gefilterd uit _MAX_ resultaten)",
"sInfoPostFix": "",
"sSearch": "Zoeken:",
"sEmptyTable": "Geen resultaten aanwezig in de tabel",
"sInfoThousands": ".",
"sLoadingRecords": "Een moment geduld aub - bezig met laden...",
"oPaginate": {
"sFirst": "Eerste",
"sLast": "Laatste",
"sNext": "Volgende",
"sPrevious": "Vorige"
},
"oAria": {
"sSortAscending": ": activeer om kolom oplopend te sorteren",
"sSortDescending": ": activeer om kolom aflopend te sorteren"
}
}

View File

@@ -1,25 +0,0 @@
{
"sEmptyTable": "Inga data tilgjengeleg i tabellen",
"sInfo": "Syner _START_ til _END_ av _TOTAL_ linjer",
"sInfoEmpty": "Syner 0 til 0 av 0 linjer",
"sInfoFiltered": "(filtrert frå _MAX_ totalt antal linjer)",
"sInfoPostFix": "",
"sInfoThousands": " ",
"sLoadingRecords": "Lastar...",
"sLengthMenu": "Syn _MENU_ linjer",
"sLoadingRecords": "Lastar...",
"sProcessing": "Lastar...",
"sSearch": "S&oslash;k:",
"sUrl": "",
"sZeroRecords": "Inga linjer treff p&aring; s&oslash;ket",
"oPaginate": {
"sFirst": "Fyrste",
"sPrevious": "Forrige",
"sNext": "Neste",
"sLast": "Siste"
},
"oAria": {
"sSortAscending": ": aktiver for å sortere kolonna stigande",
"sSortDescending": ": aktiver for å sortere kolonna synkande"
}
}

View File

@@ -1,22 +0,0 @@
{
"processing": "Przetwarzanie...",
"search": "Szukaj:",
"lengthMenu": "Pokaż _MENU_ pozycji",
"info": "Pozycje od _START_ do _END_ z _TOTAL_ łącznie",
"infoEmpty": "Pozycji 0 z 0 dostępnych",
"infoFiltered": "(filtrowanie spośród _MAX_ dostępnych pozycji)",
"infoPostFix": "",
"loadingRecords": "Wczytywanie...",
"zeroRecords": "Nie znaleziono pasujących pozycji",
"emptyTable": "Brak danych",
"paginate": {
"first": "Pierwsza",
"previous": "Poprzednia",
"next": "Następna",
"last": "Ostatnia"
},
"aria": {
"sortAscending": ": aktywuj, by posortować kolumnę rosnąco",
"sortDescending": ": aktywuj, by posortować kolumnę malejąco"
}
}

View File

@@ -1,22 +0,0 @@
{
"sEmptyTable": "Nenhum registros encontrado",
"sProcessing": "A processar...",
"sLengthMenu": "Mostrar _MENU_ registros",
"sZeroRecords": "Não foram encontrados resultados",
"sInfo": "Mostrando de _START_ até _END_ de _TOTAL_ registros",
"sInfoEmpty": "Mostrando de 0 até 0 de 0 registros",
"sInfoFiltered": "(filtrado de _MAX_ registros no total)",
"sInfoPostFix": "",
"sSearch": "Procurar:",
"sUrl": "",
"oPaginate": {
"sFirst": "Primeiro",
"sPrevious": "Anterior",
"sNext": "Seguinte",
"sLast": "Último"
},
"oAria": {
"sSortAscending": ": Ordenar colunas de forma ascendente",
"sSortDescending": ": Ordenar colunas de forma descendente"
}
}

View File

@@ -1,17 +0,0 @@
{
"sProcessing": "Procesează...",
"sLengthMenu": "Afișează _MENU_ înregistrări pe pagină",
"sZeroRecords": "Nu am găsit nimic - ne pare rău",
"sInfo": "Afișate de la _START_ la _END_ din _TOTAL_ înregistrări",
"sInfoEmpty": "Afișate de la 0 la 0 din 0 înregistrări",
"sInfoFiltered": "(filtrate dintr-un total de _MAX_ înregistrări)",
"sInfoPostFix": "",
"sSearch": "Caută:",
"sUrl": "",
"oPaginate": {
"sFirst": "Prima",
"sPrevious": "Precedenta",
"sNext": "Următoarea",
"sLast": "Ultima"
}
}

View File

@@ -1,22 +0,0 @@
{
"processing": "Подождите...",
"search": "Поиск:",
"lengthMenu": "Показать _MENU_ записей",
"info": "Записи с _START_ до _END_ из _TOTAL_ записей",
"infoEmpty": "Записи с 0 до 0 из 0 записей",
"infoFiltered": "(отфильтровано из _MAX_ записей)",
"infoPostFix": "",
"loadingRecords": "Загрузка записей...",
"zeroRecords": "Записи отсутствуют.",
"emptyTable": "В таблице отсутствуют данные",
"paginate": {
"first": "Первая",
"previous": "Предыдущая",
"next": "Следующая",
"last": "Последняя"
},
"aria": {
"sortAscending": ": активировать для сортировки столбца по возрастанию",
"sortDescending": ": активировать для сортировки столбца по убыванию"
}
}

View File

@@ -1,23 +0,0 @@
{
"sEmptyTable": "වගුවේ දත්ත කිසිවක් නොමැත",
"sInfo": "_TOTAL_ න් _START_ සිට _END_ දක්වා",
"sInfoEmpty": "0 න් 0 සිට 0 දක්වා",
"sInfoFiltered": "(_MAX_ න් තෝරාගත් )",
"sInfoPostFix": "",
"sInfoThousands": ",",
"sLengthMenu": "_MENU_ ක් පෙන්වන්න",
"sLoadingRecords": "පූරණය වෙමින් පවතී...",
"sProcessing": "සැකසෙමින් පවතී...",
"sSearch": "සොයන්න :",
"sZeroRecords": "ගැලපෙන වාර්තා නොමැත.",
"oPaginate": {
"sFirst": "පළමු",
"sLast": "අන්තිම",
"sNext": "ඊළග",
"sPrevious": "පසුගිය"
},
"oAria": {
"sSortAscending": ": තීරුව ආරෝහනව තෝරන්න",
"sSortDescending": ": තීරුව අවරෝහනව තෝරන්න"
}
}

View File

@@ -1,23 +0,0 @@
{
"sEmptyTable": "Nie sú k dispozícii žiadne dáta",
"sInfo": "Záznamy _START_ až _END_ z celkom _TOTAL_",
"sInfoEmpty": "Záznamy 0 až 0 z celkom 0 ",
"sInfoFiltered": "(vyfiltrované spomedzi _MAX_ záznamov)",
"sInfoPostFix": "",
"sInfoThousands": ",",
"sLengthMenu": "Zobraz _MENU_ záznamov",
"sLoadingRecords": "Načítavam...",
"sProcessing": "Spracúvam...",
"sSearch": "Hľadať:",
"sZeroRecords": "Nenašli sa žiadne vyhovujúce záznamy",
"oPaginate": {
"sFirst": "Prvá",
"sLast": "Posledná",
"sNext": "Nasledujúca",
"sPrevious": "Predchádzajúca"
},
"oAria": {
"sSortAscending": ": aktivujte na zoradenie stĺpca vzostupne",
"sSortDescending": ": aktivujte na zoradenie stĺpca zostupne"
}
}

View File

@@ -1,23 +0,0 @@
{
"sEmptyTable": "Nobenih podatkov ni na voljo",
"sInfo": "Prikazujem _START_ do _END_ od _TOTAL_ zapisov",
"sInfoEmpty": "Prikazujem 0 do 0 od 0 zapisov",
"sInfoFiltered": "(filtrirano od _MAX_ vseh zapisov)",
"sInfoPostFix": "",
"sInfoThousands": ",",
"sLengthMenu": "Prikaži _MENU_ zapisov",
"sLoadingRecords": "Nalagam...",
"sProcessing": "Obdelujem...",
"sSearch": "Išči:",
"sZeroRecords": "Nobeden zapis ne ustreza",
"oPaginate": {
"sFirst": "Prvi",
"sLast": "Zadnji",
"sNext": "Nasl.",
"sPrevious": "Pred."
},
"oAria": {
"sSortAscending": ": vključite za naraščujoči sort",
"sSortDescending": ": vključite za padajoči sort"
}
}

View File

@@ -1,23 +0,0 @@
{
"sEmptyTable": "Nuk ka asnjë të dhënë në tabele",
"sInfo": "Duke treguar _START_ deri _END_ prej _TOTAL_ reshtave",
"sInfoEmpty": "Duke treguar 0 deri 0 prej 0 reshtave",
"sInfoFiltered": "(të filtruara nga gjithësej _MAX_ reshtave)",
"sInfoPostFix": "",
"sInfoThousands": ",",
"sLengthMenu": "Shiko _MENU_ reshta",
"sLoadingRecords": "Duke punuar...",
"sProcessing": "Duke procesuar...",
"sSearch": "Kërkoni:",
"sZeroRecords": "Asnjë e dhënë nuk u gjet",
"oPaginate": {
"sFirst": "E para",
"sLast": "E Fundit",
"sNext": "Tjetra",
"sPrevious": "E Kaluara"
},
"oAria": {
"sSortAscending": ": aktivizo për të sortuar kolumnin me vlera në ngritje",
"sSortDescending": ": aktivizo për të sortuar kolumnin me vlera në zbritje"
}
}

Some files were not shown because too many files have changed in this diff Show More